Proof audit, pass 1 — [#32576](https://git.cafe/pingdotgg/t3code/pull/32576)

Evidence is **insufficient for the complete fixture matrix**. This is an evidence finding, not a demonstrated implementation defect. No pixel captures are needed: the production diff adds an ID and an `aria-describedby` association and changes no styles, visible content, layout, keyboard handler, or focus handler. The useful capture is the focused combobox’s computed accessibility description, its description sources/related node, and the DOM association. Dynamic rows need a sequence of accessibility snapshots, not a video of unchanged pixels.

The existing eight-row PR-body table is useful DOM-association evidence. Its method explicitly reads the input’s `aria-describedby` and the referenced element’s `aria-label`; that is not a browser accessibility-tree measurement. Preserve those samples, but identify their values as **referenced button labels**, not independently measured input AX descriptions. The four added browser-test cases assert accessible-description patterns for folder, highlighted folder, repository, and new-project states; they are supporting evidence and do not cover the remaining branches or pending text. AX0 below supplies the missing browser-level qualification. No NVDA/VoiceOver utterance claim is required for this change.

Missing distinct output/state branches include Create & Add, existing clone destination, highlighted clone destination, the client macOS modifier, all three pending button texts, and a trace showing description updates/removal across input/highlight/remount transitions. A fresh database does not itself provide authenticated source-control hosts, multiple environments, permission-restricted sessions, or deterministic RPC delays; those prerequisites are identified below rather than assumed.

Reviewed checkout: `/home/user/wt/pr-32576`, local merge [2ac1b7da14](https://git.cafe/pingdotgg/t3code/commit/2ac1b7da140b2520750cb047dc8c1b5bc2ef980b) (unpushed at audit time), against [41443e5706](https://git.cafe/pingdotgg/t3code/commit/41443e5706c4605bc3efc17bcf431970488a146d). The published head and the existing after samples are [2cb4003716](https://git.cafe/pingdotgg/t3code/commit/2cb4003716448d196eb092f7ab2baee3af1c2f17). The before samples use [25bf84ab07](https://git.cafe/pingdotgg/t3code/commit/25bf84ab07f53f141c20239c63e383823a9d5ea0). I compared both intervening diffs: the added submit association, label/shortcut expressions, wrappers and relevant add-project handlers are unchanged by the merge. Main only changes unrelated palette actions and preferred-project ranking in these files. Existing branch coverage therefore carries forward; it does not constitute a runtime run of the local merged head. PR metadata was read on 2026-11-10; its published head was still the older head.

**Complete caller/render-path inventory**

| Changed component/path | Every caller or render branch | Consequence for fixtures |
|---|---|---|
| `CommandPalette` → `CommandPaletteDialog` → `OpenCommandPaletteDialog` | The only production mount of the web component is `routes/__root.tsx`’s app shell, including Welcome and the ordinary app. `CommandPaletteDialog` calls the changed inner component only in mode `command`; modes `files` and `content` render separate components. Its props are `openIntent`, `setOpen`, `openChildSearch`, `initialContext`, with a session key. Tests also mount it in `CommandPalette.browser.test.tsx` and `CommandPalette.composition.browser.test.tsx`. | One app-shell implementation for web and Electron; command/non-command, session replacement, restored-search, root/submenu and path/non-path partition the relevant space. `children` does not choose the new association. |
| Add-project entry points | `NoProjectsHero`; Sidebar’s `openAddProjectCommandPalette` (both project-picker New project callback and Add project button); `DraftHeroHeadline` (picker Add project and no-project Add project button); `PullRequestListEmptyState`; palette’s own Add project action; New project’s Add existing project row; Open WSL folder palette action. All converge on the same source/browse functions or bus intent. | No separate screenshot per entry point. Empty-workspace Add project is sufficient for the source/submenu route; direct root path and direct New project are also listed because they bypass source selection. |
| Other open intents | `openCommandPalette` dispatches ordinary open, Add project, New thread in, or search (including linked-thread data from `PullRequestThreadLinks`). `commandPaletteCommands` dispatches command/files/content toggles and Change theme. `chatRouteCommands` and Sidebar dispatch New thread in. Palette actions can enter file/content child searches and restore query/link context on Escape. | Ordinary actions, settings search, linked-thread search, New thread in, themes/appearance, environment chooser and source list share the no-accessory branch unless a filesystem-looking query activates browse. |
| `CommandPaletteSubmitButton`, caller 1 | `newProjectFlow !== null`, before both other conditions. `id=submitButtonId`, visible label Create/Creating, shortcut from any non-null highlighted item, action aria-label and tooltip `Create (…)`, disabled when empty/creating/disconnected, callback `submitNewProject`. | N rows. Name, root, selected environment and publish data change summary/results and button availability, but only highlight and client platform alter this action’s shortcut. |
| `CommandPaletteSubmitButton`, caller 2 | Otherwise `addProjectCloneFlow.step === repository`. `id` is the same generated ID. Source URL gives Continue, every registered source-control provider gives Lookup. Visible label Working while pending; shortcut always Enter; disabled on empty/disconnected/pending; callback `submitAddProjectCloneFlow`. | R rows. Source-specific placeholders/icons and repository metadata do not introduce another submit-label formula. A Git URL does not perform the provider lookup’s asynchronous Working transition in the normal flow. |
| `CommandPaletteSubmitButton`, caller 3 | Otherwise `isBrowsing`. Same ID. Add/Create & Add outside clone confirmation; Clone/Create & Clone inside confirmation. Highlight changes shortcut; pending confirmation changes visible text to Cloning. Disabled by operate permission, connection phase, unresolved relative path, and clone-specific source-control permission/pending state. Callback either adds typed path or submits clone destination. Tooltip can contain permission guidance rather than the action label. | F and D rows. This branch also runs for a filesystem query typed directly at palette root or another submenu, not only Add project → Local folder. |
| No submit button | Otherwise `inputAccessory=null`; input receives `aria-describedby=undefined`. Clone confirmation with a non-filesystem query is also here. Closed dialog has no exposed focused palette input. | Z rows and D6. Removal is as important as installation: no dangling IDREF on the new input. |
| Submit-button DOM | `CommandPaletteAddProject.tsx` only changes `CommandPaletteSubmitButton`; other exports in that module are unchanged. One TooltipTrigger renders one outline/xs Button with the passed ID, action aria-label, disabled flag, visible label span and shortcut KbdGroup. `tabIndex=-1` and mouse-down `preventDefault` are unchanged. Tooltip content is separate. | Check ID uniqueness/resolution and computed description at the input. Do not infer that the button’s aria-label or its own tooltip is necessarily the input’s computed description; capture the actual value. |
| Input plumbing | `CommandPaletteContent` passes input props to `CommandInput`, then `AutocompleteInput`, Base UI, and the native input. The accessory is its sibling. Content remounts on view depth, browse generation, browse/non-browse, new-project/clone step. `useId` belongs to the outer inner-dialog component and survives those content remounts; a new session gets a new mount. | AX0 and T rows cover the ID reaching the native combobox and remaining valid across remounts. No changed web component is imported by mobile. Mobile has its own native hardware-keyboard palette and AddProject navigation; the PR’s “no equivalent palette” should be understood as no equivalent changed add-project submit path, not absence of a native palette. |

Sources: [submit construction/input association](https://git.cafe/pingdotgg/t3code/blob/2cb4003716448d196eb092f7ab2baee3af1c2f17/apps/web/src/components/CommandPalette.tsx#L2751), [label/shortcut/disabled selectors](https://git.cafe/pingdotgg/t3code/blob/2cb4003716448d196eb092f7ab2baee3af1c2f17/apps/web/src/components/CommandPalette.tsx#L2378), [keyboard handler](https://git.cafe/pingdotgg/t3code/blob/2cb4003716448d196eb092f7ab2baee3af1c2f17/apps/web/src/components/CommandPalette.tsx#L2463), [button](https://git.cafe/pingdotgg/t3code/blob/2cb4003716448d196eb092f7ab2baee3af1c2f17/apps/web/src/components/CommandPaletteAddProject.tsx#L36), [input wrapper](https://git.cafe/pingdotgg/t3code/blob/2cb4003716448d196eb092f7ab2baee3af1c2f17/apps/web/src/components/CommandPaletteContent.tsx), [native palette](https://git.cafe/pingdotgg/t3code/blob/41443e5706c4605bc3efc17bcf431970488a146d/apps/mobile/src/features/keyboard/CommandPalette.tsx).

**Fixture reduction and data contract**

Use a fresh isolated dev database with `T3CODE_DEV_SEED=0 vp run dev`, follow any first-run gate, and pair with that dev server. This is the requested empty-workspace scenario; do not seed live projects, change the live installation, or copy credentials into evidence. Read actual ports from startup. No server was launched by this audit.

For filesystem fixtures, the capturer can create an existing directory `fixture-fs/existing/` and a sibling `fixture-fs/parent/child/` beneath their own step’s scratch directory, and reserve an absent leaf `fixture-fs/missing-leaf` without creating it. Type the full absolute path; no base-directory setting change is needed. An existing empty clone destination and an absent clone destination are distinct data. A public disposable Git remote can be used for repository input; reaching confirmation from Git URL requires no network lookup and no actual clone. For deterministic pending states, hold the relevant dev RPC response in the capture harness; do not rely on a fast operation remaining pending long enough. If using real creation, use only isolated dev state and disposable local destinations; publishing a real remote repository is unnecessary.

`willCreateProjectPath` is true only for a submittable browse path, no browse request pending, no browse-access error, nonempty query, no highlighted browse item, and either no result for a trailing-separator query or no exact entry for a leaf query. Consequently highlighting a missing destination changes Create & Add → Add or Create & Clone → Clone as well as adding the modifier. Pending browse, permission failure and relative-without-active-project suppress the Create prefix. Successful submit closes the palette and failed submit/lookup leaves its relevant step; those outcomes are represented by the pending traces. Other global palette command branches (pin, jump/new-thread shortcuts, find and copy-reference) and normal result activation are unchanged; they reduce to the current state or closed-state control rather than another submit-description formula. The environment OS controls filesystem syntax (Windows drive/UNC versus POSIX/home/relative); **the browser’s `navigator.platform` controls Ctrl versus ⌘**, even when connected to a remote environment of another OS.

`newProjectFlow` needs an environment with non-null `newProjectsRoot`; the PR adds that field only to its browser-test mock, matching real server configuration. Publish targets are a data-driven list of ready source-control hosts: zero gives no publish row, one gives a single-host row, multiple adds a host picker. Multiple eligible environments add environment rows and a summary location. Those result shapes and GHQ clone layout are recorded as equivalent variants, since the new association is identical. The matrix is a basis over distinct selectors and state transitions, not a Cartesian product of themes, hosts, names, paths and platforms.

The unchanged layout selectors were also inventoried: input end padding is 38 for highlighted new-project rows, 32 for repository/new-project inputs otherwise, and browse padding is 38 for Create-prefix actions, 30 for highlighted browse rows or 24 otherwise. Placeholders distinguish Project name, source-specific repository input, root/submenu search and root/submenu browse. Start addon is Back in a submenu, FolderPlus in root browse, Search otherwise; submenu footer has a Backspace hint. Footer action is Create/Toggle/Select in new-project flow, Continue/Lookup at repository input, Select for highlighted or non-submittable browse, otherwise absent. Browse permission/loading states add alert/status content, while repository/new-project summaries and publish/environment groups vary as described above. These are all unchanged visual branches and do not create a pixel-capture requirement for the added IDREF.

In the table, the **target label** is the code’s `aria-label` on the referenced submit button, not a fabricated AX observation. The actual computed input description must contain the action/working context and the right Enter/modifier hint; preserve the browser’s actual punctuation/text, especially when visible text and aria-label differ. Every positive row is affected by the diff adding the association; negative controls exercise its new conditional omission. Existing samples are credited as DOM association coverage. “Covered” below does not imply the audit independently ran the app or measured assistive-technology speech. AX0 explicitly qualifies that remaining evidence gap once, rather than requesting duplicate DOM samples for every already-covered row.

Minimum column: **Yes** means a distinct missing/insufficient capture to add. **Existing** means retain the PR’s existing sample. **Equivalent** means a listed render path whose changed behavior is covered by the named representative; it does not require another runtime capture. Every new capture should include AX output. No row needs a pixel screenshot or pixel video. “Trace” means ordered AX/DOM states with the triggering event and focus recorded.

| ID / named fixture | Data and state; expected target label | Diff affected? | Put the real fresh app into this row / harness boundary | Minimum / temporal evidence | Existing PR-body coverage and status |
|---|---|---|---|---|---|
| AX0 — native focused-combobox mapping | Existing-path browse, highlight `..`; actual focused native input, IDREF resolves to exactly one submit button, target `Add (Ctrl Enter)`; include one disabled target from fresh Git URL entry. | Yes, shared across all three callers | Real app: open Local folder, type existing scratch directory, ArrowDown; then Back → Git URL with empty input. Capture AX and DOM on the local merged head. Before baseline can reuse existing DOM evidence, with one baseline AX read if making an explicit browser-level before/after claim. | **Yes**; static AX reads, including disabled target | **Insufficient**: current table reads referenced aria-label, not computed Chromium AX description; no raw focused-combobox AX or relation source is attached. The four pattern tests support, but do not replace, this runtime qualification. |
| Z0 — root/non-path search | No new/clone flow, query empty or ordinary search; no accessory, no IDREF, no submit description. | Guard control | Real app: Ctrl+K/Cmd+K; use empty or normal search text. | **Existing** | **Covered**: Root search row says none before and after. |
| Z1 — source selection/back | One connected environment; Add project source list; no accessory/IDREF. | Guard control | Real app: empty-workspace Add project; from a flow, Back to source list. | **Existing**; removal also appears in T1 | **Covered**: “Root search / back at the source list” records none. |
| Z2 — other no-button views | Connect-an-environment fallback, choose-environment list, New thread in, theme/appearance submenu, settings/action search, linked-thread search: non-path query, no new/clone flow. | Same omission guard | Some are real with one fresh server (theme/search/New thread in); zero/multiple environments need a catalog fixture or additional isolated environments; linked threads need fixture data. Label the unavailable variants **harness**. | **Equivalent** to Z0/Z1; no additional capture | **Missing literally; covered by equivalence**: these all select the identical null-accessory branch. No requirement to manufacture environments or threads for this diff. |
| Z3 — child overlays and closed state | Mode files/content renders a different component; closed dialog exposes no focused palette input. | No changed inner component in these branches | Real app: palette Go to file/Search project contents (project needed for meaningful results), Escape back; close/reopen palette. | **Equivalent**; T3 covers session reopen | **Missing literally; outside changed render branch**. No standalone child-overlay screenshot is needed. |
| F0 — local existing path, unhighlighted | Existing trailing-separator directory with browse result; Add (Enter), enabled. Exact existing leaf without trailing separator is equivalent. | Yes, browse caller | Real app: Add project → Local folder; fill existing scratch path; leave rows unhighlighted after typing. | **Existing** | **Covered (DOM)**: Local folder `/tmp/` typed, before none / after Add (Enter). Exact-leaf syntax adds no independent changed branch. |
| F1 — local missing path | No exact entry, completed browse, permissions granted, no highlight; Create & Add (Enter). | Yes, distinct action label | Real app: fill reserved absent scratch leaf, wait for actual browse result completion. | **Yes**, static AX | **Missing**: no Create & Add row. |
| F2 — local highlighted row, Ctrl client | Existing path; highlight parent or directory; Add (Ctrl Enter). Highlighting an absent typed leaf also suppresses Create prefix. | Yes, browse highlight | Real app: existing path → ArrowDown to `..`; another ArrowDown can select a child. | **Existing**; AX0/T0 add missing qualification/update trace | **Covered (DOM)** for `..`; parent and child share `startsWith("browse:")`, so no separate child capture. |
| F3 — local highlighted row, Mac client | Same data as F2, browser reports Mac platform; Add (⌘ Enter). | Yes, platform branch | Real app in a Mac browser, including remotely connected to the same dev server. On this Linux capture host, a navigator-platform override before app load is **harness**, and must be labelled as such. Changing server OS is not sufficient. | **Yes**, static AX (can reuse T0 sequence on Mac) | **Missing**: body explicitly excludes macOS label at runtime. |
| F4 — root path browsing | Root, not source submenu; existing path gives Add (Enter), absent path gives Create & Add (Enter); no Back addon. | Yes, broader reach of browse caller | Real app: Ctrl+K/Cmd+K and type existing absolute scratch path directly, without entering Add project. | **Yes**, combine with T3’s root path → ordinary text trace | **Missing**: “Root search” with no submit is not root path browse. |
| F5 — relative path with no active project | Fresh workspace, `./missing-leaf`; isBrowsing true, no active cwd, rows suppressed and disabled target Add (Enter). | Yes, disabled/empty-result variant | Real app: Local folder or root input → `./missing-leaf` with no project/thread selected. With an active same-environment project this reduces to F0/F1. | **Equivalent** disabled IDREF to AX0; no extra capture | **Missing literally; covered by disabled-target qualification in AX0**. Relative-path result copy/layout is unchanged. |
| F6 — browse loading, browse denial, or lost operate/connection | Pending browse or access error suppresses Create prefix; denied operate/disconnected retained target also disables submit. Existing path/no highlight gives Add (Enter). | Yes, same label/disabled output | Not deterministic in a normal connected fresh session. **Harness**: hold filesystem browse, provide denied read/operate grants, or retain the selected environment while changing connection phase. Do not shut down someone else’s server. | **Equivalent** to F0/AX0 and pending-label measurement in busy rows | **Missing literally; no separate required capture**: status/alert and reason-specific tooltip are unchanged and not directly referenced by the input. |
| R0 — Git URL repository entry | Source=url, step=repository; Continue (Enter); empty disabled, nonempty connected enabled. No browse even if text resembles a path. | Yes, repository caller | Real app: Add project → Git URL; leave blank, then enter a disposable Git URL. | **Existing** label; empty disabled state in AX0; transition in T1 | **Covered (DOM)** for Continue label, but body does not state query or disabled flag. AX0 fills that qualification; no need to duplicate an enabled static-label row. |
| R1 — provider repository entry | Any ready registered host; step=repository; Lookup (Enter), blank disabled / nonempty enabled. Host-specific placeholder/icon varies. | Yes, source branch | Real app only if that source-control CLI/host is already discovered ready/authenticated; fresh DB alone does not establish it. Otherwise **harness** discovery with a ready provider. One host suffices for all providers. | **Existing** | **Covered (DOM)**: GitHub repository → Lookup (Enter). Other hosts share the same source != url branch. |
| R2 — provider lookup working | Nonempty provider repository, request unresolved; visible Working, target Lookup (Enter), disabled. A forced/retained pending flag with URL source instead targets Continue (Enter), an equivalent combination of R0 and this pending state. | Yes, label-vs-name pending variant | Real app can reach it by pressing Enter on R1; for a stable capture use a **harness** that holds the repository RPC response. Capture pending before releasing to success or failure. | **Yes**, trace before → pending → success/failure | **Missing**: no Working row; existing Lookup static row cannot establish the description when visible text differs. |
| D0 — clone destination absent | Confirm flow from Git URL or provider; no exact target directory, no highlight, browse complete; Create & Clone (Enter). Repository summary may have metadata or URL only. | Yes, clone-create label | Real app: Git URL → fill disposable URL → Enter; replace destination with an absent scratch leaf, leave unhighlighted. No clone execution needed. | **Existing**; step transition in T1 | **Covered (DOM)** after only. Before not probed, but baseline lacks the association uniformly; no need to repeat every baseline step. |
| D1 — clone destination existing | Confirm flow, exact existing destination, no highlight; Clone (Enter). | Yes, distinct clone action label | Real app: get to D0, fill an existing empty scratch destination and wait for browse result. | **Yes**, static AX | **Missing**: existing Create & Clone evidence is not the Clone branch. |
| D2 — clone destination highlighted | Confirm flow, browse parent/child highlighted; Clone (Ctrl Enter), including when typed destination itself is absent. | Yes, clone + highlight | Real app: destination under an existing scratch parent → ArrowDown; verify browse row is highlighted. | **Yes**, preferably trace D0/D1 → highlight | **Missing**: highlighted Local folder only covers Add, not clone action selection and Create-prefix suppression. |
| D3 — clone destination highlighted, Mac | D2 with Mac client; Clone (⌘ Enter). | Yes, platform combination | Real Mac client or explicitly labelled platform-override **harness**, as F3. | **Equivalent** to D2 + F3’s shared `addShortcutLabel`; no extra capture | **Missing literally; no independent required capture**. |
| D4 — clone submission pending | New destination, no highlight, unresolved startProjectClone command; visible Cloning, target Create & Clone (Enter), disabled. Existing destination instead has target Clone (Enter); highlighted gives Clone (Ctrl/⌘ Enter). | Yes, pending clone text/disabled | Real app: submit disposable local clone destination; reliable pending capture needs a **harness** holding startProjectClone response. This state lasts for start acknowledgement, not the whole background clone. | **Yes**, trace ready → pending → command result; one variant suffices | **Missing**: no Cloning row. Alternative target labels are covered by D1/D2 and shared shortcut logic; no busy Cartesian product needed. |
| D5 — clone unavailable/relative | Confirm destination but source-control-write or operate grant absent, disconnected retained environment, or relative path without active cwd; disabled Clone (Enter) when unhighlighted; permission tooltip differs. | Yes, disabled/tooltip branch | **Harness** for restricted grants/connection, or real fresh app with `./missing-leaf` for relative-path guard. | **Equivalent** to D1 + AX0; no extra capture | **Missing literally; no independent required capture**. Tooltip text is not the input’s direct description target. |
| D6 — confirm flow with non-path query | Confirm state retained, query `plain-name`; isBrowsing false, no accessory, no IDREF. An empty query has this same omission unless a truthy current-view initialQuery triggers pop; the Git URL view normally starts with an empty initialQuery. | Yes, omission inside clone flow | Real app: reach clone confirmation, replace destination with `plain-name`; then return to a valid absolute path. | **Yes**, combine with T1; ordered AX states | **Missing**: source/root no-button examples do not show this transition. |
| N0 — empty New project | New project eligible root, blank name, no highlight; Create (Enter), disabled; blank-name summary. | Yes, disabled new caller | Real app: source list → New project, or root New project command, leave name blank. | **Equivalent** to N1 + AX0 for disabled target | **Missing in runtime table**; new browser-test case explicitly opens this state and asserts a Create/Enter description. No separate runtime capture needed once AX0 qualifies disabled targets. |
| N1 — named New project | Name `demo`, connected, no highlight; Create (Enter), enabled; named-path summary. | Yes, new caller | Real app: New project → fill disposable name; do not submit. Direct root New project and source-list New project converge here. | **Existing** | **Covered (DOM)**: New project `demo` typed. No real project must be created for this static row. |
| N2 — highlighted New project option | Named project, highlight publish row (publish false or true); Create (Ctrl Enter); footer Enter action becomes Toggle. | Yes, new highlight branch | Real app if at least one ready publish target; otherwise **harness** discovery. Arrow to option; plain Enter toggles; modifier+Enter submits name. | **Existing**; update trace in T0 can use existing-project row without host auth | **Covered (DOM)**: publish row highlighted. Checked state does not change the referenced button label. |
| N3 — other highlighted New project rows/data shapes | Highlight environment row or Add existing project row; Create (Ctrl Enter), footer Select. Zero publish targets omits option row; one adds option; multiple adds host picker. Multiple eligible environments add machine group/checkmark/location summary. Switching host/environment updates those results. | Yes, same non-null-highlight selector | Add existing project row is real even with no ready hosts. Multiple environments/hosts require available data or labelled **harness**; selected environment becoming unavailable is also a harness variant. | **Equivalent** to N2; no extra static capture; Add existing path can be used in T0/T1 | **Missing literally; covered by equivalence**: create shortcut tests any non-null highlight, not publish-specific data. No per-host/name/environment screenshot required. |
| N4 — highlighted New project, Mac | N2/N3 with Mac client; Create (⌘ Enter). | Yes, second shortcut selector | Real Mac browser or explicitly labelled platform **harness**. | **Equivalent** to N2 + F3’s shared modifier source; no extra capture | **Missing literally; no independent required capture**. F3 qualifies platform; new-project highlight has its own existing Ctrl sample. |
| N5 — New project creating | Nonempty name, unresolved create flow; visible Creating, target Create (Enter), disabled. If highlight is retained target has Ctrl/⌘ Enter; option/machine rows disable, Add existing row still exists. | Yes, pending new text/disabled | Real app: submit disposable name; stable pending capture uses a **harness** holding project.createNew or the creation promise, with publish disabled. Do not publish a real host repository for this audit. | **Yes**, trace ready → creating → success/failure; no-highlight representative | **Missing**: named Create and highlighted Create rows do not cover Creating. Highlighted pending variant is equivalent for the changed association. |
| T0 — live highlight/edit update | Focus stays on combobox while no highlight → keyboard or pointer highlight → query edit clears highlight. Observe Enter → Ctrl/⌘ Enter → Enter, and Create-prefix changes for absent browse targets. | Yes, description changes in place | Real app: use Local folder’s existing/absent scratch path; ArrowDown or pointer-highlight, then type a character/backspace. For new-project equivalent, highlight Add existing project and edit name without activating it. | **Yes**, AX trace; static endpoints can reuse F/N rows | **Insufficient**: body lists separate highlighted and unhighlighted endpoints, but no recorded sequence/focus/AX update. A pixel video would not prove it. |
| T1 — repository/confirm/removal transition | URL repository Enter → destination confirmation → non-path destination → absolute destination → Back to source list. Check target/action updates, focused remounted input, then absent IDREF/description; no stale Continue/Clone. | Yes, three branches and remount/removal | Real app using Git URL, no authenticated host or clone execution required. Use `plain-name` for non-path, not empty input (which can pop a view). Back via palette Back control; empty-submenu Backspace also exits. | **Yes**, ordered AX trace; incorporates R0/D0/D6/Z1 | **Insufficient**: those static endpoints are partially in the body, but transition and confirm-nonpath state are not. |
| T2 — browse navigation/remount | Highlight parent/child, unmodified Enter or Tab browses; complete Tab enters directory, partial common-prefix completion edits query, no-match Tab leaves state. Navigation clears highlight/remounts input; association must still resolve. | Yes, remount lifetime | Real app with scratch parent/child and, for partial completion, two sibling names with a common prefix. Capture one completed Tab navigation/remount; the other navigation shapes use same stable outer ID. | **Yes**, one AX trace; can append to T0 | **Missing**: no navigation/remount proof. No need to capture all unchanged completion algorithms. |
| T3 — root exit/session reset | Root path → ordinary non-path text removes association; close and reopen, then re-enter path; new session ID may change but must resolve uniquely. Restored child-search context is equivalent to its resulting root query. | Yes, root omission and ID lifetime | Real app: root F4 → replace path with ordinary text → Escape → reopen palette → type path. | **Yes**, ordered AX trace; combine with F4 | **Missing**: root-search none alone does not establish removal after root browse or fresh-session ID resolution. |
| I0 — unchanged activation/focus paths | Click enabled submit (mouse-down prevents focus theft); ordinary Enter activates highlighted browse/option row; Ctrl/⌘ Enter submits typed path/name; repository Enter continues regardless of highlight; IME composition Enter (isComposing or keyCode 229) does not submit; disabled submit does nothing. | Association only; handlers unchanged | Real app for pointer/keyboard; composition event protocol in existing browser harness. Use disposable destinations if activating submit. Existing composition tests cover repository/folder/destination. | **Equivalent** to T traces + existing behavior tests; no new standalone recording | **Missing as runtime-table rows; no additional capture required**: diff does not change dispatch/submit semantics. Tests are not a substitute for the T0 focus/AX trace. |
| I1 — tooltip/file-manager/host-picker focus | Hover submit opens tooltip; its label and shortcut stay linked to input. Desktop footer opens native file manager, cancel retains flow, successful selection adds/closes (WSL mapping possible). New-project host picker intercepts clicks and can move focus to popup; refocus input before AX read. | Only shared association on return | Tooltip: real web app. Native picker/WSL requires desktop bridge and matching backend, so **harness or desktop-only** from the requested web server. Multi-host picker needs corresponding discovery data. | **Equivalent** to relevant F/N state + AX0; no separate capture | **Missing literally; no extra capture required**: none adds a new direct target or changes this diff’s selector. Do not mistake a focused picker/Back button AX node for the combobox. |

**Minimum capture itinerary**

Preserve the existing DOM table. Add AX0, F1, F3, F4, R2, D1, D2, D4, D6, N5, and T0–T3. These are fixture IDs, not fourteen independent sessions or videos: F4+T3 is one root trace; F1/F2/F3+T0+T2 is one browse trace (Mac platform may need a separate client or labelled harness); R0+D0+D1+D2+D6+T1 is one URL/confirmation trace; R2, D4 and N5 are three deterministic pending traces. Existing covered states need not have their DOM samples recaptured, but include any endpoints reached naturally in the new AX traces. The local merged head needs at least AX0 so source-equivalent older evidence is not the only runtime claim for it. One baseline missing-description AX read is enough if a computed browser-level before/after claim is added; there is no need for an old-main capture of every identical absent-IDREF case.

For each state retain: revision; client platform; fixture ID; query/flow step; highlighted row/value (and `aria-activedescendant` where applicable); `document.activeElement` identity; input role; `aria-describedby`; target node count/ID, aria-label, text, disabled and tabIndex; and the actual combobox AX `description` plus sources/related node IDs. Use CDP `Accessibility.getFullAXTree` or a browser accessibility snapshot/API that actually includes computed descriptions. A text-only ARIA snapshot that omits description fields, or `getAttribute` of the button label, is insufficient. `document.getElementById` handles React `useId` characters without selector escaping. Do not put auth tokens, pairing URLs, private runtime identifiers or unrelated customer data in an uploaded trace.

Record transitions on state/event completion, not arbitrary sleeps. For pending states record before, response-held pending, then success/failure after release; if the operation closes the palette, record that terminal state. T0 must establish that the input remains the focus target and its computed description changes while focus stays there. This proves browser accessibility data is updated; actual screen-reader speech scheduling remains untested and should continue to be disclosed. No row requires a pixel recording; a screen-reader audio recording would only be needed if asserting actual spoken behavior, which this PR does not claim to have tested.

Web and Electron share the changed React component. Desktop’s native picker and client-OS modifier are the only relevant shell/platform variants; one browser AX pass plus F3 is proportionate to an IDREF-only change. Native mobile, provider-agent adapters, MCP tools, scheduling and server wire contracts have no modified call path here. Local/relay/tunnel connections do not change these IDs or description formulas; environment permissions, filesystem platform and availability are the pertinent data and are explicitly partitioned above.

Coverage: full requested diff; all production callers of the changed web components; source/browse/new/clone selectors and their wrapper plumbing; keyboard, pointer, back/close, pending and remount paths; old-base/published-head drift; and all eight existing PR-body evidence rows. Read-only code/evidence derivation only: no code edits, tests, app/browser/server runs, PR comments, pushes or other worktree modifications. No audit-started process or device lease needs cleanup. Audit completed within the 45-minute limit.

AI-assisted; verified with the tests and tools listed above. Existing tests/runtime samples are reported from the PR body, not rerun by this audit.

FRICTION: none

VERDICT: INSUFFICIENT AX0, F1, F3, F4, R2, D1, D2, D4, D6, N5, T0, T1, T2, T3
