## Evidence

Chromium 148.0.7778.96, headless on Linux x86_64; viewport 1440×900 CSS pixels; DPR 1. Both revisions ran as the real web app with fresh isolated databases, `T3CODE_DEV_SEED=0` and automatic cwd-project bootstrap disabled. Same driver and synthetic fixture data on each side.

Computed descriptions below come from CDP `Accessibility.getPartialAXTree` on `document.activeElement`, independently of the DOM label read. Raw outputs include the focused AX node, description relation and related button AX, native DOM IDREF/target/disabled state, highlighted row, focus history, and the complete scoped palette AX subtree. Each cell links to its raw JSON.

| Fixture | Before ([41443e5706](https://git.cafe/pingdotgg/t3code/commit/41443e5706c4605bc3efc17bcf431970488a146d)) | After ([2ac1b7da14](https://git.cafe/pingdotgg/t3code/commit/2ac1b7da140b2520750cb047dc8c1b5bc2ef980b)) |
|---|---|---|
| AX0 | [none → none](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/678b131f12e371d7/before-AX0.json) | [Add (Ctrl Enter) → Continue (Enter)](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1a92ad2ca9ef7488/after-AX0.json) |
| F1 | [none](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/941a3897ca0611bb/before-F1.json) | [Create & Add (Enter)](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/aa2e4d5ad403e11b/after-F1.json) |
| F3 (platform harness) | [none](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ffd61d079e3d6202/before-F3.json) | [Add (⌘ Enter)](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/70435cbf509c6dc1/after-F3.json) |
| F4 | [none](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e1c85ce7cdb07881/before-F4.json) | [Add (Enter)](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b05c4c165cfa72b5/after-F4.json) |
| R2 (RPC harness) | [none → none → none](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2760051c2ab9026e/before-R2.json) | [Lookup (Enter) → Lookup (Enter) → Lookup (Enter)](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/67b23e668c2abba7/after-R2.json) |
| D1 | [none](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/49d9c59800ccc5b9/before-D1.json) | [Clone (Enter)](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/66c1735fdef256f9/after-D1.json) |
| D2 | [none](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cf126f2c7d7a44a4/before-D2.json) | [Clone (Ctrl Enter)](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e8e604681bc231b3/after-D2.json) |
| D4 (RPC harness) | [none → none → none](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3d9a60aee4a5e5e4/before-D4.json) | [Create & Clone (Enter) → Create & Clone (Enter) → Create & Clone (Enter)](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5d0d51f4f49695a2/after-D4.json) |
| D6 | [none](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f361caba94efef4c/before-D6.json) | [none](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/aa1d67806bef9a15/after-D6.json) |
| N5 (RPC harness) | [none → none → none](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/180c99fb4740c323/before-N5.json) | [Create (Enter) → Create (Enter) → Create (Enter)](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/786390b3a685ba4c/after-N5.json) |
| T0 | [none → none → none](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8d0fd23dfbfe35bc/before-T0.json) | [Add (Enter) → Add (Ctrl Enter) → Create & Add (Enter)](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/94dd56e9d833c951/after-T0.json) |
| T1 | [none → none → none → none → none](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1562c6150dfba0e5/before-T1.json) | [Continue (Enter) → Create & Clone (Enter) → none → Create & Clone (Enter) → none](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5097e9bf5e5ae677/after-T1.json) |
| T2 | [none → none → none](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/66170014acf57882/before-T2.json) | [Add (Ctrl Enter) → Add (Ctrl Enter) → Add (Enter)](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5bee3a641a70a735/after-T2.json) |
| T3 | [none → none → no combobox (closed) → none → none](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/14928e1c55cd0779/before-T3.json) | [Add (Enter) → none → no combobox (closed) → none → Add (Enter)](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e9c15e5e5a940657/after-T3.json) |

AX0 includes an enabled highlighted local-folder target and a disabled empty Git URL target. R2/D4/N5 each record ready → held pending → released failure; the pending visible texts are Working, Cloning, and Creating while their computed descriptions remain the action labels shown above. All live combobox samples are focused.

F3 is a Linux Chromium client with `navigator.platform=MacIntel` installed before page load. R2/D4/N5 use synthetic authenticated source discovery, a common synthetic new-project root, and a WebSocket harness that holds the relevant request before forwarding, then supplies a synthetic failure. No clone, project creation or remote publication executes. Onboarding uses a synthetic empty history scan, and no real history is imported. Other requested states use the real app and filesystem browsing.

Ordered timestamped logs: [Before trace log](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cd5b91d7e49cf55b/before-traces.md) · [After trace log](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c0d5345c1f6e868d/after-traces.md). Reproduction and synthetic filesystem seeding: [capture driver](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e59ca000ccd06660/capture.mjs) · [server launcher](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/22c311084fa416a1/start-server.py). Driver SHA-256: `e4222c25db94423256623723a4816fbb81364396af2e4591e8b0ed0eebe8c30e` on both sides.

What else changed: the combobox AX `describedby` relation points at the submit button, whose DOM now has an ID. React IDs and CDP node IDs vary between isolated sessions. After normalizing those generated IDs and excluding the new combobox description/relation, no other differences were found in the exposed palette roles, names, values, states, other relations or duplicate node counts across the 33 matched states per side. See [comparison output](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0caf97d1737be110/comparison.json) and [comparison/package script](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d37ce3195d79723f/package-evidence.py).

Coverage: 14/14 requested fixtures on both sides; 66 total captured states. Unverified requested rows: none. This measures browser accessibility data; no NVDA/VoiceOver speech claim. Web was exercised; desktop shares this changed component. Native mobile has no changed call path. No code changes, commits, PR edits or additional tests were made. The prior eight-row DOM probe table remains supporting DOM-association evidence.

Cleanup: both dev servers and all capture browser contexts were stopped; the temporary before worktree was removed. The after checkout has no tracked changes.

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

## Uploaded artifacts

[after-AX0.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1a92ad2ca9ef7488/after-AX0.json)
[after-D1.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/66c1735fdef256f9/after-D1.json)
[after-D2.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e8e604681bc231b3/after-D2.json)
[after-D4.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5d0d51f4f49695a2/after-D4.json)
[after-D6.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/aa1d67806bef9a15/after-D6.json)
[after-F1.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/aa2e4d5ad403e11b/after-F1.json)
[after-F3.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/70435cbf509c6dc1/after-F3.json)
[after-F4.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b05c4c165cfa72b5/after-F4.json)
[after-N5.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/786390b3a685ba4c/after-N5.json)
[after-R2.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/67b23e668c2abba7/after-R2.json)
[after-T0.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/94dd56e9d833c951/after-T0.json)
[after-T1.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5097e9bf5e5ae677/after-T1.json)
[after-T2.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5bee3a641a70a735/after-T2.json)
[after-T3.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e9c15e5e5a940657/after-T3.json)
[after-traces.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c0d5345c1f6e868d/after-traces.md)
[before-AX0.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/678b131f12e371d7/before-AX0.json)
[before-D1.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/49d9c59800ccc5b9/before-D1.json)
[before-D2.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cf126f2c7d7a44a4/before-D2.json)
[before-D4.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3d9a60aee4a5e5e4/before-D4.json)
[before-D6.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f361caba94efef4c/before-D6.json)
[before-F1.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/941a3897ca0611bb/before-F1.json)
[before-F3.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ffd61d079e3d6202/before-F3.json)
[before-F4.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e1c85ce7cdb07881/before-F4.json)
[before-N5.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/180c99fb4740c323/before-N5.json)
[before-R2.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2760051c2ab9026e/before-R2.json)
[before-T0.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8d0fd23dfbfe35bc/before-T0.json)
[before-T1.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1562c6150dfba0e5/before-T1.json)
[before-T2.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/66170014acf57882/before-T2.json)
[before-T3.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/14928e1c55cd0779/before-T3.json)
[before-traces.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cd5b91d7e49cf55b/before-traces.md)
[capture.mjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e59ca000ccd06660/capture.mjs)
[comparison.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0caf97d1737be110/comparison.json)
[package-evidence.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d37ce3195d79723f/package-evidence.py)
[probe.mjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5a540487f452413a/probe.mjs)
[probe2.mjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ded3676b768d5148/probe2.mjs)
[start-server.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/22c311084fa416a1/start-server.py)
[upload-evidence.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/22a16a7874bcd47b/upload-evidence.py)

## Reproduction

Create the before checkout and install its dependencies as specified in the brief. Start each side from its checkout with the uploaded server launcher, wait for its pairing URL, then run `node capture.mjs before` and `node capture.mjs after`. The driver mints a fresh token per context and keeps credentials out of the saved output. It writes each run to a new UTC-timestamped directory. Run `python3 package-evidence.py` once both runs finish. The exploratory `probe*.mjs` files are retained for transparency and were not used as the final matrix driver.

## Friction

- tool | Browser panel lacks the required computed AX description API; two evaluation attempts failed | Expose CDP accessibility descriptions through preview tools.
- runbook | Automatic cwd bootstrap and consumed startup pairing tokens did not match fresh empty-workspace sessions | Disable cwd bootstrap and mint a token for each browser context.
- tool | Onboarding navigation races, aria-hidden Back control and generic dialog locators interrupted exploratory runs | Wait for the welcome route, target the Back DOM control, and scope dialog locators to Command palette.
- tool | Split initial RPC frames bypassed a first config harness override | Reassemble framed RPC messages before applying synthetic config.
