# PR #22775 web evidence: usage-limit recovery (capture index)

**Every usage-limit failure shown is a SYNTHETIC FIXTURE** (`failure.class=usage_limit`, `code=usageLimitExceeded`, message `Plan limit reached. (SYNTHETIC FIXTURE)`), written offline by `apps/server/scripts/usage-limit-web-evidence-seed.ts` into disposable homes under `/tmp/ev-22775/capture`. Continuations run on the Codex mock peer (`codexCollabMockPeer.sh`, `holdTurnOpen`), never a real account.

BEFORE = merge-base `8acbefefc51b4d281dcd04108c82baa1ab902b0e`; AFTER = PR head `e8fbc9baea51552c05e76828bb06e36f4a33c60c`. Scripts committed in `824b0ba8ec`. Captured 2026-10-22 11:57–12:22 UTC; browser timezone UTC.

Notes that apply to every image: the red "Synthetic fixture 0.0.0 is known to be broken" banner and the "Updates Available: 2 providers" toast come from the mock Codex binary's version string and appear on both revisions. The "server / New thread" sidebar entry is the dev runner's auto-bootstrapped project.

DB evidence (run rows per thread, both revisions): [db-evidence.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/144025cd061a9aa0/db-evidence.txt)

## Results

| Row | Expected (matrix) | BEFORE observed | AFTER observed | Matches |
|---|---|---|---|---|
| W0 | none (control) | banner, Resume at reset, Snooze, Limited | same | yes |
| W0a | none (control) | click Resume at reset → Cancel auto-resume | same | yes |
| W1 | banner/Resume/Limited hidden BEFORE, shown AFTER | no banner, Send button, sidebar Done | banner (Resets 12:20:40), Resume at reset, Snooze, Resume-thread button, sidebar Limited | yes |
| W2 | Cancel auto-resume only AFTER | no banner, sidebar Done | banner with **Cancel auto-resume** (not Resume at reset), sidebar Limited | yes |
| W4 | manual Resume only AFTER | Resume thread absent; nothing to click; no run created | click → "Continue where you left off.", banner clears, run 3 running, sidebar Working | yes |
| W4q | AFTER continues L first; BEFORE runs held queue | click runs the held queued message (became run 4, running); no continuation | click creates continuation (run 4 running, "Continue where you left off." visible); queued run 2 stays queued | yes |
| W5 | auto-resume at reset only AFTER | no continuation run (DB: runs 1 failed, 2 completed only) | exactly one continuation run 3, requested 12:00:05.132Z (reset 12:00:04.535Z, +0.6 s); sidebar Working | yes (outcome only; pre-reset footage missed, see dropped) |
| W6 | AFTER banner stays; Snooze disabled at reset; Resume at reset still enabled | no banner throughout | banner throughout; Snooze greyed after 12:20:40, Resume at reset enabled | yes |
| W7 | none (wake after reset supersedes) | no banner, sidebar Done | same | yes |
| W8 | none (user turn supersedes) | no banner | same | yes |

## Stills (W0, W1, W2, W7, W8 × 1440/390 × light/dark, both revisions: 40 frames)

Each cell: before|after side-by-side, then a pixel diff (ImageMagick `compare -fuzz 2%`, red = changed). Changed-pixel counts are in `diff-pixel-counts.txt` (uploaded with this index; the W0 lines there are from the first capture, and the W0 retake gives 6546/6691 px at 1440 and 0 px at 390).

### W0

- **1440 light**: [W0-1440-light-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0a8e24b575c34af4/W0-1440-light-side.png) · [W0-1440-light-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a3c6b301db87dc8d/W0-1440-light-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T12:05:40.921Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T12:05:40.783Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
- **1440 dark**: [W0-1440-dark-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6a998c1249fb0e4a/W0-1440-dark-side.png) · [W0-1440-dark-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2e1537b0f892299f/W0-1440-dark-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · dark · 2026-10-22T12:05:51.509Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · dark · 2026-10-22T12:05:51.480Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
- **390 light**: [W0-390-light-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b6f44289bf81cadc/W0-390-light-side.png) · [W0-390-light-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8d94316d0823ac6b/W0-390-light-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · light · 2026-10-22T12:06:02.027Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · light · 2026-10-22T12:06:02.158Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
- **390 dark**: [W0-390-dark-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ff48d3e7e1b2d365/W0-390-dark-side.png) · [W0-390-dark-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/051b8f87e46899c6/W0-390-dark-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · dark · 2026-10-22T12:06:12.517Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · dark · 2026-10-22T12:06:12.671Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751

### W1

- **1440 light**: [W1-1440-light-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e00d6b56bf6bcaa5/W1-1440-light-side.png) · [W1-1440-light-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6cb58c5bdbb6bdc5/W1-1440-light-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T11:57:22.884Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T11:57:24.790Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
- **1440 dark**: [W1-1440-dark-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/32bdd685d4d8a0a3/W1-1440-dark-side.png) · [W1-1440-dark-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0516fcaf22e52910/W1-1440-dark-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · dark · 2026-10-22T11:58:06.522Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · dark · 2026-10-22T11:58:03.185Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
- **390 light**: [W1-390-light-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/12d7139b3935d2e7/W1-390-light-side.png) · [W1-390-light-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1edb2538c27c5f25/W1-390-light-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · light · 2026-10-22T11:58:47.307Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · light · 2026-10-22T11:58:38.978Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
- **390 dark**: [W1-390-dark-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/240f6658999740c5/W1-390-dark-side.png) · [W1-390-dark-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/335ee8dc3a7065c1/W1-390-dark-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · dark · 2026-10-22T11:59:29.370Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · dark · 2026-10-22T11:59:19.928Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751

### W2

- **1440 light**: [W2-1440-light-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6557dd3f8487a3ff/W2-1440-light-side.png) · [W2-1440-light-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/01bdd849dbe35dac/W2-1440-light-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T11:57:32.637Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T11:57:33.359Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
- **1440 dark**: [W2-1440-dark-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5485cdc3054de03f/W2-1440-dark-side.png) · [W2-1440-dark-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/09360c23472fe55d/W2-1440-dark-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · dark · 2026-10-22T11:58:15.105Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · dark · 2026-10-22T11:58:10.520Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
- **390 light**: [W2-390-light-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3d533d6f48b9f337/W2-390-light-side.png) · [W2-390-light-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f7024e7032761d97/W2-390-light-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · light · 2026-10-22T11:58:55.096Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · light · 2026-10-22T11:58:46.527Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
- **390 dark**: [W2-390-dark-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e12ab86d73f7de4c/W2-390-dark-side.png) · [W2-390-dark-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/12de564fdd0b8ec4/W2-390-dark-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · dark · 2026-10-22T11:59:36.903Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · dark · 2026-10-22T11:59:28.306Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751

### W7

- **1440 light**: [W7-1440-light-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c35fb2d649929cc2/W7-1440-light-side.png) · [W7-1440-light-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a60321d4b1fd754/W7-1440-light-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T11:57:40.778Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T11:57:39.359Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
- **1440 dark**: [W7-1440-dark-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9707068075a25105/W7-1440-dark-side.png) · [W7-1440-dark-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bfcc05aa8d2cd847/W7-1440-dark-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · dark · 2026-10-22T11:58:21.156Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · dark · 2026-10-22T11:58:18.259Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
- **390 light**: [W7-390-light-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5f262cf1f43ad7a0/W7-390-light-side.png) · [W7-390-light-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ae09a13a746e68ce/W7-390-light-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · light · 2026-10-22T11:59:02.629Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · light · 2026-10-22T11:58:53.906Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
- **390 dark**: [W7-390-dark-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9deffa28783cda4a/W7-390-dark-side.png) · [W7-390-dark-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/46117575ceda49ec/W7-390-dark-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · dark · 2026-10-22T11:59:44.807Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · dark · 2026-10-22T11:59:36.068Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751

### W8

- **1440 light**: [W8-1440-light-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c1370e7bef70c68e/W8-1440-light-side.png) · [W8-1440-light-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1fc4d1c169f62896/W8-1440-light-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T11:57:49.440Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T11:57:46.431Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
- **1440 dark**: [W8-1440-dark-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/40e772471ad1b7e0/W8-1440-dark-side.png) · [W8-1440-dark-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c0550b70735ae0f5/W8-1440-dark-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · dark · 2026-10-22T11:58:29.442Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · dark · 2026-10-22T11:58:26.455Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
- **390 light**: [W8-390-light-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2b4488242b2da90f/W8-390-light-side.png) · [W8-390-light-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ba878eebebbcf085/W8-390-light-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · light · 2026-10-22T11:59:11.072Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · light · 2026-10-22T11:59:01.289Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
- **390 dark**: [W8-390-dark-side.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/00e4782deeff9251/W8-390-dark-side.png) · [W8-390-dark-diff.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e8b330ad3737ed9c/W8-390-dark-diff.png)
  - env before: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · dark · 2026-10-22T11:59:51.421Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - env after: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 390x844 · dark · 2026-10-22T11:59:43.403Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751

## Recordings (1440×900 light, h264 1280 wide, burned-in captions + sidecar .srt)

Caption format: `<UTC wall clock> UTC | reset <fixture resetAt>` then the step. Each video opens on ~15–20 s of app loading (the VM was heavily loaded), then the steps.

### W0a

Thread W0 (limited, no wake). Steps: open → banner with Resume at reset → click Resume at reset → Cancel auto-resume appears.

- **BEFORE**: [W0a-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cab284fc173f5f2e/W0a-before.mp4) · captions [W0a-before.srt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1f33c7dece7d4753/W0a-before.srt)
  - env: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T12:08:58.992Z – 2026-10-22T12:09:22.604Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - 2026-10-22T12:08:58.992Z: [before] open W0: SYNTHETIC usage-limit fixture seeded (reset 2026-10-22T12:20:40.264Z)
  - 2026-10-22T12:09:13.494Z: [before] loaded: banner shown; sidebar row W0
  - 2026-10-22T12:09:13.512Z: [before] click "Resume at reset"
  - 2026-10-22T12:09:17.598Z: [before] after click: "Cancel auto-resume" shown
- **AFTER**: [W0a-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/60f8d889c95cd2a4/W0a-after.mp4) · captions [W0a-after.srt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a394d5a35b527ba/W0a-after.srt)
  - env: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T12:08:58.063Z – 2026-10-22T12:09:21.676Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
  - 2026-10-22T12:08:58.063Z: [after] open W0: SYNTHETIC usage-limit fixture seeded (reset 2026-10-22T12:20:36.681Z)
  - 2026-10-22T12:09:12.600Z: [after] loaded: banner shown; sidebar row W0
  - 2026-10-22T12:09:12.610Z: [after] click "Resume at reset"
  - 2026-10-22T12:09:16.669Z: [after] after click: "Cancel auto-resume" shown

### W4

Thread W4 (L failed, notification wake completed pre-reset). Steps: open → (AFTER) banner + Resume thread → click Resume thread → "Continue where you left off." user message, run starts on the mock peer, banner clears. BEFORE: no banner, button absent.

- **BEFORE**: [W4-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/68aff7358f81854d/W4-before.mp4) · captions [W4-before.srt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fc3daafd81a0e00f/W4-before.srt)
  - env: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T12:03:12.453Z – 2026-10-22T12:03:41.424Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - 2026-10-22T12:03:12.453Z: [before] open W4: SYNTHETIC usage-limit fixture seeded (reset 2026-10-22T12:21:00.099Z)
  - 2026-10-22T12:03:26.384Z: [before] loaded: no banner; sidebar row W4
  - 2026-10-22T12:03:26.405Z: [before] "Resume thread" button absent; nothing to click
  - 2026-10-22T12:03:31.411Z: [before] no banner
- **AFTER**: [W4-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a36378ebebefbd4f/W4-after.mp4) · captions [W4-after.srt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e6f8ed7fd410a947/W4-after.srt)
  - env: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T12:03:12.820Z – 2026-10-22T12:03:47.899Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
  - 2026-10-22T12:03:12.820Z: [after] open W4: SYNTHETIC usage-limit fixture seeded (reset 2026-10-22T12:20:56.778Z)
  - 2026-10-22T12:03:26.769Z: [after] loaded: banner shown; sidebar row W4
  - 2026-10-22T12:03:26.779Z: [after] click "Resume thread"
  - 2026-10-22T12:03:32.880Z: [after] after click: no banner; continuation message visible

### W4q

Thread W4q (W1 plus a held queued message "Run after recovery."). Steps: open → click Resume thread → AFTER continues L (new run), queued message stays queued; BEFORE resumes the held queue.

- **BEFORE**: [W4q-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4a42445d2231513a/W4q-before.mp4) · captions [W4q-before.srt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c4b310bedbe4405e/W4q-before.srt)
  - env: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T12:16:30.636Z – 2026-10-22T12:17:10.495Z · home `/tmp/ev-22775/capture/homeq-before/.t3` · web 47756 / server 47757
  - 2026-10-22T12:16:30.636Z: [before] open W4q: SYNTHETIC usage-limit fixture seeded (reset 2026-10-22T12:42:32.389Z)
  - 2026-10-22T12:16:48.953Z: [before] loaded: no banner; sidebar row W4q
  - 2026-10-22T12:16:48.967Z: [before] click "Resume thread"
  - 2026-10-22T12:16:55.474Z: [before] after click: no banner; continuation message not visible
- **AFTER**: [W4q-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6b4a199f862b1ab7/W4q-after.mp4) · captions [W4q-after.srt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8d9d3c983c989c79/W4q-after.srt)
  - env: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T12:16:32.464Z – 2026-10-22T12:17:13.604Z · home `/tmp/ev-22775/capture/homeq-after/.t3` · web 47754 / server 47755
  - 2026-10-22T12:16:32.464Z: [after] open W4q: SYNTHETIC usage-limit fixture seeded (reset 2026-10-22T12:42:32.224Z)
  - 2026-10-22T12:16:52.300Z: [after] loaded: banner shown; sidebar row W4q
  - 2026-10-22T12:16:52.312Z: [after] click "Resume thread"
  - 2026-10-22T12:16:58.513Z: [after] after click: no banner; continuation message visible

### W5

Thread W5 (armed, wake completed pre-reset, reset 12:00:04/12:00:07). Footage is post-reset only (12:04): AFTER shows the continuation turn and sidebar Working; BEFORE shows the completed wake, no continuation.

- **BEFORE**: [W5-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/628f6941746604a9/W5-before.mp4) · captions [W5-before.srt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/aa5da2539c13960e/W5-before.srt)
  - env: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T12:04:00.556Z – 2026-10-22T12:04:24.561Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - 2026-10-22T12:04:00.556Z: [before] open W5: SYNTHETIC usage-limit fixture seeded (reset 2026-10-22T12:00:07.878Z)
  - 2026-10-22T12:04:14.550Z: [before] loaded: no banner; sidebar row W5
  - 2026-10-22T12:04:19.556Z: [before] no banner
  - 2026-10-22T12:04:24.561Z: [before] no banner
- **AFTER**: [W5-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bf99287c81b7909e/W5-after.mp4) · captions [W5-after.srt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c2da4111cd7f699b/W5-after.srt)
  - env: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T12:04:01.320Z – 2026-10-22T12:04:25.910Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
  - 2026-10-22T12:04:01.320Z: [after] open W5: SYNTHETIC usage-limit fixture seeded (reset 2026-10-22T12:00:04.535Z)
  - 2026-10-22T12:04:15.890Z: [after] loaded: no banner; sidebar row W5
  - 2026-10-22T12:04:20.898Z: [after] no banner
  - 2026-10-22T12:04:25.910Z: [after] no banner

### W6

Thread W1 (unarmed) recorded 12:20:08–12:21:48 across its reset (AFTER 12:20:40.815, BEFORE 12:20:44.466). AFTER: banner stays, Snooze until reset disables at reset, Resume at reset stays enabled. BEFORE: no banner throughout.

- **BEFORE**: [W6-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f88628470cb3a03e/W6-before.mp4) · captions [W6-before.srt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ab333cebf66c01e2/W6-before.srt)
  - env: rev `8acbefefc5` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T12:20:08.418Z – 2026-10-22T12:21:48.896Z · home `/tmp/ev-22775/capture/home-before/.t3` · web 47752 / server 47753
  - 2026-10-22T12:20:08.418Z: [before] open W1: SYNTHETIC usage-limit fixture seeded (reset 2026-10-22T12:20:44.466Z)
  - 2026-10-22T12:20:28.788Z: [before] loaded: no banner; sidebar row W1
  - 2026-10-22T12:20:33.795Z: [before] no banner
  - 2026-10-22T12:20:38.800Z: [before] no banner
- **AFTER**: [W6-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/96312d4239526552/W6-after.mp4) · captions [W6-after.srt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6bf37274f8dcc122/W6-after.srt)
  - env: rev `e8fbc9baea` · Ubuntu 24.04.5 LTS, Linux 6.1.102 x86_64 (VM fs-12) · Node v26.12.1 (vite-plus runtime) · headless Chromium 148.0.7778.96 (Playwright 1.60.0) · 1440x900 · light · 2026-10-22T12:20:08.585Z – 2026-10-22T12:21:48.762Z · home `/tmp/ev-22775/capture/home-after/.t3` · web 47750 / server 47751
  - 2026-10-22T12:20:08.585Z: [after] open W1: SYNTHETIC usage-limit fixture seeded (reset 2026-10-22T12:20:40.815Z)
  - 2026-10-22T12:20:28.654Z: [after] loaded: banner shown; sidebar row W1
  - 2026-10-22T12:20:33.661Z: [after] banner shown
  - 2026-10-22T12:20:38.667Z: [after] banner shown
- Snooze pre/post reset crop (AFTER): [W6-after-snooze-pre-vs-post-reset.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5b2218f8d2bb15bf/W6-after-snooze-pre-vs-post-reset.png)

## Dropped / partial

- **W3 (wake running → completes, banner returns)**: dropped. The wake run can only be created and advanced offline (the WebSocket transport rejects client-created provider notifications), so a live recording would need three server restarts per revision. The end state is covered by W1 (banner present after a completed wake, AFTER only); the seed's `wake-running` and `finish` stages support a stitched capture.
- **W5 pre-reset footage**: the reset (12:00:04 UTC) passed while the stills were running, so the recording starts at 12:04, after the reset. The outcome is in the recording and in `db-evidence.txt` (AFTER run 3 requested 0.6 s after reset; BEFORE none).
- **390 'expanded composer stack' frames and 390 sidebar sheet**: not captured. The 390 frames show the default collapsed state only; the Limited pill is covered by the 1440 frames.

## What else changed (visual differences beyond the expected rows)

No PR-attributable difference was found outside the expected rows. Every non-zero diff on the control rows is explained:

- **Sidebar at 1440 (W0, W7, W8 frames)**: the W1/W2/W4/W5 rows of the *other* threads show Limited (AFTER) vs Done (BEFORE). These are the expected W1/W2 differences, visible in every frame's sidebar. In the W0 retake, W4/W5 show Working on AFTER because those continuations were running.
- **Reset time seconds** (`12:20:36` vs `12:20:40` etc.): the two revisions' homes were seeded ~4 s apart.
- **W7/W8 at 390 (233–425 px)**: a keyboard-focus ring on the toast's Update button. This is capture timing, not the PR.
- **W0 at 390**: the first capture caught AFTER mid-load (splash screen). The retake is pixel-identical (0 px) at 390 light and dark, and the retake replaced it.
- Layout, typography, banner styling, and composer layout are identical where both revisions render the same state.

## Rebuild one row (W1, AFTER)

```sh
cd <checkout at the revision under test>   # scripts are in 824b0ba8ec; copy them in for the merge-base
H=/tmp/ev-rebuild/home-after/.t3
node apps/server/scripts/usage-limit-web-evidence-seed.ts --home $H --row W1 --stage init --title 'W1 wake completed before reset'
node apps/server/scripts/usage-limit-web-evidence-seed.ts --home $H --row W1 --stage wake
T3_CODEX_COLLAB_SCRIPT=$H/mock.json T3CODE_PORT_OFFSET=42017 vp run dev --home-dir $H --port 47751 &   # web 47750; read pairingUrl from output
node apps/server/scripts/usage-limit-web-evidence-stills.mjs '<pairingUrl>' /tmp/ev-rebuild/stills after W1
SEED_HOME=$H node apps/server/scripts/usage-limit-web-evidence-record.mjs "$(node apps/server/src/bin.ts pair --base-dir $H --ttl 1h | grep -o 'http://localhost[^ ]*')" W1 /tmp/ev-rebuild/rec after resume 15
```
All rows: `apps/server/scripts/usage-limit-web-evidence-seed-all.sh <checkout> <home>` (W5 reset delay via `W5_DELAY` ms).
