# Working timer evidence — partial matrix coverage

For [#22947](https://git.cafe/pingdotgg/t3code/pulls/22947). This index is a partial evidence handoff, **not a full-matrix verification certificate**. Four paired web scripts (eight recordings) plus one supplemental static pair. No forge writes or checkout edits.

[Source-derived matrix](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5b015d25764b5441/pr-22947-proof-matrix-pass-1.md). Its 34 behaviors × applicable 15 render paths × four viewport/theme cells include Electron and native clients. No behavioral row is certified across that entire matrix. B01/B04/B07 have recorded web subsets in all four cells. B02 and follow-up/interrupt/Resume are visible in only three cells; after narrow-light remains scrolled above them. Other coverage is partial or unverified below.

## Seeding and script

Both detached checkouts used worktree-local vp install and normal vp run dev. The dev runner seeded a read-only snapshot of the same live source: three stopped threads, 134 events, 1.7 MB compacted state per worktree. New fixture threads used identical explicit IDs and prompts via the real typed command transport; Codex gpt-6.1-sol ran real sleep commands. Agent continuations were real t3_thread_send(mode=queue) calls by the running agent to itself. No projection-only UI fixture, DOM timer rewrite, or clock freeze was used. The UI labels this self-sent continuation Sent by another agent; that visible label does not prove a distinct sender. Self-sending is not the matrix’s separate unrelated-coordinator or child fixture.

Script: [scenario.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/24b6f79612a26196/scenario.js); follow-up/interrupt/held-user-queue Resume: [phase2.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e1c5279814d35767/phase2.js). Each pair starts from an empty fixture thread. At +7s send a user steer; at +10s queue a user message and promote it to native steer. The agent sleeps 20s, queues its own sleep-12s continuation, and replies FIRST. After that continuation completes, send a fresh sleep-30s follow-up; queue a sleep-15s user request at +5s, interrupt at +8s with holdQueue, and explicitly Resume at +12s. Natural provider response times vary. These sleeps are visible fixture work, not test synchronization.

All videos show the whole viewport. They are silent recordings narrated by the timestamped script tables immediately above each pair. No still is offered as proof of interaction or elapsed-time behavior.

## Rendering environment

fs-14 Linux x86_64 (hostname fs-14; stale ~/.agents/MACHINE says freestyle). Collaborative server browser Chrome 154.0.0.0, desktop Linux UA, DPR 2; 1440×900 → 2880×1800 encoded pixels, 390×844 → 780×1688. Body computed font: -apple-system, BlinkMacSystemFont, Segoe UI, system-ui, sans-serif; installed Liberation font family. Exact environment is also in every capture log. Real UTC clock throughout; no clock freeze. Local single-origin Vite proxy: before web/server 6843/14883, after 7222/15262. Native mobile, Electron, relay and tunnel were not verified.

## desktop-light

1440×900 light — real clock, Chrome 154, DPR 2, fonts as above. Both revisions use the same script. The per-side UTC and script elapsed times below are measured, not nominal. Video-relative offsets are approximate and may drift 1–2 seconds from script elapsed time.

| Script action | Before UTC (video offset approximately) | After UTC (video offset approximately) |
|---|---|---|
| fresh user start | 2026-10-21T19:41:37.447Z (+0.04s) | 2026-10-21T19:41:38.465Z (+0.04s) |
| steer sent | 2026-10-21T19:41:44.491Z (+7.08s) | 2026-10-21T19:41:45.517Z (+7.09s) |
| queue promoted | 2026-10-21T19:41:47.729Z (+10.32s) | 2026-10-21T19:41:48.683Z (+10.26s) |
| fresh follow-up | 2026-10-21T19:42:58.688Z (+81.28s) | 2026-10-21T19:42:58.770Z (+80.35s) |
| user queued for resume | 2026-10-21T19:43:03.709Z (+86.30s) | 2026-10-21T19:43:03.793Z (+85.37s) |
| interrupted with held queue | 2026-10-21T19:43:06.760Z (+89.35s) | 2026-10-21T19:43:06.879Z (+88.46s) |
| explicit resume | 2026-10-21T19:43:10.814Z (+93.41s) | 2026-10-21T19:43:10.926Z (+92.50s) |
| pre reload while fresh resumed run working | 2026-10-21T19:43:29.846Z (+112.44s) | 2026-10-21T19:43:30.088Z (+111.67s) |

Agent continuation boundary (persisted projection timestamps; inspect the video around these offsets):

| Anchor | Before | After |
|---|---|---|
| Original run startedAt | 2026-10-21T19:41:37.545Z | 2026-10-21T19:41:38.562Z |
| Agent continuation startedAt | 2026-10-21T19:42:07.804Z | 2026-10-21T19:42:13.175Z |
| Agent continuation workStartedAt | absent | 2026-10-21T19:41:38.562Z |

Before the automatically drained agent continuation uses its own start. After it retains the original run start. Native steers and promotion stay in the original run. Persisted logs show fresh anchors for follow-up and explicit held-user-queue Resume (after narrow-light does not show this phase on screen); this is not proof of held-agent queue or restartContinuationOfRunId branches.

Hard reload occurred during the fresh resumed request. This is supplemental B27 evidence in this cell only; no separate transport outage was exercised.

| Before recording | After recording |
|---|---|
| [before-desktop-light.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/beb5d4060be3bfb5/before-desktop-light.mp4)<br>[680152e27b](https://git.cafe/pingdotgg/t3code/commit/680152e27b2a961686389ca69a1557cbb2c55f08) | [after-desktop-light.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b899522725c688da/after-desktop-light.mp4)<br>[995209445b](https://git.cafe/pingdotgg/t3code/commit/995209445bb3dca1a13649f5d509a6a46f49d6b7) |

[before-desktop-light.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/256f44afacd53b65/before-desktop-light.json) · [after-desktop-light.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8abfff950315fa9b/after-desktop-light.json)

## desktop-dark

1440×900 dark — real clock, Chrome 154, DPR 2, fonts as above. Both revisions use the same script. The per-side UTC and script elapsed times below are measured, not nominal. Video-relative offsets are approximate and may drift 1–2 seconds from script elapsed time.

| Script action | Before UTC (video offset approximately) | After UTC (video offset approximately) |
|---|---|---|
| fresh user start | 2026-10-21T19:44:12.927Z (+0.04s) | 2026-10-21T19:44:14.104Z (+0.04s) |
| steer sent | 2026-10-21T19:44:19.966Z (+7.07s) | 2026-10-21T19:44:21.139Z (+7.07s) |
| queue promoted | 2026-10-21T19:44:23.249Z (+10.36s) | 2026-10-21T19:44:24.387Z (+10.32s) |
| fresh follow-up | 2026-10-21T19:45:20.458Z (+67.57s) | 2026-10-21T19:45:20.735Z (+66.67s) |
| user queued for resume | 2026-10-21T19:45:25.486Z (+72.59s) | 2026-10-21T19:45:25.775Z (+71.71s) |
| interrupted with held queue | 2026-10-21T19:45:28.531Z (+75.64s) | 2026-10-21T19:45:28.867Z (+74.80s) |
| explicit resume | 2026-10-21T19:45:32.519Z (+79.63s) | 2026-10-21T19:45:32.862Z (+78.79s) |

Agent continuation boundary (persisted projection timestamps; inspect the video around these offsets):

| Anchor | Before | After |
|---|---|---|
| Original run startedAt | 2026-10-21T19:44:13.006Z | 2026-10-21T19:44:14.240Z |
| Agent continuation startedAt | 2026-10-21T19:44:49.802Z | 2026-10-21T19:44:51.418Z |
| Agent continuation workStartedAt | absent | 2026-10-21T19:44:14.240Z |

Before the automatically drained agent continuation uses its own start. After it retains the original run start. Native steers and promotion stay in the original run. Persisted logs show fresh anchors for follow-up and explicit held-user-queue Resume (after narrow-light does not show this phase on screen); this is not proof of held-agent queue or restartContinuationOfRunId branches.

| Before recording | After recording |
|---|---|
| [before-desktop-dark.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9c86891abce61120/before-desktop-dark.mp4)<br>[680152e27b](https://git.cafe/pingdotgg/t3code/commit/680152e27b2a961686389ca69a1557cbb2c55f08) | [after-desktop-dark.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/46a9241f21e554bf/after-desktop-dark.mp4)<br>[995209445b](https://git.cafe/pingdotgg/t3code/commit/995209445bb3dca1a13649f5d509a6a46f49d6b7) |

[before-desktop-dark.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/343db46fff5cd165/before-desktop-dark.json) · [after-desktop-dark.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6b5d4f0509bf3b03/after-desktop-dark.json)

## narrow-light

390×844 light — real clock, Chrome 154, DPR 2, fonts as above. Both revisions use the same script. The per-side UTC and script elapsed times below are measured, not nominal. Video-relative offsets are approximate and may drift 1–2 seconds from script elapsed time.

| Script action | Before UTC (video offset approximately) | After UTC (video offset approximately) |
|---|---|---|
| fresh user start | 2026-10-21T19:48:29.825Z (+0.03s) | 2026-10-21T19:48:33.173Z (+0.05s) |
| steer sent | 2026-10-21T19:48:36.866Z (+7.07s) | 2026-10-21T19:48:40.236Z (+7.12s) |
| queue promoted | 2026-10-21T19:48:40.052Z (+10.26s) | 2026-10-21T19:48:43.464Z (+10.35s) |
| sidebar closed after first 30 seconds | 2026-10-21T19:49:07.382Z (+37.59s) | 2026-10-21T19:49:08.483Z (+35.36s) |
| pre reload inherited continuation | 2026-10-21T19:49:20.175Z (+50.38s) | 2026-10-21T19:49:20.592Z (+47.47s) |
| fresh follow-up | 2026-10-21T19:49:37.868Z (+68.08s) | 2026-10-21T19:49:37.931Z (+64.81s) |
| user queued for resume | 2026-10-21T19:49:42.890Z (+73.10s) | 2026-10-21T19:49:42.950Z (+69.83s) |
| interrupted with held queue | 2026-10-21T19:49:45.943Z (+76.15s) | 2026-10-21T19:49:45.995Z (+72.88s) |
| explicit resume | 2026-10-21T19:49:49.933Z (+80.14s) | 2026-10-21T19:49:50.001Z (+76.88s) |

Agent continuation boundary (persisted projection timestamps; inspect the video around these offsets):

| Anchor | Before | After |
|---|---|---|
| Original run startedAt | 2026-10-21T19:48:29.910Z | 2026-10-21T19:48:33.304Z |
| Agent continuation startedAt | 2026-10-21T19:49:01.772Z | 2026-10-21T19:49:03.452Z |
| Agent continuation workStartedAt | absent | 2026-10-21T19:48:33.304Z |

Before the automatically drained agent continuation uses its own start. After it retains the original run start. Native steers and promotion stay in the original run. Persisted logs show fresh anchors for follow-up and explicit held-user-queue Resume (after narrow-light does not show this phase on screen); this is not proof of held-agent queue or restartContinuationOfRunId branches.

The sidebar drawer was initially open, showing the first work interval. It closed near +36s. A hard reload was attempted during the continuation, but the continuation finished before the restored view showed subsequent live ticks; B26 remains partial. After reload, the after side stays scrolled at the top through the end: its follow-up, interrupt, held queue and Resume are not visible. The action table records dispatched commands and does not certify those actions visually in this cell. B02/follow-up and Resume visual coverage exclude after narrow-light.

| Before recording | After recording |
|---|---|
| [before-narrow-light.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1455c1dc21c68f7a/before-narrow-light.mp4)<br>[680152e27b](https://git.cafe/pingdotgg/t3code/commit/680152e27b2a961686389ca69a1557cbb2c55f08) | [after-narrow-light.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/85348981b94df23c/after-narrow-light.mp4)<br>[995209445b](https://git.cafe/pingdotgg/t3code/commit/995209445bb3dca1a13649f5d509a6a46f49d6b7) |

[before-narrow-light.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/799ac2d6db4398c5/before-narrow-light.json) · [after-narrow-light.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/57c5d221ab9d8ce1/after-narrow-light.json)

## narrow-dark

390×844 dark — real clock, Chrome 154, DPR 2, fonts as above. Both revisions use the same script. The per-side UTC and script elapsed times below are measured, not nominal. Video-relative offsets are approximate and may drift 1–2 seconds from script elapsed time.

| Script action | Before UTC (video offset approximately) | After UTC (video offset approximately) |
|---|---|---|
| fresh user start | 2026-10-21T19:46:23.462Z (+0.04s) | 2026-10-21T19:46:25.049Z (+0.06s) |
| steer sent | 2026-10-21T19:46:30.573Z (+7.15s) | 2026-10-21T19:46:32.124Z (+7.13s) |
| queue promoted | 2026-10-21T19:46:33.717Z (+10.29s) | 2026-10-21T19:46:35.321Z (+10.33s) |
| fresh follow-up | 2026-10-21T19:47:23.366Z (+59.94s) | 2026-10-21T19:47:23.459Z (+58.47s) |
| user queued for resume | 2026-10-21T19:47:28.399Z (+64.98s) | 2026-10-21T19:47:28.496Z (+63.51s) |
| interrupted with held queue | 2026-10-21T19:47:31.666Z (+68.24s) | 2026-10-21T19:47:31.661Z (+66.67s) |
| explicit resume | 2026-10-21T19:47:35.446Z (+72.02s) | 2026-10-21T19:47:35.575Z (+70.58s) |

Agent continuation boundary (persisted projection timestamps; inspect the video around these offsets):

| Anchor | Before | After |
|---|---|---|
| Original run startedAt | 2026-10-21T19:46:23.524Z | 2026-10-21T19:46:25.136Z |
| Agent continuation startedAt | 2026-10-21T19:46:56.835Z | 2026-10-21T19:46:57.117Z |
| Agent continuation workStartedAt | absent | 2026-10-21T19:46:25.136Z |

Before the automatically drained agent continuation uses its own start. After it retains the original run start. Native steers and promotion stay in the original run. Persisted logs show fresh anchors for follow-up and explicit held-user-queue Resume (after narrow-light does not show this phase on screen); this is not proof of held-agent queue or restartContinuationOfRunId branches.

The provider-update notice was dismissed during capture. The drawer opened near the end, when the resumed run was completing; this does not establish inherited narrow-sidebar parity.

| Before recording | After recording |
|---|---|
| [before-narrow-dark.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e03c203a030f4155/before-narrow-dark.mp4)<br>[680152e27b](https://git.cafe/pingdotgg/t3code/commit/680152e27b2a961686389ca69a1557cbb2c55f08) | [after-narrow-dark.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4f756e58079120cc/after-narrow-dark.mp4)<br>[995209445b](https://git.cafe/pingdotgg/t3code/commit/995209445bb3dca1a13649f5d509a6a46f49d6b7) |

[before-narrow-dark.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/221f897269bd74bb/before-narrow-dark.json) · [after-narrow-dark.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a5b40cf2265a905b/after-narrow-dark.json)

## static-control

Supplemental static empty-thread control, 1440×900 light. Create a new empty thread titled Static timer control, select Codex gpt-6.1-sol/Low/Full access, collapse main sidebar and thread-details panel, keep terminal/right panel closed, dismiss notices, and wait for text/font readiness. Capture an idle recording and decode its final available static frame; variable-frame-rate capture can encode a static scene much shorter than its wall-clock capture window. The visible surface has no active working timer. This checks static presentation only and substitutes for no B/R interaction row.

Environment: same Chrome/DPR/fonts/real UTC clock as above. Wall-clock recording requests: before 19:51:01.695Z–approximately 19:51:15Z; after 19:51:02.678Z–approximately 19:51:15Z. Encoded durations differ: before 0.55s (two frames), after 12.721367s. The wall-clock window is not the encoded duration. Audit decoded the available source frames and reproduced both published PNGs exactly. No clock rewriting; no visible clock is present. Source recordings retained locally as static-before.mp4 and static-after.mp4.

| Before | After |
|---|---|
| ![static-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4a6ac9875e8e23eb/static-before.png)<br>[680152e27b](https://git.cafe/pingdotgg/t3code/commit/680152e27b2a961686389ca69a1557cbb2c55f08) | ![static-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/25e3a971033efe5d/static-after.png)<br>[995209445b](https://git.cafe/pingdotgg/t3code/commit/995209445bb3dca1a13649f5d509a6a46f49d6b7) |

Two full-frame RGB diff images: threshold 0, absolute channel delta amplified ×8; threshold 8/255, binary per-channel mask. No alignment/cropping/masking. PNGs are decoded video frames, so codec/caret differences count. [static-diff-metrics.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c4d58703e25e2170/static-diff-metrics.json)

![static-diff-zero-amplified-x8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bb5a4baf00d43711/static-diff-zero-amplified-x8.png)

![static-diff-threshold-8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/906855064e7a9823/static-diff-threshold-8.png)

Measured: 1,856/5,184,000 pixels differ at threshold 0; 203 pixels exceed 8/255; maximum channel delta 57; mean absolute channel delta 0.00140567/255. This is a measured delta, not a claim of pixel identity.

## Matrix coverage and unverified rows

| Matrix rows | Recorded coverage | Unverified remainder / reason |
|---|---|---|
| B01, B04, B07 | Web command/renderer subsets, four viewport/theme cells | Electron/native and other applicable render states not executed |
| B02 | Visible web follow-up in desktop light/dark and narrow dark | After narrow-light follow-up/interrupt/Resume offscreen; dispatch/projection logs alone are insufficient |
| B10 | Automatic self-sent nonchild MCP continuation, all four cells | Distinct unrelated coordinator not exercised; do not claim full B10 |
| B25 / R07 | Completed/Continued and interrupted history visible | Expand/collapse checks not scripted; no native pass |
| B26 | Reload attempted in narrow light while inherited work ran | No two post-reload live ticks; other cells/modes absent |
| B27 | Desktop light hard reload during fresh resumed request | Separate disconnect and other cells/modes absent |
| R01 | Web live chat timer in four cells | Electron and fallback/suppression/setup states not executed |
| R03 | Desktop sidebar; limited narrow drawer segments | Inherited selected/unselected/unloaded parity across all four cells incomplete |
| B03, B05–B06, B08–B09, B11–B24, B28–B34 | Not verified to matrix recipe | Provider switch/fallback/race, distinct coordinator/child, held-agent controls, wake/completion exemptions, chained ordering, historical fixture, failure and resume-marker takes not captured |
| R02, R04–R06, R08–R15 | Not verified to matrix recipe | Fallback/wait/setup/compaction/native/format-boundary takes absent |

Device query returned exactly: Agent device access is turned off for this environment. No native session was started. No Electron pass was performed. Only Codex native steering was exercised; Claude/Cursor/Grok/OpenCode/Antigravity adapter behavior remains unverified. Local single-origin only; no remote/relay/tunnel proof. No rows are silently marked not-applicable.

## What else changed

The PR diff is only Orchestrator.ts (helper, caller data/delivery classification, explanatory comment) and runtimeLayer.test.ts (regressions): 224 insertions, 12 deletions. No UI styles, timer cadence, fonts, contracts or adapter code changed. Captures naturally differ in UTC times, provider wording/duration, historical sidebar rows, notification visibility, pointer/caret state and checkpoint cards. The before client sometimes shows a two-file orchestration-v2 checkpoint card (+12 −224), the exact reverse of this PR diffstat. This suggests checkpoint baseline contamination between revision baselines; the precise cause was not established, and copied history alone is not established as its cause. Both checkout git status outputs were clean. Do not use that card as implementation-diff evidence. A stale Queued: Resume evidence… chip appears briefly after hard reload in both revisions (about two seconds); it is not specific to this PR. Exploratory recordings are excluded from this index. The earlier raw-WebSocket user-message control is also excluded: its provenance was user and cannot prove an agent continuation.

## Rebuild a static capture

Use a fresh collaborative browser tab and authenticate it against each isolated dev server. Authentication does not automatically transfer to an audit child’s default profile: pass 2 reached /pair. Generate a fresh pairing URL with node apps/server/src/bin.ts pair --base-dir /home/ubuntu/wt/pr-22947-before/.t3 (and the after path), keeping tokens private; this writes only authorized disposable .t3 state, not source files or live userdata. Navigate to the complete URL once, wait until pairing finishes, then keep using that tab. Before: http://localhost:6843/65c92e56-92cd-426f-87c5-a02c15e0a36e/evidence-22947-static ; after: http://localhost:7222/cb6f09f1-5aad-408c-ac87-fa519de22491/evidence-22947-static . These are local fixture URLs, not pairing credentials. Set 1440×900, light; ensure both side panels are collapsed and notices dismissed. After collapsing both panels, leave focus and hover on Toggle main sidebar; neither published static frame has a composer caret. Keep the same focus and pointer state or report them as delta. Request ≥3s wall-clock recording, inspect its actual encoded duration/frame count, decode an available late frame with ffmpeg, compare full RGB pixels to static-after.png, and report the actual delta. Both isolated servers were stopped after proof audit; restart normal worktree-local vp run dev before attempting a rebuild.

## Proof audit and teardown

[Pass 2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c8f66dad031f11e7/pr-22947-proof-audit-pass-2.md) and [one re-audit](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9b7d41eb0e3cda86/pr-22947-proof-audit-pass-2-reaudit.md): **INSUFFICIENT B01–B34, R01–R15**, because full matrix coverage remains absent. Re-audit verified the narration corrections and reproduced static-after live: 2,088/5,184,000 differing pixels; 169 above 8/255; maximum delta 37; mean delta 0.00135/255, confined to codec ringing around the left sidebar toggle. The prior audit reproduced both source-recording stills and both diff images exactly. All 23 linked artifacts remained byte-identical.

After re-audit, only editorial fixes were made: clarify the visible Sent by another agent label for the self-send, sort action tables chronologically, specify pairing completion and static focus/hover, and add this audit/teardown section. These final editorial changes were not separately re-audited. No capture or claim of row coverage was added.

Stopped retained vp spawn PIDs 184771/184957 and confirmed listener PIDs 185449/185436/185530/185510 exited. ss reports no listener on 6843, 14883, 7222, 15262. Both checkout git statuses remain clean. Disk: 6.9 GB initially, 4.9 GB free at teardown. Recordings/artifacts retained outside checkouts in /tmp/pr-22947-evidence; no forge writes.

Capture: Codex gpt-6.1-sol; proof audit: Claude Opus 5.5
