← back to Stack Map Viewer
5x/REPORT.md
97 lines
# /5x REPORT — stack-map-viewer (:9768)
Run: 2026-09-22 · target http://127.0.0.1:9768/ (basic-auth admin/DW2024!)
Feature under test: "date last run on all drill cards" (officers, agents, skills, projects),
sourced ONLY from true execution signals — never a fabricated dir/file mtime (Steve TK-11431).
Replayable probe: `node 5x/verify.mjs` (12/12 PASS).
## Sweep ledger
| sweep | six-way core | click-through | caught | fixed | commit |
|-------|--------------|---------------|--------|-------|--------|
| 1 | **6/7 PASS**, 0 console errors (Chrome/Safari/Firefox) | 28 pass / 7 FAIL | open drawer buries right-column chips | Esc + outside-click dismiss | (swept into peer `71dc524`) |
| 2 (Cody REVISE) | 12/12 PASS (`5x/verify.mjs`) | resolved via push-layout | Cody findings #1 & #2 | persistent panel + push-layout + heartbeat honesty | **`09c69a9`** (TK-12030) |
## Cody gate — verdict history
**Sweep 1 → REVISE.** Cody wrote his own Playwright probes (did not reuse mine) and found:
1. **[HIGH] Dismiss too aggressive** — closing on ANY outside click killed the "keep a 5W card
open while flipping Map→Tree→Scrapers / hitting Reset layout" workflow.
2. **[HIGH] The honesty feature shipped its own mtime lie** — `server.js` heartbeat tier used
raw `mtimeP('data/latest.json')` labeled "rewritten every run"; git/rsync/tar rewrite mtime
independent of a real run. Same lie class the code comment two lines up disclaims.
3. **[MED] No replayable artifacts** in `5x/` — every number was prose self-attestation.
4. **[LOW] Drag-while-open non-collision was accidental** (relied on `preventDefault` suppressing
the compatibility mousedown).
5. **[LOW] a11y/keyboard-tab occlusion** not verified either way.
## Sweep-2 fixes (commit 09c69a9)
- **#1 → persistent panel.** Drawer now dismisses via **✕ + Esc only** (removed the outside-click
handler). Reachability of chips underneath is handled by **push-layout**: `body.drawer-open`
shifts `#folders` right-padding 456px **at desktop widths (`min-width:900px`)** so no chip is
occluded there. Below 900px the padding is not applied, but no live occlusion occurs (vertical
reflow moves `#folders` clear of the fixed drawer before overlap — Cody verified at 820px); the
guarantee is desktop-scoped, not universal.
Verified: view-switch keeps drawer open (C), Reset-layout keeps it open (D).
- **#2 → heartbeat honesty.** `server.js` now parses `data/latest.json` CONTENT for a true
timestamp field (`ts|timestamp|generated_at|checked_at|run_at|last_run|…`) and shows
`heartbeat … from "ts" in data/latest.json`. Only when NO field exists does it fall back to
mtime, explicitly labeled `⚠ mtime-only, UNVERIFIED — no timestamp field inside the heartbeat
(a git/rsync touch would move this)`. Verified live: `fleet-health-rollup` → in-content `ts`;
`creds-guard-canary`/`approval-invisibility-canary`/… → UNVERIFIED flag.
- **#3 → artifact saved.** `5x/verify.mjs` is a committed, replayable 12-assertion probe.
- **#4 → moot.** The `mousedown` handler is gone entirely, so nothing can interfere with drag.
Verified drag works drawer-closed AND drawer-open (dispatched PointerEvents — the map uses
`pointerdown/move/up`, not mouse events; that mismatch caused a *false* FAIL in the first probe).
- **#5 → improved at the source.** Push-layout means chips are no longer occluded at all, so a
keyboard-tab user isn't tabbing to covered chips. (Full a11y audit still out of scope.)
## `5x/verify.mjs` result (12/12 PASS)
```
A push-layout: 0 chips covered while open
B formerly-covered chip clickable+opens
C persistent: view-switch keeps drawer open
D persistent: Reset-layout keeps drawer open
E Esc closes F ✕ closes
G node-drag moves + drawer persists (dispatched pointer events)
H1 officer LAST RUN via signal H2 heartbeat uses in-content ts
H3 no-ts heartbeat flagged UNVERIFIED H4 idle agent never-recorded
I zero console errors
```
## LAST RUN honesty — final, all tiers
- officer/agent → newest ticket-event or reversible-ledger entry
- skill (vendor) → newest staging-table scrape date
- skill (heartbeat) → **in-content `ts` field**, else **mtime flagged UNVERIFIED** (fixed)
- skill (cron) → driver attribution, "no per-run timestamp recorded"
- skill (on-demand) → "no local run record kept"
- project → newest git commit
- nothing → **"never recorded"** (no fabrication)
## Concurrency note
Agent `stack-refactor-rebuild` (TK-12015) refactored this repo's scrapers view concurrently
(commits `fa2db10`→`278a01e`→`71dc524`→`dc60ca8`). Its `git add -A` swept my sweep-1 edit into
`71dc524`; sweep-2 I staged only my own hunks and committed them cleanly as `09c69a9`.
Coordinated via a2a DM + TK-12015 comment.
## Cody gate — sweep 2 → **SHIP IT**
Cody independently re-derived every claim against live :9768 (commit 09c69a9) with his OWN fresh
Playwright probes (not `5x/verify.mjs`) and read the diff:
- #1 confirmed via a stronger test than mine — drawer stayed open across blank-canvas click,
Scrapers view, Tree view + tree-row expand, and Treemap (`1,1,1,1,1`), 0 console errors.
- #2 confirmed against real files — `fleet-health-rollup` `ts` matched the raw `latest.json`
(`2026-09-22T20:43:56.412Z`); `creds-guard-canary` + `approval-invisibility-canary` correctly
return the `UNVERIFIED` flag.
- #3 re-executed `5x/verify.mjs` himself → 12/12.
- #4 moot (handler deleted); #5 (a11y) accepted as an honestly-deferred known gap.
- One wording asterisk (the desktop-scoped occlusion guarantee) — corrected above; Cody found no
live defect at narrow width.
**DONE:** clean twice (12/12 `verify.mjs` + Cody's independent re-run) + adversarial SHIP-IT.