**Proof audit, pass 1 — findings**

- **One combined native/ghq capture row remains missing: N1.** The existing web evidence proves the changed preview, a real Git transfer, and the explicit-clone control. The earlier eight-recording matrix overstates this change's independent visual paths. This audit replaces it with three required paired flows (W1, W3, N1); W2 is useful existing supplementary proof.
- Reviewed [#32681](https://git.cafe/pingdotgg/t3code/pull/32681), branch `fix/issue-32667`, head [09e12cd28b](https://git.cafe/pingdotgg/t3code/commit/09e12cd28bfaf9bb5d33c063d50cbcef20776064), against main [20c3dd3689](https://git.cafe/pingdotgg/t3code/commit/20c3dd3689782bfcb1a04332086d08017028c718). Read the PR body through the requested GitCafe CLI. Captures compare [0a9abddaee](https://git.cafe/pingdotgg/t3code/commit/0a9abddaee00ff1495e77a03dd4fafa73c3cd4cb) → [e3c800dd2c](https://git.cafe/pingdotgg/t3code/commit/e3c800dd2cb73e1392680e157bbac942b7a1ca2b). The requested direct non-doc diff is nonempty because of the main merge: **all 34 changed non-doc file blobs equal main exactly**, while **all 12 non-doc files in the actual PR diff equal the capture-after revision exactly**. The intervening first-parent commit changes only the user guide. No conflict-resolution or later feature edits invalidate W1–W3.
- **Desktop does not need a separate capture for this diff.** Electron loads the web renderer; URL normalization, default-folder derivation and summary rendering do not cross a new Electron branch. Its native folder-picker footer and titlebar offsets are unchanged. An Electron recording would be extra shell confidence, not independent proof of these changed lines. Do not retain the old D1 requirement just to put ghq on desktop.
- **One native capture is justified, not four or an iOS × Android grid.** Native is a separate consumer: it passes the normalized URL as *both* repository title and description, and derives its destination through native navigation params. Web retains the raw page URL as title. Native title wrapping, a two-line URL label and its separate destination input are visually distinct. Combine that one native flow with ghq enabled to cover the only remaining destination shape. The same JS normalization and screen branches run on both native OSes; no OS-specific layout branch changed. Either iOS or Android once is enough.
- **Do not use Diff0 as evidence that only the intended pixels changed.** W1/W2/W3 Diff0 all contain large unrelated differences from the translucent palette's changing blurred background. W3 is the unchanged control and shows this too. The paired stills themselves are readable and useful; DiffT correctly highlights URL/path changes at 10% fuzz, but that threshold cannot prove exact pixel identity. W1's `Create & Clone` → `Clone` is a destination-existence fixture difference, already disclosed in the PR, not proof of a button change. No ghosted text, stale modal, or wrong viewport obscures the changed fields.
- W1 after recording reaches actual `Receiving objects` progress, so it proves Git accepted the normalized remote; it does **not** prove clone completion or capture cancellation. The linked runtime transcript is explicitly before-only and says no after attempt was verified by its author; use the actual after video/still for after evidence. Its empty-directory statement is a narrative, not an uploaded filesystem listing. Neither completion nor a directory listing is required to prove this URL/default-folder fix.

**Fixture matrix and observed status**

`B` is a fresh existing directory owned by the capture run. One connected environment must allow filesystem browsing, source-control writes and project creation. Settings are for that destination environment. All rows below are **recording** rows: a still cannot establish the input → Continue transition, native navigation, or asynchronous transfer. Export a clear before/after still from each required recording pair. No Cartesian product of hosts, themes, widths, entry buttons, OSes or folder states is required.

| Row | Minimum? Surface × viewport × theme | Required data / visually distinct result | Affected by diff? Before → after | Real-app seed / interaction | Status and inspected evidence |
|---|---|---|---|---|---|
| **W1 — URL-source preview + real clone** | **Yes**. Web, 1440 × 900 CSS, DPR 2, dark | [GH-page](https://github.com/pingdotgg/t3code/tree/main); empty base setting; ghq off. Show the actual default before editing only the parent to a run-owned fresh clone destination. | **Yes**. Web title retains page URL; description drops `/tree/main`; default `~/main` → `~/t3code`. Old Git attempt fails; new one reaches real transfer. | Normal app `/`, Ctrl/Cmd+K → Add project → Git URL → paste page → Continue/Enter. Hold default and summary, change parent to scratch, submit. Stop at a definitive error/transfer milestone; no paid agent turn. | **covered-by-existing**: [W1-before-palette.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7b33892ac186da01/W1-before-palette.png), [W1-after-palette.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/07ccf32143903052/W1-after-palette.png); [W1-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1c69192e80f2836a/W1-before.mp4), [W1-after-redacted.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/15483fadc05d4c35/W1-after-redacted.mp4); both outcome stills. Before valid source flow around 00:55–01:45, clone around 02:20, failure by 02:55. After source flow 00:12–00:20, scratch submission ~00:30, transfer ~01:04–01:16. |
| **W2 — alternate host / light** | Supplementary, **not a separate minimum**. Web, 1440 × 900 CSS, DPR 2, light | [GL-page](https://gitlab.com/gitlab-org/gitlab-runner/-/tree/main); empty base; ghq off. A longer page string in the same truncating summary. | **Yes**, same render shape as W1. `~/main` → `~/gitlab-runner`; description loses `/-/tree/main`; title remains raw. | Sidebar Add project → Git URL → paste → Continue. Existing before uses empty-sidebar button, after uses header button; both invoke the same Add-project intent. No large GitLab clone required. | **covered-by-existing**: [W2-before-palette.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/89adc2ea7f229c53/W2-before-palette.png), [W2-after-palette.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2289f5684c041841/W2-after-palette.png); [W2-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/31282319589aa299/W2-before.mp4), [W2-after-redacted.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f24fb5eabd923adf/W2-after-redacted.mp4). Before opens source selection ~01:10 and confirms ~01:30; after Git URL input ~00:02–00:07 and confirmation ~00:08. No paired empty-sidebar-after recapture needed. |
| **W3 — explicit clone URL control** | **Yes**. Web, 1440 × 900 CSS, DPR 2, dark | [clone control](https://github.com/pingdotgg/t3code.git); empty base; ghq off. No page URL rewrite. | Expected **unchanged**: both URL lines keep `.git`, destination `~/t3code` on both sides. | Ctrl/Cmd+K → Add project → Git URL → paste explicit clone → Continue. Stop on confirmation; a redundant clone and Back-and-return are outside the changed behavior. | **covered-by-existing**: [W3-before-palette.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/63dfd16c06c497eb/W3-before-palette.png), [W3-after-palette.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7c10f139ff1188b6/W3-after-palette.png); [W3-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/86a32b6e91bfdfb1/W3-before.mp4), [W3-after-redacted.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9e22d7b78b820768/W3-after-redacted.mp4). Before confirms ~00:18; after ~00:16–00:18. DiffT is empty; both foregrounds visually agree. |
| **N1 — one native consumer + ghq destination** | **Yes**. One native phone in portrait, default font scale, dark. Use one actual pooled iOS or Android phone; record its logical viewport, pixel dimensions and OS, and keep them identical across before/after. No second OS/theme/size required. | [GH-page](https://github.com/pingdotgg/t3code/tree/main); `ghqCloneLayout=true`, base directory `B`, one connected environment. Summary title and description both use normalized URL; host/owner/repo destination shape. | **Yes**. Both native URL labels: page → repository root. Initial path `B/github.com/pingdotgg/t3code/tree/main` → `B/github.com/pingdotgg/t3code`. | Set base/ghq through Settings → Threads → New projects for the isolated backend. Pair native client to it. Add project → Git URL (`new/add-project/repository`, `source=url`, selected environment) → paste raw page → Continue/keyboard Next → Clone destination. Show summary and initial destination, dismiss keyboard if needed to expose them. No clone submission, folder browsing, error state, or paid turn required for this row. | **MISSING**: one matching **before/after native recording pair**, with exported stills, showing that exact raw-input → destination transition, both summary labels and the ghq path. Directly deep-linking the normalized destination cannot satisfy it. None of W1–W3 supplies native or ghq evidence. |

**Minimum capture set:** W1 at 1440 × 900 dark, W3 at 1440 × 900 dark, and N1 at one recorded native phone portrait viewport dark, each paired before/after. W2's existing 1440 × 900 light pair is retained as additional coverage. The old 1280 × 800 prescription is withdrawn: web caps the palette at `max-w-xl`, and both sizes are above the same width breakpoint. Native's actual viewport is a capture parameter to report, not a requirement for a second device if that exact size is unavailable. No row requires a labelled harness; every row is reachable through real-app navigation. A native component harness would be supplementary and would not prove the route-param handoff.

**Render-path inventory derived from the current code**

This inventory covers every caller of the changed normalizer and the render branches reachable from the changed web submission. Unrelated CommandPalette features are explicitly collapsed instead of generating fixtures for all of a 3,000-line component.

| Code path / data branch | Render consequences and interactions | Capture decision |
|---|---|---|
| CommandPalette ownership/callers | Mounted once by the web root around route content. CommandPalette → CommandPaletteDialog → OpenCommandPaletteDialog in command mode. File-picker and project-content-search modes render separate unchanged components; closed dialog has no visible content. Props are children, mode/session, open intent, focus restoration and callbacks; none gains a new shape. | W1/W3 cover the changed command-mode branch. Closed/file/content modes excluded. |
| Entry points | Keyboard toggle opens the root palette; Add project action enters the same source flow. Sidebar header and empty-sidebar buttons share `openAddProjectCommandPalette`. NoProjectsHero, DraftHeroHeadline, and PR-list empty state also send `open: add-project`. Settings results change settings or navigate; Settings has no second pasted-URL clone form using this normalizer. Zero vs nonzero projects changes entry UI, not destination rendering. | W1 keyboard and W2 sidebar already cover convergence. No entry-point permutation or paired empty-sidebar rerun. |
| Environments/counts and source menu | Zero connected environments offers Connections; multiple environments offer chooser; a single resolved one can enter Sources directly. Disconnected entries disable. New-project availability depends on workspace root. Source list contains local folder, Git URL, and per-forge provider lookup entries, sorted by availability; unavailable providers show Setup Required and settings tooltip. | Unchanged gates. Seed one connected authorized environment. No zero/many/offline/setup captures. |
| Clone flow state and submit source | Null flow has no remote summary. `repository` step has input/Continue (URL) or Lookup (provider), helper/empty message, no repository summary. Empty or whitespace-only input disables Continue. Nonempty URL submission trims and normalizes synchronously, stores raw repositoryInput plus normalized remoteUrl, sets query to derived destination and switches to confirm. Provider submission performs async lookup with Working/error branches and resolved nameWithOwner/URL metadata, explicitly supplying its repository argument. | W1 records empty → pasted → confirm. W3 is pass-through control. Provider lookup/loading/failure paths bypass this changed normalizer and preserve the old explicit-argument destination path. |
| Confirmation summary props | Only confirm renders RemoteRepositorySummary. `source=url` uses Link icon; provider sources use forge icons. Web title = resolved nameWithOwner or raw repositoryInput. Description = resolved repository URL or normalized remoteUrl. Both text rows truncate in fixed flex slots; long branch/file/query input can change truncation, not markup or row count. Provider metadata null/non-null is already established by source branch. | W1/W2 prove raw title + shortened description. No host-by-host or arbitrary text-length screenshots. |
| Destination defaults | Base empty/whitespace → `~/`, otherwise normalized configured base. Ghq false selects repository leaf (changed web URL call now omits the raw repository override). Ghq true derives `<host>/<owner>/<repo>` from normalized remoteUrl with safe-path fallback to leaf. Native computes those same two shapes before seeding its input. Windows uses existing path separator handling. | Web leaf shape W1; ghq shape deliberately combined into N1. No desktop-only ghq requirement, Windows matrix, or duplicate native leaf recording. |
| Folder list/count/error/loading | Confirmation maps normal browse groups to “Select where to clone”. Root/parent and matching entries, zero entries, pending-first-result “Loading folders…”, prior result during refresh, access failure alert, relative-without-project empty state, missing destination, and existing destination all remain. They depend on the changed default query, but layout code is unchanged. | W1/W2/W3 show populated folders; after recordings also pass through initial loading. No forced empty/loading/access/error capture grid. Existence is uncontrolled in W1 pair, so do not attribute its button-label difference to the PR. |
| Buttons/keyboard/footer | Create & Clone vs Clone follows path existence/pending/selected row. Cloning disables submission; unavailable connection or missing permissions disables it. Enter vs modifier+Enter depends on highlighted directory; click submit follows the same method. Up/down, folder click, parent browse and manual path editing preserve pinned leaf; Back button/Backspace pops a view, Escape/backdrop closes; file/content overlays have their own escape return path. Tooltip explains permissions. Desktop can add an Open in file-manager footer and use native picker. | Input/Continue/default/manual-parent/clone covered by W1; W3 control need not repeat Back/return. Browsing mechanics, shortcuts and native picker are unchanged; no extra interaction recording required. |
| Clone effects/outcomes | Same existing service command receives stored remoteUrl and selected destination. Command rejection shows toast; success closes palette, waits for project projection and opens draft. Existing progress/toast/banner supports connecting, stalled, real transfer, failure/retry/remove and cancel. Normalization changes the Git argument, not that renderer. | W1 error → transfer is a single outcome proof. Do not demand completion, retry, cancel or outcome videos per surface/forge. Cancellation is claimed by PR but not shown in its uploaded after recording. |
| Web dimensions/theme/platform | Summary has no count-dependent badges or wrapping branch; input is single-line, summary lines truncate. Command dialog width capped at `max-w-xl`, height bounded; viewport top padding changes below `sm`, footer stacks below `sm`. Mac changes modifier glyph; Electron titlebar offset/footer exists. Themes alter existing tokens only. | Existing 1440 dark/light captures are valid. No changed breakpoint, style, shell bridge or platform-specific branch warrants more widths/themes/platforms. |
| Native normalizer caller/route props | AddProjectRepositoryScreen is wrapped by AddProjectRepositoryRoute and selected from AddProjectSourceScreen; params accept string/array environmentId and source (first array entry). URL source pushes AddProjectDestination with normalized remoteUrl, repositoryTitle=remoteUrl, repositoryName=derived leaf. Provider lookup pushes resolved metadata without this normalizer. AddProjectDestinationRoute passes params into AddProjectDestinationScreen. Prompt links can also push that destination with resolved repository data, bypassing pasted normalization. | N1 must enter through repository input, not destination fixture injection. Provider lookup, prompt-link and malformed/absent param captures are excluded. |
| Native summary/destination branches | Truthy repositoryTitle displays a card; missing title hides it. Title wraps; second URL is limited to two lines. Missing environment shows empty environment state. Remote URL missing/permissions/navigation/submission can disable Clone. ErrorBanner handles validation/RPC failure; browse list has pending, denied, error, parent, empty, missing-parent hint and entries. Keyboard Next/Continue opens destination, Done/Clone submits; native Back, keyboard dismissal and scroll use existing shell. iOS/Android vary padding/icons/section headings but no new branch is introduced here. | N1 shows the changed title/description/path and their native navigation once. No native error/control/OS/keyboard-state Cartesian matrix. Keyboard can be dismissed in that same recording; a second recording is unnecessary. |
| Unrelated palette render modes | Root actions, project/thread/worktree submenus, theme/appearance selection, local add, new-project publishing, message search and settings search have their own counts, selections, empty/loading/error states. The changed lines execute only inside URL-source clone repository submission. | Excluded from capture fixtures; no new data enters those paths. |

**Parser input space belongs in focused behavior tests, not more UI videos**

The normalizer has exactly two production callers (web submission and native repository screen). Its shared registry first rejects non-HTTP(S)/invalid URL, then uses the recognized host's mapper exclusively. Unknown hosts protect `.git` clone paths, then require a single unambiguous rewrite among definitions; null/no match, an unchanged-URL vote, or disagreement preserves the input. URL reconstruction keeps credentials/port while dropping page suffix/query/fragment. Shorthand and SSH/local/explicit clones remain pass-through or the existing shorthand mapping.

- GitHub/GitCafe tree/blob, GitLab first `/-/` (nested groups/self-managed), recognized Forgejo/Gitea branch/tag/commit (including mount paths), and Bitbucket source pages all yield ordinary URL strings to the same render path. W1 represents normalization; W2 adds a longer alternate shape. Branch names/file suffixes, `.git` endings, unknown-host ambiguity, credentials/ports and query/fragment stripping need parser assertions, not a recording per case. No real credentials should enter a capture.
- Inspected the existing/new cases in client-runtime projects and GitHub, Forgejo and Bitbucket definition tests. The client-runtime table includes normalized public/self-hosted GitLab, recognized-host refs/files ending in `.git`, and explicit-clone/ambiguous path protections. The change does not add server, contract, provider-adapter, transport, or clone-progress renderer code. Test claims in the PR were not independently rerun in this read-only proof audit.

**Seeding N1 concretely**

1. Use separately authorized immutable before/head sources; do not checkout/reset or launch a server in the reviewed worktree. Start isolated development state with seeding disabled and an explicit scratch-owned home. Do not use the live T3 home or bake origins into the web bundle. Keep source SHA, backend SHA, OS, native viewport/pixels, font scale, theme and settings in the capture manifest. Current head is preferred for a new after capture.
2. Via web Settings → Threads (`/settings/threads`) → New projects, choose the destination environment, set Add project starts in to `B`, and enable Clone into host folders. `B` must exist and be fresh for that capture; do not pre-create its full repository path. A short base helps expose the ghq value; caret movement can reveal a horizontally clipped path in the recording.
3. Lease one native phone through device-pool and install the matching dev client using test-t3-mobile. Pair to the isolated backend, run the pinned JS source, then enter Add project → Git URL. A source-screen route may select environment/source, but paste the raw page into the real input and press Continue/Next. Hold the resulting summary and initial destination. Dismiss keyboard in the same flow if needed. Export a still on each side. Do not start a clone; W1 already proves the normalized Git argument downstream.
4. No test harness is needed. A screenshot of AddProjectDestination rendered with pre-normalized props would prove typography only and would miss this row's navigation/normalization handoff.

**Inspected captures and quality limits**

All **14 linked PNGs** were downloaded and individually opened: before/after palette, Diff0, DiffT for each W1–W3, plus both W1 outcome stills. All **6 MP4s** were decoded with ffmpeg and inspected as chronological frame sheets (5-second sampling for the long W1/W2-before clips, 2-second for the others), with 4-fps detail around the three after-input transitions. This checks visible flow and milestones, not every encoded frame or keyboard event telemetry.

| Capture group | Direct visual observation | Limit / usable status |
|---|---|---|
| W1 before/after palette PNGs | Same readable palette; default main → t3code, raw title retained, description shortened. | Usable text/path proof. Button label is a disclosed existence-fixture mismatch; backgrounds differ. |
| W2 before/after palette PNGs | Same light palette, raw longer GitLab title retained, root description and gitlab-runner destination after. | Usable. Entry-button/project-background mismatch does not change this render path. |
| W3 before/after palette PNGs | Same explicit clone URL, destination and foreground layout. | Usable control. No Back-and-return evidence, and none required by this diff. |
| W1/W2/W3 Diff0 | Broad red patches over the folder region/footer from blurred underlays, including unchanged control W3. | **Not isolated change evidence**. Cannot support pixel-stable claims. |
| W1/W2 DiffT | URL suffix and destination differences isolated; W1 also marks button label. | Useful locator only; thresholded result can suppress small differences. |
| W3 DiffT | Empty at 10% fuzz. | Supports foreground control with direct still inspection, not a literal exact-match assertion. |
| W1 before outcome PNG/video | Error banner names raw page remote but truncates full reason; video enters clone flow and fails. | Usable with before-only runtime transcript for full repository-not-found message. No directory listing uploaded. |
| W1 after outcome PNG/video | Actual Receiving objects progress, incrementing percentages/MiB; after still is at 14%. Video reaches later transfer percentages before ending. | Usable real-transfer milestone. No completed clone/cancellation observed. Redaction covers unrelated model controls, not affected summary/path/clone status. |
| W2/W3 after recordings | Black redaction rectangles are fixed overlays over unrelated composer/model-control areas and can overlap unused footer-right space. Source input, changed summary and destination remain visible. | No ghosting or stale overlay blocking the changed content; usable for listed rows. |

**Source anchors**

- [Web root mount](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/apps/web/src/routes/__root.tsx#L202); [dialog render modes](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/apps/web/src/components/CommandPalette.tsx#L300); [URL/provider submission and destination](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/apps/web/src/components/CommandPalette.tsx#L2003); [summary props](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/apps/web/src/components/CommandPalette.tsx#L2931); [summary rendering](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/apps/web/src/components/CommandPaletteAddProject.tsx#L152).
- [sidebar shared Add-project callback](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/apps/web/src/components/Sidebar.tsx#L1069); [NoProjectsHero entry](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/apps/web/src/components/NoProjectsHero.tsx#L38); [DraftHero entry](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/apps/web/src/components/chat/DraftHeroHeadline.tsx#L94); [PR-list empty entry](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/apps/web/src/components/pullRequest/PullRequestListEmptyState.tsx#L82); [palette shortcut](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/apps/web/src/shortcuts/commandPaletteCommands.ts#L49); [palette width/platform shell](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/apps/web/src/components/ui/command.tsx#L37).
- [Native URL normalization and route params](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/apps/mobile/src/features/projects/AddProjectScreen.tsx#L822); [native destination defaults](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/apps/mobile/src/features/projects/AddProjectScreen.tsx#L1360); [native summary rendering](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/apps/mobile/src/features/projects/AddProjectScreen.tsx#L1473); [native routes](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/apps/mobile/src/Stack.tsx#L569); [prompt-link bypass](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/apps/mobile/src/features/prompt-links/newTaskPromptLink.ts#L341).
- [shared normalization and clone path helpers](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/packages/client-runtime/src/operations/projects.ts#L129); [URL registry branch logic](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/packages/source-control-core/src/shared/definition.ts#L769); [ghq path helper](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/packages/shared/src/cloneUrl.ts#L75); [per-environment capture settings](https://git.cafe/pingdotgg/t3code/blob/09e12cd28bfaf9bb5d33c063d50cbcef20776064/apps/web/src/components/settings/SettingsPanels.tsx#L1586).

Coverage: pinned full PR diff; verification that capture code survived the main merge; both normalizer consumers and their relevant caller/render/interaction paths; all linked images; all recordings via decoded samples and detailed input-transition frames; earlier matrix, seed/driver and runtime transcript. No repository edits, pushes, PR comments, tests, dev servers, devices or live-state mutations. All newly created inspection material and input copies are preserved in the accompanying audit-input archive before local scratch cleanup. This is a proof-adequacy verdict, not a general code/CI merge approval.

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

FRICTION:
- tool | Python urllib downloads returned HTTP 403; the same URLs downloaded successfully with curl | Use curl for these ghdrop assets.

VERDICT: INSUFFICIENT N1 (one native before/after Git URL → ghq destination recording pair)
