# STATUS-shot.md — Builder status, phase `shot` SSOT: /srv/cc-ci/cc-ci-plan/plan-phase-shot-screenshots.md ## DONE Phase `shot` complete @2026-06-11T07:20Z: M1 PASS (ae10b55) + M2 PASS (2b54adb), finding A1 fixed+CLOSED (5fc8699), no VETO. All 19 enrolled recipes show Adversary-verified real screenshots (18 PNGs Read by both loops, credential-free) or agreed N/A (bluesky-pds upstream-broken; mumble best-available loader frame, DEFERRED upstream question). Fixes on main through 196156e. ## Gate history Gate: M1 PASS (REVIEW-shot.md ae10b55). Finding A1 CLOSED (5fc8699). Gate: M2 PASS (REVIEW-shot.md 2b54adb). ## M2 claim — verification map (WHAT/HOW/EXPECTED/WHERE) WHAT: every enrolled recipe (19) is OK or Adversary-agreed N/A; fixes merged to main; fresh proof runs incl. 2 via drone !testme; verdicts/levels/durations unaffected; screenshot path stays best-effort end-to-end (R7); no PNG shows credentials. Fix commits on main: ce50f64 (harness settle+blank-retry), 7ad7d1f (A1 keep-larger), b98a471 (plausible SECRET_KEY_BASE 62→68ch — the real NULL root cause; no hook needed), 80e5713+3c33129 (mattermost hook → /login + click "View in Browser"; public settle()). Unit: 207 pass (`cc-ci-run -m pytest tests/unit -q`), lint PASS (`nix develop .#lint --command scripts/lint.sh`). HOW to verify per recipe — artifacts on cc-ci `/var/lib/cc-ci-runs//{results.json, screenshot.png,summary.html}`; scp the PNG and Read it. Full table with run dirs, levels (each = its baseline), exact PNG bytes, and what each image shows: BACKLOG-shot.md "P4 — Proof runs". Fixed-class proofs: immich=370 (drone !testme immich#2, posted 05:56:32Z), plausible=371 (drone !testme plausible#3), keycloak, cryptpad, lasuite-meet, lasuite-docs, lasuite-drive, n8n, mattermost-lts (shot-proof3-* = hook v2 → real login form), mumble (best-available loader frame — see N/A-variant below). Healthy-class (ghost 444183B, hedgedoc 131967B, discourse 66121B, custom-html 35707B, custom-html-tiny 12950B, mailu 33800B, matrix-synapse 33296B, uptime-kuma 30858B): cite the P1-matrix artifacts (m2r-*/m2p-* dirs per P1 table) — plan §3 P4 allows existing artifact + visual check for class-3; all Read by Builder, all credential-free. EXPECTED on re-run of any fixed recipe: results.json `screenshot: "screenshot.png"`, PNG ≥ ~26KB real app view (mumble excepted), level equal to that recipe's baseline (immich 4, plausible 4, keycloak 4, cryptpad 4, lasuite-* 4, n8n 4, mattermost-lts 2, mumble 4). R7 / budget: wait components 45(nav, only-on-failure)+10(settle)+0.5+4(blank retry)+0.5 = 60s, unit-tested (test_wait_budget_within_step_cap); capture() still swallows everything → None → placeholder; double-wrapped at the call site (run_recipe_ci.py:1024-1037, unchanged). Durations (drone, same recipe+PR pre/post): immich 199s→198s, plausible 209s→166s. Drone sqlite: `select build_id, build_finished-build_started from builds where build_id in (356,357,370,371)`. Dashboard/card: `https://ci.commoninternet.net/` grid references runs/370+371 screenshot.png (both HTTP 200); summary.html embeds screenshot.png; /badge/immich.svg 200. N/A + N/A-variant (need Adversary agreement at this gate): - bluesky-pds: unchanged upstream MODULE_NOT_FOUND breakage (DEFERRED.md, evidence ab-bluesky-pds-oldmain 2026-06-11, install=fail level=0) → capture correctly skipped, placeholder correct. - mumble: web client (rankenstein/mumble-web:0.5) never paints UI for an anonymous browser — ≥90s observation, no console errors, no failed requests, connect-dialog DOM absent, no autoconnect overrides (probes: /tmp/mumble-probe{3,4}.out, /tmp/mumble-orch{4,5}.log on cc-ci). The 7980B loader frame IS the genuine anonymous web view; voice covered by protocol tests. DEFERRED.md entry filed (upstream question). Claimed as documented best-available, not a defect. ## Blocked (nothing)