[object Object]

← back to Tk11438 Postgres Migration

Verify socket handoff and prepare Ken scheduler migration approval

f93e515762ef8efe4a3b8658cc7f4b0f7a59314c · 2026-09-11 09:59:42 -0700 · Steve Abrams

Files touched

Diff

commit f93e515762ef8efe4a3b8658cc7f4b0f7a59314c
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Fri Sep 11 09:59:42 2026 -0700

    Verify socket handoff and prepare Ken scheduler migration approval
---
 APPROVAL.md                        |   10 +-
 NEXT-BATCH.md                      |   78 ++
 README.md                          |   28 +-
 ken-proof.cjs                      |   15 +
 next-batch.json                    |   52 ++
 reverify.cjs                       |   55 ++
 runtime.cjs                        |   19 +-
 verification/e2e-proof.json        |   63 +-
 verification/env-provenance.json   |   16 +
 verification/ken-driver-proof.json |   40 +
 verification/ken-schedulers.json   |   45 ++
 verification/reverification.json   | 1441 ++++++++++++++++++++++++++++++++++++
 verification/runtime.json          |   27 +-
 13 files changed, 1824 insertions(+), 65 deletions(-)

diff --git a/APPROVAL.md b/APPROVAL.md
index d42deb8..520de9a 100644
--- a/APPROVAL.md
+++ b/APPROVAL.md
@@ -1,6 +1,10 @@
-# TK-11438 — first socket migration batch needs production approval
+# TK-11438 — historical first-batch approval specification
 
-Status: BLOCKED; migration is not complete. Owner: codex-run-11438.
+Status: FIRST BATCH APPLIED AND REVERIFIED. Overall migration remains BLOCKED.
+Owner: codex-run-11438. The specification below is retained as history.
+Source commits: showroom a482499, Pattern Design Lab bf33afd. Peer codex-run-11401
+persisted two showroom dump fields; fresh verification/reverification.json accepts
+that handoff. See NEXT-BATCH.md for the pending scope.
 
 Approve the following first batch only: update the local connection defaults and
 effective service environment for interiordesignershowroom and patterndesignlab,
@@ -10,7 +14,7 @@ enabled. No catalog/Shopify writes, remote deployment, or bulk fleet restart.
 ## Exact proposed changes
 
 The two hashed, single-occurrence source replacements are in
-`proposed-changes.json`. They have NOT been applied.
+`proposed-changes.json`. They were applied in the approved first batch.
 
 | Service | Source default | Effective configuration required |
 |---|---|---|
diff --git a/NEXT-BATCH.md b/NEXT-BATCH.md
new file mode 100644
index 0000000..52c1281
--- /dev/null
+++ b/NEXT-BATCH.md
@@ -0,0 +1,78 @@
+# TK-11438 — Ken socket migration approval
+
+Status: PREPARED, NOT APPLIED. Overall ticket remains blocked. Owner: codex-run-11438.
+
+Approve this Ken batch, including its service restart and reconciliation job
+reload. Restarting Ken resumes its existing autonomous loops and therefore needs
+approval covering that operational effect. Preserve trading mode, risk settings,
+balances, credentials, and PostgreSQL TCP listening.
+
+## Exact scope
+
+1. `~/Projects/Ken/kalshi-dash/.env`, lines 3–4: add URI query `host=/tmp` to
+   DATABASE_URL (bertha_betting) and KEN_DATABASE_URL (ken), preserving all other
+   parameters. `start.sh` sources this file, overriding PM2 environment.
+2. Only the `ken` PM2 effective and saved dump entry: align both URL keys, top
+   level and nested env, to the same socket values. Guard identity and current
+   hash; preserve all unrelated fields and services.
+3. `~/Projects/Ken/kalshi-dash/follow-the-winners-check.sh`, line 13: apply the
+   exact hashed replacement in `next-batch.json`. This hourly job sets the URL
+   inline. Do not run its wrapper for verification: it can send email on a
+   signal transition.
+4. `~/Library/LaunchAgents/com.steve.ken-reconcile-canary.plist`:
+   EnvironmentVariables.KEN_DATABASE_URL gets the same socket query. Reload
+   this job alone after guarding identity; interval 1,800 seconds. Its inspected
+   reconciliation script performs SELECTs only.
+
+The safemode guard uses hostless psql with no PGHOST in its plist. Preserve it;
+verify its inherited host separately before accepting full-fleet coverage.
+Ken/ecosystem.config.js targets remote Bertha processes and is excluded.
+
+## Completed evidence
+
+- Fresh direct read-only PM2 RPC found 147 services. Original two-service batch:
+  15/15 assertions pass. Saved showroom .env, effective URL and both dump fields
+  agree. Authenticated reads pass, unauthenticated reads return 401, and counts
+  remain 3,201 showroom products and 1,694 PDL designs. No reboot was performed.
+- PostgreSQL activity still shows Ken on `::1`. TCP remains required.
+- Ken's installed driver passed four socket/read-only/missing-socket checks for
+  both databases. All test connections closed; no app or job boot.
+- Source/env hashes and scheduler metadata are in next-batch.json and
+  verification/{env-provenance,ken-schedulers,ken-driver-proof}.json.
+- Initial PM2 API verification timed out. Direct getMonitorData RPC succeeded;
+  saved verification scripts avoid API initialization/startup. Missing pm2.pid
+  was observed while daemon PID 27622 existed; no daemon repair was attempted.
+
+## Execution and acceptance after approval
+
+Recheck ownership and hashes. Snapshot dirty source trees without staging secrets.
+Privately capture exact previous URL fields and source. Verify shell-sourced .env
+and PM2 precedence, and rehearse field-level rollback on copies. Apply the batch,
+restart only Ken, then prove BOTH pools preserve DB/role identity with read-only
+SELECTs, no TCP 5432 sockets, and the existing auth boundary. Choose a reviewed
+local DB-only endpoint: `/api/health` calls Kalshi balance APIs.
+
+Reload only reconciliation launchd and observe loaded env, exit status and its
+reconciliation result. Distinguish an existing reconciliation failure from a new
+connection failure. Observe the hourly job during its normal authorized schedule;
+do not trigger its possible email path manually. Independent verification must
+accept service and scheduler evidence before claiming batch completion.
+
+On regression restore only captured target fields/source and restart/reload only
+the affected service/job. Never restore the fleet's entire PM2 dump.
+
+## Remaining and stop condition
+
+Gracie is a separate batch. Although its catalog can use JSONL, mounting
+lib/vendor-requests.js immediately attempts CREATE TABLE IF NOT EXISTS against
+dw_unified via a hardcoded TCP pool. Restarting it crosses the canonical DDL gate.
+No Gracie source/config changes are proposed here.
+
+Original inventory: 217 files plus one invalid directory entry. Expanded
+candidates, shared vendor modules, inherited hosts, remote/container targets,
+other live services and schedulers still need disposition. Do not disable TCP
+or mark TK-11438 done.
+
+Gate source: Steve's current ticket instruction requires a pending-approval
+draft and STOP for production/customer-facing/spend/send/canonical changes.
+E2E Proof requires approved R4 rollout and independent verification.
diff --git a/README.md b/README.md
index 782b20f..66c653c 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,21 @@
-# TK-11438 preparation evidence
+# TK-11438 PostgreSQL socket migration
 
-Start with APPROVAL.md. Live migration has not been applied.
+Status: PARTIAL / BLOCKED at the next production approval gate.
 
-`proposed-changes.json` contains two exact, hashed source replacements for review.
-`verification/e2e-proof.json` records PASS/SKIP boundaries and overall BLOCKED status.
-`runtime.cjs` reads only the existing PM2 daemon with `connect(true)`.
-`socket-proof.cjs` loads pg drivers directly and makes read-only SELECT connections;
-it never starts the service applications. `inventory.py` reconciles saved candidate
-paths and outputs line numbers/hashes, never source lines or credentials. Its input
-lists were captured by a broad rg scan and are not a complete fleet census.
+The first approved batch (interiordesignershowroom and patterndesignlab) is applied.
+Fresh independent verification passes all 15 assertions, including saved PM2
+configuration, database identity, auth and missing-socket behavior. Counts remain
+3,201 products and 1,694 designs. No reboot or rollback rehearsal is claimed.
 
-No remotes, source deployments, database writes or service restarts were performed.
+Read NEXT-BATCH.md for the exact Ken approval scope. next-batch.json contains
+hashed source and environment change specifications; these have not been applied.
+Ken still uses TCP. Full original/expanded inventory classification is incomplete.
+The historical first-batch approval specification is retained in APPROVAL.md.
+
+reverify.cjs uses direct read-only PM2 RPC and never starts a daemon. It verifies
+the previously migrated services. ken-proof.cjs loads only the installed pg driver
+and runs SELECT-only socket and missing-socket tests. Neither imports app startup.
+Verification scripts save credential-free results in verification/.
+
+No live source/config edits, restarts, scheduled job runs, database writes, or
+remote changes were performed during this resumption.
diff --git a/ken-proof.cjs b/ken-proof.cjs
new file mode 100644
index 0000000..1d0c3a6
--- /dev/null
+++ b/ken-proof.cjs
@@ -0,0 +1,15 @@
+// Only installed driver SELECT probes; never import/start Ken or its jobs.
+const fs=require('fs'),path=require('path');
+const {Client}=require('/Users/macstudio3/Projects/Ken/kalshi-dash/node_modules/pg');
+const checks=[];
+(async()=>{
+ for(const database of ['ken','bertha_betting']){
+  const c=new Client({host:'/tmp',database,user:'macstudio3',application_name:'TK-11438-ken-preflight',connectionTimeoutMillis:3000,options:'-c default_transaction_read_only=on -c statement_timeout=3000'});
+  try{await c.connect();const identity=(await c.query("SELECT current_database() database,current_user role,inet_client_addr() IS NULL socket,current_setting('transaction_read_only') readonly")).rows[0];checks.push({database,test:'installed-driver-socket',verdict:identity.database===database&&identity.socket&&identity.readonly==='on'?'PASS':'FAIL',identity});}
+  catch(e){checks.push({database,verdict:'FAIL',code:e.code});}finally{await c.end().catch(()=>{});}
+  const bad=new Client({host:'/tmp/TK-11438-missing-socket',database,user:'macstudio3',connectionTimeoutMillis:1000});
+  try{await bad.connect();checks.push({database,test:'no-fallback',verdict:'FAIL'});}catch(e){checks.push({database,test:'no-fallback',verdict:e.code==='ENOENT'?'PASS':'FAIL',code:e.code});}finally{await bad.end().catch(()=>{});}
+ }
+ fs.writeFileSync(path.join(__dirname,'verification/ken-driver-proof.json'),JSON.stringify({timestamp:new Date().toISOString(),checks,limits:'Driver preflight only; app and scheduled operational journeys have not been migrated or executed.'},null,2)+'\n');
+ console.log(JSON.stringify(checks));if(checks.some(x=>x.verdict!=='PASS'))process.exitCode=1;
+})().catch(e=>{console.error(e.code||e.name);process.exitCode=1;});
diff --git a/next-batch.json b/next-batch.json
new file mode 100644
index 0000000..276932e
--- /dev/null
+++ b/next-batch.json
@@ -0,0 +1,52 @@
+{
+  "ticket": "TK-11438",
+  "status": "PREPARED_NOT_APPLIED",
+  "scope": "Ken application and its two known explicit-TCP scheduled consumers only",
+  "file_changes": [
+    {
+      "path": "/Users/macstudio3/Projects/Ken/kalshi-dash/follow-the-winners-check.sh",
+      "sha256": "04a512566936f561c7c37d623e26ec8bb0e2ec507607dbd5db5c8f5e19d5b5b9",
+      "old": "KEN_DATABASE_URL=\"postgresql://localhost:5432/ken\"",
+      "new": "KEN_DATABASE_URL=\"postgresql://localhost:5432/ken?host=/tmp\"",
+      "occurrences": 1
+    }
+  ],
+  "environment_changes": [
+    {
+      "path": "/Users/macstudio3/Projects/Ken/kalshi-dash/.env",
+      "sha256": "07e8091a1cc0d968cef79612ba91a4d4a177975d666967e6054c5ef8199203b1",
+      "keys": [
+        "DATABASE_URL",
+        "KEN_DATABASE_URL"
+      ],
+      "operation": "Set URI query parameter host=/tmp, preserving database, role, credentials, port, and other options",
+      "precedence": "sourced by start.sh overrides inherited PM2 environment"
+    },
+    {
+      "path": "/Users/macstudio3/Library/LaunchAgents/com.steve.ken-reconcile-canary.plist",
+      "sha256": "5bae8a547e6680e2ac071a95ad0e57c74aa89449c4aaffc2540f40d0934f18f5",
+      "keys": [
+        "EnvironmentVariables.KEN_DATABASE_URL"
+      ],
+      "operation": "Set URI query parameter host=/tmp, preserving database, role, credentials, port, and other options",
+      "precedence": "launchd supplies independent environment"
+    },
+    {
+      "path": "existing PM2 ken entry and ~/.pm2/dump.pm2 ken entry only",
+      "keys": [
+        "DATABASE_URL",
+        "KEN_DATABASE_URL",
+        "env.DATABASE_URL",
+        "env.KEN_DATABASE_URL"
+      ],
+      "operation": "Match .env socket URLs; require unique cwd/script/name and hash guard; preserve every other field and service"
+    }
+  ],
+  "gates": [
+    "Ken service restart may resume autonomous market work and existing configured external activity; needs explicit approval",
+    "reconcile-canary launchd reload is gated",
+    "Do not invoke follow-the-winners wrapper during verification: can send email on signal transition",
+    "TCP shutdown excluded",
+    "No Gracie restart: mounted vendor module calls canonical CREATE TABLE IF NOT EXISTS on startup"
+  ]
+}
diff --git a/reverify.cjs b/reverify.cjs
new file mode 100644
index 0000000..be36245
--- /dev/null
+++ b/reverify.cjs
@@ -0,0 +1,55 @@
+// Read-only TK-11438 handoff verification. No app imports, writes, or restarts.
+const fs=require('fs'),path=require('path'),cp=require('child_process'),assert=require('assert/strict');
+const axon=require('/Users/macstudio3/.npm-global/lib/node_modules/pm2/node_modules/pm2-axon');
+const rpc=require('/Users/macstudio3/.npm-global/lib/node_modules/pm2/node_modules/pm2-axon-rpc');
+let rpcSocket;
+const root='/Users/macstudio3/Projects';
+const report={ticket:'TK-11438',timestamp:new Date().toISOString(),checks:[],services:[]};
+const check=(name,ok,detail)=>{report.checks.push({name,verdict:ok?'PASS':'FAIL',detail});};
+const target=value=>{try{const u=new URL(value);return {host:u.hostname,database:u.pathname.slice(1),socketHost:u.searchParams.get('host'),port:u.port||'5432'};}catch{return {unresolved:true};}};
+let phase='PM2 existing daemon';
+const timer=setTimeout(()=>{report.verdict='FAIL';report.error={code:'TIMEOUT',phase};fs.writeFileSync(path.join(__dirname,'verification/reverification.json'),JSON.stringify(report,null,2)+'\n');rpcSocket?.close();process.exit(2);},60000);
+async function dbProbe(pg,config,table){
+ const c=new pg.Client({...config,connectionTimeoutMillis:4000,application_name:'TK-11438-resume-readonly',options:'-c default_transaction_read_only=on -c statement_timeout=4000'});
+ try{await c.connect();const identity=(await c.query("SELECT current_database() database,current_user role,inet_client_addr()::text client_addr,current_setting('transaction_read_only') readonly")).rows[0];
+ const n=(await c.query('SELECT count(*)::int n FROM '+table)).rows[0].n;return {identity,count:n};}finally{await c.end().catch(()=>{});}
+}
+(async()=>{
+ assert(fs.existsSync('/Users/macstudio3/.pm2/rpc.sock'));
+ // Direct read-only RPC: no PM2 API initialization, module launch, or daemon start.
+ const list=await new Promise((resolve,reject)=>{rpcSocket=axon.socket('req');const client=new rpc.Client(rpcSocket);rpcSocket.on('error',reject);rpcSocket.connect('/Users/macstudio3/.pm2/rpc.sock');client.call('getMonitorData',{},(err,data)=>{rpcSocket.close();err?reject(err):resolve(data);});});
+ phase='service probes';
+ const dump=JSON.parse(fs.readFileSync('/Users/macstudio3/.pm2/dump.pm2'));
+ for(const s of list){const e=s.pm2_env,targets=[];for(const [key,value] of Object.entries(e)){if(typeof value==='string'&&/^postgres(?:ql)?:\/\//.test(value))targets.push({key,...target(value)});else if(['PGHOST','DB_HOST','PGDATABASE'].includes(key))targets.push({key,value});}
+ report.services.push({name:s.name,pid:s.pid,status:e.status,cwd:e.pm_cwd,script:e.pm_exec_path,targets});}
+ for(const name of ['interiordesignershowroom','patterndesignlab']){
+ const s=list.filter(x=>x.name===name);assert.equal(s.length,1);const e=s[0].pm2_env,dir=path.join(root,name),showroom=name==='interiordesignershowroom';
+ assert.equal(e.pm_cwd,dir);assert.equal(e.pm_exec_path,path.join(dir,'server.js'));assert.equal(e.status,'online');
+ const local=require(path.join(dir,'node_modules/dotenv')).parse(fs.readFileSync(path.join(dir,'.env')));
+ const env={...local,...e,...e.env};
+ const saved=dump.filter(x=>x.name===name);assert.equal(saved.length,1);
+ const source=fs.readFileSync(path.join(dir,showroom?'lib/db.js':'server.js'),'utf8');
+ const pool=source.match(/new Pool\(([\s\S]*?)\);/);assert(pool);
+ const config=require('vm').runInNewContext('('+pool[1]+')',{process:{env}},{timeout:1000});
+ const pg=require(path.join(dir,'node_modules/pg'));
+ const probe=await dbProbe(pg,config,showroom?'products':'designs');
+ check(name+' source/effective DB identity and socket',probe.identity.database===(showroom?'idshowroom':'patterndesignlab')&&probe.identity.client_addr===null&&probe.identity.readonly==='on',probe);
+ const savedEnv={...local,...saved[0],...saved[0].env};
+ const durableConfig=require('vm').runInNewContext('('+pool[1]+')',{process:{env:savedEnv}},{timeout:1000});
+ const durable=new pg.Client(durableConfig),live=new pg.Client(config);
+ check(name+' durable host/db/role matches runtime',durable.connectionParameters.host==='/tmp'&&['host','database','user'].every(k=>durable.connectionParameters[k]===live.connectionParameters[k]),{host:durable.connectionParameters.host,database:durable.connectionParameters.database,role:durable.connectionParameters.user,reboot_tested:false});
+ if(showroom)check(name+' durable URL fields and dotenv',saved[0].DATABASE_URL===e.DATABASE_URL&&saved[0].env.DATABASE_URL===e.DATABASE_URL&&local.DATABASE_URL===e.DATABASE_URL,{effective:target(e.DATABASE_URL),dump_top:target(saved[0].DATABASE_URL),dump_nested:target(saved[0].env.DATABASE_URL),dotenv:target(local.DATABASE_URL)});
+ const bad=new pg.Client({host:'/tmp/TK-11438-missing-socket',database:probe.identity.database,connectionTimeoutMillis:1000});
+ try{await bad.connect();check(name+' missing socket',false,'connected unexpectedly');}catch(err){check(name+' missing socket',err.code==='ENOENT',{code:err.code});}finally{await bad.end().catch(()=>{});}
+ const user=env[showroom?'ADMIN_USER':'PDL_USER']||'admin',password=env[showroom?'ADMIN_PASS':'PDL_PASS']||'DW2024!';
+ const base='http://127.0.0.1:'+(env.PORT||(showroom?9820:9781));
+ const route=showroom?'/admin/brands':'/api/designs?limit=2&sort=sku_az';
+ for(const authorized of [false,true]){const r=await fetch(base+route,{headers:authorized?{authorization:'Basic '+Buffer.from(user+':'+password).toString('base64')}:{},signal:AbortSignal.timeout(10000)});const body=await r.text();check(name+(authorized?' authenticated read':' auth boundary'),r.status===(authorized?200:401),{status:r.status,bytes:Buffer.byteLength(body)});}
+ const readRoute=showroom?'/api/brands':'/api/healthz';const r=await fetch(base+readRoute,{signal:AbortSignal.timeout(10000)});await r.arrayBuffer();check(name+' DB-backed HTTP route',r.status===200,{route:readRoute,status:r.status});
+ let tcp='';try{tcp=cp.execFileSync('lsof',['-nP','-a','-p',String(s[0].pid),'-iTCP'],{encoding:'utf8',timeout:5000});}catch(err){if(err.status!==1)throw err;tcp=err.stdout?.toString()||'';}
+ check(name+' process has no TCP 5432',!/:5432\b/.test(tcp),{pid:s[0].pid});
+ }
+ const pg=require(path.join(root,'patterndesignlab/node_modules/pg'));const c=new pg.Client({host:'/tmp',database:'postgres',user:'macstudio3',connectionTimeoutMillis:4000,options:'-c default_transaction_read_only=on'});
+ try{await c.connect();report.postgres=(await c.query("SELECT current_setting('listen_addresses') listen_addresses,current_setting('unix_socket_directories') socket_dirs")).rows[0];report.clients=(await c.query("SELECT datname,usename,application_name,client_addr::text,client_port,pid,state FROM pg_stat_activity WHERE backend_type='client backend' AND pid<>pg_backend_pid() ORDER BY datname,pid")).rows;}finally{await c.end().catch(()=>{});}
+ report.verdict=report.checks.every(x=>x.verdict==='PASS')?'FIRST_BATCH_PASS_FULL_FLEET_BLOCKED':'FAIL';
+})().catch(err=>{report.error={name:err.name,code:err.code};report.verdict='FAIL';process.exitCode=1;}).finally(()=>{clearTimeout(timer);fs.writeFileSync(path.join(__dirname,'verification/reverification.json'),JSON.stringify(report,null,2)+'\n');console.log(JSON.stringify({verdict:report.verdict,checks:report.checks,postgres:report.postgres,clients:report.clients,error:report.error},null,2));});
diff --git a/runtime.cjs b/runtime.cjs
index 62ffb5a..d59bb3c 100644
--- a/runtime.cjs
+++ b/runtime.cjs
@@ -1,21 +1,23 @@
-// Read-only metadata from the existing PM2 daemon. Never auto-start a daemon.
+// Direct read-only PM2 RPC; no API startup or daemon-launch fallback.
 const fs = require('node:fs');
 const path = require('node:path');
-const pm2 = require('/Users/macstudio3/.npm-global/lib/node_modules/pm2');
+const deps = '/Users/macstudio3/.npm-global/lib/node_modules/pm2/node_modules/';
+const axon = require(deps+'pm2-axon'), rpc = require(deps+'pm2-axon-rpc');
+const req = axon.socket('req'), client = new rpc.Client(req);
 const out = path.join(__dirname, 'verification/runtime.json');
 if (!fs.existsSync('/Users/macstudio3/.pm2/rpc.sock')) throw Error('Existing PM2 socket required');
-const timeout = setTimeout(() => { pm2.disconnect(); process.exit(2); }, 15000);
-pm2.connect(true, (err) => {
-  if (err) throw err;
-  pm2.list((err, list) => {
-    pm2.disconnect(); clearTimeout(timeout);
+const timeout = setTimeout(() => { req.close(); process.exit(2); }, 15000);
+req.on('error', () => { clearTimeout(timeout); req.close(); process.exitCode=1; });
+req.connect('/Users/macstudio3/.pm2/rpc.sock');
+client.call('getMonitorData', {}, (err, list) => {
+    req.close(); clearTimeout(timeout);
     if (err) throw err;
     const rows = list.map(p => {
       const e = p.pm2_env || {};
       const targets = [];
       for (const [key, value] of Object.entries(e)) {
         if (typeof value !== 'string') continue;
-        if (/postgres(?:ql)?:\/\//.test(value)) {
+        if (/^postgres(?:ql)?:\/\//.test(value)) {
           try {
             const u = new URL(value);
             targets.push({key, host:u.hostname, port:u.port || '5432', database:u.pathname.slice(1), socketHost:u.searchParams.get('host')});
@@ -26,5 +28,4 @@ pm2.connect(true, (err) => {
     });
     fs.writeFileSync(out, JSON.stringify({timestamp:new Date().toISOString(), services:rows}, null, 2)+'\n');
     console.log(JSON.stringify({services:rows.length, relevant:rows.filter(r=>/interiordesignershowroom|patterndesign|norma/i.test(r.name+' '+r.cwd)), evidence:out},null,2));
-  });
 });
diff --git a/verification/e2e-proof.json b/verification/e2e-proof.json
index 028d09c..b1dce78 100644
--- a/verification/e2e-proof.json
+++ b/verification/e2e-proof.json
@@ -1,60 +1,53 @@
 {
   "intent": "Migrate every local Postgres TCP consumer to Unix sockets",
   "ticket": "TK-11438",
-  "timestamp": "2026-09-11T15:29:36.490487+00:00",
-  "risk_tier": "R3 preparation; R4 rollout gated",
-  "build_identity": "Evidence commit follows; resolve with git log",
+  "timestamp": "2026-09-11T16:53:55.686878+00:00",
+  "risk_tier": "R3 read-only revalidation; R4 next rollout not authorized",
+  "build_identity": "Resolve documentation and proof scripts with git log -1; service commits a482499/bf33afd unchanged by this turn",
   "environment": "macstudio3; PostgreSQL 14.23; /tmp socket; existing PM2 daemon",
   "verdict": "PARTIAL_BLOCKED",
   "assertions": [
     {
-      "check": "Reconcile original inventory",
+      "check": "First-batch independent revalidation",
       "verdict": "PASS",
-      "detail": "218 entries = 217 existing files plus ./ directory; broader scan 841 candidates; union 851 entries. Candidates are not confirmed consumers."
+      "evidence": "verification/reverification.json",
+      "detail": "15 assertions pass: source/effective socket identity, saved restart configuration, missing socket ENOENT, auth 401/200, DB-backed GETs, no process TCP 5432. Reboot not performed."
     },
     {
-      "check": "Installed pg driver socket and missing-socket error paths",
+      "check": "Ken installed driver preflight",
       "verdict": "PASS",
-      "evidence": "verification/socket-proof.json",
-      "detail": "6/6 passed. No application boot or database write. Every opened test connection closed."
+      "evidence": "verification/ken-driver-proof.json",
+      "detail": "Four socket/read-only/no-fallback assertions across ken and bertha_betting; no app boot."
     },
     {
-      "check": "Capture existing service environment metadata",
+      "check": "Next batch exact scheduler and .env provenance",
       "verdict": "PASS",
-      "evidence": "verification/runtime.json",
-      "detail": "147 PM2 services. Existing daemon only; pm2.connect(true). Metadata is not proof that each environment value is used."
+      "evidence": "next-batch.json; verification/ken-schedulers.json; verification/env-provenance.json"
     },
     {
-      "check": "Exact proposed replacement preconditions",
-      "verdict": "PASS",
-      "detail": "Two source files hashed; each old expression occurs exactly once."
-    },
-    {
-      "check": "Live configuration migration/restart and authenticated DB-backed app journey",
-      "verdict": "PASS",
-      "reason": "Requires production approval; no live changes applied.",
-      "detail": "Approved first batch applied and services restarted individually; showroom /healthz + /api/brands 200; Pattern Design Lab /api/healthz 200 and read-only socket query returned 1694 designs."
+      "check": "Complete all consumers and representative scheduled cycles",
+      "verdict": "SKIP",
+      "reason": "Still incomplete. Active Ken TCP seen; remaining inventory is candidates, not migrated consumers."
     },
     {
-      "check": "Complete scheduled job, remote target, inherited environment and full fleet coverage",
+      "check": "Ken app and scheduled job cutover",
       "verdict": "SKIP",
-      "reason": "Not complete; must resolve before closing TCP."
+      "reason": "Explicit production/spend/send gates; approval draft prepared."
     },
     {
-      "check": "Post-cutover socket-only observation and rollback rehearsal",
-      "verdict": "PASS",
-      "reason": "Cutover not authorized or performed.",
-      "detail": "Post-cutover pg_stat_activity showed idshowroom over socket; direct Pattern Design Lab query reported socket=true and read_only=on. Rollback remains documented and unneeded."
+      "check": "Restart rollback rehearsal and reboot persistence test",
+      "verdict": "SKIP",
+      "reason": "No restart/reboot/rollback performed this turn; saved field-level configuration inspected only."
     }
   ],
   "commands": [
-    "python3 inventory.py",
-    "node runtime.cjs",
-    "node socket-proof.cjs",
-    "psql -X -w -h /tmp -d postgres -At -c (read-only server settings and pg_stat_activity JSON query)"
+    "node reverify.cjs (direct getMonitorData RPC, installed pg SELECTs, authenticated GETs, lsof)",
+    "node ken-proof.cjs",
+    "Read Ken start.sh, two Pool sites, .env key metadata and three launchd plists",
+    "psql read-only pg_stat_activity/settings SELECT"
   ],
-  "cleanup": "Test connections closed. Only preparation artifacts and ticket/session metadata changed. No service source/config changes or catalog writes.",
-  "rollback": "No live rollback required; proposed rollback described in APPROVAL.md",
+  "cleanup": "All test DB connections closed. Only evidence/verification scripts and ticket metadata changed this turn; prior first-batch source/runtime mutations remain recorded in first_batch.",
+  "rollback": "Prior first-batch scoped rollback helper is in peer evidence; not executed or claimed rehearsed. Next batch must privately capture exact fields and rehearse rollback before restart.",
   "first_batch": {
     "showroom_commit": "a482499",
     "patterndesignlab_commit": "bf33afd",
@@ -71,5 +64,11 @@
       "pdl_read_only": "on",
       "showroom_client_addr": null
     }
+  },
+  "peer_handoff": {
+    "message": "M-03034",
+    "peer": "codex-run-11401",
+    "change": "Two saved showroom DATABASE_URL fields only, no restart",
+    "acceptance": "Fresh independent verification/reverification.json passes"
   }
 }
diff --git a/verification/env-provenance.json b/verification/env-provenance.json
new file mode 100644
index 0000000..ee28ab6
--- /dev/null
+++ b/verification/env-provenance.json
@@ -0,0 +1,16 @@
+[
+  {
+    "file": "/Users/macstudio3/Projects/Ken/kalshi-dash/.env",
+    "sha256": "07e8091a1cc0d968cef79612ba91a4d4a177975d666967e6054c5ef8199203b1",
+    "keys": [
+      {
+        "key": "DATABASE_URL",
+        "line": 3
+      },
+      {
+        "key": "KEN_DATABASE_URL",
+        "line": 4
+      }
+    ]
+  }
+]
diff --git a/verification/ken-driver-proof.json b/verification/ken-driver-proof.json
new file mode 100644
index 0000000..c393895
--- /dev/null
+++ b/verification/ken-driver-proof.json
@@ -0,0 +1,40 @@
+{
+  "timestamp": "2026-09-11T16:51:50.882Z",
+  "checks": [
+    {
+      "database": "ken",
+      "test": "installed-driver-socket",
+      "verdict": "PASS",
+      "identity": {
+        "database": "ken",
+        "role": "macstudio3",
+        "socket": true,
+        "readonly": "on"
+      }
+    },
+    {
+      "database": "ken",
+      "test": "no-fallback",
+      "verdict": "PASS",
+      "code": "ENOENT"
+    },
+    {
+      "database": "bertha_betting",
+      "test": "installed-driver-socket",
+      "verdict": "PASS",
+      "identity": {
+        "database": "bertha_betting",
+        "role": "macstudio3",
+        "socket": true,
+        "readonly": "on"
+      }
+    },
+    {
+      "database": "bertha_betting",
+      "test": "no-fallback",
+      "verdict": "PASS",
+      "code": "ENOENT"
+    }
+  ],
+  "limits": "Driver preflight only; app and scheduled operational journeys have not been migrated or executed."
+}
diff --git a/verification/ken-schedulers.json b/verification/ken-schedulers.json
new file mode 100644
index 0000000..3e22f6e
--- /dev/null
+++ b/verification/ken-schedulers.json
@@ -0,0 +1,45 @@
+[
+  {
+    "path": "/Users/macstudio3/Library/LaunchAgents/com.steve.ken-reconcile-canary.plist",
+    "sha256": "5bae8a547e6680e2ac071a95ad0e57c74aa89449c4aaffc2540f40d0934f18f5",
+    "label": "com.steve.ken-reconcile-canary",
+    "program": [
+      "/opt/homebrew/bin/node",
+      "/Users/macstudio3/Projects/Ken/kalshi-dash/scripts/reconcile-canary.mjs"
+    ],
+    "environment": [
+      {
+        "key": "KEN_DATABASE_URL",
+        "hostname": "localhost",
+        "database": "ken",
+        "host_option": null
+      }
+    ],
+    "interval": 1800,
+    "keep_alive": null
+  },
+  {
+    "path": "/Users/macstudio3/Library/LaunchAgents/com.steve.ken-follow-winners.plist",
+    "sha256": "2546188beb1642e65daff0aaecf04287556a4226081bea3c8a9d2d95897a1fa6",
+    "label": "com.steve.ken-follow-winners",
+    "program": [
+      "/bin/bash",
+      "/Users/macstudio3/Projects/Ken/kalshi-dash/follow-the-winners-check.sh"
+    ],
+    "environment": [],
+    "interval": 3600,
+    "keep_alive": null
+  },
+  {
+    "path": "/Users/macstudio3/Library/LaunchAgents/com.steve.ken-safemode-guard.plist",
+    "sha256": "b0a8d749b2577ba88a662ce56d8bf947ca49ba85d1601da374fcd8971008df37",
+    "label": "com.steve.ken-safemode-guard",
+    "program": [
+      "/bin/bash",
+      "/Users/macstudio3/Projects/Ken/kalshi-dash/ken-safemode-guard.sh"
+    ],
+    "environment": [],
+    "interval": null,
+    "keep_alive": true
+  }
+]
diff --git a/verification/reverification.json b/verification/reverification.json
new file mode 100644
index 0000000..1393d8b
--- /dev/null
+++ b/verification/reverification.json
@@ -0,0 +1,1441 @@
+{
+  "ticket": "TK-11438",
+  "timestamp": "2026-09-11T16:42:27.004Z",
+  "checks": [
+    {
+      "name": "interiordesignershowroom source/effective DB identity and socket",
+      "verdict": "PASS",
+      "detail": {
+        "identity": {
+          "database": "idshowroom",
+          "role": "macstudio3",
+          "client_addr": null,
+          "readonly": "on"
+        },
+        "count": 3201
+      }
+    },
+    {
+      "name": "interiordesignershowroom durable host/db/role matches runtime",
+      "verdict": "PASS",
+      "detail": {
+        "host": "/tmp",
+        "database": "idshowroom",
+        "role": "macstudio3",
+        "reboot_tested": false
+      }
+    },
+    {
+      "name": "interiordesignershowroom durable URL fields and dotenv",
+      "verdict": "PASS",
+      "detail": {
+        "effective": {
+          "host": "",
+          "database": "idshowroom",
+          "socketHost": "/tmp",
+          "port": "5432"
+        },
+        "dump_top": {
+          "host": "",
+          "database": "idshowroom",
+          "socketHost": "/tmp",
+          "port": "5432"
+        },
+        "dump_nested": {
+          "host": "",
+          "database": "idshowroom",
+          "socketHost": "/tmp",
+          "port": "5432"
+        },
+        "dotenv": {
+          "host": "",
+          "database": "idshowroom",
+          "socketHost": "/tmp",
+          "port": "5432"
+        }
+      }
+    },
+    {
+      "name": "interiordesignershowroom missing socket",
+      "verdict": "PASS",
+      "detail": {
+        "code": "ENOENT"
+      }
+    },
+    {
+      "name": "interiordesignershowroom auth boundary",
+      "verdict": "PASS",
+      "detail": {
+        "status": 401,
+        "bytes": 13
+      }
+    },
+    {
+      "name": "interiordesignershowroom authenticated read",
+      "verdict": "PASS",
+      "detail": {
+        "status": 200,
+        "bytes": 274749
+      }
+    },
+    {
+      "name": "interiordesignershowroom DB-backed HTTP route",
+      "verdict": "PASS",
+      "detail": {
+        "route": "/api/brands",
+        "status": 200
+      }
+    },
+    {
+      "name": "interiordesignershowroom process has no TCP 5432",
+      "verdict": "PASS",
+      "detail": {
+        "pid": 12358
+      }
+    },
+    {
+      "name": "patterndesignlab source/effective DB identity and socket",
+      "verdict": "PASS",
+      "detail": {
+        "identity": {
+          "database": "patterndesignlab",
+          "role": "dw_admin",
+          "client_addr": null,
+          "readonly": "on"
+        },
+        "count": 1694
+      }
+    },
+    {
+      "name": "patterndesignlab durable host/db/role matches runtime",
+      "verdict": "PASS",
+      "detail": {
+        "host": "/tmp",
+        "database": "patterndesignlab",
+        "role": "dw_admin",
+        "reboot_tested": false
+      }
+    },
+    {
+      "name": "patterndesignlab missing socket",
+      "verdict": "PASS",
+      "detail": {
+        "code": "ENOENT"
+      }
+    },
+    {
+      "name": "patterndesignlab auth boundary",
+      "verdict": "PASS",
+      "detail": {
+        "status": 401,
+        "bytes": 13
+      }
+    },
+    {
+      "name": "patterndesignlab authenticated read",
+      "verdict": "PASS",
+      "detail": {
+        "status": 200,
+        "bytes": 1084
+      }
+    },
+    {
+      "name": "patterndesignlab DB-backed HTTP route",
+      "verdict": "PASS",
+      "detail": {
+        "route": "/api/healthz",
+        "status": 200
+      }
+    },
+    {
+      "name": "patterndesignlab process has no TCP 5432",
+      "verdict": "PASS",
+      "detail": {
+        "pid": 20357
+      }
+    }
+  ],
+  "services": [
+    {
+      "name": "pm2-logrotate",
+      "pid": 46327,
+      "status": "online",
+      "cwd": "/Users/macstudio3/.pm2/modules/pm2-logrotate/node_modules/pm2-logrotate",
+      "script": "/Users/macstudio3/.pm2/modules/pm2-logrotate/node_modules/pm2-logrotate/app.js",
+      "targets": []
+    },
+    {
+      "name": "abramsego",
+      "pid": 44001,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/AbramsEgo",
+      "script": "/Users/macstudio3/Projects/AbramsEgo/server.js",
+      "targets": []
+    },
+    {
+      "name": "pattern-vault",
+      "pid": 8266,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/pattern-vault",
+      "script": "/Users/macstudio3/Projects/pattern-vault/server.js",
+      "targets": []
+    },
+    {
+      "name": "cabinet-mindmap",
+      "pid": 8174,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/agent-cabinet",
+      "script": "/Users/macstudio3/Projects/agent-cabinet/server.js",
+      "targets": []
+    },
+    {
+      "name": "patterndesignlab",
+      "pid": 20357,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/patterndesignlab",
+      "script": "/Users/macstudio3/Projects/patterndesignlab/server.js",
+      "targets": [
+        {
+          "key": "PGHOST",
+          "value": "/tmp"
+        }
+      ]
+    },
+    {
+      "name": "reidwitlin-landing",
+      "pid": 8291,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/reidwitlin-landing",
+      "script": "/Users/macstudio3/Projects/reidwitlin-landing/server.js",
+      "targets": []
+    },
+    {
+      "name": "abramsos",
+      "pid": 33618,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/AbramsOS",
+      "script": "/Users/macstudio3/Projects/AbramsOS/server.js",
+      "targets": []
+    },
+    {
+      "name": "dw-pitch-followup",
+      "pid": 8254,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/dw-pitch-followup",
+      "script": "/Users/macstudio3/Projects/dw-pitch-followup/server.js",
+      "targets": []
+    },
+    {
+      "name": "wpb-sales-dashboard",
+      "pid": 8304,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/wpb-sales-dashboard",
+      "script": "/Users/macstudio3/Projects/wpb-sales-dashboard/server.js",
+      "targets": []
+    },
+    {
+      "name": "crezana-internal",
+      "pid": 8192,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/crezana-internal",
+      "script": "/Users/macstudio3/Projects/crezana-internal/server.js",
+      "targets": [
+        {
+          "key": "PGHOST",
+          "value": "/tmp"
+        }
+      ]
+    },
+    {
+      "name": "fromental-internal",
+      "pid": 8298,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/fromental-internal",
+      "script": "/Users/macstudio3/Projects/fromental-internal/server.js",
+      "targets": []
+    },
+    {
+      "name": "gracie-internal",
+      "pid": 8186,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/gracie-internal",
+      "script": "/Users/macstudio3/Projects/gracie-internal/server.js",
+      "targets": [
+        {
+          "key": "PG",
+          "host": "localhost",
+          "database": "dw_unified",
+          "socketHost": null,
+          "port": "5432"
+        }
+      ]
+    },
+    {
+      "name": "zuber-internal",
+      "pid": 8273,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/zuber-internal",
+      "script": "/Users/macstudio3/Projects/zuber-internal/server.js",
+      "targets": []
+    },
+    {
+      "name": "wpb-control-panel",
+      "pid": 27733,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/pattern-vault/wpb-uploaders",
+      "script": "/Users/macstudio3/Projects/pattern-vault/wpb-uploaders/control-panel.js",
+      "targets": []
+    },
+    {
+      "name": "ken",
+      "pid": 92641,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/Ken/kalshi-dash",
+      "script": "/Users/macstudio3/Projects/Ken/kalshi-dash/start.sh",
+      "targets": [
+        {
+          "key": "KEN_DATABASE_URL",
+          "host": "localhost",
+          "database": "ken",
+          "socketHost": null,
+          "port": "5432"
+        },
+        {
+          "key": "DATABASE_URL",
+          "host": "localhost",
+          "database": "bertha_betting",
+          "socketHost": null,
+          "port": "5432"
+        }
+      ]
+    },
+    {
+      "name": "slack-idea-board",
+      "pid": 11035,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/slack-idea-board",
+      "script": "/Users/macstudio3/Projects/slack-idea-board/server.js",
+      "targets": []
+    },
+    {
+      "name": "slack-to-steve-dash",
+      "pid": 8292,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/slack-to-steve",
+      "script": "/Users/macstudio3/Projects/slack-to-steve/server.js",
+      "targets": []
+    },
+    {
+      "name": "ImportNewSkufromURL-9830",
+      "pid": 27750,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/Designer-Wallcoverings/DW-Programming/ImportNewSkufromURL",
+      "script": "/Users/macstudio3/Projects/Designer-Wallcoverings/DW-Programming/ImportNewSkufromURL/node_modules/next/dist/bin/next",
+      "targets": []
+    },
+    {
+      "name": "greenland-internal",
+      "pid": 85706,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/greenland-onboard",
+      "script": "/Users/macstudio3/Projects/greenland-onboard/server.js",
+      "targets": []
+    },
+    {
+      "name": "slack-socket",
+      "pid": 61762,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/slack-to-steve",
+      "script": "/Users/macstudio3/Projects/slack-to-steve/socket.mjs",
+      "targets": []
+    },
+    {
+      "name": "dw-activation-calendar",
+      "pid": 8334,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/dw-activation-calendar",
+      "script": "/Users/macstudio3/Projects/dw-activation-calendar/server.js",
+      "targets": []
+    },
+    {
+      "name": "ai-workforce",
+      "pid": 8322,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/ai-workforce",
+      "script": "/Users/macstudio3/Projects/ai-workforce/server.js",
+      "targets": []
+    },
+    {
+      "name": "prev-estimate-instant",
+      "pid": 8328,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/estimate-instant",
+      "script": "/Users/macstudio3/Projects/estimate-instant/server.js",
+      "targets": []
+    },
+    {
+      "name": "gate-estimate-instant",
+      "pid": 27797,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/claude-webdev-accelerator",
+      "script": "/Users/macstudio3/Projects/claude-webdev-accelerator/scripts/gate-proxy.js",
+      "targets": []
+    },
+    {
+      "name": "prev-trade-portal",
+      "pid": 8316,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/trade-portal",
+      "script": "/Users/macstudio3/Projects/trade-portal/server.js",
+      "targets": []
+    },
+    {
+      "name": "gate-trade-portal",
+      "pid": 27809,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/claude-webdev-accelerator",
+      "script": "/Users/macstudio3/Projects/claude-webdev-accelerator/scripts/gate-proxy.js",
+      "targets": []
+    },
+    {
+      "name": "prev-sample-box",
+      "pid": 8310,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/sample-box",
+      "script": "/Users/macstudio3/Projects/sample-box/server.js",
+      "targets": []
+    },
+    {
+      "name": "gate-sample-box",
+      "pid": 27821,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/claude-webdev-accelerator",
+      "script": "/Users/macstudio3/Projects/claude-webdev-accelerator/scripts/gate-proxy.js",
+      "targets": []
+    },
+    {
+      "name": "prev-reno-visualizer",
+      "pid": 8346,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/reno-visualizer",
+      "script": "/Users/macstudio3/Projects/reno-visualizer/server.js",
+      "targets": []
+    },
+    {
+      "name": "gate-reno-visualizer",
+      "pid": 27834,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/claude-webdev-accelerator",
+      "script": "/Users/macstudio3/Projects/claude-webdev-accelerator/scripts/gate-proxy.js",
+      "targets": []
+    },
+    {
+      "name": "prev-permit-radar",
+      "pid": 8359,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/permit-radar",
+      "script": "/Users/macstudio3/Projects/permit-radar/server.js",
+      "targets": []
+    },
+    {
+      "name": "gate-permit-radar",
+      "pid": 27851,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/claude-webdev-accelerator",
+      "script": "/Users/macstudio3/Projects/claude-webdev-accelerator/scripts/gate-proxy.js",
+      "targets": []
+    },
+    {
+      "name": "prev-accelerator",
+      "pid": 27858,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/claude-webdev-accelerator",
+      "script": "/Users/macstudio3/Projects/claude-webdev-accelerator/scripts/repo-viewer.js",
+      "targets": []
+    },
+    {
+      "name": "gate-accelerator",
+      "pid": 27868,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/claude-webdev-accelerator",
+      "script": "/Users/macstudio3/Projects/claude-webdev-accelerator/scripts/gate-proxy.js",
+      "targets": []
+    },
+    {
+      "name": "schumacher-internal",
+      "pid": 8374,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/schumacher-internal",
+      "script": "/Users/macstudio3/Projects/schumacher-internal/server.js",
+      "targets": []
+    },
+    {
+      "name": "colorwheel",
+      "pid": 8407,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/dw-marketing-reels/colorwheel",
+      "script": "/Users/macstudio3/Projects/dw-marketing-reels/colorwheel/server.js",
+      "targets": []
+    },
+    {
+      "name": "fantasea-consulting",
+      "pid": 8111,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/fantasea-consulting",
+      "script": "/Users/macstudio3/Projects/fantasea-consulting/server.js",
+      "targets": []
+    },
+    {
+      "name": "animals-viewer",
+      "pid": 27916,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/animals",
+      "script": "/Users/macstudio3/Projects/animals/src/server/index.js",
+      "targets": []
+    },
+    {
+      "name": "consulting-intake",
+      "pid": 8340,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/consulting-intake",
+      "script": "/Users/macstudio3/Projects/consulting-intake/server.js",
+      "targets": []
+    },
+    {
+      "name": "dw-marketing-reels-studio",
+      "pid": 8248,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/dw-marketing-reels",
+      "script": "/Users/macstudio3/Projects/dw-marketing-reels/server.js",
+      "targets": []
+    },
+    {
+      "name": "usrealestate",
+      "pid": 10539,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/nationalrealestate",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "usre-broker-rotate",
+      "pid": 0,
+      "status": "stopped",
+      "cwd": "/Users/macstudio3/Projects/nationalrealestate",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "prestige-car-wash",
+      "pid": 8353,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/prestige-car-wash",
+      "script": "/Users/macstudio3/Projects/prestige-car-wash/server.js",
+      "targets": []
+    },
+    {
+      "name": "dw-cadence-next2",
+      "pid": 12557,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/dw-cadence-next2",
+      "script": "/Users/macstudio3/Projects/dw-cadence-next2/server.js",
+      "targets": []
+    },
+    {
+      "name": "rigo-line-viewer",
+      "pid": 8365,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/rigo-line-viewer",
+      "script": "/Users/macstudio3/Projects/rigo-line-viewer/server.js",
+      "targets": []
+    },
+    {
+      "name": "agentabrams-viewer",
+      "pid": 8401,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/agentabrams-viewer",
+      "script": "/Users/macstudio3/Projects/agentabrams-viewer/server.js",
+      "targets": []
+    },
+    {
+      "name": "model-arena",
+      "pid": 61343,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/model-arena",
+      "script": "/Users/macstudio3/Projects/model-arena/server.js",
+      "targets": []
+    },
+    {
+      "name": "dw-domain-viewer",
+      "pid": 8210,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/dw-domain-viewer",
+      "script": "/Users/macstudio3/Projects/dw-domain-viewer/server.js",
+      "targets": []
+    },
+    {
+      "name": "whimsical-viewer",
+      "pid": 8514,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/wild-wallcoverings",
+      "script": "/Users/macstudio3/Projects/wild-wallcoverings/server.js",
+      "targets": []
+    },
+    {
+      "name": "dw-internal-gateway",
+      "pid": 8389,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/dw-internal-gateway",
+      "script": "/Users/macstudio3/Projects/dw-internal-gateway/server.js",
+      "targets": []
+    },
+    {
+      "name": "internal-dw-dns",
+      "pid": 3868,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/dw-internal-gateway",
+      "script": "/opt/homebrew/opt/dnsmasq/sbin/dnsmasq",
+      "targets": []
+    },
+    {
+      "name": "all-dw-local",
+      "pid": 84927,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/all-designerwallcoverings",
+      "script": "/Users/macstudio3/Projects/all-designerwallcoverings/server.js",
+      "targets": []
+    },
+    {
+      "name": "vahallan-line-viewer",
+      "pid": 8571,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/vahallan-line-viewer",
+      "script": "/Users/macstudio3/Projects/vahallan-line-viewer/server.js",
+      "targets": []
+    },
+    {
+      "name": "clipreviewbydave",
+      "pid": 8559,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/clipreviewbydave",
+      "script": "/Users/macstudio3/Projects/clipreviewbydave/server.js",
+      "targets": []
+    },
+    {
+      "name": "ticket-board",
+      "pid": 36347,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/ticket-system",
+      "script": "/Users/macstudio3/Projects/ticket-system/server.js",
+      "targets": []
+    },
+    {
+      "name": "muralsource-internal",
+      "pid": 8416,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/muralsource-internal",
+      "script": "/Users/macstudio3/Projects/muralsource-internal/server.js",
+      "targets": []
+    },
+    {
+      "name": "projects-agentabrams",
+      "pid": 8434,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/projects-agentabrams",
+      "script": "/Users/macstudio3/Projects/projects-agentabrams/server.js",
+      "targets": []
+    },
+    {
+      "name": "build-pages",
+      "pid": 8204,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/build-pages",
+      "script": "/Users/macstudio3/Projects/build-pages/server.js",
+      "targets": []
+    },
+    {
+      "name": "approvals-viewer",
+      "pid": 8162,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/approvals-viewer",
+      "script": "/Users/macstudio3/Projects/approvals-viewer/server.js",
+      "targets": []
+    },
+    {
+      "name": "hos-feed-api",
+      "pid": 60733,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/homesonspec",
+      "script": "/Users/macstudio3/Projects/homesonspec/scripts/feed-api.mjs",
+      "targets": []
+    },
+    {
+      "name": "hos-permit-viewer",
+      "pid": 28103,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/homesonspec",
+      "script": "/Users/macstudio3/Projects/homesonspec/scripts/permit-viewer.mjs",
+      "targets": []
+    },
+    {
+      "name": "hos-engine",
+      "pid": 28104,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/homesonspec",
+      "script": "/Users/macstudio3/Projects/homesonspec/scripts/engine-dashboard.mjs",
+      "targets": []
+    },
+    {
+      "name": "usre-rentv-feed",
+      "pid": 48408,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/nationalrealestate",
+      "script": "/Users/macstudio3/Projects/nationalrealestate/scripts/rentv-feed.mjs",
+      "targets": []
+    },
+    {
+      "name": "approvals-rollup",
+      "pid": 13273,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/approvals-viewer",
+      "script": "/Users/macstudio3/Projects/approvals-viewer/rollup.js",
+      "targets": []
+    },
+    {
+      "name": "dw-signup-fulfillment",
+      "pid": 32303,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/dw-signup-fulfillment",
+      "script": "/Users/macstudio3/Projects/dw-signup-fulfillment/server.js",
+      "targets": []
+    },
+    {
+      "name": "rentv",
+      "pid": 8595,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/rentv",
+      "script": "/Users/macstudio3/Projects/rentv/server.js",
+      "targets": [
+        {
+          "key": "PR_DATABASE_URL",
+          "unresolved": true
+        }
+      ]
+    },
+    {
+      "name": "tools-dw-hub",
+      "pid": 8422,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/Users/macstudio3/Projects/tools-dw-hub/server.js",
+      "targets": []
+    },
+    {
+      "name": "new-engine",
+      "pid": 8428,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/new-engine",
+      "script": "/Users/macstudio3/Projects/new-engine/server.js",
+      "targets": [
+        {
+          "key": "PGHOST",
+          "value": "/tmp"
+        },
+        {
+          "key": "PGDATABASE",
+          "value": "dw_unified"
+        }
+      ]
+    },
+    {
+      "name": "hos-web",
+      "pid": 28165,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/homesonspec",
+      "script": "/bin/bash",
+      "targets": [
+        {
+          "key": "DATABASE_URL",
+          "host": "localhost",
+          "database": "homesonspec",
+          "socketHost": "/tmp",
+          "port": "5432"
+        }
+      ]
+    },
+    {
+      "name": "hos-admin",
+      "pid": 28182,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/homesonspec",
+      "script": "/bin/bash",
+      "targets": [
+        {
+          "key": "DATABASE_URL",
+          "host": "localhost",
+          "database": "homesonspec",
+          "socketHost": "/tmp",
+          "port": "5432"
+        }
+      ]
+    },
+    {
+      "name": "dwtool-150dpi",
+      "pid": 92630,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-recolor-v14",
+      "pid": 92621,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-image-to-room",
+      "pid": 96142,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-room-setting-app",
+      "pid": 96135,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-color-wheel",
+      "pid": 96132,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-tagger-kravet",
+      "pid": 92611,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-tagger-thibaut",
+      "pid": 92597,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-tagger-pr",
+      "pid": 92627,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-updater-maya",
+      "pid": 92610,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-vendor-dashboard-v2",
+      "pid": 92618,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-calendar",
+      "pid": 96144,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-master-listings",
+      "pid": 96136,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-system-dashboard",
+      "pid": 56073,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-pm2-dashboard",
+      "pid": 92601,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-recolor-v13",
+      "pid": 92623,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-recolor-v1",
+      "pid": 92647,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-import-sku",
+      "pid": 96138,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-updater-schumacher",
+      "pid": 92599,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-updater-architectural",
+      "pid": 92619,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-sku-to-blog",
+      "pid": 28407,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-settlement-review",
+      "pid": 28412,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "dwtool-dw-dashboard",
+      "pid": 24315,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/tools-dw-hub",
+      "script": "/bin/bash",
+      "targets": []
+    },
+    {
+      "name": "ticket-triage",
+      "pid": 8440,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/ticket-triage-page",
+      "script": "/Users/macstudio3/Projects/ticket-triage-page/server.js",
+      "targets": []
+    },
+    {
+      "name": "vendor-command-center",
+      "pid": 69308,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/Designer-Wallcoverings/DW-Agents/vendor-command-center",
+      "script": "/Users/macstudio3/Projects/Designer-Wallcoverings/DW-Agents/vendor-command-center/run-local.sh",
+      "targets": []
+    },
+    {
+      "name": "interiordesignershowroom",
+      "pid": 12358,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/interiordesignershowroom",
+      "script": "/Users/macstudio3/Projects/interiordesignershowroom/server.js",
+      "targets": [
+        {
+          "key": "DATABASE_URL",
+          "host": "",
+          "database": "idshowroom",
+          "socketHost": "/tmp",
+          "port": "5432"
+        }
+      ]
+    },
+    {
+      "name": "waitline",
+      "pid": 8441,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/waitline",
+      "script": "/Users/macstudio3/Projects/waitline/server.js",
+      "targets": []
+    },
+    {
+      "name": "agent-ad-network",
+      "pid": 8460,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/agent-ad-network",
+      "script": "/Users/macstudio3/Projects/agent-ad-network/server.js",
+      "targets": []
+    },
+    {
+      "name": "ken-trade-siren",
+      "pid": 8222,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/ken-trade-siren",
+      "script": "/Users/macstudio3/Projects/ken-trade-siren/server.js",
+      "targets": []
+    },
+    {
+      "name": "ga-allsites",
+      "pid": 28621,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/ga-allsites",
+      "script": "/Users/macstudio3/Projects/ga-allsites/server.py",
+      "targets": []
+    },
+    {
+      "name": "ga4-dashboard",
+      "pid": 8565,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/ga4-dashboard",
+      "script": "/Users/macstudio3/Projects/ga4-dashboard/server.js",
+      "targets": []
+    },
+    {
+      "name": "norma-instagram",
+      "pid": 8546,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/Norma/agents/instagram-agent",
+      "script": "/Users/macstudio3/Projects/Norma/agents/instagram-agent/server.js",
+      "targets": []
+    },
+    {
+      "name": "nodailyworries-local",
+      "pid": 8453,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/nodailyworries",
+      "script": "/Users/macstudio3/Projects/nodailyworries/server.js",
+      "targets": []
+    },
+    {
+      "name": "norma-email",
+      "pid": 9224,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/Norma",
+      "script": "/opt/homebrew/bin/npm",
+      "targets": []
+    },
+    {
+      "name": "calendar-agentabrams",
+      "pid": 8120,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/calendar-agentabrams",
+      "script": "/Users/macstudio3/Projects/calendar-agentabrams/server.js",
+      "targets": []
+    },
+    {
+      "name": "thedesignerlibrary",
+      "pid": 8228,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/thedesignerlibrary",
+      "script": "/Users/macstudio3/Projects/thedesignerlibrary/server.js",
+      "targets": []
+    },
+    {
+      "name": "ventura-corridor",
+      "pid": 28679,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/ventura-corridor",
+      "script": "/Users/macstudio3/Projects/ventura-corridor/node_modules/.bin/tsx",
+      "targets": []
+    },
+    {
+      "name": "rentv-ad-engine",
+      "pid": 8667,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/rentv-ad-engine",
+      "script": "/Users/macstudio3/Projects/rentv-ad-engine/server.js",
+      "targets": []
+    },
+    {
+      "name": "rentv2026-preview",
+      "pid": 8459,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/rentv-2026",
+      "script": "/Users/macstudio3/Projects/rentv-2026/server.js",
+      "targets": []
+    },
+    {
+      "name": "ads-dashboard",
+      "pid": 8466,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/ads-dashboard",
+      "script": "/Users/macstudio3/Projects/ads-dashboard/server.js",
+      "targets": []
+    },
+    {
+      "name": "rentv-targets-viewer",
+      "pid": 48522,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/rentv-licensed-targets",
+      "script": "/Users/macstudio3/Projects/rentv-licensed-targets/server.js",
+      "targets": []
+    },
+    {
+      "name": "labj-viewer",
+      "pid": 8478,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/labj-cre-banks",
+      "script": "/Users/macstudio3/Projects/labj-cre-banks/server.js",
+      "targets": []
+    },
+    {
+      "name": "socrata-cre-viewer",
+      "pid": 8472,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/socrata-cre-viewer",
+      "script": "/Users/macstudio3/Projects/socrata-cre-viewer/server.js",
+      "targets": []
+    },
+    {
+      "name": "dw-chat-analyzer",
+      "pid": 8508,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/dw-chat-analyzer",
+      "script": "/Users/macstudio3/Projects/dw-chat-analyzer/server.js",
+      "targets": []
+    },
+    {
+      "name": "zendesk-chat-analyzer",
+      "pid": 8490,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/zendesk-chat-analyzer",
+      "script": "/Users/macstudio3/Projects/zendesk-chat-analyzer/server.js",
+      "targets": []
+    },
+    {
+      "name": "dw-chat-watch",
+      "pid": 29002,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/dw-chat-analyzer",
+      "script": "/Users/macstudio3/Projects/dw-chat-analyzer/watch.js",
+      "targets": []
+    },
+    {
+      "name": "buildingpermits-viewer",
+      "pid": 92579,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/la-socrata-ingester",
+      "script": "/Users/macstudio3/Projects/la-socrata-ingester/viewer/run-public.sh",
+      "targets": []
+    },
+    {
+      "name": "buildingpermits-tunnel",
+      "pid": 29026,
+      "status": "online",
+      "cwd": "/Users/macstudio3/.cloudflared",
+      "script": "/opt/homebrew/bin/cloudflared",
+      "targets": []
+    },
+    {
+      "name": "fmpro-review",
+      "pid": 8501,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/fm-wallpaper-sync/viewer",
+      "script": "/Users/macstudio3/Projects/fm-wallpaper-sync/viewer/server.js",
+      "targets": []
+    },
+    {
+      "name": "rentv-live-console",
+      "pid": 29058,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/rentv-sheet-enrich",
+      "script": "/Users/macstudio3/Projects/rentv-sheet-enrich/live_server.py",
+      "targets": []
+    },
+    {
+      "name": "ticket-action-viewer",
+      "pid": 8533,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/ticket-action-viewer",
+      "script": "/Users/macstudio3/Projects/ticket-action-viewer/server.js",
+      "targets": []
+    },
+    {
+      "name": "corvette-console",
+      "pid": 8693,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/corvette-dashboard-viewer",
+      "script": "/Users/macstudio3/Projects/corvette-dashboard-viewer/server.js",
+      "targets": []
+    },
+    {
+      "name": "sample-followup-viewer",
+      "pid": 1788,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/sample-followup-sweep",
+      "script": "/Users/macstudio3/Projects/sample-followup-sweep/server.js",
+      "targets": []
+    },
+    {
+      "name": "ig-board-tunnel",
+      "pid": 91332,
+      "status": "online",
+      "cwd": "/Users/macstudio3/.cloudflared",
+      "script": "/opt/homebrew/bin/cloudflared",
+      "targets": []
+    },
+    {
+      "name": "gated-queue-runner",
+      "pid": 8526,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/gated-queue-runner",
+      "script": "/Users/macstudio3/Projects/gated-queue-runner/server.js",
+      "targets": []
+    },
+    {
+      "name": "re-flyers-viewer",
+      "pid": 8539,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/re-flyer-aggregator",
+      "script": "/Users/macstudio3/Projects/re-flyer-aggregator/server.js",
+      "targets": []
+    },
+    {
+      "name": "qwen38-viewer",
+      "pid": 7368,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/qwen38-viewer",
+      "script": "/Users/macstudio3/Projects/qwen38-viewer/server.js",
+      "targets": []
+    },
+    {
+      "name": "crcp-valley",
+      "pid": 70998,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/commercialrealestate",
+      "script": "/Users/macstudio3/Projects/commercialrealestate/scripts/serve.js",
+      "targets": []
+    },
+    {
+      "name": "palisades-viewer",
+      "pid": 7767,
+      "status": "online",
+      "cwd": "/Users/macstudio3/palisades-data-product",
+      "script": "/Users/macstudio3/palisades-data-product/src/status_server.py",
+      "targets": []
+    },
+    {
+      "name": "fentucci-viewer",
+      "pid": 10334,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/fentucci-viewer",
+      "script": "/Users/macstudio3/Projects/fentucci-viewer/server.js",
+      "targets": []
+    },
+    {
+      "name": "re-flyers-viewers",
+      "pid": 36014,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/re-flyer-aggregator",
+      "script": "/Users/macstudio3/Projects/re-flyer-aggregator/serve-viewers.mjs",
+      "targets": []
+    },
+    {
+      "name": "gated-morning-review",
+      "pid": 4267,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/gated-morning-review",
+      "script": "/Users/macstudio3/Projects/gated-morning-review/server.mjs",
+      "targets": []
+    },
+    {
+      "name": "marketing-command-center",
+      "pid": 36630,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/marketing-command-center",
+      "script": "/Users/macstudio3/Projects/marketing-command-center/server.js",
+      "targets": []
+    },
+    {
+      "name": "doing-viewer",
+      "pid": 8727,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/doing-viewer",
+      "script": "/Users/macstudio3/Projects/doing-viewer/server.js",
+      "targets": []
+    },
+    {
+      "name": "ca-donations",
+      "pid": 8583,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/ca-donations",
+      "script": "/Users/macstudio3/Projects/ca-donations/server.js",
+      "targets": []
+    },
+    {
+      "name": "cronjobs-viewer",
+      "pid": 57979,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/cronjobs-viewer",
+      "script": "/Users/macstudio3/Projects/cronjobs-viewer/server.js",
+      "targets": []
+    },
+    {
+      "name": "gated-tunnel",
+      "pid": 75755,
+      "status": "online",
+      "cwd": "/Users/macstudio3/.cloudflared",
+      "script": "/opt/homebrew/bin/cloudflared",
+      "targets": []
+    },
+    {
+      "name": "followup2-tunnel",
+      "pid": 33614,
+      "status": "online",
+      "cwd": "/Users/macstudio3/.cloudflared",
+      "script": "/opt/homebrew/bin/cloudflared",
+      "targets": []
+    },
+    {
+      "name": "open-seo",
+      "pid": 44908,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/open-seo",
+      "script": "/Users/macstudio3/Projects/open-seo/node_modules/vite/bin/vite.js",
+      "targets": []
+    },
+    {
+      "name": "mfr-review-viewer",
+      "pid": 331,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/mfr-review-viewer-corruption",
+      "script": "/Users/macstudio3/Projects/mfr-review-viewer-corruption/server.js",
+      "targets": []
+    },
+    {
+      "name": "approval-viewer",
+      "pid": 13251,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/approval-viewer",
+      "script": "/Users/macstudio3/Projects/approval-viewer/server.js",
+      "targets": []
+    },
+    {
+      "name": "quadrille-house-site",
+      "pid": 23200,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/quadrille-house-site",
+      "script": "/Users/macstudio3/Projects/quadrille-house-site/server.js",
+      "targets": []
+    },
+    {
+      "name": "CelebritySignatures",
+      "pid": 98348,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/CelebritySignatures",
+      "script": "/Users/macstudio3/Projects/CelebritySignatures/server.js",
+      "targets": []
+    },
+    {
+      "name": "seo-ai-discovery-overnight",
+      "pid": 0,
+      "status": "stopped",
+      "cwd": "/Users/macstudio3/Projects/dw-fleet-registry",
+      "script": "/Users/macstudio3/Projects/dw-fleet-registry/run-search-audit-loop.sh",
+      "targets": []
+    },
+    {
+      "name": "credentials-center",
+      "pid": 13638,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/secrets-manager",
+      "script": "/Users/macstudio3/Projects/secrets-manager/update-viewer/server.mjs",
+      "targets": []
+    },
+    {
+      "name": "ungate-console",
+      "pid": 45202,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/ungate-console",
+      "script": "/Users/macstudio3/Projects/ungate-console/server.js",
+      "targets": []
+    },
+    {
+      "name": "adsense-manager",
+      "pid": 86582,
+      "status": "online",
+      "cwd": "/Users/macstudio3/.claude/skills/adsense-manager",
+      "script": "/Users/macstudio3/.claude/skills/adsense-manager/scripts/serve.mjs",
+      "targets": []
+    },
+    {
+      "name": "fleet-wall",
+      "pid": 48226,
+      "status": "online",
+      "cwd": "/Users/macstudio3/Projects/fleet-wall",
+      "script": "/Users/macstudio3/Projects/fleet-wall/server.mjs",
+      "targets": []
+    }
+  ],
+  "postgres": {
+    "listen_addresses": "localhost",
+    "socket_dirs": "/tmp"
+  },
+  "clients": [
+    {
+      "datname": "idshowroom",
+      "usename": "macstudio3",
+      "application_name": "",
+      "client_addr": null,
+      "client_port": -1,
+      "pid": 84592,
+      "state": "idle"
+    },
+    {
+      "datname": "ken",
+      "usename": "macstudio3",
+      "application_name": "",
+      "client_addr": "::1/128",
+      "client_port": 63915,
+      "pid": 72838,
+      "state": "idle"
+    },
+    {
+      "datname": "patterndesignlab",
+      "usename": "dw_admin",
+      "application_name": "",
+      "client_addr": null,
+      "client_port": -1,
+      "pid": 84635,
+      "state": "idle"
+    }
+  ],
+  "verdict": "FIRST_BATCH_PASS_FULL_FLEET_BLOCKED"
+}
diff --git a/verification/runtime.json b/verification/runtime.json
index 1bcb342..f66df44 100644
--- a/verification/runtime.json
+++ b/verification/runtime.json
@@ -1,5 +1,5 @@
 {
-  "timestamp": "2026-09-11T15:12:11.260Z",
+  "timestamp": "2026-09-11T16:55:00.025Z",
   "services": [
     {
       "name": "pm2-logrotate",
@@ -11,7 +11,7 @@
     },
     {
       "name": "abramsego",
-      "pid": 39792,
+      "pid": 48305,
       "status": "online",
       "cwd": "/Users/macstudio3/Projects/AbramsEgo",
       "script": "/Users/macstudio3/Projects/AbramsEgo/server.js",
@@ -35,11 +35,16 @@
     },
     {
       "name": "patterndesignlab",
-      "pid": 85753,
+      "pid": 20357,
       "status": "online",
       "cwd": "/Users/macstudio3/Projects/patterndesignlab",
       "script": "/Users/macstudio3/Projects/patterndesignlab/server.js",
-      "targets": []
+      "targets": [
+        {
+          "key": "PGHOST",
+          "value": "/tmp"
+        }
+      ]
     },
     {
       "name": "reidwitlin-landing",
@@ -983,21 +988,21 @@
     },
     {
       "name": "interiordesignershowroom",
-      "pid": 8447,
+      "pid": 12358,
       "status": "online",
       "cwd": "/Users/macstudio3/Projects/interiordesignershowroom",
       "script": "/Users/macstudio3/Projects/interiordesignershowroom/server.js",
       "targets": [
+        {
+          "key": "PORT",
+          "value": "9861"
+        },
         {
           "key": "DATABASE_URL",
-          "host": "localhost",
+          "host": "",
           "port": "5432",
           "database": "idshowroom",
-          "socketHost": null
-        },
-        {
-          "key": "PORT",
-          "value": "9861"
+          "socketHost": "/tmp"
         }
       ]
     },

← a93a4b2 Record first batch socket migration E2E verification  ·  back to Tk11438 Postgres Migration  ·  Record approved Ken socket rollout and independent verificat 7470da8 →