Missing or insufficient affected rows: **none**. This is a proof-coverage verdict for the server classification change, not a fresh assertion that every existing recovery permutation was exercised.

Read-only audit of [#33283](https://git.cafe/pingdotgg/t3code/pull/33283), branch `fix/issue-33247`, head [6e8aaad873](https://git.cafe/pingdotgg/t3code/commit/6e8aaad8731c4bc2ef8441f19d941226ac861f35) against local `origin/main`. The worktree was clean and the diff contains only the Pi adapter and its test. `git diff 68414fb0aa HEAD -- packages/provider-pi` contains a comment and test-name wording change only; executable adapter code is unchanged. The original U/T/R/D capture adapter also differs from this head only in that comment.

The changed boundary is [packages/provider-pi/src/server/adapter.ts:95](https://github.com/pingdotgg/t3code/blob/6e8aaad8731c4bc2ef8441f19d941226ac861f35/packages/provider-pi/src/server/adapter.ts#L95), called by `message_end` and unsuccessful `auto_retry_end`. The case-insensitive usage-space/underscore-limit match changes class; positive Pi minute text supplies the reset, while ~0 supplies none. Both event paths use the same helper, so retry × every reset × every client is not a separate capture matrix. Tests cover parsing/classification at this boundary; real-app evidence covers the resulting presentation and recovery integration.

Native successful Wake is **not an additional affected row**. Pi reaching the timed card is affected and proved by PNT. After that, Wake uses the same `limitRecovery: {runId, resetAt, snooze: false}` metadata action for every provider. Neither its implementation nor its contract changed. The recorded device-tool failure does not prove Wake succeeded, and this audit does not claim it did.

Cancel followed by crossing the original deadline is likewise **not an additional affected row**. Pi reaching the arm/cancel control is affected and recorded in A/N/PNT. After cancellation, the unchanged worker refuses dispatch when `recovery.autoResume` is false, and the unchanged orchestrator independently rejects a stale continuation with that state/request identity. See [apps/server/src/orchestration-v2/UsageLimitRecoveryWorker.ts:57](https://github.com/pingdotgg/t3code/blob/6e8aaad8731c4bc2ef8441f19d941226ac861f35/apps/server/src/orchestration-v2/UsageLimitRecoveryWorker.ts#L57) and [apps/server/src/orchestration-v2/Orchestrator.ts:5870](https://github.com/pingdotgg/t3code/blob/6e8aaad8731c4bc2ef8441f19d941226ac861f35/apps/server/src/orchestration-v2/Orchestrator.ts#L5870). Existing generic scenarios in [apps/server/src/orchestration-v2/runtimeLayer.test.ts:8390](https://github.com/pingdotgg/t3code/blob/6e8aaad8731c4bc2ef8441f19d941226ac861f35/apps/server/src/orchestration-v2/runtimeLayer.test.ts#L8390) exercise wake, cancellation with snooze, and stale scheduled continuations. This pass read those tests; it did not rerun them.

Capture imperfections already disclosed in the evidence index (native status-bar clocks/connectivity, no reduced-motion emulation, older B fixture mismatches) do not prevent judging whether Pi now reaches the existing usage-limit states. No new renderer, animation, mobile layout or recovery algorithm was introduced. This verdict does not certify pixel-isolated equivalence or successful native Wake. The ~0 data case is test-proved and joins U's no-reset presentation; a duplicate screenshot would add no distinct state evidence.

| Row | Fixture / path | Expected result and scope | Proof kind | Existing proof | Status |
|---|---|---|---|---|---|
| U | Changed: message_end, usage-limit text, no reset | usage_limit; resetAt absent; existing amber notice and manual Resume on wide web | still + adapter test | [U-before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3e6f9b8ad63de0bb/U-before.png) / [U-after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/90494d6d9288adff/U-after.png); [U RPC transcript](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/45188a1961cfbbd2/runtime-transcript.md) | SUFFICIENT |
| T | Changed: message_end, positive ~N min | usage_limit; resetAt = receipt + N min + 30 s; wide reset/actions | still + adapter test | [T-desktop-before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4c55d8668caf1a5b/T-desktop-before.png) / [T-desktop-after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bd6fd3bba8e90d68/T-desktop-after.png); T RPC transcript | SUFFICIENT |
| Z | Changed: message_end, ~0 min | usage_limit without resetAt; same downstream state as U, no recovery deadline | adapter test; U supplies the identical resulting UI | [focused-tests.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b135a947e3865006/focused-tests.txt); table case “reset rounds to ~0 min” in adapter.test.ts | SUFFICIENT — no distinct UI capture required |
| R | Changed: failed auto_retry_end whose finalError is a usage limit | final failure and retry item become usage_limit; retryable remains false | still + adapter test | [R-before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3fecc8422084de09/R-before.png) / [R-after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1bee70b94a31558f/R-after.png); R RPC transcript retains retry 1/1; [R-history-after-v4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b819c8ccb5f31de8/R-history-after-v4.png) | SUFFICIENT |
| C | Control: non-limit model errors, including Rate limited | provider_error remains; successful retries and auto_retry_start are unchanged | adapter test | [focused-tests.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b135a947e3865006/focused-tests.txt); existing non-limit case now asserts provider_error | SUFFICIENT — no changed visual state |
| N | Affected entry: narrow web, unknown/timed reset and recovery controls | Pi failure reaches compact notice, reset details and arm/cancel state | recording + still | [N-matched-before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3c01d1c56bc2cdfb/N-matched-before.webm) / [N-matched-after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/156e11d5756ec708/N-matched-after.webm); [N-unknown](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fb103d69357ba23f/N-unknown-sheet.png), [N-timed](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8671bd59f82e5c42/N-timed-sheet.png), [N-settled](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/500ad2e58f150e42/N-settled-sheet.png) | SUFFICIENT |
| PN0 | Affected entry: native Android, no reset | Pi failure reaches native unknown-reset card and Limited list status | still + recording | [PN0-sheet](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ee2baf7896612c43/PN0-sheet.png); [native-before-retry](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/18861ddef5474088/native-before-retry.mp4) / [native-after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e3ee205555b151db/native-after.mp4) | SUFFICIENT for classification; connectivity/clock differences disclosed |
| PNT | Affected entry: native Android, timed reset | Pi failure reaches timed card, arm/snooze actions and successful manual continuation/history | recording + still | [PNT-armed](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cbbcc02bd9844e66/PNT-armed-sheet.png); [PNT-history](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7a553164bdea606a/PNT-history-sheet.png); [native-after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e3ee205555b151db/native-after.mp4) / [native-after.part-002](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/dc6f1c47c81cb514/native-after.part-002.mp4) | SUFFICIENT for affected entry; successful Wake is not claimed |
| A/S | Affected entry: manually arm recovery / snooze a Pi limit | existing recovery metadata and labels are now reachable for Pi | recording | [A-final-after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/27a8bf5224f61de9/A-final-after.webm); [S-manual-after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e73807844a725077/S-manual-after.webm) | SUFFICIENT for arm/cancel/snooze entry and visible reversal |
| D | Affected integration: parsed reset enables automatic recovery | Pi arms; waits for conservative deadline; server dispatches continuation; reply succeeds | recording | [D-before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c537f4ae51f24c44/D-before.mp4) / [D-after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/258488e15c31b9db/D-after.mp4); D RPC transcript: reset 09:31:02.032, run 2 starts 09:31:02.274; main remains failed | SUFFICIENT |
| M/W | Affected entry: manual continuation and historical warning, including prior tool work | Pi becomes resumable and reaches existing warning/history presentation | recording + still | [M-final-after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/296352ff27948afe/M-final-after.webm); [W-flow-before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/52722224e5583f23/W-flow-before.webm) / [W-flow-after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9e8025f257545228/W-flow-after.webm); expanded/collapsed W pairs linked in PR | SUFFICIENT; no extra tool-layout permutations required |
| B | Affected projection: inactive thread, sidebar/folder/hover and notification | Failed/red becomes Limited/amber and Usage limit reached | recording + still | [B-flow-before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1b4c9ede0fbcf249/B-flow-before.webm) / [B-flow-after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a27d7f571aba16a4/B-flow-after.webm); B-hover, B-folder, B-notification pairs linked in PR | SUFFICIENT |
| X-Wake | Proposed extra: native timed limit → Snooze → successful Wake | post-entry Wake toggles snooze metadata via unchanged generic path | recording if pursued | Native capture reaches Snooze/Wake now; actual Wake was not successfully exercised | NOT REQUIRED for this diff; explicitly unverified |
| X-Cancel | Proposed extra: arm → cancel → cross original deadline without dispatch | post-cancel deadline suppression is unchanged provider-independent recovery logic | recording if pursued | A-final-after proves visible arm/cancel only; it ends before original deadline | NOT REQUIRED for this diff; explicitly unverified |

No missing required row needs seeding. For reproducibility, the uploaded [stub-v2.mjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c59886e16aadd149/stub-v2.mjs), [driver.mjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6ba5cdaf7260c828/driver.mjs) and [rpc.mjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5cc573833ae7fd5a/rpc.mjs) were read, not executed. They use real Pi against a loopback stub, isolated T3 state and synthetic credentials. `driver seed` installs Pi instances and creates fixtures; `driver send <row>` dispatches through orchestration. U/PN0 produce streamed limits without a reset; T/PNT produce timed 429s; R first disconnects then limits on retry; W performs two synthetic reads then limits. `/control` can change a fixture to successful replies or set `resetEpochSeconds` for S/T/PNT. Freeze no server clock for deadline evidence.

If either optional extra is requested separately:

- **X-Wake — recording:** seed a fresh PNT thread with both global recovery settings off. Keep its 429 reset in the future, connect the native app to that isolated server, open PNT, tap Snooze until reset, then Wake now. Record through confirmation that the snooze is cleared; use `orchestration.getThreadProjection` through rpc.mjs to verify `snoozedUntil` is null and `limitRecovery.snooze` is false. No successful continuation is needed to prove Wake; Wake is metadata, not Resume.
- **X-Cancel — recording:** use fresh S with `resetEpochSeconds` about 65 seconds ahead so real Pi prints ~1 min. Keep both global settings off. Send S, read the actual persisted adapter reset (roughly receipt +90 seconds), arm Resume at reset, cancel, then switch the stub to success without sending another prompt. Record through the original persisted reset and a recovery-worker sweep. Read the projection to verify autoResume=false, one failed run, and no continuation message; inspect the stub request transcript for no new request. Do not reuse A's long-expired fixture or infer absence of dispatch from a still.

Coverage completed: adapter diff and tests; downstream web/native gates and shared recovery worker/dispatch guards; uploaded real-app stills and sampled recording frames for U/T/R/N/PN0/PNT/A/S/D/M/W/B; runtime transcript and fixture scripts. Focused test evidence reports 5 passing cases; no tests, servers, providers or device sessions were started by this audit. All generated audit material stays in the requested scratch directory. No source edits, pushes, PR comments or deletions.

FRICTION:
- tool | Pillow was unavailable for a local recording contact-sheet helper; used installed ffmpeg/ImageMagick instead | use the installed image tools directly.

VERDICT: SUFFICIENT
