# Built-in Browser capture recipe

Use preview tools against the isolated dev server, paired privately. Do not publish auth tokens. Before each still: set freeform CSS viewport, set appearance, wait for controls/fonts, blur activeElement, hover a neutral header point, save whole viewport. Save DOM viewport/clock/reduced-motion and accessibility attributes.

Persist settings through actual module /src/hooks/useSettings.ts with persistClientSettingsPatch. Common: onboardingCompletedAt=2026-10-25T12:00:00.000Z.

Card: legacySidebarEnabled=false, redesignEnabled=true, sidebarProjectGroupingMode=repository, sidebarThreadPreviewCount=6. Select proof-main-0-A, open sidebar at390. Keep A/N/B/C/D/G readable. G remains unselected.

Legacy full: legacySidebarEnabled=true, redesignEnabled=false, grouping=separate, previewCount=6. Select proof-main-0-A, collapse Overflow winner controls, expand Question indicator controls. At390 open sidebar again after selecting a row. Reset nav scrollTop to0.

Overflow: legacy=true, redesign=false, grouping=separate, previewCount=1. Select proof-main-0-A. Collapse main project (selected A remains), expand overflow project without expanding Show more. Latest visible overflow7-N leaves6-A first hidden winner. Show more/Show less toggles actual app list.

Palette: legacy=true, grouping=separate, previewCount=6. Select proof-overflow-7-N so current thread exclusion does not remove A. Move pointer away. Ctrl+k, type middle-dot character · into input[placeholder='Search commands, projects, and threads...']. All six main controls match. Preserve sidebar expansion identically on both revisions.

For each layout capture1440x900 and390x844, light/dark. Saved desktop screenshot is1280x800 because preview downscales; narrow is780x1688 at DPR2. Record actual CSS innerWidth/innerHeight, do not infer them from PNG size.

Static fixtures prove rendering only. They do not prove live transitions, timer advancement, answer/completion or blocking behavior. The recorded interaction attempt does not complete all W3/W7/W9 requirements.

Deterministic desktop sidebar width: persist localStorage chat_thread_sidebar_width as JSON number208 before loading. Reload after settings changes, particularly after Vite HMR, then verify the number of visible rows. Palette must be top-level: close mobile sidebar before Ctrl+k. Nested sheet palette is a different layout.
