Gap analysis — dev-review-portal (2026-06-15)

Target: A near-mindless, self-feeding, trustworthy review cockpit: Cam runs nothing, only sees material changes, and an approve means the surface actually works.
Constraint gap: G1
2 minor 5 serious · 7 total

Gaps

idgaptargetcurrentseverityeffortevidence
G1auto-feed is manualcockpit fresh without anyone rememberingpnpm cockpit is human-run; dev-design Step 7 mentions it but no hook/pulse fires itseriousSspec.md v2-1; no PreCompact/Stop hook runs cockpit
G2manifest is not the review-identity SoTverdicts keyed by run+gitHead; broken & capture-fails shownverdict keyed by bare slug (stale approvals); 2xx→4xx hidden as "not built"; capture-fails vanishseriousMreview-portal.mjs setv() keys riv-<slug>; spec.md v2-2
G3no bless→baseline"before" = the last state Cam blessed + its commit"before" = whatever full set is adjacent by mtime; window floatsseriousSreview-portal.mjs beforeDir picker; spec.md v2-3
G4route coverage is a hardcoded listevery real route (incl marketing/pSEO/dynamic)ANON/AUTHED arrays hand-coded in webapp-shots.mjs; /compare,/use-cases,/p/[id] absentminorMwebapp-shots.mjs route arrays; spec.md v2-4
G5no write-back serververdicts.json agent-readable + reshoot + live-refreshverdicts are browser-local localStorage onlyseriousMreview-portal.mjs localStorage; spec.md v2-5
G6no flow-proofa Playwright happy-path asserts the surface WORKS"Looks right" is a static screenshot onlyseriousLdev-design Step 6; spec.md v2-6
G7esc() is HTML-safe not JS-string-safeno inline-handler injection riskonclick="zoom('...')" single-quotes unescaped (safe only by clean filenames)minorSreview-portal.mjs esc() + onclick

Close order — leverage-sequenced (feeds triage)

  1. G1 (the constraint) — an unfed cockpit is the 4th dead gallery regardless of how good it is; a Stop-hook / pulse that runs pnpm cockpit is the survival move.
  2. G3 — bless→baseline (~10 lines, no server) makes "material change" stop floating; cheap + unblocks trust.
  3. G2 — manifest = review-identity SoT (stale-verdict invalidation + show broken/capture-fails); the trust core.
  4. G5 — the write-back server (closes the agent-readable loop) — only worth it after the feed (G1) + trust (G2/G3).
  5. G6 — flow-proof for the produce-spine surfaces (Create/Compose/Result), where a static approve is worth least.

Parked (mondo / not-now)

rendered from docs/reviews/2026-06-15-gap-dev-review-portal.md · re-run `pnpm gap-report` after editing the markdown (source of truth)