## Evidence

**Partial coverage. Outside the PR's timing change, the rejected Android pair loses the `action.txt` file row after the action. This is an unexplained capture/state mismatch, not a confirmed regression. It is not accepted as a controlled comparison.**

Target only [#25761](https://git.cafe/pingdotgg/t3code/pull/25761), [GitHub mirror #25761](https://github.com/pingdotgg/t3code/pull/25761). Before [cc59f99e73][before]; after [25ff493224][after]. Captured variants touch **5 / 81 matrix IDs**: A01, A03, A04, A05 and B06. **0 / 81 rows are complete across their full matrix obligations.** Seven web comparison variants and one rejected Android diagnostic pair are linked below. Every remaining row and every partial obligation is accounted for below; no test is substituted for a capture.

Environment: real isolated before/after dev servers and real web app; Chromium 156 on Linux, no device emulation, CSS viewport 1440×1000, DPR 2, 16px root font, dark unless labelled otherwise. Full web stills are preview-tool downsampled to 1280×889; videos retain 2880×2000 app pixels plus a 64px provenance strip. Narrow light is CSS 390×844, DPR 2, full 780×1688 stills. Scroll is at the top. The preview tool has no reduced-motion emulation. Browser Date was frozen at 2026-11-02 22:00 UTC through the uploaded probe; native Date could not be frozen. Final replacement web recordings wait after DOM settlement so the painted terminal state is present. Two stills one second apart were acquired by that driver; earlier settled pairs additionally had AE0 checked explicitly. The exported finalizer retains cross-build pixel differences, not a per-shot settle-check certificate. Treat the final web settle-check retention as a verification limitation.

Android diagnostic environment: real Pixel 9 emulator, Android 16/API 36, 1080×2424 physical pixels, font scale 1.0, dark, animations off. Density/logical viewport were not retained, so are unverified. The dev client was installed with mobile:install; before/after native fingerprint was the same, `971743703b097b8870b39ff842d130f50b115eeb`. After used that installed native binary with the after checkout's Metro bundle and a cleared/freshly paired after environment. No iOS, tablet or Electron run was allocated within the budget. Both fixture repositories were private, owned, synthetic and disposable; no action was performed on the target repository's PRs.

Timing below is measured from the action click, t=0. It is a DOM observation clock, not a paint clock or a host-latency benchmark. The probe receives WebSocket messages after the app's listener; small negative UI-minus-reply values are the same event dispatch. Reads are requests initiated from action request through action reply+5s; initial page loads and seeding are excluded. Interrupted and restarted requests still count. Auth/preflight reads, the write, merge confirmation, normal refresh reads and metadata reads remain separate in the logs. No H gate was implemented, so these are live-path observations, not causal zero-reread proofs. Other read response bodies are omitted to keep uploads synthetic; action reply bodies are preserved.

What else changed:

- A01, A03 and A04 settled endpoints differ only in low-level avatar pixels at zero threshold: respectively 103, 200 and 301 pixels, maximum channel differences 8, 9 and 9. Diff16 is empty for each.
- A05 deliberately uses separate irreversible fixture PRs and source branches: query/PR number 8→9 and `proof-before`→`proof-after`, including checkout text. Those text changes and avatar pixels account for its endpoint diff (519 nonzero pixels; 240 above 16/255).
- B06, narrow-light A03 and GitCafe A03 are pixel-identical at zero threshold at the settled endpoint. Nothing else changed in those endpoint images.
- Android's file row/divider is missing after; status-bar/icon and initial cached-title/relative-time differences also prevent a controlled timing comparison. Its before recording includes a ghosted navigation transition. It is diagnostic only.
- Existing page overrides can remove a filtered row before the action reply on both builds. B06 already removed its last row around reply on before; the new detail state is the observable improvement. Merge's before refresh can show Merged before the action RPC returns. These recordings do not support a universal claim that every before UI waits for the action reply itself.

[timing-counts.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/99cbecaaffe21b80/timing-counts.json)
[host-counts-sanitized.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6730e7361fdfb0a2/host-counts-sanitized.json)
[android-rpc-sanitized.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/25210816b7bbf034/android-rpc-sanitized.json)
[diff-metrics.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/064d5b6c979be6cb/diff-metrics.json)

Raw full recordings: [proof-raw-recordings.tar.gz](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ad95ae6eac4c065d/proof-raw-recordings.tar.gz)

**A01 — GitHub web 1440×1000 dark**

Click Ready for review; keep the same-head one-file detail and one-row all-state list mounted.

| Run | Click | Action reply | Detail DOM changed | Detail / list RPC reads |
|---|---|---|---|---|
| Before | t=0 | t=1.8003s | t=2.5843s | 2 / 2 |
| After | t=0 | t=1.5057s | t=1.4990s | 1 / 2 |

| Before | After |
|---|---|
| [A01-proof-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/445a024c769bdec6/A01-proof-before.mp4) | [A01-proof-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4b987e7dfbfcc579/A01-proof-after.mp4) |

[A01-proof-before-rpc-sanitized.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fffd62c0c640cf1a/A01-proof-before-rpc-sanitized.json)

[A01-proof-after-rpc-sanitized.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/aa230c62bc8e630f/A01-proof-after-rpc-sanitized.json)

| Before | After | Diff0 | DiffT (>16/255) |
|---|---|---|---|
| ![A01-proof-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/66cf77139ec0dfdd/A01-proof-before.png)<br>[cc59f99e73][before] | ![A01-proof-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/55009bf99dbf4174/A01-proof-after.png)<br>[25ff493224][after] | ![A01-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4bbf5c9c3f7193af/A01-diff0.png)<br>[cc59f99e73][before] → [25ff493224][after] | ![A01-diff16.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8ba08c22fea319fc/A01-diff16.png)<br>[cc59f99e73][before] → [25ff493224][after] |

Full-surface comparison sheet: ![A01-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c6d5d978cd6aff3a/A01-sheet.png)

**A03 — GitHub web 1440×1000 dark**

Three open authored rows; More actions → Close pull request → Confirm close. Keep the acted detail and two siblings visible.

| Run | Click | Action reply | Detail DOM changed | Detail / list RPC reads |
|---|---|---|---|---|
| Before | t=0 | t=1.5703s | t=2.4542s | 2 / 3 |
| After | t=0 | t=1.7912s | t=1.7882s | 1 / 3 |

| Before | After |
|---|---|
| [A03-proof-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2936e4d27760cf08/A03-proof-before.mp4) | [A03-proof-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/081e1b80f1efec07/A03-proof-after.mp4) |

[A03-proof-before-rpc-sanitized.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/666ca60def3bc120/A03-proof-before-rpc-sanitized.json)

[A03-proof-after-rpc-sanitized.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1585922142af99bc/A03-proof-after-rpc-sanitized.json)

| Before | After | Diff0 | DiffT (>16/255) |
|---|---|---|---|
| ![A03-proof-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/947d65bfe2dddd5d/A03-proof-before.png)<br>[cc59f99e73][before] | ![A03-proof-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/834e79ef870dc3ca/A03-proof-after.png)<br>[25ff493224][after] | ![A03-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9f7aa01e01523f24/A03-diff0.png)<br>[cc59f99e73][before] → [25ff493224][after] | ![A03-diff16.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1fdd423b9fd2d32f/A03-diff16.png)<br>[cc59f99e73][before] → [25ff493224][after] |

Full-surface comparison sheet: ![A03-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1b29deee36e2932b/A03-sheet.png)

**A04 — GitHub web 1440×1000 dark, ordinary reopen only**

More actions → Reopen pull request. This does not implement the matrix permission/read gate or closed-filtered-list variant.

| Run | Click | Action reply | Detail DOM changed | Detail / list RPC reads |
|---|---|---|---|---|
| Before | t=0 | t=2.5576s | t=3.3285s | 2 / 3 |
| After | t=0 | t=1.9017s | t=1.8958s | 2 / 3 |

| Before | After |
|---|---|
| [A04-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/106f30bda9c213b6/A04-before.mp4) | [A04-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/46de15293da2e3e0/A04-after.mp4) |

[A04-before-rpc-sanitized.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eec439208a818a05/A04-before-rpc-sanitized.json)

[A04-after-rpc-sanitized.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4cf41abc6969bb0a/A04-after-rpc-sanitized.json)

| Before | After | Diff0 | DiffT (>16/255) |
|---|---|---|---|
| ![A04-settled-final-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2f8c7bd2ec8222b8/A04-settled-final-before.png)<br>[cc59f99e73][before] | ![A04-settled-final-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5bd3577391cf5cf1/A04-settled-final-after.png)<br>[25ff493224][after] | ![A04-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8d176ea6a2b7d872/A04-diff0.png)<br>[cc59f99e73][before] → [25ff493224][after] | ![A04-diff16.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3c3944570cb8018e/A04-diff16.png)<br>[cc59f99e73][before] → [25ff493224][after] |

Full-surface comparison sheet: ![A04-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ae1487b06c0fcf08/A04-sheet.png)

**A05 — GitHub web 1440×1000 dark**

Independent one-file PRs; all-state list filtered to the respective fixture; click Merge → Confirm merge. After returns merged state/time in the action reply; before performs a separate confirmation-summary read.

| Run | Click | Action reply | Detail DOM changed | Detail / list RPC reads |
|---|---|---|---|---|
| Before | t=0 | t=4.3479s | t=4.2708s | 2 / 4 |
| After | t=0 | t=3.4493s | t=3.4455s | 1 / 2 |

Host extra merge-confirmation `PullRequestSummary` reads: **1 before → 0 after**. GitHub `PullRequestCore` remains 2 on both live paths.

| Before | After |
|---|---|
| [A05-proof-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4b49d1df387ce884/A05-proof-before.mp4) | [A05-proof-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f33d64daa10ee16d/A05-proof-after.mp4) |

[A05-proof-before-rpc-sanitized.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1b20fe2c61bebbef/A05-proof-before-rpc-sanitized.json)

[A05-proof-after-rpc-sanitized.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6bd7fc52e13550f3/A05-proof-after-rpc-sanitized.json)

| Before | After | Diff0 | DiffT (>16/255) |
|---|---|---|---|
| ![A05-proof-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0f6093a6f5a5890a/A05-proof-before.png)<br>[cc59f99e73][before] | ![A05-proof-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1ae2105dfc0b5f95/A05-proof-after.png)<br>[25ff493224][after] | ![A05-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1f05038b8a98a51f/A05-diff0.png)<br>[cc59f99e73][before] → [25ff493224][after] | ![A05-diff16.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/681e2cee5e1a42f9/A05-diff16.png)<br>[cc59f99e73][before] → [25ff493224][after] |

Full-surface comparison sheet: ![A05-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3884bbddc3b9e83b/A05-sheet.png)

**B06 — GitHub web 1440×1000 dark**

Open filter and numeric search yield exactly one row. Hold Shift → the row’s quick Close control → release Shift; keep detail mounted and record the filtered empty result.

| Run | Click | Action reply | Detail DOM changed | Detail / list RPC reads |
|---|---|---|---|---|
| Before | t=0 | t=1.9534s | t=2.4482s | 1 / 2 |
| After | t=0 | t=2.1391s | t=2.0778s | 1 / 2 |

List 1→0 at approximately t=1.9515s before and t=2.1385s after; detail before changes 0.495s after reply, while after begins changing before the probe records the reply. `listStats` RPC 1→0; detail RPC remains 1→1. This is not proof that quick-close row removal itself became faster.

| Before | After |
|---|---|
| [B06-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a834474e0023d6a9/B06-before.mp4) | [B06-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d566838c991bcfca/B06-after.mp4) |

[B06-before-rpc-sanitized.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6382203f6cc14a33/B06-before-rpc-sanitized.json)

[B06-after-rpc-sanitized.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0af27a79e9822d8a/B06-after-rpc-sanitized.json)

| Before | After | Diff0 | DiffT (>16/255) |
|---|---|---|---|
| ![B06-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/430f3f978f48bb46/B06-before.png)<br>[cc59f99e73][before] | ![B06-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/aa1e98ecc3e60876/B06-after.png)<br>[25ff493224][after] | ![B06-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/50a0f33cf2c42b75/B06-diff0.png)<br>[cc59f99e73][before] → [25ff493224][after] | ![B06-diff16.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/463a5817994db92d/B06-diff16.png)<br>[cc59f99e73][before] → [25ff493224][after] |

Full-surface comparison sheet: ![B06-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/032fad0262e8e019/B06-sheet.png)

**A03 — GitHub web 390×844 light, static endpoint only**

Settled Closed detail drawer, same scroll position. No narrow interaction timing claim.

| Before | After | Diff0 | DiffT (>16/255) |
|---|---|---|---|
| ![A03-narrow-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/432954e9f96a7b28/A03-narrow-before.png)<br>[cc59f99e73][before] | ![A03-narrow-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0fcac9160d99975d/A03-narrow-after.png)<br>[25ff493224][after] | ![A03-narrow-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d114ed4e621a4f4a/A03-narrow-diff0.png)<br>[cc59f99e73][before] → [25ff493224][after] | ![A03-narrow-diff16.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/54ff087c39d8bd1b/A03-narrow-diff16.png)<br>[cc59f99e73][before] → [25ff493224][after] |

Full-surface comparison sheet: ![A03-narrow-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f50c1c2d4f146bfa/A03-narrow-sheet.png)

**A03 — GitCafe web 1440×1000 dark**

Three open authored rows on GitCafe; More actions → Close pull request → Confirm close, then retain the two siblings.

| Run | Click | Action reply | Detail DOM changed | Detail / list RPC reads |
|---|---|---|---|---|
| Before | t=0 | t=0.8152s | t=1.6504s | 2 / 3 |
| After | t=0 | t=0.7705s | t=0.7648s | 1 / 3 |

| Before | After |
|---|---|
| [A03-GitCafe-proof-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9ce5b053e1934ca9/A03-GitCafe-proof-before.mp4) | [A03-GitCafe-proof-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9141c055ec072537/A03-GitCafe-proof-after.mp4) |

[A03-GitCafe-proof-before-rpc-sanitized.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0c879f69082756a7/A03-GitCafe-proof-before-rpc-sanitized.json)

[A03-GitCafe-proof-after-rpc-sanitized.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/09fb306a190258c7/A03-GitCafe-proof-after-rpc-sanitized.json)

| Before | After | Diff0 | DiffT (>16/255) |
|---|---|---|---|
| ![A03-GitCafe-proof-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/057523a34f900c9d/A03-GitCafe-proof-before.png)<br>[cc59f99e73][before] | ![A03-GitCafe-proof-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d56d9f47c980d7f2/A03-GitCafe-proof-after.png)<br>[25ff493224][after] | ![A03-GitCafe-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a122ce93873dd09/A03-GitCafe-diff0.png)<br>[cc59f99e73][before] → [25ff493224][after] | ![A03-GitCafe-diff16.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d7b5152c5a3d9c7f/A03-GitCafe-diff16.png)<br>[cc59f99e73][before] → [25ff493224][after] |

Full-surface comparison sheet: ![A03-GitCafe-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d54e83af67be465c/A03-GitCafe-sheet.png)

**A03 — Android Pixel 9 dark, REJECTED diagnostic**

Native status menu → Close pull request → confirmation → return to the open-filtered list. Clock, initial cache and file-row mismatch invalidate the controlled pair.

Native server action durations: 1.350s before, 1.971s after. UI transition time is unverified; those durations are not a substitute for a controlled video measurement.

| Before diagnostic | After diagnostic |
|---|---|
| [A03-android-before-final.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/333dbcf71f7a75d8/A03-android-before-final.mp4) | [A03-android-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/56fc5ee11334ea1a/A03-android-after.mp4) |

| Before | After | Diff0 | DiffT (>16/255) |
|---|---|---|---|
| ![A03-android-before-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cff0fc24a4c919fe/A03-android-before-final.png)<br>[cc59f99e73][before] | ![A03-android-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/49612f1bfe76c643/A03-android-after.png)<br>[25ff493224][after] | ![A03-android-diagnostic-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/627f241437b16bb7/A03-android-diagnostic-diff0.png)<br>[cc59f99e73][before] → [25ff493224][after] | ![A03-android-diagnostic-diff16.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/30181043bdf6d046/A03-android-diagnostic-diff16.png)<br>[cc59f99e73][before] → [25ff493224][after] |

Full-surface comparison sheet: ![A03-android-diagnostic-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5cbba5e0fa5e1d78/A03-android-diagnostic-sheet.png)

**Unverified obligations — all 81 matrix rows**

“Budget” means no capture was produced within the 90-minute allocation. A linked test definition is source context only; this agent did not run it and it does not fill the capture row.

| Row | Fixture | Status / reason |
|---|---|---|
| A01 | Draft becomes ready | PARTIAL: GH W-D detail/list ready captured; preview/linked-summary readers, GC ready, GL void control, ADO harness and native variants unverified (budget). |
| A02 | Ready becomes draft | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| A03 | Close with siblings | PARTIAL: GH/GC W-D close plus N-L endpoint captured; native pair rejected; other required hosts/readers/profiles and causal gates unverified (budget/credentials). |
| A04 | Reopen with missing branch permissions | PARTIAL: ordinary GH W-D reopen only; missing-permission gated read, closed-list membership, other hosts and native variants unverified (budget). |
| A05 | Confirmed merge with merge time | PARTIAL: GH W-D live merge and confirmation count captured; matrix light/native and other-host void/harness controls unverified (budget/credentials). |
| A06 | Merge accepted but still open | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| A07 | Arm auto-merge, requirements pending | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| A08 | Disarm auto-merge | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| A09 | Enable auto-merge merges immediately | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| A10 | Update branch by merge, new head | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| A11 | Update branch by rebase, new head | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| A12 | Update already-current branch | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| A13 | Comment then close | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| A14 | Comment then reopen | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| A15 | State action rejected after optimistic list change | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| A16 | Delete source branch, void reply | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| A17 | Revert opens another change request, void reply | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| A18 | Approve workflows, void reply | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| B01 | Thread-details ready action | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| B02 | Thread-details merge action and watching | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| B03 | Thread row conflict/check control branches | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| B04 | Thread row without detail, with/without watch | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| B05 | Speed ready, quick actions change | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| B06 | Speed close removes final filtered row | PARTIAL: GH W-D final-row quick Close captured; GC quick Close and GL void control unverified (budget). |
| B07 | Speed reopen from closed list | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| B08 | Speed merged row in all list | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| B09 | Speed queued merge stays open | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| B10 | Quick-action availability guard | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| B11 | Close sweep batch, mixed outcomes | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| B12 | Thread linked-list quick action (snapshot reader) | Unverified: modern thread snapshot reader was not mounted or gated; source audit flags a separate snapshot path; runtime behavior unverified (budget). |
| B13 | Detail caller, tabs and condensed chrome | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| B14 | Markdown live hover and preview read | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| B15 | Context-chip hover, narrow and missing author | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| B16 | Hover failure independent of click | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| B17 | Tabs and composer exact/list lookup | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| B18 | Legacy/branch linked-summary readers | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| B19 | Modern linked badge and snapshot tab readers | Unverified: modern badge/tab snapshot readers were not captured; no detail recording is substituted (budget). |
| C01 | Draft filter membership and query precedence | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| C02 | Missing row in head versus cursor page | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| C03 | Web accumulated pages and newer override | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| C04 | Mobile appended pages beyond head | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| C05 | Sparse reply preserves rich detail and counters | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| C06 | Undefined reply and old-server compatibility | Unverified: no old-server/undefined-reply capture (budget). Service compatibility context: [apps/server/src/pullRequest/PullRequestService.test.ts:1210](https://github.com/pingdotgg/t3code/blob/25ff493224c0642222b93a0bd59bf315dfb447de/apps/server/src/pullRequest/PullRequestService.test.ts#L1210). |
| C07 | Saved reply survives cold/offline restart | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| C08 | Older host update wins over newer receipt | Unverified: no timestamp-order harness recording (budget). Related existing definition: [packages/client-runtime/src/state/pullRequests.test.ts:1362](https://github.com/pingdotgg/t3code/blob/25ff493224c0642222b93a0bd59bf315dfb447de/packages/client-runtime/src/state/pullRequests.test.ts#L1362). |
| C09 | Equal/missing update time, observation ordering | Unverified: no timestamp/observation harness recording (budget). Related existing definition: [packages/client-runtime/src/state/pullRequests.test.ts:1362](https://github.com/pingdotgg/t3code/blob/25ff493224c0642222b93a0bd59bf315dfb447de/packages/client-runtime/src/state/pullRequests.test.ts#L1362). |
| C10 | Never unmerge | Unverified: no never-unmerge harness recording (budget). Related existing definition: [packages/client-runtime/src/state/pullRequests.test.ts:1362](https://github.com/pingdotgg/t3code/blob/25ff493224c0642222b93a0bd59bf315dfb447de/packages/client-runtime/src/state/pullRequests.test.ts#L1362). |
| C11 | Read begun before action returns late | Unverified: no late-read harness recording (budget). Related existing definitions: [packages/client-runtime/src/state/pullRequests.test.ts:1207](https://github.com/pingdotgg/t3code/blob/25ff493224c0642222b93a0bd59bf315dfb447de/packages/client-runtime/src/state/pullRequests.test.ts#L1207) and [packages/client-runtime/src/state/pullRequests.test.ts:1259](https://github.com/pingdotgg/t3code/blob/25ff493224c0642222b93a0bd59bf315dfb447de/packages/client-runtime/src/state/pullRequests.test.ts#L1259). |
| C12 | Action while reader has no value or failed previous | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| C13 | Identity/account isolation and natural ref forms | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| C14 | Routed action, destination identity differs | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| C15 | Other client or agent action | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| C16 | Disconnected/read-only/unsupported guards | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| D01 | Native list context menu lifecycle | Unverified: native PR-screen status menu was exercised diagnostically; list context-menu callers were not captured (budget). |
| D02 | Native reviewers screen permission transition | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| D03 | Native files and inline-comment new head | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| D04 | Native guide/review/discussion readers | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| D05 | Electron shell integration | Unverified: no Electron run allocated in budget; web Chromium is not shell evidence. |
| D06 | Theme, width, counts and long-content sweep | Unverified: one narrow-light endpoint is present, but the theme/width/count/long-content sweep, iOS/tablet and native theme variants are not captured (budget/capacity). |
| F01 | GitHub checks: zero | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| F02 | GitHub checks: one | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| F03 | GitHub checks: 100 boundary | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| F04 | GitHub checks: 101, failure last | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| F05 | GitHub checks: continuation cap | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| F06 | GitHub checks: repeated cursor | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| F07 | GitHub checks: missing continuation | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| F08 | GitHub checks: head changes mid-walk | Unverified: no changing-head continuation recording (budget). Existing test definition: [packages/source-control-github/src/server/GitHubPullRequestApi.test.ts:3536](https://github.com/pingdotgg/t3code/blob/25ff493224c0642222b93a0bd59bf315dfb447de/packages/source-control-github/src/server/GitHubPullRequestApi.test.ts#L3536). |
| F09 | GitHub checks: reviewer field refused | Unverified: no reviewer-refusal recording (budget). Existing test definition: [packages/source-control-github/src/server/GitHubPullRequestApi.test.ts:3476](https://github.com/pingdotgg/t3code/blob/25ff493224c0642222b93a0bd59bf315dfb447de/packages/source-control-github/src/server/GitHubPullRequestApi.test.ts#L3476). |
| F10 | Merge summary missing timestamp / confirmation failure | Unverified: no missing-timestamp/confirmation-failure harness capture (budget). Existing definitions: [apps/server/src/pullRequest/PullRequestService.test.ts:1151](https://github.com/pingdotgg/t3code/blob/25ff493224c0642222b93a0bd59bf315dfb447de/apps/server/src/pullRequest/PullRequestService.test.ts#L1151) and [apps/server/src/pullRequest/PullRequestService.test.ts:1210](https://github.com/pingdotgg/t3code/blob/25ff493224c0642222b93a0bd59bf315dfb447de/apps/server/src/pullRequest/PullRequestService.test.ts#L1210). |
| F11 | Successful write, unusable host reply | Unverified: no malformed/empty-success reply harness recordings for the six adapters (budget); no claim that unit tests certify all malformed variants. |
| F12 | GitCafe stack succeeds, void reply | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| F13 | Stack partly merges then fails | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| F14 | Bitbucket async merge task, void | Unverified: no writable Bitbucket fixture credentials; no asynchronous-task harness capture within budget. |
| F15 | Forgejo state PATCH preserves conflict | Unverified: no writable Forgejo fixture credentials; no state-PATCH harness capture within budget. |
| F16 | Azure update JSON supplies lifecycle summary | Unverified: no authenticated Azure DevOps organization/repository; no az-JSON harness capture within budget. |
| F17 | GitLab cancel-auto sparse summary | Unverified: GitLab identity is available, but no owned auto-merge fixture or sparse-reply capture was produced (budget). |
| G01 | PR list capability/initial-loading ghosts | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| G02 | PR list total failure and retry | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| G03 | Partial host failure with retained rows | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| G04 | Empty list variants and carried search | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |
| G05 | Truncated footer and loading continuation | Unverified: no capture (budget); matrix host/profile/harness obligations remain open. |

Global residual host obligations: no ADO/Bitbucket/Forgejo live credentials were established; no provider-boundary H recordings were built. GitLab capture was omitted for budget, not an authentication failure. All Electron, iOS and tablet variants remain unverified. The live scenarios do not certify identity/account isolation, old-server compatibility, cross-client delivery or deterministic race/error paths.

**Reproduction and analysis files**

The following is ghdrop output verbatim. REPLAY.md supplies the state stages and final fixture mapping; the browser adapters require the T3 preview tool context. No seeds/drivers were committed.

[REPLAY.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/06bb669485d046fa/REPLAY.md)

[seed-github.sh](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ca9ac4d1e2fcfd63/seed-github.sh)

[seed-gitcafe.sh](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b42732c6a78d4002/seed-gitcafe.sh)

[seed-projects.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/19f9871df4a4c308/seed-projects.js)

[start-servers.sh](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ae36a9467cb55009/start-servers.sh)

[browser-probe.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1f14fe5ff19ec1f0/browser-probe.js)

[browser-driver.mjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/15773b1f1cebf8d3/browser-driver.mjs)

[capture-runtime.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/584e652e2a7f7775/capture-runtime.js)

[mobile-driver.sh](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7ffb982b3bf0d887/mobile-driver.sh)

[native-clock.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/50261bc7f2ff051c/native-clock.js)

[native-clock-debug.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f2cb5e43fb5afffe/native-clock-debug.cjs)

[native-eval.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/836f217c807ebd53/native-eval.cjs)

[host-counts.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/34a18258022cab4f/host-counts.cjs)

[prepare-videos.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/86c9de597d5e813b/prepare-videos.py)

[finalize.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2963347bf0eacdec/finalize.py)

[diffs.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/30c94db2eab35024/diffs.py)

[inspect-diffs.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c50231bd9909a074/inspect-diffs.py)

[analyze-rpc.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b0240281717a02d8/analyze-rpc.py)

[coverage-scripts.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/66c923f5b9f08666/coverage-scripts.md)

[matrix.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d25fae9ec8cb4ed0/matrix.md)

No implementation changes or target PR-body edits were made. Owned dev servers, Metro servers and browser tabs are stopped/closed; the mobile lease is released; both detached worktrees and this scratch directory are removed after upload. GitHub fixture deletion was refused with HTTP 403 because the token lacks delete_repo. All its PRs are closed/merged and the private repository is archived, with open_issues=0; an owner credential with delete_repo is still needed to delete [the archived fixture repository](https://github.com/juliusmarminge/t3-evidence-25761-r6b). GitCafe owner-delete was accepted; repo view now returns NOT_FOUND/404, while its deletion resource reports retained/native-retirement-unavailable. Capture/analysis: GPT-6.1-sol, Codex harness in T3 Code.

[before]: https://github.com/pingdotgg/t3code/commit/cc59f99e735300120a6fc74d9a0b9df7c98fa81c
[after]: https://github.com/pingdotgg/t3code/commit/25ff493224c0642222b93a0bd59bf315dfb447de
