← back to Wallco Ai
edges-batch-scan: read-only PASS-rate sampler over EDGES_FAIL pool (200-sample = 0% PASS, pool needs heal not promote)
2482fb4d87f993c8e17cd683e0a7575642a2985b · 2026-06-03 21:08:04 -0700 · Steve Abrams
Files touched
A data/edges-batch-scan-report.jsonA scripts/edges-batch-scan.pyM yolo-queue/yolo-loop-2026-06-03.md
Diff
commit 2482fb4d87f993c8e17cd683e0a7575642a2985b
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Jun 3 21:08:04 2026 -0700
edges-batch-scan: read-only PASS-rate sampler over EDGES_FAIL pool (200-sample = 0% PASS, pool needs heal not promote)
---
data/edges-batch-scan-report.json | 1001 ++++++++++++++++++++++++++++++++++++
scripts/edges-batch-scan.py | 87 ++++
yolo-queue/yolo-loop-2026-06-03.md | 34 ++
3 files changed, 1122 insertions(+)
diff --git a/data/edges-batch-scan-report.json b/data/edges-batch-scan-report.json
new file mode 100644
index 0000000..4e08a31
--- /dev/null
+++ b/data/edges-batch-scan-report.json
@@ -0,0 +1,1001 @@
+{
+ "requested": 200,
+ "scanned": 200,
+ "tally": {
+ "PASS": 0,
+ "WARN": 0,
+ "FAIL": 187,
+ "ERROR": 0,
+ "MISSING": 13
+ },
+ "pass_ids": [],
+ "detail": [
+ {
+ "id": 41553,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41552,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41551,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41550,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41537,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41510,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41509,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41504,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41497,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41494,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41487,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41242,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41241,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41239,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41233,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41231,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41164,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41128,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41127,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41055,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41054,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41043,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 41008,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40993,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40953,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40936,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40839,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40787,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40774,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40773,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40739,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40690,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40689,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40635,
+ "verdict": "MISSING"
+ },
+ {
+ "id": 40627,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40624,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40623,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40612,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40604,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40597,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40576,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40568,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40500,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40485,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40477,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40475,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40459,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40454,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40448,
+ "verdict": "MISSING"
+ },
+ {
+ "id": 40447,
+ "verdict": "MISSING"
+ },
+ {
+ "id": 40435,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40393,
+ "verdict": "MISSING"
+ },
+ {
+ "id": 40392,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40374,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40369,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40350,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40349,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40231,
+ "verdict": "MISSING"
+ },
+ {
+ "id": 40223,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40221,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40219,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40129,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40059,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40015,
+ "verdict": "MISSING"
+ },
+ {
+ "id": 40012,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 40004,
+ "verdict": "MISSING"
+ },
+ {
+ "id": 39998,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39978,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39969,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39949,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39936,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39926,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39911,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39902,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39899,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39887,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39880,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39872,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39858,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39833,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39810,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39788,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39754,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39752,
+ "verdict": "MISSING"
+ },
+ {
+ "id": 39751,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39734,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39732,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39728,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39727,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39725,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39724,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39723,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39722,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39721,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39720,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39705,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39696,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39681,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39663,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39662,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39660,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39659,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39658,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39655,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39648,
+ "verdict": "MISSING"
+ },
+ {
+ "id": 39641,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39636,
+ "verdict": "MISSING"
+ },
+ {
+ "id": 39624,
+ "verdict": "MISSING"
+ },
+ {
+ "id": 39621,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39596,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39572,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39558,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39529,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39505,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39500,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39441,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39392,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39391,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39388,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39387,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39386,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39385,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39384,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39383,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39379,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39371,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39365,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39362,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39025,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39023,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39020,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39012,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39011,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 39005,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 38986,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 38978,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 38971,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 38963,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 38915,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 38910,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 38906,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 38905,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 38904,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 38903,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 38886,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 38864,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 38862,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 38687,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 38672,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 38410,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 38406,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 38223,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37919,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37916,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37915,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37841,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37840,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37839,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37801,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37800,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37799,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37767,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37766,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37765,
+ "verdict": "MISSING"
+ },
+ {
+ "id": 37763,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37762,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37760,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37758,
+ "verdict": "MISSING"
+ },
+ {
+ "id": 37746,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37745,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37744,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37718,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37717,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37716,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37705,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37704,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37703,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37700,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37699,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37698,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37644,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37643,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37642,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37584,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37583,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37582,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37544,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37543,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37542,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37509,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37507,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37506,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37505,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37503,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37502,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37501,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37260,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37220,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37202,
+ "verdict": "FAIL",
+ "score": null
+ },
+ {
+ "id": 37201,
+ "verdict": "FAIL",
+ "score": null
+ }
+ ]
+}
\ No newline at end of file
diff --git a/scripts/edges-batch-scan.py b/scripts/edges-batch-scan.py
new file mode 100644
index 0000000..c683dd1
--- /dev/null
+++ b/scripts/edges-batch-scan.py
@@ -0,0 +1,87 @@
+#!/usr/bin/env python3
+"""Read-only batch edges-scan over unpublished EDGES_FAIL rows.
+
+Samples N unpublished EDGES_FAIL designs, resolves each PNG on local disk, runs
+the 6-lens edges-scan.py, and tallies PASS/WARN/FAIL/missing. Writes a per-row
+report JSON. DOES NOT touch the DB, does not flip is_published, does not deploy.
+Its only purpose is to gauge the PASS-rate before deciding to promote.
+
+Usage: edges-batch-scan.py [N] (default 200)
+"""
+import os, sys, json, subprocess, re
+
+ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+GEN = os.path.join(ROOT, 'data', 'generated')
+N = int(sys.argv[1]) if len(sys.argv) > 1 else 200
+
+
+def db_url():
+ for line in open(os.path.join(ROOT, '.env')):
+ if line.startswith('DATABASE_URL='):
+ return line.split('=', 1)[1].strip().strip('"')
+ raise SystemExit('no DATABASE_URL in .env')
+
+
+def fetch_rows(n):
+ q = ("select id, coalesce(local_path,'') from all_designs "
+ "where is_published=false and coalesce(user_removed,false)=false "
+ "and notes ilike '%EDGES_FAIL%' order by id desc limit " + str(int(n)))
+ out = subprocess.check_output(['psql', db_url(), '-tAc', q], text=True)
+ rows = []
+ for line in out.splitlines():
+ line = line.strip()
+ if '|' in line:
+ did, lp = line.split('|', 1)
+ rows.append((int(did), lp))
+ return rows
+
+
+def resolve(lp):
+ if not lp:
+ return None
+ cands = [lp, lp if lp.endswith('.png') else lp + '.png']
+ base = os.path.basename(lp.rstrip('/'))
+ cands += [os.path.join(GEN, base + '.png'),
+ os.path.join(GEN, base, 'final.png')]
+ return next((c for c in cands if os.path.isfile(c)), None)
+
+
+def scan(path):
+ try:
+ out = subprocess.check_output(
+ ['python3', os.path.join(ROOT, 'scripts', 'edges-scan.py'), '--path', path],
+ text=True, stderr=subprocess.DEVNULL, timeout=60)
+ return json.loads(out)
+ except Exception as e:
+ return {'verdict': 'ERROR', 'error': str(e)[:120]}
+
+
+def main():
+ rows = fetch_rows(N)
+ tally = {'PASS': 0, 'WARN': 0, 'FAIL': 0, 'ERROR': 0, 'MISSING': 0}
+ detail = []
+ passes = []
+ for did, lp in rows:
+ path = resolve(lp)
+ if not path:
+ tally['MISSING'] += 1
+ detail.append({'id': did, 'verdict': 'MISSING'})
+ continue
+ r = scan(path)
+ v = r.get('verdict', 'ERROR')
+ tally[v] = tally.get(v, 0) + 1
+ rec = {'id': did, 'verdict': v, 'score': r.get('overall_max') or r.get('score')}
+ detail.append(rec)
+ if v == 'PASS':
+ passes.append(did)
+ report = {'requested': N, 'scanned': len(rows), 'tally': tally,
+ 'pass_ids': passes, 'detail': detail}
+ outp = os.path.join(ROOT, 'data', 'edges-batch-scan-report.json')
+ with open(outp, 'w') as f:
+ json.dump(report, f, indent=2)
+ print(json.dumps({'tally': tally, 'pass_count': len(passes),
+ 'report': outp}, indent=2))
+
+
+if __name__ == '__main__':
+ main()
diff --git a/yolo-queue/yolo-loop-2026-06-03.md b/yolo-queue/yolo-loop-2026-06-03.md
index b8022b5..912d75c 100644
--- a/yolo-queue/yolo-loop-2026-06-03.md
+++ b/yolo-queue/yolo-loop-2026-06-03.md
@@ -1,3 +1,5 @@
+# 🛑 LOOP STOPPED by Steve 2026-06-03 (~20:46, "stop the loop"). No further ticks; stop flag ~/.yolo-dtd-stop set + no wakeup rescheduled. Final state below.
+
# YOLO loop — 2026-06-03 (Steve away ~few hours)
DTD standing verdict (from 2026-06-02): **B** — bug-hunt + audit user-facing surfaces, fix reversible defects; graft **C** (stage gated work for Steve). Same direction holds.
@@ -18,6 +20,8 @@ DTD standing verdict (from 2026-06-02): **B** — bug-hunt + audit user-facing s
- (seed via light recon in tick 1; deeper audit once batch done)
## Approval queue (PARKED — needs Steve)
+- ~~**⚠ HIGH · Deploy /api/designs local_path-leak fix**~~ ✅ RESOLVED 2026-06-03 (verified via public HTTPS at Steve's "parked HIGH item" prompt). Commit a0203ad (`delete o.local_path` server.js:21281) is LIVE on prod — scanned 2000 feed rows incl. 1237 in the exact leak-id-range 39290-57342 + search/random/by-color endpoints = 0 local_path leaks. The parked entry was stale (predated the T-END deploy). No redeploy needed.
+- ~~Surface toile rooms on prod PDP~~ ✅ RESOLVED 2026-06-03 08:59 (Steve approved restart; real fix was room_mockups=['living_room'] populated on the 30 rows + snapshot rebuild + deploy + prod DB sync — restart alone didn't do it; the customer PDP renders rooms client-side from room_mockups. Verified reference-parity with known-good #56321.)
- Luxe re-roll scope (307 roots vs 924 queue) — deferred pending dog-batch review
- Publish/curate the new Nano Banana dogs (hot-or-not in /admin/dogs-curator) + deploy
- George 470-file rotation/secret-strip
@@ -26,3 +30,33 @@ DTD standing verdict (from 2026-06-02): **B** — bug-hunt + audit user-facing s
## Ledger
- T0 · 2026-06-03 (start) · loop init · dogs 27/220 running · CNCP up
- T1 · 2026-06-03 · light route sweep (10 routes) all 200 except /cart 404 → triaged NON-issue (stub alert text; purchase=Stripe checkout + /basket). No defect found. Dogs 36/220. Logged to CNCP.
+- T2 · 2026-06-03 08:53 · ROOMS for the 30 Nano-Banana LA toiles (#57313-57342): generated 30 living-room PIL composites (FREE/local), inserted wallco_rooms rows local+prod, rsynced PNGs to prod (serve 200). LOCAL PDP renders rooms correctly; PROD PDP does NOT surface them — running prod process predates the deployed resolveDesignRooms PDP wiring → needs `pm2 restart wallco-ai` (GATED, parked). No code defect. Logged to CNCP.
+- T2b · 2026-06-03 08:59 · ROOMS now LIVE on prod toile PDPs — root cause was empty room_mockups col (not a cache/restart issue). Set room_mockups=['living_room'] on 30 rows (local+prod), rebuilt snapshot, deployed (34/34 smoke). Prod /api/design returns room_mockups + PDP embeds identical room data to ref #56321. NOTE: prod server-side resolveDesignRooms is globally broken (psql role 'root' missing) — pre-existing, harmless (client path renders).
+
+- T3 · · Q1 DONE — fliepaper-bugs admin grid created-date+time chip (standing rule #2). Carried c.created_at through the cells API + .when chip (🕓 fmtDate, ISO in title) + CSS. Validated local (API 36/36 created_at, node -c). Committed. Local only (deploy gated). Dogs batch still running.
+
+- T3b · · DOGS BATCH DONE — 218 Nano Banana 3.1 (gemini-3.1-flash-image-repeat-v2) dogs across all 11 breeds. 165 drafts (is_published=FALSE) + 53 auto-published LOCALLY by wallco-curator-local. None on prod (no deploy). Curation = Steve-in-loop at /admin/dogs-curator (PARKED in approval queue). Contention over → future ticks can go heavier.
+
+- T4 · · Q2 + Q3 DONE. Q2 (build-mural-master --estimate) was already implemented (estimate() L373) — validated --estimate 12 = ~$3.30/216 calls no-spend, marked [x] no change. Q3: built scripts/monterey-top12-manifest.py (READ-ONLY) → data/monterey-top12-manifest.json (top-12 published monterey ranked combined_score→elo→newest + build/estimate commands). 0 DB writes. Committed. Dogs batch finished (218 dogs, logged T3b). Backlog now: only opportunistic code-health left.
+
+- T5 · · LIGHT AUDIT (clean, no defect). Public route sweep all healthy: /designs /murals /samples /collections/fliepaper-bugs /api/categories /sitemap.xml /robots.txt = 200; /studio = 301→/designs (intentional retirement redirect, final 200). /designs grid satisfies sort+density standing rule (sort-select + range/--cols present). Nothing actionable. No commit, no win logged. Next tick: vary target (admin created-date chips / PDP / murals grid).
+
+- T6 · · LIGHT AUDIT (clean). Admin created-date+time chip standing-rule sweep across 25 public/admin/*.html: ALL genuine record grids comply (curators/review/moderation/catalog all have fmtDate/🕓 chip). The 6 NO-CHIP pages are tools/config NOT record grids (etsy-setup, mid-heal-preview, seam-debug, styleguide-beverly-hills, styleguides=Brand Selector, workspace=admin hub) — rule N/A. No defect, no commit. 2nd clean tick in a row → loosening cadence to 3600s.
+- T7 · 2026-06-03 12:09 · REAL DEFECT FOUND+FIXED (local). Audit (c): public /api/designs leaked local_path on 146 PROD rows (ids 39290-57342, /root/ FS paths) — hard-rule violation. Root cause: runtime-added in-memory DESIGNS rows (generator/curator/recolor) carry local_path; the shallow-copy emit didn't strip it (snapshot itself is clean both local+prod; sibling endpoints search/random/by-color clean). Fix: `delete o.local_path` on emitted copy (commit a0203ad), validated local (100 items, 0 leak, no regression). LIVE leak persists until deploy (GATED → HIGH in approval queue). Tightening cadence back to 1800s (found a real defect).
+
+- T8 · · LIGHT AUDIT (clean) — leak-class sweep. Confirmed the local_path/FS-path leak is CONTAINED to /api/designs (fixed T7, a0203ad). Clean: /api/design/:id PDP JSON (6-id sample incl toiles/old/colorway), /api/designs/search, /random, /by-color, /api/collections/fliepaper-bugs. Remaining server.js local_path refs (L1560/1656/1710/1670-1723) are legit server-side fs ops (ghost-quarantine/bake renameSync/existsSync), NOT public emits. No new defect, no commit. (1 clean tick after the T7 find.)
+
+- T9 · · SETTLEMENT INTEGRITY AUDIT (clean, safety-critical). Zero is_published rows with settlement_verdict BLOCK% or REVIEW-VISION-ERROR% on BOTH local + prod all_designs. No prohibited content live. Published verdict distribution (local): null 2918 (pre-gate legacy, not a violation), OK 1492, BLEED_GHOST_OK 1349 (quality not legal). Hard rule "no BLOCK published" holds. Read-only, no change. 2nd consecutive clean tick → loosening cadence to 3600s.
+
+- T9-END · 2026-06-03 13:32 · LOOP STOPPED by Steve ("done?"). No further ticks. Pending wakeup will read the STOP banner + ~/.yolo-dtd-stop and halt without rescheduling. Final state logged.
+
+- T10-RESTART · 2026-06-03 ~14:30 · LOOP RE-RESUMED by Steve ("run on yolo loop with dtd to decide"). Ran DTD panel (Claude+Codex BOTH voted **D**, 2/2; qwen [ERR] — Mac1 Ollama down across all concurrent runs). **Standing per-tick policy = D (fixed rotation):** (1) fast health/leak/settlement sweep, then (2) bulk = deep server.js/lib bug-hunt → reversible local fixes + commits, then (3) graft any deploy/prod-write finding to the approval queue (no execution). Then executed tick T10 under D: health sweep CLEAN (prod+local /health,/designs,/api/categories=200, server.js node -c OK); code audit CLEAN — dogs-curator.html complies w/ created-date+time chip rule (L163 🕓 fmtDate + ISO title) and fmtDate is null/NaN-safe (L97-98); analyzed the 6 bare JSON.parse(psqlQuery) — psqlQuery is lenient-by-design (lib/db.js:46, no ON_ERROR_STOP) so SQL-error→''→JSON.parse throw, BUT caught by Express as 500 + COALESCE guards empty sets → documented accepted behavior, NOT a defect; fixing = low-confidence churn, declined. No commit (no real defect). Note: a sibling concurrent session is handling a leaked basic-auth credential ('admin:DWSecure2024!') scrub — left alone, not mine. Cadence 1800s.
+
+- T11 · 2026-06-03 ~15:08 · D-tick CLEAN. Health sweep green (/health,/designs,/murals,/api/categories,/sitemap.xml=200). Bug-hunt (varied target): audited all mural-category rows vs the CLAUDE.md "murals never tileable" rule (lib/mural-categories.js) — 0 misclassified; 974 kind=mural_panel + 93 kind=mural, zero seamless_tile/tile/repeat_tile in monterey-mural/cactus-pine-scenic/cactus-11ft-mural/cactus-accent-mural/tree-mural/mural-scenic. assertMuralKind guard holding. No defect, no commit. Monterey mural batch 11/12 done (all rc=0, 0 failures), 12th (37412) finishing — tally next tick. 2nd consecutive clean tick.
+ → Monterey batch COMPLETE 12/12 rc=0, 0 failures (masters in /Volumes/Henry/wallco-ai-archive/mural-masters/), ~$3.30 authorized spend. Print masters only, not published.
+
+- T12 · 2026-06-03 ~15:40 · D-tick CLEAN. Health green (/health,/designs,/api/categories,/api/design/25052=200). Bug-hunt (varied target): storefront sort+density standing rule on live /designs — SATISFIED (density range + --cols + localStorage; rich sort select: Newest/Oldest/Title A→Z+Z→A/Color/Light→Dark/Color Wheel/Most Vivid+Muted/Style/Category/In-Room/Random). Only SKU-sort + Price-sort absent — both arguably not meaningful for wallco (no customer-facing SKUs per no-vendor rule; price uniform per product-type) AND would need a deploy → noted as a possible future C-refinement, NOT a defect. No commit. **3rd consecutive clean tick → loosening cadence to 3600s + scaling back per loop protocol; pinged Steve once.**
+
+- T13–T16 · 2026-06-03 ~16:42–20:46 · hourly heartbeat ticks, all health-green (prod+local /health,/designs=200), no defects, no action.
+
+- T-END · 2026-06-03 ~20:46 · LOOP STOPPED by Steve ("stop the loop"). Stop flag ~/.yolo-dtd-stop set; no Monitor armed (TaskList empty); no ScheduleWakeup rescheduled → loop ends cleanly. Session net: published Dogs Collection live (144 curated keepers + 11 breed chips + images + search), Monterey 12/12 murals built, /api/designs path-leak fix deployed, DTD verdict D set as standing audit policy, 6 audit ticks (T10–T16) all clean. No open defects in queue.
← 2102035 id-collision resolutions 1..14999 (125 live rows: 76 F,F ski
·
back to Wallco Ai
·
yolo loop: resume (T17) — cleared 4 stale approval items, ed 86f46a3 →