Evidence capture for [#23757](https://git.cafe/pingdotgg/t3code/issues/23757), [#23894](https://git.cafe/pingdotgg/t3code/pulls/23894).

Before: exact base [200dad3b39](https://git.cafe/pingdotgg/t3code/commit/200dad3b39aa9c2562b4bae54106ab8acdcc4163). Original PR head: [060c24ead5](https://git.cafe/pingdotgg/t3code/commit/060c24ead5d984beec33dd176c7e7abf1fca27eb). Final after: local, unpushed d99a50058fffc09b82df0f80779c30c60afd49bd, supplied by the lead. The local follow-up is not the remote PR head. Files named `final-*` and pairs labeled AFTER use that local follow-up. `original-pr-head/` contains independent captures of the original remote head, not contributor evidence.

The core reproduction succeeds: the exact base ignores a saved scratch title in the breadcrumb and draft trigger and uses the fixed No project palette action. The final local follow-up displays None and uses its gray Lucide Info icon in the palette. Renaming to Scratchpad and querying Scratchpad returns the action on the follow-up; the exact base returns no matches. Enter was issued and the follow-up returned to the scratch draft.

| Requested row | Evidence status |
| --- | --- |
| Default scratch record, draft breadcrumb/trigger, light/dark, 390 and 1440 CSS px | Captured at base, original head and final follow-up. 390 comparisons usable. Final 1440 full-frame comparisons confounded by sidebar-width drift. |
| Custom None / gray Info, draft breadcrumb/trigger and palette, both widths/themes | Captured at all three revisions. 390 comparisons usable. Final 1440 full-frame comparisons confounded. |
| Ordinary project control | 1440 light stills at all three revisions and before/after interaction recordings. Original head vs base control is pixel-identical; final full-frame comparison has sidebar-width drift. Other widths/themes missing. |
| Scratch available, record absent, palette fallback | Scratch record removed through isolated Settings UI. SQLite read confirms deleted_at set and ordinary project active. Palette offers No project / dashed icon. Both widths/themes captured at base/final. 390 comparisons usable; 1440 comparisons confounded. No record-absent draft capture: selecting Scratch creates its record. |
| Scratch unavailable, null target / Choose a project | Missing. Fresh home inside capture worktree started, but pairing/WebSocket auth failed before the UI state could be verified. No screenshot is presented as proof. |
| Grouped sidebar labels | Only the grouped project filter at 1440 light was captured: base No project versus follow-up Scratchpad. This is a filter, not a grouped sidebar section. Matched sidebar-section captures at both widths/themes are missing. |
| Environment A None/Info, environment B Notes/distinct icon, preferred-environment switches, palette target vs representative | Missing. No second environment was configured or simulated. |
| Mobile native home grouping / first-member representative | No native runtime capture. Source inspection only: apps/mobile/src/features/home/homeThreadList.ts calls buildProjectGroups with groupScratchProjects:true, uses group.label as title and group.representative. The 390 captures are responsive web, not React Native. |
| Desktop | Shared-renderer source confirmation only: apps/desktop/src/window/DesktopWindow.ts loads applicationUrl. No Electron runtime capture. |
| Interactions | Before/after MP4s show breadcrumb click, draft picker selecting server, and start without a project. Palette scratch selection and Ctrl+Alt+N were issued successfully, but the short recordings end before all final React commits are visibly recorded; those two recording rows remain incomplete. Search MP4 visibly shows Scratchpad query/result; its final Enter transition is not visibly settled in the clip. |

Environment: Linux host, native T3 server preview, Chrome desktop UA, DPR 2. CSS viewports 1440x900 and 390x900. Desktop snapshots are scaled by native preview to 1280x800 PNGs; narrow snapshots are 780x1800. Body font reported `16px / 24px -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif`; root font size 16px. Themes set using preview_set_appearance. Fresh synthetic fixture created through normal UI, with the automatic server project and stopped empty thread; no provider turn was started. Capture worktree: /home/ubuntu/wt/evidence-23757-base. Available Scratch home: /tmp/t3-evidence-23757-home. Server/web ports 14052/6012. The lead's worktree/server was not modified or killed.

Fonts were awaited with document.fonts.ready. Date constructors and Date.now were frozen to 1792875600000 after each page load. CSS animations/transitions and carets were disabled for stills. Native prefers-reduced-motion remained false: this is animation suppression, not verified reduced-motion emulation. Network-idle was not explicitly instrumented; loaded resources and settled frames were used. Therefore the full requested capture preconditions are not all proven.

Each named still with a `-settled.png` companion has a second capture at least 500ms later. metrics.json reports whether it is pixel-identical. All final and all 390 still pairs are identical within each revision. Two base 1440 light captures (custom draft and group filter) remain unstable at a one-pixel sidebar edge and are not accepted as settled proof. The initial base-default-1440-light-draft has no companion. No claim of universal settled-frame compliance is made.

Every base/final pair includes a zero-threshold binary diff and an 8x amplified absolute RGB diff. Metrics use maximum absolute RGB channel difference: threshold 0 means >0; threshold 16 means >16 out of 255. No pixels were masked, normalized or aligned. At 390 CSS px:

| Pair | >0 changed pixels | >16 changed pixels |
| --- | ---: | ---: |
| Default light draft | 0 | 0 |
| Default dark draft | 28 | 0 |
| Default light palette | 248 | 186 |
| Default dark palette | 248 | 190 |
| Custom light draft | 4400 | 3848 |
| Custom dark draft | 4388 | 3884 |
| Custom light palette | 19772 | 2226 |
| Custom dark palette | 18402 | 2311 |
| Record absent light palette | 32 | 0 |
| Record absent dark palette | 0 | 0 |

What else changed: narrow draft differences are confined to the breadcrumb/title and draft trigger regions. Palette diffs also include the blurred backdrop behind the changed labels. Default-record palette diffs include the icon appearance when rendered through ProjectFavicon. Tiny sub-threshold control differences appear in dark default draft and light absent-record palette. Wide final captures have an unrelated sidebar width/layout difference (visible in the diffs), affecting header, hero, panels and blur positions. Those are confounded comparisons, not evidence that the PR caused a layout regression. The original head 1440 control capture matches base exactly, but cannot replace final-follow-up proof.

FRICTION

* Reusing supplied tab failed: `Preview tab tab_1_199aaa38-dd76-4fd3-ada7-cfa3d7697469 was not found for open. Omit tabId to use the current tab, or call preview_open.` A new native tab worked.
* PR ref fetch failed: `fatal: couldn't find remote ref refs/pull/23894/head`. Fetching the exact head SHA succeeded.
* Initial locators `Choose icon`, `start without a project` and a named draft combobox timed out. Correct accessible names were `Choose a project icon`, `or start without a project`; the draft combobox was selected from its snapshot/CSS. No application code was changed.
* Unavailable-state home startup briefly logged `AggregateError [ECONNREFUSED]` for /api/observability/v1/traces before the server listened. Subsequent auth failed: `HTTP Authentication failed; no valid credentials available`. The native wait returned `Preview automation waitFor timed out after 60000ms.` The browser stayed on Pair with this environment after navigation to the startup pairing URL. Verification stopped; no auth or unrelated runtime repairs attempted.
* Native preview saved screenshots/recordings beneath its own browser-artifacts/attachments directories in ~/.t3/userdata. The capture server never used that home; no live database/settings/secrets were opened for writes. Evidence files were copied out for upload.

No implementation edits, commits, pushes, public PR/issue edits, merge or watch actions. Only ghdrop evidence uploads are public writes. The PR was registered with this thread using app metadata and is not watched. All capture server sessions were stopped by retained terminal sessions. The temporary capture worktree is removed after packaging; external synthetic fixture remains under /tmp. No contributor screenshots were reused.

Work performed through Codex in T3 Code, gpt-6.1-sol. Skills: test-t3-app and ghdrop.
