# Web evidence — Claude terminal-pane recovery

Integrated runtime: [1a464140dc](https://git.cafe/pingdotgg/t3code/commit/1a464140dcf39b0507fbdcbe68c2b767b1d94aec), based on [26c3625f48](https://git.cafe/pingdotgg/t3code/commit/26c3625f48); original before: [3b95e7831b](https://git.cafe/pingdotgg/t3code/commit/3b95e7831b11b17627dff16843bc087bfca397ec). Lead captured the real integrated web client. This agent inspected/processed supplied evidence only, with no checkout edits, server/browser launches, forge writes, push or merge. A reproducible seed script was being added separately; no claim that those later fixture additions were loaded for the original runtime pass.

| Row | Status | Evidence and limits |
|---|---|---|
| V1 | Web observed | Before Running; after focused blast-radius frame → query.close → persisted provider_error / claude_mod_ui_unsupported → actionable failed turn. Full recordings and sanitized transcript below. |
| V2 | Web observed | Full 1280×800 before/after stills show plugin name and both remedies. Desktop shares the renderer, but no separate Electron execution is claimed. |
| V3 | Outside this handoff / pending native agent | No native-client capture inspected by this agent. A mobile-width browser is not native proof. |
| V4 | Unverified passive-frame runtime | Two real fixture-mod-loaded benign runs completed, but both emitted zero ui_panes; no passive frame exercised. Protocol tests remain separate. |
| V5 | Delayed same-session recovery observed; immediate race not observed | New query.open resumes the same aliased native session with same model, effort and permission mode; follow-up Bash tool emits follow-up-ok and result succeeds. Follow-up query opens 16.229 s after close; deterministic test, not this recording, covers the immediate race. |
| PID cleanup | Repeated focus observed | Previously retained Claude PID 595225 was observed with disposable cwd; repeated focus at 03:12:56.675Z and close at 03:12:56.678Z; supplied snapshot finds PID absent at 03:13:20.834955Z. This establishes absence by that snapshot, not exact exit latency. |

## Steps and timestamp guide

Before recording (40.8808 s): begins with the submitted disposable rm command already working, and remains Running throughout. It does not contain the initial submission or the mod's eventual timeout. The separate before transcript reports focus at 2026-10-22 07:00:41.739Z and the mod's own tool error at 07:17:10.415Z.

After focus/recovery recording: lead wall-clock bounds 2026-10-24 03:10:02.267Z–03:10:58.837Z; encoded duration 56.7914 s. Approximate offsets below are calculated from lead's start time; recording/container timing is not a precision latency measurement.

| Approx. offset | UTC event | Observation/source |
|---|---|---|
| 00:07 | ~03:10:09 | Submit disposable rm prompt (lead timing) |
| 00:09.526 | 03:10:11.793 | First query.open (provider log) |
| 00:16.656 | 03:10:18.923 | ui_panes focus_requested_id=blast-radius (provider log) |
| 00:16.661 | 03:10:18.928 | query.close (provider log) |
| 00:16.741 | 03:10:19.008 | Persisted failed error item, class provider_error, code claude_mod_ui_unsupported (read-only SQLite event record) |
| ~00:28 | ~03:10:30 | Full error still (lead screenshot timestamp, approximate) |
| 00:32.890 | 03:10:35.157 | Fresh query.open, resume native-session-A, same selection (provider log) |
| 00:42.444 | 03:10:44.711 | follow-up-ok tool result (provider log) |
| 00:46.361 | 03:10:48.628 | Successful result, terminal_reason=completed (provider log) |
| ~00:53.278 | 03:10:55.545 | UI Done (lead observation) |

Repeated-focus recording: lead bounds 03:12:50.901Z–03:13:27.515Z, encoded duration 36.802067 s. Focus at +5.774 s; close at +5.777 s; persisted failed item at +5.871 s. The recording shows the repeated turn failing. Process exit is established by the separate supplied PID snapshot, not by pixels. Lead reported PID existing with cwd /tmp/17531-repro at 03:12:50 immediately before submit; retained process snapshot also records PID 595225 during the prior follow-up at 03:10:40.048978Z. No UI approval was answered, per lead.

Fixture SHA-256 before/after (lead observation; repeated-exit snapshot includes final value): e80b71cd14d3cbd65f4173abcbfcf01a545dbca32a72d575108b553a648cc96f. Preservation supports that the held deletion did not remove the fixture; hash alone is not a permission-response trace. Follow-up's own statement about uncertainty is retained unchanged in the capture; use the fixture observation for preservation.

## Conditions, transformations and what else changed

Lead reports Chromium 154, Linux, light theme, 1280×800 CSS viewport, after DPR 2, scale 1. Full stills are 1280×800; video encodes 2560×1600. Before DPR was not established; its 2× video dimensions are consistent with, but do not prove, DPR 2. Browser frame rate must not be inferred from ffprobe's 30000/1 recording metadata. Videos contain video only; there is no audio narration. The timestamp guide above narrates the steps.

No crop, resize, masks or sidebar redaction were applied to published original stills/videos: copies are byte-identical, with raw/published SHA-256 in manifest.json. Public repository names and short maintainer thread titles remain visible. Review included all supplied stills and sampled video contact sheets across each full recording; it was not a frame-by-frame video audit. Review contact sheets were resized for private inspection only and are not evidence inputs or published originals. No credentials or private customer content were identified in inspected captures.

Confounds explicitly retained: different native/user identifiers, timestamps, sidebar threads, main-thread timeline grouping/collapse, and the error panel replacing Running. Main/UI changed between historical before and integrated after; this is not a controlled pixel-regression baseline, and no claim is made that nothing else changed. The root's passive fixture, if later supplied, was installed only after these captures and must be labelled separately.

Pixel differences compare the complete before and after-error stills without alignment, resize or masking: raw RGB absolute difference at zero tolerance, channel delta amplified 8×, and binary mask where max absolute RGB channel delta >16/255. 103,714 / 1,024,000 pixels differ at zero tolerance; 30,971 (3.0245%) exceed threshold 16. Differences include intended error presentation and the listed confounds; counts are descriptive, not pass/fail criteria. All three images inspected before upload.

Runtime transcript uses an allowlist: focus frame pane fields; query open selection/settings and aliased session/resume; query.close; follow-up-ok tool result; successful result fields; persisted failure payload; supplied process snapshots. UUID/native/tool identifiers omitted or consistently aliased. Raw provider logs, environment/config dumps, options dumps and database are not uploaded. SQLite was opened mode=ro against the isolated worktree only.

## FRICTION and limits

No new client run or tests were performed by this evidence processor. Immediate race behavior relies on the deterministic test owned by the lead; passive-frame runtime remains unverified and native mobile is pending the separate native agent. A query.close call alone cannot prove process exit; the repeated retained-PID snapshot supplies that separate evidence. Error persistence was read from orchestration_events (the orchestration_v2_events table was empty), avoiding a misleading missing-evidence conclusion. No forge CLI was needed. ghdrop uploads succeeded using ambient configuration.

Applied skills: [ghdrop](/home/ubuntu/.codex/skills/ghdrop/SKILL.md) and [test-t3-app](/home/ubuntu/t3code/.agents/skills/test-t3-app/SKILL.md). Evidence processing model/harness: gpt-6.1-sol / Codex in T3 Code.

## Published artifacts (ghdrop Markdown verbatim)

![before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/63fe1573a4e164b5/before.png)
![after-error.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cb7053087b88e542/after-error.png)
![after-recovery.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/99b549b8ef079da6/after-recovery.png)
[before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/76d363cb109e61c9/before.mp4)
[after-focus-and-recovery.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/87dda69f1c73b12d/after-focus-and-recovery.mp4)
[after-repeated-focus.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/940581381d551f0a/after-repeated-focus.mp4)
[before-runtime-sanitized.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3cac30806c862c8e/before-runtime-sanitized.txt)
[after-runtime-sanitized.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b316e77edcb2382a/after-runtime-sanitized.json)
[manifest.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/07dec3b0d31cf1ce/manifest.json)
![diff-zero.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4f324b2cded937b6/diff-zero.png)
![diff-amplified-8x.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/dbccb64fe266b2bc/diff-amplified-8x.png)
![diff-threshold.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cf2d48e7173cb4ba/diff-threshold.png)
[diff.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4d7376add082760a/diff.json)

## Follow-up evidence revision

V4 remains **unverified for passive frames**. Lead reports two real fixture-mod-loaded runs completed the benign command, but both emitted zero `ui_panes` frames. Read-only inspection of the supplied second-thread provider log confirms zero `ui_panes` and a successful result at 2026-10-24T03:15:23.381Z (`terminal_reason=completed`, `is_error=false`). Normal completion without the target frame does not exercise the passive-pane branch. The supplied 03:15:13.432Z–03:17:46.443Z recording was not uploaded because it does not prove that condition. The first run’s zero-frame result is lead-reported, not independently inspected in this follow-up. Existing deterministic protocol coverage remains separate.

Repeated-focus video source confirmed as the supplied attachment ending `a545c49c-90fc-4b52-b78b-a221f9f53194-mp4.mp4`; its SHA-256 matches the already-published `after-repeated-focus.mp4`: `89a1a9ec8bca492ceeda8bf1d3a62bd7cfbad00bb3afe9173761919b9e49187d`. No new browser/server/tests or recording uploads.

| Condition | Before | After | Diff0 | DiffT |
|---|---|---|---|---|
| Web · light · 1280×800 | ![before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/63fe1573a4e164b5/before.png)<br>SHA-256: `8191c9a6cca0066ba2a65bc26e9cae209935d1ca9f23ac6f60a755c9237c4b66` | ![after-error.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cb7053087b88e542/after-error.png)<br>SHA-256: `c8364c9bf460f2420e374911d38268c38d474eb72862b4d87c6692fb8aa8a863` | ![diff-zero.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4f324b2cded937b6/diff-zero.png)<br>SHA-256: `4dcef8119639a3cdc4ee52b61e98893b67239b0c5b36060f1904f35e239b1bd7` | ![diff-threshold.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cf2d48e7173cb4ba/diff-threshold.png)<br>SHA-256: `21b57636671af0d65b1c97e04920a8f4bebafaa8a759b73f2ad32ef9f4587b97` |

Diff0 is zero-tolerance raw RGB absolute difference; DiffT marks max absolute RGB delta >16/255. Full surface, no crop, resize, alignment or mask. SHA-256 values are hashes of the published files. Confounds and descriptive-only interpretation above still apply.
