← back to Doing Viewer
5x: REPORT.md — fold in contrarian FIX FIRST round (false-green + money-endpoint verified, framing corrected)
961d840fbcd9c78cf831e746d85fdaf0d4b06749 · 2026-09-14 00:42:05 -0700 · Steve Abrams
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Yk9ehSqj2L4frMztZNM2j
Files touched
Diff
commit 961d840fbcd9c78cf831e746d85fdaf0d4b06749
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Mon Sep 14 00:42:05 2026 -0700
5x: REPORT.md — fold in contrarian FIX FIRST round (false-green + money-endpoint verified, framing corrected)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Yk9ehSqj2L4frMztZNM2j
---
5x/REPORT.md | 54 +++++++++++++++++++++++++++++++++++++-----------------
1 file changed, 37 insertions(+), 17 deletions(-)
diff --git a/5x/REPORT.md b/5x/REPORT.md
index 1f7aba5..000df06 100644
--- a/5x/REPORT.md
+++ b/5x/REPORT.md
@@ -2,28 +2,48 @@
Date: 2026-09-14 · target: local pm2 `doing-viewer` (Basic auth admin) · TK-11446 follow-on
## Sweep ledger
-| sweep | passed/total | caught | fixed | commit |
-|-------|-------------|--------|-------|--------|
-| 1 | 3/4 | 1 (favicon 404 JS error) | 1 | ea854b7 |
-| 2 | 4/4 | 0 | 0 | — |
-| 3 | 4/4 | 0 | 0 | — |
+| sweep | passed | caught | fixed | commit |
+|-------|--------|--------|-------|--------|
+| 1 | 3/4 runnable | 1 (favicon 404 JS error) | 1 | ea854b7 |
+| 2 | 4/4 runnable | 0 | 0 | — |
+| 3 | 4/4 runnable | 0 | 0 | — |
+| 4 (post-contrarian) | 4/4 runnable | 2 (Cody: false-green + untested money endpoint) | 2 | 04dd24f |
-Stop: **clean twice** (sweeps 2 & 3). Cap not reached.
+"Runnable" = M1/M2/M3/B4-Chrome. B5 Safari / B6 Firefox: see cross-browser note — this is **4 of 6 lanes**, not a full 6-lane green.
## Final six-way state
- M1 HTTP contract — PASS (200 text/html)
-- M2 headless render — PASS (~415KB, no blank)
-- M3 automation E2E — PASS (#list present, #unlock click OK, **0 JS errors**)
-- B4 Google Chrome — PASS
-- B5 Safari / B6 Firefox — SKIP (webkit/firefox engines not installed on this box; environment limit, not a build defect)
+- M2 headless render — PASS (~393KB, no blank)
+- M3 automation E2E — PASS (#list present, #unlock click OK, **0 JS errors** after favicon fix)
+- B4 Google Chrome — PASS (also directly re-proven via Playwright chromium: #list=1, 0 JS errors)
+- B5 Safari / B6 Firefox — see cross-browser note (Playwright webkit/firefox engine builds pinned to the runner's version were downloading at report time). Not a build defect.
## What was fixed
-- **favicon 404 → console error on every load.** Browser implicitly GETs /favicon.ico; server.js had no route → default 404 → Chrome logs "Failed to load resource... 404". The /3x runner's `favicon`-text filter missed it (Chrome's console text carries no URL). Fix: `/favicon.ico` → 204 No Content route in server.js before the default 404. Verified: /favicon.ico=204, /=200; direct 3× real-Chrome repro went 3/3-error → 0/3-error.
+### Sweep 1 — favicon 404 (ea854b7)
+Every page load fired a console error: the browser's implicit `/favicon.ico` GET hit server.js's default 404. The /3x runner's `favicon`-text filter missed it (Chrome's console text for a failed subresource is generic — "Failed to load resource… 404", no URL). Fix: `/favicon.ico → 204 No Content` route before the default 404. Verified /favicon.ico=204, /=200; direct 3× real-Chrome repro went 3/3-error → 0/3-error.
-## Still open
-- Cross-browser Safari/Firefox not exercised here (engines not installed). If needed, run /allbrowsers which installs the missing engines. All runnable checks are clean.
+### Sweep 4 — contrarian FIX FIRST round (04dd24f)
+Cody the Contrarian gated the sweep-3 "clean" and caught two real holes:
-## Reversibility
-- Both changes reversible-local, internal ops viewer, no externality:
- - ea854b7 (favicon 204) — `git revert ea854b7`
- - 3fad9e6 (TK-11446 exit-code fix, prior) — `git revert 3fad9e6`
+1. **False-green in the prior TK-11446 exit-code fix (3fad9e6).** That commit made a transient source-:9790-down exit 0 and cited "cron-fire-canary's artifact-freshness catches a long outage" as its safety net. But the job is manifest-flagged `artifact_weak: true` — its `publish.log` is BOTH `StandardOutPath` and `StandardErrorPath`, and every branch (including the source-down WARN line) writes a console line every 180s tick, so that artifact **never goes stale**. The canary therefore trusts the launchd EXIT CODE for this job, and a blanket exit-0 made a *sustained* source outage invisible (TK-11431 false-green class).
+ **Fix:** track continuous source-down duration across launchd runs via `data/source-down-since.json`. Exit 0 only inside a 10-min self-heal grace (tolerates a pm2 restart); exit 1 once the outage is sustained, so the canary genuinely warns. Success/recovery clears the state. A real publish-path failure (source up, rsync/JSON fails) still exits 1.
+ Verified 5 ways: success→0+clear · first-down→0+record · sustained(20m)→1 · recovery→0+clear · source-up-but-garbage→1.
+
+2. **M3 never exercised the app's real action, and the sweep didn't disclose it.** `#unlock` is an empty `<span>` on an owner (localhost) device — clicking it is a no-op. The real control is the per-ticket action button → `POST /api/action` → `execFile bash run-ticket.sh` which **launches a fresh iTerm2 + Claude session on the ticket**. The happy path is deliberately NOT fired live (real side effect). Instead the guard/error paths were verified live, all rejecting *before* the `execFile` spawn:
+ - bad JSON → **400** ✓
+ - unknown / bad-shape id → **404** ✓
+ - valid current-doing id + bad verb → **400** ✓ (rejected at the verb check, before spawn)
+ Confirmed no session spawned (board-launch event count unchanged at 1464 across the tests).
+
+## Cross-browser note (Cody hole 3 — framing)
+Sweeps 1–4 are green on **4 of 6 lanes** (HTTP + headless render + Playwright-Chromium E2E + Chrome). Safari/Firefox Playwright engines were not installed; matching-version builds were downloading at report time. The earlier "clean twice" framing overstated confidence — corrected here. Chromium (the primary engine) is directly re-proven clean.
+
+## Reversibility (all reversible-local, internal ops viewer, no externality)
+- `ea854b7` favicon 204 route → `git revert ea854b7`
+- `04dd24f` honest exit code (supersedes 3fad9e6's blanket exit-0) → `git revert 04dd24f`
+- `3fad9e6` original TK-11446 source-down classification → `git revert 3fad9e6`
+All ledgered to `~/.claude/yolo-queue/executed-reversible/ledger.jsonl`.
+
+## Contrarian verdict trail
+- Sweep 3 self-assessed "clean twice" → Cody: **FIX FIRST** (3 holes; 2 real defects + 1 framing).
+- Sweep 4 addressed all 3: false-green fixed (04dd24f), money-endpoint guard verified, framing corrected.
← 04dd24f 5x/contrarian FIX FIRST: make exit code honest — transient s
·
back to Doing Viewer
·
5x: record honest cross-browser outcome — chromium+Chrome+HT ce5ba32 →