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

Findings: **no missing, inadequate, contradicted, or stale rows for this accessibility-only diff. No additional captures are requested.** All 38 before/after JSON files were downloaded and opened (76 states: 38 per side). The actual focused CDP combobox descriptions agree with their raw partial AX trees; each positive after IDREF resolves to exactly one button, the AX relation names that button, and the button stays at tabIndex=-1. Negative controls have no description/IDREF. Independent comparison of all 38 paired full palette AX subtrees found no differences beyond the new combobox description/relation and the intended P1/P2 button-name changes. The three uploaded driver SHA-256 hashes match their captures.

The linked fixture-matrix document is an earlier audit and its missing-row verdict predates the new captures. The evidence index covers the first 33 states per side; the PR body additionally links P0/P1/P2 and N1/N2. I included those additions. N1/N2 are explicitly labelled RPC-harness captures in the raw JSON; they are not evidence of an unmodified server configuration. The N1→N2 sequence uses the same input and focus history and proves the New project highlight branch without requiring a real publish account. No screenshot or pixel video is needed for these changes. This establishes browser AX data, not NVDA/VoiceOver speech scheduling.

Reviewed [5128f80850](https://git.cafe/pingdotgg/t3code/commit/5128f80850a446e498ac2181dc50ddc113ec95ec), local merge of published [73598a65e6](https://git.cafe/pingdotgg/t3code/commit/73598a65e6f639d82cdcc9fc71a32ee9aa6d4156) and current main [20c3dd3689](https://git.cafe/pingdotgg/t3code/commit/20c3dd3689782bfcb1a04332086d08017028c718). GitCafe metadata and live origin refs confirm the published branch and main. The worktree is clean. No fetch was necessary: all evidence commits exist locally.

Freshness: baseline [41443e5706](https://git.cafe/pingdotgg/t3code/commit/41443e5706c4605bc3efc17bcf431970488a146d) → current main has **no commits or diffs affecting CommandPalette***. The command/autocomplete/input/button/tooltip wrappers are also unchanged. [2ac1b7da14](https://git.cafe/pingdotgg/t3code/commit/2ac1b7da140b2520750cb047dc8c1b5bc2ef980b) → published head changes production palette code only by extracting browseSubmitLabel and using permission sentences for blocked browse/clone buttons. Every capture at that earlier head has full permission, so its label formula is unchanged. Permission captures at [c7e32d78e5](https://git.cafe/pingdotgg/t3code/commit/c7e32d78e517c2ef8f33d1c2f19a9ec88a246c10) remain valid because c7e32d78e5 → 73598a65e6 only resets the browser-test scope mock. N1/N2 are at 73598a65e6. Published head → local merge changes neither palette production components nor these wrappers. Earlier captures therefore prove the current changed paths by source equivalence; they are not labelled as fresh runs of the local merge.

Caller/render-path inventory, derived from the current diff and source:

- `CommandPalette` has one production mount, the web app shell in `routes/__root.tsx`; browser tests mount it separately. `children` does not select the new association. It renders `CommandPaletteDialog`, whose command mode mounts `OpenCommandPaletteDialog` keyed by session with openIntent/setOpen/openChildSearch/initialContext. Files/content modes render separate components. Open intents include ordinary search (possibly linked-thread context), Add project, New thread in and theme; restored context seeds query. Root versus submenu, browse generation and flow step remount the input while the outer useId persists; a fresh palette session remounts the ID owner.
- Add project entry points are NoProjectsHero; Sidebar button/project-picker callback; DraftHeroHeadline button/project-picker callback; PullRequestListEmptyState; palette Add project action; New project's Add existing project row; and the WSL folder action. Bus/shortcut entry points converge on the same dialog: commandPaletteCommands toggles command/files/content and theme; chatRouteCommands/Sidebar open New thread in; PullRequestThreadLinks opens linked search. Direct root filesystem text and direct root New project bypass source selection but converge on the same submit constructors. Zero/one/multiple connected environments choose connection fallback/source selection/environment chooser. New project also requires non-null newProjectsRoot. These entry points do not justify duplicate captures of the same selector outcome.
- `CommandPaletteSubmitButton` has exactly three production call sites, all in the changed inner dialog: **newProjectFlow**, otherwise **repository step**, otherwise **isBrowsing**, otherwise no accessory. Each passes the same generated ID. The button forwards ID to one TooltipTrigger-rendered Button with aria-label, disabled, tabIndex=-1 and unchanged handlers. `CommandPaletteContent` spreads input props through CommandInput → AutocompleteInput → Base UI/native Input, with the submit button as a sibling. No additional callers were found.
- New project: visible Create/Creating; aria-label remains Create plus shortcut. Non-null highlight selects client modifier; empty name, creating or disconnected disables. Names/roots affect summary; zero/one/multiple ready publish targets add no row/option/host picker; multiple eligible environments add machine rows. Any selected result value uses the same highlight selector. Publishing/host/environment metadata does not enter the label.
- Repository step: URL gives Continue; any registered non-URL provider gives Lookup, always Enter; empty/disconnected/pending disables; pending visible label is Working. URL Enter advances synchronously to confirm; provider Enter awaits lookup, failure retains step, success advances. Destination data includes source, environmentId, repositoryInput, optional repository metadata, remoteUrl, pinned clone leaf/GHQ layout. These alter browsing/summary, not the new association.
- Browse: local Add/Create & Add or confirmation Clone/Create & Clone. Create prefix requires submittable path, resolved browse, no read-access error, nonempty query, no highlighted browse row, and missing destination (no browse result for trailing-separator path or no exact entry otherwise). Highlight forces base action and modifier. Relative path needs active same-environment project cwd. Operate denial gives local permission sentence; clone denial of either required permission gives the longer clone sentence first. Connection/relative/clone pending disable; clone pending visible text is Cloning. Read loading/error changes status/alert and suppresses Create prefix. Non-path confirmation loses accessory. Browser navigator.platform selects Ctrl/⌘ independently of server filesystem OS; Windows/POSIX/home/relative syntax reduces to path/non-path and existing/missing predicates.
- Interactions audited: keyboard/pointer highlighting, query edits and pasted paths clearing highlight; plain/modifier/composition Enter; submit click/mouse-down; Tab complete/partial/no-match and parent navigation; Back/empty-submenu Backspace; close/reopen; child search/restore; native picker cancel/select/WSL routing; publish toggle/host/environment selection; pending ready→held→failure and success→closed/next-step. Their handlers are unchanged. Distinct ID/label lifetime effects are covered by ordered T traces plus pending traces and N1→N2; equivalent unchanged handlers need no extra evidence.

Web/desktop share this React path, including remotely connected clients. Mobile has a separate palette/AddProject navigation and no changed import. Provider agent adapters, MCP, scheduled work, contracts and local/relay/tunnel transports have no changed path; destination environment grants/availability and client platform are the relevant variants.

Matrix: **covered** includes explicit code-equivalence reductions identified in the description, rather than implying a literal capture of every combination. All rows below have adequate representative evidence; none is missing or stale. `affected` distinguishes added description/label behavior, omission guards and unchanged interactions. Each cell links the actual before and after JSON opened for this audit.

| row id | description | affected | existing capture (URL or none) | status | seeding |
|---|---|---|---|---|---|
| AX0 | Focused existing local path with highlighted parent, enabled Add (Ctrl Enter); then empty Git URL, disabled Continue (Enter). Both native input→unique button IDREF and computed AX relation verified. | yes | [before AX0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/678b131f12e371d7/before-AX0.json) / [after AX0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1a92ad2ca9ef7488/after-AX0.json) | covered | Real app: Add project → Local folder → existing absolute directory → ArrowDown; reopen source list → Git URL, leave empty. |
| Z0 | Root empty/ordinary query: no submit button, IDREF or description. | omission guard | [before T3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/14928e1c55cd0779/before-T3.json) / [after T3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e9c15e5e5a940657/after-T3.json) | covered | Real app: open palette; type ordinary text, or close/reopen to empty query. |
| Z1 | Add project source selection, including return via Back: no submit description. | omission guard | [before T1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1562c6150dfba0e5/before-T1.json) / [after T1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5097e9bf5e5ae677/after-T1.json) | covered | Real app: Add project; or Back from clone confirmation. |
| Z2 | Other ordinary-query views: choose environment, connect fallback, New thread in, themes/appearance, settings/actions, linked-thread search. Same null-accessory guard as Z0/Z1; no separate capture required. | equivalent guard | [before T1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1562c6150dfba0e5/before-T1.json) / [after T1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5097e9bf5e5ae677/after-T1.json); [before T3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/14928e1c55cd0779/before-T3.json) / [after T3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e9c15e5e5a940657/after-T3.json) | covered | Real app for ordinary submenus; multiple environments/linked threads need isolated records, unavailable catalogs can use labelled harness. No connected environment offers Connect an environment. |
| Z3 | Files/content child overlays render different components; closed state exposes no palette combobox. Restored context reduces to its query branch. | outside changed render / closed control | [before T3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/14928e1c55cd0779/before-T3.json) / [after T3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e9c15e5e5a940657/after-T3.json) | covered | Real app: file/content search from palette (project for results), Escape to restore; close/reopen. Child overlays require no additional proof for this diff. |
| F0 / P0 | Existing folder, no highlight, connected with operate permission: Add (Enter), enabled. Trailing-separator result and exact leaf are equivalent. | yes | [before P0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a98a9c1847637968/before-P0.json) / [after P0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9945a0852dec4e9e/after-P0.json); [before T0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8d0fd23dfbfe35bc/before-T0.json) / [after T0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/94dd56e9d833c951/after-T0.json) | covered | Real app: synthetic existing directory; Add project → Local folder; fill absolute path; await browse completion. |
| F1 | Absent leaf, resolved browse, no highlight: Create & Add (Enter). | yes | [before F1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/941a3897ca0611bb/before-F1.json) / [after F1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/aa2e4d5ad403e11b/after-F1.json); [before T0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8d0fd23dfbfe35bc/before-T0.json) / [after T0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/94dd56e9d833c951/after-T0.json) | covered | Real app: existing empty directory plus absent child x; type that child without creating it. |
| F2 | Parent or child highlighted: Add (Ctrl Enter); any highlight suppresses Create prefix. | yes | [before AX0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/678b131f12e371d7/before-AX0.json) / [after AX0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1a92ad2ca9ef7488/after-AX0.json); [before T0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8d0fd23dfbfe35bc/before-T0.json) / [after T0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/94dd56e9d833c951/after-T0.json); [before T2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/66170014acf57882/before-T2.json) / [after T2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5bee3a641a70a735/after-T2.json) | covered | Real app: existing folder → ArrowDown; another ArrowDown selects child when present. |
| F3 | Mac client, highlighted directory: Add (⌘ Enter). Server OS does not select the shortcut. | yes | [before F3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ffd61d079e3d6202/before-F3.json) / [after F3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/70435cbf509c6dc1/after-F3.json) | covered | Real Mac browser; existing evidence is explicitly a Linux Chromium navigator.platform=MacIntel harness installed before load. |
| F4 | Path typed directly in root: Add (Enter), or Create & Add for missing path; same target formula as submenu, different placeholder/start addon. | yes | [before F4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e1c85ce7cdb07881/before-F4.json) / [after F4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b05c4c165cfa72b5/after-F4.json); [before T3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/14928e1c55cd0779/before-T3.json) / [after T3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e9c15e5e5a940657/after-T3.json) | covered | Real app: Ctrl/Cmd+K → full absolute synthetic directory, bypass Add project source list. Missing path equivalent to F1. |
| F5 | Explicit relative path without active same-environment project: Add (Enter), disabled; no directory rows. Equivalent description/disabled-target behavior to F0 + AX0. | yes, equivalent | [before P0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a98a9c1847637968/before-P0.json) / [after P0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9945a0852dec4e9e/after-P0.json); [before AX0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/678b131f12e371d7/before-AX0.json) / [after AX0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1a92ad2ca9ef7488/after-AX0.json) | covered | Real empty workspace: type ./missing-leaf. With active project in selected environment, use its cwd and reduce to F0/F1. |
| F6 | Browse pending/read-denied/error or selected environment disconnected: Create prefix suppressed; Add target remains. Connection loss disables. Read denial alone need not disable. No new label formula. Operate denial split into P1. | yes, equivalent | [before P0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a98a9c1847637968/before-P0.json) / [after P0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9945a0852dec4e9e/after-P0.json); [before AX0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/678b131f12e371d7/before-AX0.json) / [after AX0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1a92ad2ca9ef7488/after-AX0.json); [before R2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2760051c2ab9026e/before-R2.json) / [after R2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/67b23e668c2abba7/after-R2.json) | covered | Real scoped token omitting filesystem:read; deterministic loading or retained disconnection needs labelled RPC/catalog harness. Do not stop another server. |
| P1 | Local/root folder with orchestration:operate absent: disabled button and input description This connection cannot add projects. Highlight/platform cannot override the permission sentence. | yes | [before P1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/03a4413b3dbac2a8/before-P1.json) / [after P1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a71de26a53484ce6/after-P1.json) | covered | Real app paired with token omitting orchestration:operate while retaining read permissions; type an existing directory. Raw /auth/session effective permissions confirm denial. |
| R0 | Git URL repository step: Continue (Enter), blank disabled / nonempty connected enabled; path-looking text never activates browse here. | yes | [before AX0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/678b131f12e371d7/before-AX0.json) / [after AX0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1a92ad2ca9ef7488/after-AX0.json); [before T1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1562c6150dfba0e5/before-T1.json) / [after T1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5097e9bf5e5ae677/after-T1.json) | covered | Real app: Add project → Git URL; blank, then https://example.invalid/fixture/repository.git. Enter moves to destination without cloning. |
| R1 | Any ready source-control provider repository step: Lookup (Enter). Host metadata only changes placeholder/icon; blank disabled is equivalent to R0 blank. | yes | [before R2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2760051c2ab9026e/before-R2.json) / [after R2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/67b23e668c2abba7/after-R2.json) | covered | Real app with ready authenticated provider discovery; otherwise labelled synthetic discovery harness, as existing GitHub capture. |
| R2 | Provider sequence: ready → held lookup (Working, disabled) → released failure; description remains Lookup (Enter), same focused input. | yes | [before R2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2760051c2ab9026e/before-R2.json) / [after R2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/67b23e668c2abba7/after-R2.json) | covered | Labelled RPC harness supplies ready GitHub discovery, holds sourceControl.lookupRepository without forwarding, releases synthetic failure. No remote lookup side effect needed. |
| D0 | Confirm with absent destination and no highlight: Create & Clone (Enter). URL-only versus provider repository summary does not change target. | yes | [before T1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1562c6150dfba0e5/before-T1.json) / [after T1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5097e9bf5e5ae677/after-T1.json); [before D4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3d9a60aee4a5e5e4/before-D4.json) / [after D4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5d0d51f4f49695a2/after-D4.json) | covered | Real app: Git URL → disposable URL → Enter; replace destination with absent absolute leaf, await browsing; do not submit. |
| D1 | Confirm with existing empty destination and no highlight: Clone (Enter). | yes | [before D1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/49d9c59800ccc5b9/before-D1.json) / [after D1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/66c1735fdef256f9/after-D1.json) | covered | Real app: reach confirmation, fill synthetic existing empty destination with trailing separator. |
| D2 | Confirm with parent/child highlighted: Clone (Ctrl Enter), including absent typed leaf because highlight suppresses Create prefix. | yes | [before D2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cf126f2c7d7a44a4/before-D2.json) / [after D2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e8e604681bc231b3/after-D2.json) | covered | Real app: confirmation at existing destination → ArrowDown to parent. Child uses same browse-prefix selector. |
| D3 | Mac highlighted destination: Clone (⌘ Enter). Same addShortcutLabel used by F3 and D2; no independent capture required. | yes, equivalent | [before D2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cf126f2c7d7a44a4/before-D2.json) / [after D2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e8e604681bc231b3/after-D2.json); [before F3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ffd61d079e3d6202/before-F3.json) / [after F3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/70435cbf509c6dc1/after-F3.json) | covered | Real Mac client or labelled navigator.platform override; confirmation + browse highlight. |
| D4 | Clone sequence: ready → held start acknowledgement (Cloning, disabled) → released failure; description Create & Clone (Enter). Existing/highlighted variants compose D1/D2 with same pending branch. | yes | [before D4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3d9a60aee4a5e5e4/before-D4.json) / [after D4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5d0d51f4f49695a2/after-D4.json) | covered | Labelled RPC harness holds projectClone.start without forwarding, releases failure; synthetic absent destination. This is acknowledgement pending, not background clone duration. |
| P2 | Clone confirmation without source-control:write OR orchestration:operate (including both absent): disabled; description This connection needs permission to write source control and add projects. One combined guard, precedence over local P1 sentence. | yes | [before P2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4839e0f4d3a1e2b6/before-P2.json) / [after P2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6e664012953dab3f/after-P2.json) | covered | Real app paired without source-control:write, retain operate and read; Git URL → Enter → existing destination. Existing raw session confirms effective denial. Other denied combinations select identical combined guard. |
| D5 | Other unavailable clone destination: disconnected or relative-without-active-project, full permissions; disabled Clone (Enter). Read loading/error suppresses Create prefix as F6. Permission variants are P2. | yes, equivalent | [before D1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/49d9c59800ccc5b9/before-D1.json) / [after D1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/66c1735fdef256f9/after-D1.json); [before AX0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/678b131f12e371d7/before-AX0.json) / [after AX0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1a92ad2ca9ef7488/after-AX0.json); [before D4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3d9a60aee4a5e5e4/before-D4.json) / [after D4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5d0d51f4f49695a2/after-D4.json) | covered | Real empty workspace confirmation → ./missing-leaf; connection loss via labelled catalog harness. Same label/IDREF as represented disabled targets. |
| D6 | Confirm flow retained but query is non-path: no submit button, IDREF or description. | yes, omission | [before D6](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f361caba94efef4c/before-D6.json) / [after D6](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/aa1d67806bef9a15/after-D6.json); [before T1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1562c6150dfba0e5/before-T1.json) / [after T1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5097e9bf5e5ae677/after-T1.json) | covered | Real app: confirmation → replace destination with plain-name; then restore an absolute path. |
| N0 | New project with blank name: Create (Enter), disabled. Same new-project label as N1, disabled IDREF qualified by AX0/N5; focused browser test also asserts this state. | yes, equivalent | [before N1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/76dc348ea0fd48a6/before-N1.json) / [after N1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0d6693e82ca1ed8d/after-N1.json); [before AX0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/678b131f12e371d7/before-AX0.json) / [after AX0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1a92ad2ca9ef7488/after-AX0.json); [before N5](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/180c99fb4740c323/before-N5.json) / [after N5](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/786390b3a685ba4c/after-N5.json) | covered | Real app: eligible environment with newProjectsRoot → New project; leave name empty. No separate runtime capture required. |
| N1 | Named New project, no highlight: Create (Enter), enabled. Data: name demo, connected selected environment, configured newProjectsRoot. | yes | [before N1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/76dc348ea0fd48a6/before-N1.json) / [after N1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0d6693e82ca1ed8d/after-N1.json) | covered | Real app with non-null newProjectsRoot; fill demo without submitting. Existing capture is labelled RPC harness with synthetic root/Git availability and no publish hosts. |
| N2 | Named New project → ArrowDown highlights Add existing project: Create (Ctrl Enter). N1 and N2 files form one timestamped interaction with same input token, focus history and driver. | yes | [before N1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/76dc348ea0fd48a6/before-N1.json) / [after N1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0d6693e82ca1ed8d/after-N1.json); [before N2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/47e9d2f2dc8654c0/before-N2.json) / [after N2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c00b7163126a9de7/after-N2.json) | covered | Real app: name demo then highlight Add existing project. Existing labelled root/discovery harness performs this sequence without submission. |
| N3 | Other new-project rows: publish unchecked/checked; one versus multiple hosts/host picker; multiple environments/checkmark; different name/root/selection. Any non-null highlighted value selects N2 shortcut; no highlight selects N1. | yes, equivalent | [before N1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/76dc348ea0fd48a6/before-N1.json) / [after N1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0d6693e82ca1ed8d/after-N1.json); [before N2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/47e9d2f2dc8654c0/before-N2.json) / [after N2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c00b7163126a9de7/after-N2.json); [before N5](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/180c99fb4740c323/before-N5.json) / [after N5](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/786390b3a685ba4c/after-N5.json) | covered | Real configured hosts/environments or labelled discovery/catalog harness; plain Enter toggles publishing or switches environment, picker changes host. No publication needed; result metadata does not feed description. |
| N4 | Mac highlighted New project: Create (⌘ Enter). createShortcutLabel combines shared modifier source (F3) with independently captured non-null highlight selector (N2). | yes, equivalent | [before N2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/47e9d2f2dc8654c0/before-N2.json) / [after N2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c00b7163126a9de7/after-N2.json); [before F3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ffd61d079e3d6202/before-F3.json) / [after F3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/70435cbf509c6dc1/after-F3.json) | covered | Real Mac browser or labelled platform override; New project → any highlighted row. No independent Mac-per-action capture required. |
| N5 | Creation sequence: ready → held create (Creating, disabled) → released failure; description stays Create (Enter). Highlighted pending variant composes N2 with same pending branch. | yes | [before N5](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/180c99fb4740c323/before-N5.json) / [after N5](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/786390b3a685ba4c/after-N5.json) | covered | Labelled RPC harness, publishing off; hold projects.createNew without forwarding, release failure. Real app can submit disposable project but deterministic pending capture needs harness. |
| T0 | Same focused input: existing path/unhighlighted Add (Enter) → ArrowDown Add (Ctrl Enter) → type x, highlight clears and Create & Add (Enter). | yes, sequence | [before T0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8d0fd23dfbfe35bc/before-T0.json) / [after T0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/94dd56e9d833c951/after-T0.json) | covered | Real app and existing synthetic directory; ArrowDown then type x. All three states have the same nodeToken and no intervening focus event. |
| T1 | URL entry Continue → Enter/remount/Create & Clone → non-path/none → absolute missing path/Create & Clone → Back/source-list/none. | yes, sequence | [before T1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1562c6150dfba0e5/before-T1.json) / [after T1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5097e9bf5e5ae677/after-T1.json) | covered | Real app, disposable URL, absent destination, plain-name, restored path, palette Back button. No clone execution. |
| T2 | Parent highlighted → child highlighted → Tab navigates/remounts and clears highlight: Add (Ctrl Enter) → Add (Ctrl Enter) → Add (Enter); IDREF remains unique/resolved. | yes, sequence | [before T2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/66170014acf57882/before-T2.json) / [after T2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5bee3a641a70a735/after-T2.json) | covered | Real app: synthetic parent/child directories; ArrowDown twice then Tab. Enter/click/up navigation and partial Tab share coordinator/association lifetime; no separate capture required. |
| T3 | Root path → ordinary query → closed → fresh empty root → path again: Add → none → no combobox → none → Add; new session target still resolves uniquely. | yes, sequence | [before T3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/14928e1c55cd0779/before-T3.json) / [after T3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e9c15e5e5a940657/after-T3.json) | covered | Real app: root absolute directory, replace with ordinary-text, Escape, Ctrl/Cmd+K, restore absolute path. |
| I0 | Activation variants: submit click preserves input via mouse-down preventDefault; ordinary Enter selects row; primary-modifier Enter submits; repository Enter continues; IME Enter stays typing; Backspace/Back exits. Handlers unchanged; represent resulting state transitions above. | association only; equivalent | [before T0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8d0fd23dfbfe35bc/before-T0.json) / [after T0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/94dd56e9d833c951/after-T0.json); [before T1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1562c6150dfba0e5/before-T1.json) / [after T1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5097e9bf5e5ae677/after-T1.json); [before T2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/66170014acf57882/before-T2.json) / [after T2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5bee3a641a70a735/after-T2.json); [before T3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/14928e1c55cd0779/before-T3.json) / [after T3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e9c15e5e5a940657/after-T3.json) | covered | Real app for keyboard/pointer; synthetic composition events in existing browser tests. Disabled clicks/empty input guards do not create another description formula. No additional recording required. |
| I1 | Submit tooltip, native folder picker/WSL and publish host picker: tooltip does not become new direct description target; cancel/refocus reduces to F/N, successful submit closes. | association only; equivalent | [before AX0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/678b131f12e371d7/before-AX0.json) / [after AX0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1a92ad2ca9ef7488/after-AX0.json); [before F3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ffd61d079e3d6202/before-F3.json) / [after F3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/70435cbf509c6dc1/after-F3.json); [before N2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/47e9d2f2dc8654c0/before-N2.json) / [after N2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c00b7163126a9de7/after-N2.json); [before T3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/14928e1c55cd0779/before-T3.json) / [after T3](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e9c15e5e5a940657/after-T3.json) | covered | Real web tooltip; native picker needs desktop bridge/WSL backend; multiple publish hosts need real or labelled discovery data. Refocus actual combobox before AX capture. No additional capture required. |

Minimum representative capture set after reduction: AX0, F3, R2, D1, D2, D4, N5, T0, T1, T2, T3, P1, P2 and the N1→N2 sequence. All already exist. F1 is also in T0, F4 in T3, D0/D6/Z1 in T1, F0/P0 in T0, F2 in AX0/T0/T2, and Z0/closed/session reset in T3. Retain existing redundant captures; do not recapture them. Mac-per-action, each denied-permission combination, each busy-highlight combination, each host/environment, empty New project and unchanged pointer/keyboard handlers add no independent changed formula beyond this basis.

General seeding: use isolated dev state and synthetic filesystem directories, an absent leaf, an existing empty clone destination, parent/child folders, and an environment with a configured newProjectsRoot. A fresh database alone does not establish provider authentication, multiple environments, restricted sessions or deterministic pending operations. Those need the real prerequisites or clearly labelled harness data. Permission captures used real scoped pairing tokens and observed effective /auth/session permissions; pending captures withheld RPCs before forwarding and returned synthetic failures. None requires real clone, project creation or publication.

Coverage completed within the 45-minute budget: full requested diff, all changed component callers and input wrappers, selectors and relevant interaction lifetimes, all linked before/after JSON, the three uploaded drivers and comparison outputs, historical source drift and current origin refs. No code edits, tests, app/browser/server launches, pushes, PR comments, worktree creation or deletions. No audit-started processes or worktrees remain; scratch evidence is retained in the requested directory.

FRICTION: tool | Python urllib received HTTP 403 for public artifact downloads; curl fetched all 52 successfully | Use curl for these artifact URLs.

VERDICT: SUFFICIENT
