# Evidence r2 — shell Stop and Details

PR [#32851](https://git.cafe/pingdotgg/t3code/pull/32851). After [153c326b70](https://git.cafe/pingdotgg/t3code/commit/153c326b70669131d2472b0c63aa31d3dbc6fcfe); before [d313b2aff3](https://git.cafe/pingdotgg/t3code/commit/d313b2aff31991ab94c8ac80cdc38a54dd575604).

**2 of 3 requested rows fully captured; U04/R01 is partial.** R02 and R03 pass the requested live outcomes. Both after Details sizes are captured. The specified merge-base does not track native shells, so its identical real fixture has roster=[] and no command row or Details button. The before controls show this actual state; a before Details-open image cannot be produced by that driver on this revision. These are end-to-end comparisons, not an isolated visual comparison of the final command-field change. Historical before Stop controls remain in the [existing evidence index](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8eca757f8c343eab/evidence.md).

Environment for every new capture: T3 preview, Chrome 157 Linux x86_64, no device emulation, DPR 2, 100% zoom, root font 16px, visual scale 1. Dark. CSS 1440×900 → PNG/MP4 2880×1800; CSS 390×844 → PNG 780×1688. Separate default/Incognito auth profiles for after/before. Date frozen at 2026-11-10T12:00:00Z after client load; server evidence uses real UTC. Preview exposes no reduced-motion emulator; CSS disables animations, transitions and caret. Fonts loaded; startup/data requests settled; two captures at least 500ms apart pixel-identical for each of four selected states. Private model labels masked as `<model>`. Synthetic fresh databases only; T3CODE_DEV_SEED=0 for both dev servers.

## R02 · idle Stop · 1440×900 dark

| Before — d313b2aff3 | After — 153c326b70 | Proof |
|---|---|---|
| Existing control retained; not recaptured | [Recording](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/35d455917c9eacaf/R02-after-idle-stop.mp4) | [Synchronized PID/roster transcript](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3e0e1f7e99b5a4ad/runtime-transcript.json); [Persisted run and descendant counts](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/471a6a0c37b15467/run-counts.json) |

Steps (UTC 2026-11-10):
1. 15:31:27.263: PID 927616 alive (`sleep 500`), one named command in pendingBackgroundTasks, one completed run. Named Running row visible.
2. 15:31:27.901: recording begins. Click the row Stop between 15:31:28.0 and 15:31:28.364. The UI briefly shows Stopping, then clears the row.
3. 15:31:28.364: process is disappearing, roster update still pending. By 15:31:50.073: PID absent and roster=[].
4. 15:32:01.813: PID absent, roster=[], run count=1. Bounded no-follow-up window **at least 33 seconds** after the click's upper time bound. Recording ends 15:32:01.950; 34.360s media duration.

## R03 · mid-turn Stop · 1440×900 dark

| Before — d313b2aff3 | After — 153c326b70 | Proof |
|---|---|---|
| Existing control retained; not recaptured | [Recording](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e6064a82c59fcba4/R03-after-midturn-stop.mp4) | [Synchronized two-PID/roster transcript](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3e0e1f7e99b5a4ad/runtime-transcript.json); [Persisted run and descendant counts](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/471a6a0c37b15467/run-counts.json) |

Steps (UTC):
1. Agent launches background `sleep 500`, then foreground `sleep 40`. Recording begins 15:32:43.140.
2. 15:32:53.089: PID 931527 (`sleep 500`) and PID 931741 (`sleep 40`) **both alive**, named command roster, one run. Background row is intentionally hidden during the active run.
3. Click composer Stop generation between 15:32:53.089 and 15:32:53.546. Background PID disappears immediately; foreground briefly zombie then disappears. Run interrupted at 15:32:53.657. UI shows Run interrupted / Stopped by user.
4. 15:33:11.320: both PIDs absent, roster=[]. Still clear at 15:33:22.922; recording stops 15:33:23.044, 40.146s media duration.
5. Further synchronized sample 15:33:47.271: both absent, roster=[], run count=1. Bounded no-follow-up window **at least 53 seconds** from click's upper time bound. Persisted event history through 15:35:44 confirms only one run and zero descendant threads for each Stop fixture.

## U04/R01 · Details · 1440×900 dark — PARTIAL

| Before — d313b2aff3 | After — 153c326b70 | Diff0 — same SHAs | DiffT — same SHAs |
|---|---|---|---|
| [No row / no Details](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0c1eb63c4f2185c5/before-desktop-a.png) | [Details open: sleep 500 command block](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cba708680bb3d17d/after-desktop-a.png) | [Amplified zero threshold](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a1fe9d44e32f086/desktop-diff0.png) | [Threshold >8/255](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ba8c8403878ed348/desktop-diff8.png) |

![1440×900 dark — Before (no command row) | After (Details command block) | Diff0 | DiffT](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8cb5ea33eeddd4bf/desktop-sheet.png)

## U04/R01 · Details · 390×844 dark — PARTIAL

| Before — d313b2aff3 | After — 153c326b70 | Diff0 — same SHAs | DiffT — same SHAs |
|---|---|---|---|
| [No row / no Details](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f6f3fbc6b50b2416/before-mobile-a.png) | [Details bottom sheet: sleep 500 command block](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a79ea73537141c9c/after-mobile-a.png) | [Amplified zero threshold](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c47a494091a589c2/mobile-diff0.png) | [Threshold >8/255](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/15d64676affb6a70/mobile-diff8.png) |

![390×844 dark web — Before (no command row) | After (Details command block) | Diff0 | DiffT](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/50f69307956b8ca1/mobile-sheet.png)

Diff algorithm: maximum absolute RGB-channel delta per pixel. Diff0 marks every delta >0 saturated magenta over quarter-intensity before; DiffT marks delta >8/255 saturated orange. [Exact pixel counts and equality results](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7b67f7b6fd6b3574/metrics.json). Each A/B pair has zero changed pixels. Desktop cross-revision deltas: 644,548 at >0; 425,178 at >8. Narrow: 303,869 at >0; 237,744 at >8.

What else changed (all visible differences):
- After has the Running · sleep 500 row with Details and Stop; merge-base has none.
- After has the Background work dialog (desktop) / bottom sheet (narrow), Command heading, Running state, close control, and syntax-coloured monospace `sleep 500` block. No matched output/duration block is asserted.
- Open Details dims and blurs the whole underlying chat, header controls and composer; narrow bottom sheet covers the composer. This is normal modal presentation, not ghosting.
- Real execution-duration label differs: before 6.2s, after 7.9s. Absolute message timestamps are the same 3:28 PM, and clock/viewport/scroll/theme/fonts match. No additional visual differences were found beyond those duration and modal/row changes.

## Scripts, verification, and limits

[All seed/observer/browser/privacy/diff/review/upload/index/cleanup drivers and fixture README](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ddcc53594f19f251/capture-drivers.zip). [Human-readable reproduction and interaction timeline](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bea9de9e6bace0d2/browser-driver.md). [Redacted observations and persisted events](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3e0e1f7e99b5a4ad/runtime-transcript.json). [Run/descendant counts](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/471a6a0c37b15467/run-counts.json). [Recording dimensions/durations](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/da2bb1819c37936c/video-metrics.json).

Opened every selected still and diff, both comparison sheets, and six spaced frames including first/last for each recording: [R02 review sheet](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/80459cd1aaec2d5c/R02-after-idle-stop-review.png), [R03 review sheet](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b268d8db1b7a1710/R03-after-midturn-stop-review.png). Earlier frames with stale provider-status toast were rejected and are not uploaded. No tests or unit-only matrix rows rerun. No native mobile, independent Electron, relay, tunnel, other-provider, failure/retry, or race proof claimed. These ordinary Stop outcomes do not override matrix R23's distinct retained-shell outcome.

Teardown: both recordings stopped, both owned preview tabs closed, both server sessions exited, all four web/backend ports closed, fixture shell scan empty, and both capture worktrees removed. 101 GB available afterward. [Verified-port-owner shutdown log](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e9e537c8d0e4cff8/cleanup-log.json). No commits, pushes, PR edits, real database reads, or lead-worktree modifications.

AI-assisted; verified with the tests and tools listed above.

## ghdrop output (verbatim)

[R02-after-idle-stop.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/35d455917c9eacaf/R02-after-idle-stop.mp4)
[R03-after-midturn-stop.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e6064a82c59fcba4/R03-after-midturn-stop.mp4)
[runtime-transcript.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3e0e1f7e99b5a4ad/runtime-transcript.json)
[run-counts.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/471a6a0c37b15467/run-counts.json)
[capture-drivers.zip](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9f49177c8ce3a673/capture-drivers.zip)
[browser-driver.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bea9de9e6bace0d2/browser-driver.md)
[cleanup-log.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e9e537c8d0e4cff8/cleanup-log.json)
[video-metrics.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/da2bb1819c37936c/video-metrics.json)
[metrics.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7b67f7b6fd6b3574/metrics.json)
![before-desktop-a.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0c1eb63c4f2185c5/before-desktop-a.png)
![after-desktop-a.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cba708680bb3d17d/after-desktop-a.png)
![before-mobile-a.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f6f3fbc6b50b2416/before-mobile-a.png)
![after-mobile-a.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a79ea73537141c9c/after-mobile-a.png)
![desktop-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a1fe9d44e32f086/desktop-diff0.png)
![desktop-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ba8c8403878ed348/desktop-diff8.png)
![desktop-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8cb5ea33eeddd4bf/desktop-sheet.png)
![mobile-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c47a494091a589c2/mobile-diff0.png)
![mobile-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/15d64676affb6a70/mobile-diff8.png)
![mobile-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/50f69307956b8ca1/mobile-sheet.png)
![R02-after-idle-stop-review.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/80459cd1aaec2d5c/R02-after-idle-stop-review.png)
![R03-after-midturn-stop-review.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b268d8db1b7a1710/R03-after-midturn-stop-review.png)

[capture-drivers.zip](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ddcc53594f19f251/capture-drivers.zip)

FRICTION:
- runbook | Reused driver named the 1.x npm package for OpenCode 2; @opencode/cli@2.2.6 worked | Correct package in driver.
- infra | Same-host preview auth cookies collided across two local ports | Use separate browser profiles from the start.
- brief | Requested merge-base Details-open state does not exist for its native shell fixture | Use the actual absent-row before control, or explicitly authorize a different comparison revision.
- tool | preview_open rejects about:blank and preview_evaluate rejects leading/trailing whitespace | Omit URL for blank tab; trim expressions.
