# Proof audit, pass 1 — settings unsupported environments

PR [#18361](https://git.cafe/pingdotgg/t3code/pull/18361) ([GitHub mirror](https://github.com/pingdotgg/t3code/pull/18361)). Read-only source audit at [eda592b63f](https://github.com/flamboh/t3code/commit/eda592b63f); diff read with `git diff origin/main...eda592b63f`, merge base [49a9e80e0b](https://github.com/pingdotgg/t3code/commit/49a9e80e0b30e3012412bcc564bb5e52e09d1c1d). All render conclusions below come from that commit, never the concurrently edited working files. Before means this merge base/main without the PR, not an intermediate PR commit. No browser, server, test, worktree edit, push, or forge comment was performed for this pass. The table is a capture plan, not evidence of working behavior.

## Findings first

1. **No visual or runtime evidence exists in this pass. Every fixture is pending.** A static screenshot of the fixed switch does not prove the original “Mixed forever / Off unreachable” sequence; F01 and F14 need before/after recordings and destination-specific RPC logs.
2. **Absence of `settingsKeys` means unknown support, not unsupported.** A main server without the capability still accepts many of these keys. Pairing it alone cannot demonstrate silent drops. Use two real isolated servers plus a labelled simulated-server WebSocket interceptor for exact capability lists and silently dropped responses. Save initial settings through the real RPC; intercept only the exceptional server behavior. A real older release is acceptable only if its actual responses prove it drops the chosen key.
3. **Unsupported copy is often hidden until interaction.** `SettingsRow` adds the summary to the layers icon tooltip/accessible label. The disabled-control explanation is a separate tooltip; only rows with children get the update explanation inline. Record hover or keyboard focus for both, then open the inheritance popover. A wide resting still can miss the entire change.
4. **There are four independently keyed provider catalogs.** Default, text generation, source control writer, and review guide models must each be exercised with the primary environment unable to store that particular key. Review guide support must differ from writer support in F10; a common catalog everywhere would conceal wrong-source regressions.
5. **Project scope, multi-key rows, error paths, and device-host writes need protocol evidence.** A plausible label is insufficient to show the unsupported environment was excluded. Include environment ID, request ID, patch, response, and subsequent config for every save. Capture reset/clear destinations too. These are proof obligations, not claims that the pinned code passes them; later logic fixes may change outcomes while preserving this render matrix.

## Shared fixture data and seeding recipe

- **A** is the primary environment, label `Legacy workstation — west-coast integration`, server version `fixture-legacy-1`. **B** is `Current build machine — long project checkout`, version `fixture-current-1`. **C**, only where required to distinguish two actual holders, is `Current CI checkout`. Use synthetic names, SSH addresses, project paths, and instructions; do not upload live user data or credentials.
- Start isolated before and after web/server runs with `T3CODE_DEV_SEED=0 vp run dev`; preserve the exact version, port, and environment mapping in the evidence manifest. Do not set Vite origin variables or touch live userdata. One second isolated server paired through Connections supplies B. A third paired server is unnecessary for most rows; C can be a labelled environment-store harness fixture for F04/F11 if a third real peer exceeds the capture budget. Such a row must say **HARNESS**, not real-app evidence.
- Prefer **real app + simulated server** for advertised support: in config data for A, use `environment.capabilities.settingsKeys = allActualServerKeys.filter(k => !missing.has(k))`; retain every other capability. For single unsupported rows omit the chosen key, not the entire capability. `[]` deliberately means no server settings supported; omitted property means unknown support. B advertises its real full list. Intercept initial/config subscription/lifecycle descriptor data consistently so reconnects do not restore a conflicting list.
- Settings are real `server.updateSettings` RPC calls with payload `{patch: {...}}` and a `ServerSettings` success response. The web command wrapper additionally supplies `{environmentId, input: {patch}}`. Use the app's connection/runtime client or drive controls; do not assume an HTTP `/settings` endpoint. Config is kept current by `subscribeServerConfig`; patch both the response and subsequent settings/config stream events for a simulated silent drop. Do not let a real successful update broadcast undo the simulated response.
- For **legacy silent drop**, remove `settingsKeys` from A's descriptors, keep its prior value unchanged in the save success response AND config stream, and return a full valid `ServerSettings`. Log this as simulated server behavior. For learning a nullable model object, start from `null` and drop the entire newly created selection; a dropped leaf inside an existing object is a different case.
- For **permissions**, use a paired connection/session grant without `AuthSettingsWriteScope` (the settings-write scope) on the named peer, or intercept the decoded granted scopes and label it simulated permissions. Test both A denied/B writable and A unsupported/B denied. A save response error alone does not seed the disabled permission UI.
- Project fixtures: create a tiny synthetic repository under the capturer's permitted scratch space; add the project through the app on each peer, grouped as the same logical project. Select the project and checkout using the scope sentence. Record the actual `project` group key, `machine` environment ID, and `checkout` physical project key. These are opaque IDs, not guessed directory strings. Configure `projectSettingsOverrides[projectId]` with the RPC; use a real `t3.json` only for file-backed keys such as workspace/submodules. Copy matching fixture data into both before and after runs.
- Provider fixtures: clone a valid provider descriptor already returned by the dev server, retaining required protocol fields. Give A a distinguishable catalog/model and B a distinguishable valid catalog/model. Seed model selections and provider enablement in server/project settings. If no real descriptor supplies the needed model traits or availability, intercept provider snapshots as **simulated provider catalog**. No paid agent turn is needed. Replay may supply a valid descriptor but must not be assumed to support text generation without checking its flag.
- Each capture driver run writes to a NEW timestamped child of `/tmp/lead-18361-r3/proof-audit-1/`. Keep raw recordings, screenshots, sanitized RPC logs, seed JSON, script, actual head/base SHAs, and a row-to-artifact manifest. Do not record pairing tokens, cookies, authorization headers, or secrets. This audit's source snapshot is not capture evidence.

## Atomic fixture rows (capture chapters share recordings)

Each row names a distinct affected state or a protocol-only obligation. The session table below supplies exact routes, mutations, seeding and expected before/after results. Opening a model/traits menu has its normal popup/search/selection phases in the named recording; these unchanged widgets do not need independent files. Equivalent phases explicitly reuse one artifact. Every visual row is **recording** because its proof depends on interaction or loading, even if a resting frame also looks useful. Protocol rows are explicitly distinguished. All rows are affected directly or exercise guards of the changed shared logic; unchanged list/status/platform variants are enumerated in the inventory and excluded from the capture minimum.

| Fixture | Distinct state and required data | Capture/session × viewport × theme | Status |
|---|---|---|---|
| F01a — Partial support, On + explicit select | A missing keys; B review=true, auto-pull=true, merge=squash. Unsupported A denied permission. | F01: **recording**, D dark | PENDING — no captures |
| F01b — Partial support, Off + dependent rows absent | Same data; B review=false after save; then turn On again. | F01: **recording**, D dark | PENDING — no captures |
| F02 — All unsupported, one label, control and children | A only; omitted keys; residual custom style, guide enabled/model/instructions. | F02: **recording**, D dark | PENDING — no captures |
| F03 — All unsupported, plural long labels, stacked layout | A+B omit keys, long labels; same residual child data. | F03: **recording**, D dark + N light | PENDING — no captures |
| F04a — True holder Mixed, batch-edit affordance | A unsupported; B/C differ style mode/instructions/templates and guide values. | F04: **recording**, D dark | PENDING — no captures |
| F04b — Batch editor empty, Apply disabled | F04a + click Write custom instructions for all; allInstructions=null. | F04: **recording**, D dark | PENDING — no captures |
| F04c — Batch editor typed, Apply enabled | F04b + multiline typed draft; no save yet. | F04: **recording**, D dark | PENDING — no captures |
| F04d — Applied common custom style, direct editor | F04c + Apply; B/C same mode/text, templates can still differ. | F04: **recording**, D dark | PENDING — no captures |
| F04e — Mixed guide instructions placeholder and edited blur | F04a; reviewGuideInstructions Alpha/Beta, empty editor until edit. | F04: **recording**, D dark | PENDING — no captures |
| F05a — Supported holder denied permission | A unsupported, B supported denied. Tooltip names B. | F05: **recording**, D dark | PENDING — no captures |
| F05b — Supported holder granted; denied nonholder ignored | F05a grant B, retain A denied. Same visual as F01; reuse equivalent phase. | F05: **recording**, D dark | PENDING — no captures |
| F05c — Selected disconnected nonholder | F05b disconnect A; support suffix removed; reconnect restores it. | F05: **recording**, D dark | PENDING — no captures |
| F06a — Project override marker and reset | A unsupported, B scoped override. Mixed source variant on other key if C present. | F06: **recording**, D dark | PENDING — no captures |
| F06b — Inherited environment after reset | F06a reset; B nondefault environment workspace and inherited Model. | F06: **recording**, D dark | PENDING — no captures |
| F06c — Repository t3.json source | B submodules source=t3.json, environment null; project selected. | F06: **recording**, D dark | PENDING — no captures |
| F06d — Individual checkout and environment-wide inert row | Select B checkout; source-specific scope labels. Review-guides remains environment-wide. | F06: **recording**, D dark | PENDING — no captures |
| F06e — Built-in/environment value source tooltip | No override and default or nondefault environment key; use different keys in same page sequence. | F06: **recording**, D dark | PENDING — no captures |
| F07a — Default-model automatic resolved to holder | A unsupported, B defaultModelSelection=null with usable B catalog. | F07: **recording**, D dark | PENDING — no captures |
| F07b — Default-model explicit with traits | F07a choose B model with nondefault trait; project and general callers. | F07: **recording**, D dark | PENDING — no captures |
| F07c — Default model menu open/search/no results/setup | F07b open, search valid choice then nonsense then clear; setup B. Popup/search states included in recording. | F07: **recording**, D dark | PENDING — no captures |
| F08a — Text-generation selected holder model and traits | A unsupported; B valid entry/selection/options, non-text provider also present. | F08: **recording**, D dark | PENDING — no captures |
| F08b — Text-generation menu/options/reset | F08a open picker, change model/traits, reset. Popup and trait options included in recording. | F08: **recording**, D dark | PENDING — no captures |
| F09a — Writer dedicated Off | A cannot store writer key; B selection=null, available fallback. | F09: **recording**, D dark | PENDING — no captures |
| F09b — Writer dedicated On with picker and traits | F09a enable; B valid dedicated model; Advanced expanded. | F09: **recording**, D dark | PENDING — no captures |
| F09c — Writer Advanced collapsed/search auto-open | F09b collapse then navigate target hash/search; source-model row returns. | F09: **recording**, D dark | PENDING — no captures |
| F10a — Guide Off, writer has separate source | A supports writer only; B guide only, guide null, guide enabled. | F10: **recording**, D dark | PENDING — no captures |
| F10b — Guide On uses guide holder catalog/options | F10a enable guide; B GB differs from A WA; menu + traits. | F10: **recording**, D dark | PENDING — no captures |
| F11a — Default model Mixed, traits absent | B/C distinct selections, A unsupported; choice incompatible only on C. | F11: **recording**, D dark | PENDING — no captures |
| F11b — Thread text-generation Mixed, active-entry traits path | Same eligible holder disagreement for text-generation key. | F11: **recording**, D dark | PENDING — no captures |
| F11c — Writer Mixed: representative non-null versus null | B non-null/C other then B null/C non-null; verify existing usesDedicatedModel branch. | F11: **recording**, D dark | PENDING — no captures |
| F11d — Guide Mixed: picker despite representative null | B null/C non-null, available guide entry. Mixed switch and no traits. | F11: **recording**, D dark | PENDING — no captures |
| F12a — Default no providers | B holder catalog empty; A unsupported catalog valid. | F12: **recording**, D dark | PENDING — no captures |
| F12b — Thread text generation no available provider | B textgen providers absent/disabled/unavailable; A excluded. | F12: **recording**, D dark | PENDING — no captures |
| F12c — Writer On without provider | B writer selection non-null, no usable fallback/entry. | F12: **recording**, D dark | PENDING — no captures |
| F12d — Writer and guide Off without provider | Both null; enable switches disabled despite A valid but unsupported catalog. | F12: **recording**, D dark | PENDING — no captures |
| F12e — Guide On without provider | B guide non-null but cannot-enable; no picker/traits, can turn Off. | F12: **recording**, D dark | PENDING — no captures |
| F12f — Selected unavailable model label | Catalog resolver retains selected unavailable model, displays suffix. | F12: **recording**, D dark | PENDING — no captures |
| F12g — All unsupported model fallback | No holder, representative catalog may remain; F02 inert wrapper blocks writes. | F12: **recording**, D dark | PENDING — no captures |
| F13a — All environments, zero connected targets | Panel mounts, connect/no-provider placeholders. | F13: **recording**, D dark | PENDING — no captures |
| F13b — Initial config pending then available | Delay first config; render fallback before B config/providers. Time-dependent. | F13: **recording**, D dark | PENDING — no captures |
| F13c — Named environment offline notice | machine=A while disconnected; route replaces panel. | F13: **recording**, D dark | PENDING — no captures |
| F13d — Unavailable/stale selection notice | Removed machine/project/checkout IDs; same notice layout, distinct copy logged. | F13: **recording**, D dark | PENDING — no captures |
| F13e — No project empty state | No groups; Projects asks to add a project. | F13: **recording**, D dark | PENDING — no captures |
| F14a — Legacy unknown Mixed before discovery | A no capability false, B true. | F14: **recording**, D dark | PENDING — no captures |
| F14b — Legacy learned partial drop and toast | Attempt true; A unchanged-success, B succeeds. Row resolves to B; error toast. | F14: **recording**, D dark | PENDING — no captures |
| F14c — Legacy second Off succeeds only on B | F14b second interaction; row Off without Mixed. | F14: **recording**, D dark | PENDING — no captures |
| F15a — Legacy learned all-drop disabled and toast | One A unknown; drop a whole nullable object starting null. Scalar chapter separate. | F15: **recording**, D dark | PENDING — no captures |
| F15b — Same-version navigation retains disabled state | F15a navigate away/back; same serverVersion. | F15: **recording**, D dark | PENDING — no captures |
| F15c — Version update/fresh session makes retry possible | Update descriptor version without capability, then fresh runtime; demonstrate next save. | F15: **recording**, D dark | PENDING — no captures |
| F16a — Partial-supported custom direct editor | A excluded; B custom multiline, templates false, guide instructions nonempty. | F16: **recording**, D dark | PENDING — no captures |
| F16b — Repository conventions, no custom editor | Select repo_conventions, correct description; templates preserved. | F16: **recording**, D dark | PENDING — no captures |
| F16c — Conventional Commits, no custom editor | Select conventional_commits, distinct description; reset. | F16: **recording**, D dark | PENDING — no captures |
| F16d — Empty instructions after reset and scope remount | Reset guide instructions; switch scope with edited draft and verify no stale save. | F16: **recording**, D dark | PENDING — no captures |
| F16e — Guide disabled, dependent rows gone | Turn guide Off; equivalent structural gate to F01b, share evidence. | F16: **recording**, D dark | PENDING — no captures |
| F17 — Device-host targeting | Permission/support/save/add/edit/remove/error branches are protocol obligations; list visuals unchanged. | F17: **request/response**, no visual required | PENDING — no captures |
| F18 — Multi-key eligibility/destination conversion | Single-env Providers UI; aggregate combinations in labelled harness protocol capture. | F18: **request/response**, no visual required | PENDING — no captures |
| F19a — Ordinary failure toast, retry still allowed | Supported RPC error; cache not poisoned. | F19: **recording**, D dark | PENDING — no captures |
| F19b — Dropped leaves/equal/trimmed/partial key save | Protocol cases; partial/all toast shapes reused F14/F15. | F19: **request/response**, no visual required | PENDING — no captures |
| F20 — Reset and guard-only row shapes | Reset-only eligible destination; local/unkeyed/no-context preserved. | F20: **request/response**, no visual required | PENDING — no captures |
| F21 — Capability wire contract | Optional/present/empty list and actual server advertised keys. | F21: **request/response**, no visual required | PENDING — no captures |

There are 60 named states/obligations in 21 reusable sessions, not 60 separately staged browser setups. F17/F18/F20 interaction evidence, if produced through UI rather than protocol, must also be a recording.

## Minimum capture set and session recipes

`D` = 1280×900 web viewport, dark theme. `N` = 390×844 web viewport, light theme. Both are CSS pixels, DPR 1 preferred. Verify the actual settings-row container: wide must exceed the 32rem container query and narrow must fall below it. The editor/select also changes at the viewport `sm` breakpoint. Capture full rows with titles, controls, status, and relevant tooltip/popover; scrolling is allowed in a continuous recording. Do not crop away scope selection or error toast.

All visual rows get paired **before + after** at identical inputs. A `recording` is mandatory whenever the fixture needs interaction or time; still frames extracted from that recording are useful additions but do not replace it. Protocol-only rows need one sanitized request/response transcript per before/after run, not extra screenshots. Rows may be sequential chapters in the same recording. No Cartesian product of every theme and state is required: no theme/platform condition was added; F03 supplies the changed disabled text, wrapping, and both control/children layouts in light/narrow, while D covers all semantic states. F04 provides amber Mixed markers; F06 supplies the project override marker. F03 also needs a D chapter for plural labels at wide size.

| ID / named fixture | Affected render path and exact data | Expected after / before contrast and action | Seed / route / recommended surface | Minimum evidence | Status |
|---|---|---|---|---|---|
| F01 — one holder; Off reachable | Source control Review guides, plus repository default switch/select. A lacks `reviewGuidesEnabled`, `defaultAutoPull`, `pullRequestMergeMethod`; B stores them. A false/B true for review guides; A false/B true for auto-pull; A null/B squash for merge method. A lacks settings-write grant, B writable. | After shows B's true/squash, never Mixed solely because of A; unsupported A excluded from permission and writes. Toggle review guides Off → On → Off; dependent review rows disappear/reappear. Hover layers: `<summary> · Not supported on A`. Before remains Mixed after attempts to reach Off. Select merge/rebase and reset auto-pull, log writes only to B after. | Real app + simulated capability, `/settings/source-control`, all environments. Reuse these settings for source-control category of ProjectDefaultsSettings. | **recording**, D; destination RPC transcript. | PENDING — no captures |
| F02 — none can store it, one environment | Select A alone; omit `sourceControlWritingStyle`, `reviewGuideModelSelection`, `reviewGuideInstructions`, `reviewGuidesEnabled`. Keep returned `reviewGuidesEnabled:true` to expose dependent rows; custom style and nonempty review instructions expose children; dedicated guide model exists. | Controls/children inert and faded, reset hidden. Control tooltip says `Update T3 Code on A to use this setting.`; layers summary `Not supported on A`; children rows show update text inline. Attempt pointer/keyboard edit does not send RPC. This deliberately exercises a valid but unsupported residual value rather than relying on defaults. | Real app + simulated capability and residual data, `/settings/source-control?machine=<A>`. | **recording**, D; include layers hover, disabled-control focus, textarea attempt. | PENDING — no captures |
| F03 — none, multiple long labels; narrow/light | Same residual values as F02, A+B selected and both omit these keys. Use both long labels. Also run the two peers with the same label once to exercise unique-label collapse; it renders the same single-label message shape as F02. | Plural comma-separated update/unsupported copy wraps without clipping; no reset/action escapes the inert children; stacked control layout below 32rem and full-width select below `sm`. Duplicate label not repeated. Before has no support explanation. | Real app + simulated capability, source control, all environments. No third server needed. | **recording**, N AND D (only this fixture repeated at both sizes/themes). | PENDING — no captures |
| F04 — two real holders disagree; mixed editors | A unsupported for writing style, guide model/instructions, review toggle; B+C support. B style `{mode:custom, customInstructions:Alpha, followChangeRequestTemplates:true}`, C `{mode:conventional_commits, customInstructions:Beta, followChangeRequestTemplates:false}`; B guide enabled true/C false; guide instructions Alpha/Beta. | Genuine holder disagreement stays Mixed/amber, with unsupported suffix. Writing style initially has `Write custom instructions for all`, no direct custom textarea; click reveals empty all-instructions textarea + disabled Apply; type → Apply enabled → apply trimmed text only to B/C → direct custom textarea. Guide Mixed keeps dependent rows visible. Mixed review instructions use empty textarea + Mixed placeholder; blur untouched sends nothing; edit+blur saves only B/C. Advanced templates switch resolves independently of mode/instructions. | Real app + 3 peers preferred; alternatively **HARNESS** for C only, labelled. `/settings/source-control`, all. A's values must differ but not create the holder disagreement. | **recording**, D; RPC logs; all named phases in one chapter. | PENDING — no captures |
| F05 — holder permission denied, unsupported excluded | A unsupported; B supported but without settings-write permission; same source control keys as F01. Then grant B while keeping A denied. Add selected disconnected A variant after reconnect/drop. | Disabled tooltip names B only, no misleading update-all message while B can store the key. Granting B enables row despite A denied. A disconnected no longer counts as a supported/unsupported target, and reconnect restores correct suffix. No unauthorized write. | Real app + real or labelled simulated grants/connection transition; source control all. Never kill another server by process-name match. | **recording**, D; grants + request/no-request log. | PENDING — no captures |
| F06 — project/checkout inheritance and reverse action | A cannot store project-scoped keys; B can. B has `defaultModelSelection` project override; workspace inherits nondefault environment value; worktree submodules inherit `t3.json`; source-control merge method remains built-in. Add one supported project override to a second field to show source transitions, and a B/C mixed-source variant in F04 session if available. | Source and effective value ignore A. Show `Overridden for this project`, `Inherited from <env>` / `Inherited from environment`, repository `t3.json`, default/environment summaries plus unsupported suffix where partial. Reset override restores inheritance only on eligible peers; select individual checkout and verify corresponding label/value/reset. Environment-wide review-guides row remains inert at project scope; support-all-absent update message takes precedence when applicable. | Real project data + real `t3.json`, capability interception. `/settings/projects?project=<P>` (category project: Model + Workspace), `/settings/threads?project=<P>` (general: Model + Permissions + Workspace), `/settings/source-control?project=<P>` (repository defaults), `/settings/worktrees?project=<P>#<submodules-target>`; then `machine=<B>&checkout=<physical-key>`. Use UI-selected IDs. | **recording**, D; project override patch/reset destination transcript. | PENDING — no captures |
| F07 — default-model catalog comes from holder | A lacks `defaultModelSelection` and has distinct A-only provider/model; B supports it with B-only valid selection and model traits. `null` selection resolves automatically; explicit selection resolves to named model. | Both Threads general category and Projects project category show B catalog/current value, model picker opens B's list, traits change saves to B; choose model, reset to automatic. Open setup from picker reaches B provider settings. No A mismatch warning. Before uses A catalog with B value missing/wrong. | Real app + labelled simulated capability/provider catalog if necessary. `/settings/threads#default-model`, then `/settings/projects?project=<P>#default-model`. | **recording**, D; current catalog/selection and RPC destination. | PENDING — no captures |
| F08 — text-generation catalog and traits from holder | A lacks `textGenerationModelSelection`, A-only catalog. B has one enabled available text-generation provider, selected model with nondefault options and a second valid model. Include a provider with `supportsTextGeneration:false` to prove exclusion. | Threads picker shows B model/options, excludes non-text provider, selects model and changes traits using B selection/settings; reset restores default and supported rows stay coherent. Provider setup goes to B. | Real app + simulated capability/catalog; `/settings/threads#<text-generation-model-target>` and project variant as F06 chapter. | **recording**, D; RPC selection/options transcript. | PENDING — no captures |
| F09 — writer dedicated Off/On, source-specific provider | A lacks `sourceControlWriterModelSelection`; B supports it. B text-generation default valid; start writer selection null, then explicit with traits. Different A catalog would otherwise block B. | Advanced collapsed → expanded; Off means no picker/traits; On shows B picker+traits; selecting model, traits and turning Off persists only to B. Non-text-generation providers excluded; provider setup uses B. Preserve reset/default inheritance behavior. | Real app + capability/catalog interception; `/settings/source-control#<writer-model-target>` auto-opens Advanced, also explicitly collapse/reopen once. | **recording**, D; source selection and writes. | PENDING — no captures |
| F10 — review guide uses a different holder than writer | Two peers: A supports writer but lacks guide-model key; B supports guide-model key but lacks writer key. Both guide enabled true. A writer model WA; B review model GB and fallback writer/text-generation settings deliberately differ. B catalog has a valid guide choice unavailable on A. | Review guide Off→On must seed B's GB/options (not A's WA); picker/traits use B catalog; guide change/traits/Off save only B. Writer row remains on A. On branch with no usable B guide provider must disable enabling even if A writer is available (F12). | Real app + simulated per-key capabilities/catalog. `/settings/source-control`, review guides visible; Advanced writer row for cross-check. | **recording**, D; selection/options and destination transcript. | PENDING — no captures |
| F11 — model Mixed and cross-holder availability guard | A unsupported for each picker under test; B+C support with differing selections. Per-key instance present/available/enabled on B but missing, disabled, unavailable, different driver, or model unavailable on C. | All four pickers must retain genuine Mixed: default and writer/guide traits hidden when mixed; thread text-generation traits follow its existing active-entry branch. Review picker may appear when guide selection Mixed even if representative guide selection null; writer picker still follows `usesDedicatedModel`, a distinct branch. Model menu disables incompatible choices and explains C, never A. Compatible choice applies only to B/C. | Reuse F04's three-peer or labelled C **HARNESS** setup; threads and source control, plus project-default caller in F07. One short chapter per distinct caller, not every provider brand. | **recording**, D; disabled reason + successful compatible patch. Missing/disabled/driver/model alternatives share UI and need one representative visual plus data-only guard transcript for the rest. | PENDING — no captures |
| F12 — empty/unavailable provider outcomes | Connected B supports keys but no enabled available text-generation entries; A unsupported has a valid catalog. Default provider list empty vs selected unavailable model. Writer/guide selection null and non-null are separate phases. Then make both peers unsupported to cover retained representative fallback under disabled wrapper. | Default `No providers available`; thread `No text generation providers available.`; writer On gives its no-provider text, Off switch disabled; guide Off switch disabled, guide On still can turn Off but has no picker/traits. Unavailable selected model shows `(Unavailable)` where catalog resolver retains it. Empty/disabled B must not borrow A catalog. All-unsupported rows have F02 wrapper and update summary. | Real app + simulated provider snapshots/capabilities; threads/source control. Keep review enabled true for guide phases. | **recording**, D; one multi-page sequence. | PENDING — no captures |
| F13 — empty, connecting, disconnected, stale scope | No selected connected targets/config; then initial config/provider load completes. Distinguish all-environments with zero connected (panel still mounts) from named offline environment (route notice), removed machine/project/checkout (unavailable notice), and no projects (`/settings/projects`). | Mounted model rows show appropriate connect/no-provider fallbacks and no false unsupported/update labels; arriving config updates values/catalog. Named offline says reconnect; unavailable scope does not broaden writes. Project empty state remains intact. These are regression controls, no new loading spinner exists in changed model hooks. | Real app via fresh empty dev state, controlled socket close/reconnect, delayed first config and stale query IDs. No paid provider. A component-internal disconnected branch hidden by route must be labelled **HARNESS** if separately rendered; route notice is real-app coverage. | **recording**, D; one connect/scope sequence plus no-write transcript. | PENDING — no captures |
| F14 — unknown legacy server learns partial support | A omits capability entirely, false initial review-guides; B true. A silently drops changed true write. Initial Mixed. Save true so A changes would be observable; then toggle Off. | First save logs failure on A + success B, toast `Setting saved on some environments`; A becomes excluded for this session/version, row resolves to B true with suffix. Second Off reaches B only and becomes false. Before remains Mixed after the corresponding sequence. An already-equal attempted value cannot establish a silent drop. | Two real peers + labelled simulated legacy responses/stream, source control all. Capture a successful reply with unchanged A value, not an RPC rejection. | **recording**, D; ordered config/save/next-write transcript. | PENDING — no captures |
| F15 — legacy all-drop + nullable-object learning + retry lifecycle | One selected unknown A; guide enabled true. Start `reviewGuideModelSelection:null`, enable dedicated guide so A drops whole object. Also scalar reviewGuides change dropped in a separate chapter. | First all-drop toast `Setting not saved`; whole model key learned, row disabled and update explanation visible on hover. Navigate away/back retains knowledge. Change only A serverVersion while omitting capability → row retryable; successful write accepted. Fresh page/session clears learned memory. Advertised list restored on upgrade governs support. | Same simulated server; source control `machine=<A>`. For version lifecycle simulate descriptor version update, not merely changing visible label. For cache-clear use fresh page runtime/context and document prior browser storage reuse. | **recording**, D; version, capability, attempted object/scalar, response and retry transcript. | PENDING — no captures |
| F16 — supported custom editor, subfield independence | A lacks whole writing-style/instructions keys, B supports. B custom mode with multiline long text; templates false; review instructions nonempty. Then noncustom repo-conventions and conventional-commits phases; guide enabled true then false. | Direct textarea uses B instructions (not Mixed); edit/blur trimmed text saves only B, untouched blur no write. Mode select changes description/textarea visibility; reset restores mode/instructions while preserving templates. Template-only toggle/reset does not blank custom text. Review instructions reset to empty and editor remount/scope changes do not save a stale draft. Guide Off removes its dependent model/instructions rows; On restores them. | Real app + capability interception, source control, Advanced shown. These phases collapse custom/noncustom and editor reset paths into one sequence. | **recording**, D; field-specific patches and resulting config. | PENDING — no captures |
| F17 — device-host eligibility and saves | A lacks `deviceHosts`, denied settings-write; B supports/writable. A/B empty arrays initially; add synthetic SSH host to B through editor, edit, remove. Later B denied, no holder, project scope, disconnected selected peer and one actual failed supported destination. | Add/edit/remove target B only; unsupported denied A cannot block B. Eligible failure toast names only actual destinations; successful save closes editor. Project scope disallows mutation, all unsupported uses generic F02 wrapper, no environment uses F13 connect text. Busy state observable during pending save. | Real app `/settings/devices`; capability/grants plus stub successful host settings RPC (no need to connect to SSH host or install device tools). Need no host screenshots beyond generic wrapper already covered. | **request/response capture** sufficient for target filtering; if using UI add/edit/save/busy sequence, it is **recording**, D, never stills. | PENDING — no captures |
| F18 — multi-key and destination patch compatibility | `CompactIdleThreadsRow` keys `idleCompaction`, `compactIdleThreads`: A stores only legacy, B stores new; legacy `compactIdleThreads:true/false` vs `idleCompaction:onReturn/beforeCacheExpires/off`; both omit vs only one omitted. Include mixed patch containing supported+unsupported keys and local/client key. Worktree cleanup custom and legacy storage rules retain untouched fields. | Row is unsupported only when target stores none of its keys; dropped unsupported keys never sent, still-supported sibling sent; Never remains governed by actual destination version logic. Server patches converted for destination; local preference persists once. One-key row screenshots cannot establish this. | `/settings/providers` compact-idle row (route forces one environment); record legacy and current destinations separately. Aggregate multi-peer comparison/combined patch needs a protocol **HARNESS**, because that route cannot select both. Capability overrides remain simulated server data. | **request/response capture** + data assertions; any mode-menu interaction evidence is **recording**, D. No extra stills. | PENDING — no captures |
| F19 — ordinary failures and dropped leaves must differ | Writable supported B errors/rejects vs legacy A successful unchanged response; nested existing style leaf dropped vs whole previously-null object dropped; trimmed string and unchanged requested value accepted. Project-override nested drop and partial multi-key save. | Real errors report failure without marking whole key unsupported; subsequent retry still targets it. Only whole top-level dropped keys enter session cache; a leaf/project override failure does not poison the whole setting. Partial save lists saved and failed peers accurately. Inspect actual learned capability behavior via next write rather than assuming toast wording proves cache. | Simulated response variants through real command pipeline, source control. Include protocol-only labelled harness for generic nested payloads not emitted by a visible control. | **recording**, D for distinct partial/all failure toasts (can reuse F14/F15 clips); remaining variants **request/response capture**. | PENDING — no captures |
| F20 — reset/clear targeting and no-context controls | Partial-supported project setting with override entries on A and B; current scope reset and environment popover Reset it/all. Client-only/unkeyed/non-serverScoped SettingsRows and no SettingsScopeContext remain primary/local behavior. | Reset/clear must not reintroduce writes to an unsupported destination or hide supported overrides incorrectly. No setting keys/no serverScoped must not acquire update copy or lose local actions. A/B project override counts 0,1,4+ distinguish count/fold branches in unchanged inheritance UI; one full popover exercise can cover them if relevant. | Real project overrides via RPC and open layers popover; `/settings/general` local rows. No-context `SettingsRow` is **HARNESS** only (provider route itself always supplies context); use pinned component and real wrappers, not mocked SettingsRow. | **request/response capture** for targeting/local cases. Any reset/popover/collapse interaction coverage is **recording**, D, can share F06. No-context shape needs only harness/data guard unless a regression is seen. | PENDING — no captures |
| F21 — advertised capability wire contract | New server descriptor advertises every top-level `ServerSettings.fields` key as string array; legacy omits it; partial/empty array decode. | Same real response is consumable remotely/through paired server; no client assumes missing array means empty. Capture actual new-server config descriptor and selected legacy/empty-list simulated descriptor once. | Real new server + protocol decoding/old descriptor fixtures. No distinct UI, no screenshot. | **request/response capture** and key-set comparison, before/after. | PENDING — no captures |

### Time budget and stop rule for capturer

Target 20 minutes setup/seed validation, 40 minutes before recordings, 40 minutes after recordings, 20 minutes upload/manifest audit. Reuse source-control/threads recordings as chapters for multiple rows; protocol rows F17–F21 are batchable. Start F01, F02/F03, F14, F07–F10, F16, F06; then F04/F11, F12/F13 and transcripts. Do not silently drop rows to meet the cap: mark any missing phase or harness substitution explicitly in the manifest. If C cannot be prepared promptly, use a labelled harness for F04/F11 and retain the two-peer real-app core. A harness does not establish integrated three-peer behavior and the final auditor must report that limit.

## Render-path inventory and equivalence map

The inventory covers the changed render functions and their direct consumers. Unchanged UI subtrees are enumerated to show why they share proof rather than multiplying captures. Source files in this section link to pinned head contents.

| Changed component / function | Every production caller / entry | Layout/data/branch inventory | Fixture coverage |
|---|---|---|---|
| [SettingsScopeProvider / useResolvedSettingsScope](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsScopeContext.tsx) | `SettingsRouteLayout` in `_chat.settings.tsx`; browser tests also mount it, not additional product entries. Entire settings route tree consumes it. | Scope all/environment/project/checkout/unavailable; 0/1/many environments, selected primary vs first connected fallback; connected with config vs no config; raw target count 0/1/many vs repeated project targets on one peer; cached dropped map absent/present, same/new serverVersion, capability omitted/present/empty. Per-key representative may differ from general representative; value clones do not mutate targets. Project file initial waiting vs absent/invalid/truncated vs valid vs optimistic data changes effective source. Providers route alone `singleEnvironment=true`; other routes preserve all selected peers. | F01–F16, F18–F21. Valid/absent file + load covered F06/F13; malformed/truncated/optimistic file variants share the existing fallback appearance and require no extra capture unless they regress. |
| [SettingsRow](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/settingsLayout.tsx#L299) | Every direct JSX site is listed in the appendix below; imports/tests are excluded. All are under settings components. | `serverScoped` false/true; context absent/present; keys empty/one/many, scoped/non-scoped; unsupported 0/some/all, labels unique/duplicate/long; permission all/some/none and disconnected; control absent/present; children absent/present; description/status/reset absent/present. Mixed auto/explicit override; project sources environment/t3.json/project/mixed; customized default/nondefault; project overrides 0/1/many; reset hidden/unavailable vs project reset vs provided reset. Precedence unavailable/update/permission → environment-wide → normal. Control wrapped inert tooltip; children wrapped inert+opacity; inline update text only children; all vs partial inheritance summaries. Marker hidden until row hover for default/environment, visible for mixed/inherited/project; marker focus/tooltip/popover. Container below/above 32rem, viewport below/above `sm`; long description/label/value, light/dark. `className`, title ReactNode and `rowProps` spread existing, no new variant. | F01–F06, F13, F16, F18, F20; F02/F03 specifically cover absent-control child + control-with-child + control-only. Unchanged client/non-server/no-context guards F20. |
| [ProjectDefaultsSettings](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProjectDefaultsSettings.tsx#L53) | `ThreadsSettingsPanel category=general`; `ProjectDetail category=project`; `SourceControlSettingsPanel category=source-control`. | category project → Model+Workspace; general → Model+Permissions+Workspace; source-control → Auto-pull+Agent-credit removal+Merge method. Project/checkout vs environment/all description/reset differences; no connected targets; default-model null automatic vs explicit; selected model+active entry vs no providers; Mixed trigger and no traits vs traits; available/unavailable entry; chosen catalog/settings/projectId tied to per-key holder; provider-setup navigation; model/reset/traits write. Workspace value local/worktree vs unavailable/Mixed; permissions icon hidden when mixed; select/switch reset shown only dirty/nondefault. Merge last/null/merge/squash/rebase and Mixed. Source-specific controls are covered as shared row shapes, not new widgets. | F01 source-control category, F06 project/checkout and general, F07 model branches, F11/F12 Mixed/empty. Agent-credit switch has same key/boolean shape as auto-pull; no extra capture. |
| WorktreeSubmodulesRow in same file (unchanged render; shared helper affected) | `WorktreesSettingsPanel` Advanced. | Project/checkout vs environment/all; effective recursive/top-level/none; null inherited, Mixed, no targets Unavailable; dirty reset environment-only, project reset delegated SettingsRow; collapsed/expanded and search auto-open. | F06, F13. No separate provider catalog. |
| [ThreadsSettingsPanel](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1494) | `/_chat/settings/threads` → `/settings/threads`. | New-project base directory empty/custom/Mixed; general ProjectDefaults; project hides snooze; auto-settle hidden when no server targets, days row conditional on non-null, Keep-PR conditional on non-null AND capability all true. Text generation: no server→connect text; no enabled/available text-gen provider→empty message; otherwise picker, optional active-entry traits; dirty reset only with targets. Filters `supportsTextGeneration !== false`; instance enabled/available; active model/options; Mixed trigger; provider setup condition environmentId; model/options changes, reset, rejected-choice toast. Advanced title instructions/streaming hidden/expanded/search-open. Other exports in this file are unchanged; generic layout propagation only. | F06–F08, F11–F13, F18; F01/F14 boolean value substitution represents dependent auto-settle render gates, using nullable days in F18 protocol if needed. Existing auto-settlement capability gate is independent of settingsKeys; do not falsify it accidentally in interceptor. |
| [SourceControlWritingSettingsSection](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SourceControlWritingSettings.tsx#L69) | `SourceControlSettingsPanel` only; mounted at `/settings/source-control` under all/environment/project/checkout scope. | Six rows: writing style; review-guides toggle; conditional guide model+guide instructions; Advanced templates+writer model. Field comparison uses eligible styleTargets 0/1/many, mode/instructions/templates differences independently. Writing style description for repo_conventions/conventional_commits/custom; reset dirty if mixed mode/instructions, not templates alone. Mixed→batch edit button; batch editing empty/null→disabled Apply; typed→enabled Apply; applied→nonmixed/custom direct textarea; direct textarea keyed by instructions and saves trim on blur; noncustom has no editor. Review gate false hides model/instructions, true or mixed shows them. Review instructions empty/nonempty/Mixed placeholder, key includes scope/mixed/value; edited ref saves only edited blur, reset conditional. Writer uses dedicated null/non-null; default can/cannot enable; textgen filter+project-enabled filter; On+no provider message; On+provider picker; On+not mixed+entry traits; switch remains independent mixed behavior. Guide uses own model/providers and can-enable; picker appears `(uses || mixed) && can`, traits `(uses && can && !mixed && entry)`, switch checked mixed?false:uses and disabled only Off+cannot-enable. No targets connect text for each. Model rejection toast vs successful updates; writer setup navigation only when environmentId, guide has no setup callback. Advanced collapsed/expanded/search. | F01–F05, F09–F16. F10 ensures writer/review data differ. No need to capture unrelated source-control account UI. |
| [DeviceHostsSettings](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/DeviceHostsSettings.tsx#L47) | `DeviceIntegrationSettings` → `DevicesSettingsPanel` → `/settings/devices`. Prop `environmentId` representative or null. | New hostDestinations includes selected peers capable of storing hosts; configurable list connected eligible peers; every eligible peer writable, count>0. Save guard null env/project/no destination; pending busy; all success closes editor vs partial failure toast. Row Add disabled permission/project/busy/null env/editor-open. Children: null env connect message; multi peer+ambiguous host config→per-peer folded lists; else single/compact grouped host list; editor absent/present, isNew/edit existing. Hosts count0/1/many, matching destinations/groupable vs ambiguous IDs/targets, long label/target primary+secondary. List statuses absent/pending/check connected/local/failure/installing/starting/ready, platforms iOS/Android available; compact vs single details, >2 labels summarized with +N, retryable server capability, discovery/tool errors, version details. Edit/remove/test/retry/expand. These list/diagnostic render branches are unchanged by diff; only shared row inertness and write permissions/targets change. | F17 protocol/UI sequence, generic inert/status F02/F03, no-env F13. No requirement to provision simulators, exercise SSH, or film every unchanged platform/status subcomponent for this PR. If capturer uses those transient states as evidence, mark **recording**. |
| [useScopedModelProviders / useScopedModelDisabledReason](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/useScopedModelAvailability.ts) | Exactly four keys/callers: default in ProjectDefaultsSettings; text generation in ThreadsSettingsPanel; writer AND guide separately in SourceControlWritingSettingsSection. | Representative supports key→keep; else first holder; none→original fallback, no target→defaults/empty. Catalog missing→empty; project enable overrides and per-source custom model options. Availability checks skip unsupported peers; holder missing environment/config/providers→skip; entry missing/disabled/unavailable/wrong driver or model missing/unavailable→reason; all holders valid→selectable. ProviderModelPicker single-model props only, not multi-select or composer-lock modes. Selected brand/icon/instance badge/traits driven by chosen catalog; open menu search/no-results, unavailable model text and setup action can expose wrong data source. | F07–F12; data-only alternatives F11. Menu search with no hits and long model names can be brief phases in F07; multi-select picker, composer locks and terminal layout never passed by these callers, out of scope. |
| [useScopedSettings / useUpdateScopedSettings / useRunScopedPlan](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/useScopedSettings.ts) and [scopedSettings](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/scopedSettings.ts), [dropped cache](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/droppedSettingKeys.ts) | All scoped setting panels; reset hooks used by SettingsRow and inheritance UI. They do not render independently. | Decoded defaults vs real stored value; eligible value comparison per key; inherited source skips unsupported; supported patch per environment; client-only/all/environment/project/checkout/unavailable; partial object merge preserves destination fields; model change drops stale options; idle/worktree compatibility; no-write warning vs successful save vs partial/all failure; rejected promise vs RPC failure vs success-but-dropped; trimmed/equal strings; nullable whole objects vs nested leaves; cache version/session. Toast pending timing controlled by response, no artificial time sleeps needed. | F01/F06/F14–F21. Pure computations require transcript assertions, not fabricated screenshots. |
| [ServerEnvironment capability](https://github.com/flamboh/t3code/blob/eda592b63f/apps/server/src/environment/ServerEnvironment.ts) and [contract](https://github.com/flamboh/t3code/blob/eda592b63f/packages/contracts/src/environment.ts) | Server environment descriptor/config consumed by every web/desktop/mobile peer. | Optional string-array settingsKeys, actual schema top-level key enumeration; old descriptor absence; no platform/theme branch. Server does not newly remove settings here. | F21 protocol; no screenshot. Mobile has no changed React Native render path in diff; Electron uses same web render, no new shell/IPC/platform branch. Linux real web is sufficient for changed UI paths, remote peer coverage is explicit. |

## Inheritance details and consciously collapsed branches

`SettingInheritance` itself is unchanged. Its incoming summary/state changes, so F01/F02/F04/F06/F20 open it instead of asserting only screenshot text. The popover still receives **all** targets at the pinned head; do not falsely expect unsupported peers to disappear from its layer chains. Check the required new summary, not a redesign absent from the spec. It formats booleans as On/Off, null model defaults/inherit labels, arrays as item counts, and objects by model/mode; short/long text truncates. Chains group same resolution across multiple environments; different groups are collapsible; single peer shows heading, all-same peers says Same on all machines. Overriding projects 0/1/multiple; >3 on multiple environments folds list; Reset it/all present only with callback. This UI is not changed, so one mixed chain with one override in F06/F20 is the minimum visual; other counts are data-only unless a regression appears.

`SettingsScopeBoundary` is inline in the route file, not a standalone component. Device-only routes bypass scope notices. `/settings/projects` owns its own empty/unavailable state. Other routes replace content with unavailable-selection or named-disconnected messages. Thus an internal no-environment fallback in DeviceHostsSettings is reachable in all-environments/zero-connected, whereas named offline selection shows the route notice. Providers route forces one environment. Settings sidebar, direct URL/hash, and settings search all converge on these same render paths. Include one hash/search jump that opens Advanced (F09) and one UI scope change (F06); no separate chat/keybinding entry was added.

The changed code has no new platform branch: desktop wraps these web components; native mobile settings UI is separate and unmodified. Provider driver names are data except the model-availability mismatch check and provider-specific trait controls. Exercise one trait-bearing model and one mismatch, rather than all six provider adapters. No scheduled task or agent MCP render path exists for these settings rows. Network semantics are tested by real paired peers plus descriptor/update transcript; a local-only mocked array cannot establish remote behavior.


## Appendix: every direct SettingsRow caller at the pinned head

This is an exhaustive JSX-site inventory, not a request for one screenshot per site. `plain` means no serverScoped flag; `keyless` means the caller does not supply settingKeys. Their old behavior is guarded by F20, while keyed server rows share F01–F06/F18. The common component props and their layout branches are inventoried above. Existing component-local statuses and controls do not become new PR branches merely because they use SettingsRow. Tests/mocks are excluded; static-markup tests that replace SettingsRow cannot prove the new wrappers.

| Pinned caller/site | serverScoped | settingKeys | Render-shape props | Paired/self-closing |
|---|---|---|---|---|
| [AcpSessionManagementSection:321](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/AcpSessionManagementSection.tsx#L321) — Native sessions | plain | keyless | title, description, status, control, className | paired (children) |
| [AddCodexAccountDialog:104](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/AddCodexAccountDialog.tsx#L104) — Codex runtime | plain | keyless | title, description | self-closing |
| [AddCodexAccountDialog:115](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/AddCodexAccountDialog.tsx#L115) — Account name | plain | keyless | title, description, control | self-closing |
| [AddProviderInstanceDialog:607](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/AddProviderInstanceDialog.tsx#L607) | plain | keyless | title, description, control, className | self-closing |
| [AddProviderInstanceDialog:624](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/AddProviderInstanceDialog.tsx#L624) | plain | keyless | title, description, status, control, className | self-closing |
| [AddProviderInstanceDialog:661](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/AddProviderInstanceDialog.tsx#L661) — Accent color | plain | keyless | title, description, control | self-closing |
| [AppearanceSettingsPanel:144](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/AppearanceSettingsPanel.tsx#L144) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [AppearanceSettingsPanel:192](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/AppearanceSettingsPanel.tsx#L192) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [AppearanceSettingsPanel:238](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/AppearanceSettingsPanel.tsx#L238) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [AppearanceSettingsPanel:270](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/AppearanceSettingsPanel.tsx#L270) | plain | keyless | search target/title spread, description, resetAction, control | self-closing |
| [AppearanceSettingsPanel:304](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/AppearanceSettingsPanel.tsx#L304) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [AppearanceSettingsPanel:355](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/AppearanceSettingsPanel.tsx#L355) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [AppearanceSettingsPanel:401](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/AppearanceSettingsPanel.tsx#L401) | plain | keyless | search target/title spread, description, resetAction, control | self-closing |
| [ArchivedThreadsPanel:180](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ArchivedThreadsPanel.tsx#L180) | plain | keyless | title, description, className | self-closing |
| [ArchivedThreadsPanel:211](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ArchivedThreadsPanel.tsx#L211) | plain | keyless | title, description, control, className | self-closing |
| [BackgroundActivitySettings:398](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/BackgroundActivitySettings.tsx#L398) | yes | backgroundActivity | search target/title spread, title, description, resetAction, control, className | self-closing |
| [BranchNamingSettings:35](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/BranchNamingSettings.tsx#L35) | yes | branchNamingMode | search target/title spread, description, status, resetAction, control | self-closing |
| [BranchNamingSettings:80](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/BranchNamingSettings.tsx#L80) — Branch prefix | yes | branchNamePrefix | title, description, resetAction, control | self-closing |
| [BranchNamingSettings:118](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/BranchNamingSettings.tsx#L118) — Branch naming instructions | yes | branchNameInstructions | title, description, resetAction | paired (children) |
| [CliCommandSettingsRow:48](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/CliCommandSettingsRow.tsx#L48) | plain | keyless | search target/title spread, description, control | self-closing |
| [CodexSetupSection:187](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/CodexSetupSection.tsx#L187) — ChatGPT account | plain | keyless | title, description | self-closing |
| [CodexSetupSection:913](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/CodexSetupSection.tsx#L913) — ChatGPT account | plain | keyless | title, description, control, className | self-closing |
| [CodexSetupSection:1050](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/CodexSetupSection.tsx#L1050) — Binary path | plain | keyless | title, description, control, className | self-closing |
| [CodexSetupSection:1065](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/CodexSetupSection.tsx#L1065) — CODEX_HOME path | plain | keyless | title, description, control, className | self-closing |
| [CodexSetupSection:1080](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/CodexSetupSection.tsx#L1080) — Shadow home path | plain | keyless | title, description, control, className | self-closing |
| [ConnectionsSettings:780](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ConnectionsSettings.tsx#L780) | plain | keyless | search target/title spread, description, status, control, className | self-closing |
| [ConnectionsSettings:804](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ConnectionsSettings.tsx#L804) | plain | keyless | search target/title spread, description, status, control, className | self-closing |
| [ConnectionsSettings:838](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ConnectionsSettings.tsx#L838) — WSL only | plain | keyless | search target/title spread, title, description, status, control, className | paired (children) |
| [ConnectionsSettings:887](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ConnectionsSettings.tsx#L887) — WSL only | plain | keyless | title, description, control, className | self-closing |
| [ConnectionsSettings:906](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ConnectionsSettings.tsx#L906) | plain | keyless | search target/title spread, title, description, control | self-closing |
| [ConnectionsSettings:957](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ConnectionsSettings.tsx#L957) | plain | keyless | search target/title spread, title, description, status, control, className | self-closing |
| [ConnectionsSettings:989](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ConnectionsSettings.tsx#L989) | plain | keyless | search target/title spread, title, description, control, className | self-closing |
| [ConnectionsSettings:1071](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ConnectionsSettings.tsx#L1071) — Version | plain | keyless | title, description, control | self-closing |
| [ConnectionsSettings:1459](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ConnectionsSettings.tsx#L1459) — No environment selected | plain | keyless | title, description | self-closing |
| [DatabaseStorageNotice:36](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/DatabaseStorageNotice.tsx#L36) — Reclaim freed database space | plain | keyless | title, description | self-closing |
| [DatabaseStorageNotice:41](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/DatabaseStorageNotice.tsx#L41) | plain | keyless | title, description, control, className | self-closing |
| [DeviceHostsSettings:146](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/DeviceHostsSettings.tsx#L146) — Device hosts | yes | deviceHosts | title, description, control, className | paired (children) |
| [EasDeviceHostsSettings:90](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/EasDeviceHostsSettings.tsx#L90) — EAS Simulator | yes | easDeviceHosts | title, description, control, className | paired (children) |
| [IntegrationsSettings:354](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/IntegrationsSettings.tsx#L354) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [IntegrationsSettings:462](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/IntegrationsSettings.tsx#L462) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [IntegrationsSettings:505](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/IntegrationsSettings.tsx#L505) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [IntegrationsSettings:552](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/IntegrationsSettings.tsx#L552) | plain | keyless | search target/title spread, description, control | self-closing |
| [IntegrationsSettings:566](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/IntegrationsSettings.tsx#L566) | plain | keyless | search target/title spread, description, control | self-closing |
| [IntegrationsSettings:589](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/IntegrationsSettings.tsx#L589) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [IntegrationsSettings:643](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/IntegrationsSettings.tsx#L643) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [IntegrationsSettings:697](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/IntegrationsSettings.tsx#L697) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [IntegrationsSettings:737](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/IntegrationsSettings.tsx#L737) — Custom search URL | plain | keyless | title, description, status, control, className | self-closing |
| [IntegrationsSettings:770](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/IntegrationsSettings.tsx#L770) | plain | keyless | search target/title spread, description, resetAction, control | self-closing |
| [IntegrationsSettings:940](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/IntegrationsSettings.tsx#L940) | yes | enableDeviceSupport | search target/title spread, description, control | self-closing |
| [IntegrationsSettings:977](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/IntegrationsSettings.tsx#L977) | plain | keyless | search target/title spread, description, status, control, className | self-closing |
| [IntegrationsSettings:1022](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/IntegrationsSettings.tsx#L1022) | yes | enableAgentDeviceAccess | search target/title spread, description, control | self-closing |
| [IntegrationsSettings:1073](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/IntegrationsSettings.tsx#L1073) | yes | enableAgentBrowserAccess | search target/title spread, description, resetAction, control | self-closing |
| [IntegrationsSettings:1111](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/IntegrationsSettings.tsx#L1111) | plain | keyless | search target/title spread, description, resetAction, control | self-closing |
| [IntegrationsSettings:1324](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/IntegrationsSettings.tsx#L1324) | plain | keyless | search target/title spread, description, control | paired (children) |
| [KeybindingsSettings:991](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/KeybindingsSettings.tsx#L991) | plain | keyless | title, description, control, className | self-closing |
| [KeybindingsSettings:1198](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/KeybindingsSettings.tsx#L1198) — New keybinding | plain | keyless | title, description, control, className | self-closing |
| [LabsSettingsPanel:34](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/LabsSettingsPanel.tsx#L34) | plain | keyless | search target/title spread, description, control | self-closing |
| [LabsSettingsPanel:50](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/LabsSettingsPanel.tsx#L50) | yes | guestSharingEnabled | search target/title spread, description, control, className | self-closing |
| [LabsSettingsPanel:80](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/LabsSettingsPanel.tsx#L80) | yes | linkedEnvironmentsEnabled | search target/title spread, description, control, className | self-closing |
| [LinkedEnvironmentsSettings:71](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/LinkedEnvironmentsSettings.tsx#L71) — Could not load linked environments | plain | keyless | title, description | self-closing |
| [LinkedEnvironmentsSettings:73](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/LinkedEnvironmentsSettings.tsx#L73) — Loading linked environments… | plain | keyless | title | self-closing |
| [LinkedEnvironmentsSettings:75](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/LinkedEnvironmentsSettings.tsx#L75) — No linked environments | plain | keyless | title, description | self-closing |
| [LocalEnvironmentSetting:41](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/LocalEnvironmentSetting.tsx#L41) | plain | keyless | search target/title spread, description, control | self-closing |
| [MobileAppSettingsRow:25](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/MobileAppSettingsRow.tsx#L25) | plain | keyless | search target/title spread, title, description, control, className | self-closing |
| [NotificationSettings:22](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/NotificationSettings.tsx#L22) | plain | keyless | search target/title spread, description, control, className | self-closing |
| [ProjectActionsList:29](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProjectActionsList.tsx#L29) | plain | keyless | title, description, control, className | self-closing |
| [ProjectActionsSettings:111](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProjectActionsSettings.tsx#L111) — Actions | yes | defaultProjectScripts | title, description, onResetOverride, control, mixed, className | self-closing |
| [ProjectActionsSettings:174](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProjectActionsSettings.tsx#L174) — Different actions across environments | plain | keyless | title, description | self-closing |
| [ProjectActionsSettings:187](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProjectActionsSettings.tsx#L187) — t3.json is invalid | plain | keyless | title, description, className | self-closing |
| [ProjectDefaultsSettings:115](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProjectDefaultsSettings.tsx#L115) — Model | yes | defaultModelSelection | title, description, resetAction, control, mixed, className | self-closing |
| [ProjectDefaultsSettings:182](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProjectDefaultsSettings.tsx#L182) — Workspace | yes | defaultThreadEnvMode | search target/title spread, title, description, resetAction, control, mixed | self-closing |
| [ProjectDefaultsSettings:242](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProjectDefaultsSettings.tsx#L242) | yes | defaultRuntimeMode | search target/title spread, description, resetAction, control, mixed, className | self-closing |
| [ProjectDefaultsSettings:307](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProjectDefaultsSettings.tsx#L307) — Automatically pull | yes | defaultAutoPull | title, description, resetAction, control, mixed | self-closing |
| [ProjectDefaultsSettings:336](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProjectDefaultsSettings.tsx#L336) | yes | removeAgentCreditsOnMerge | search target/title spread, description, resetAction, control, mixed | self-closing |
| [ProjectDefaultsSettings:362](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProjectDefaultsSettings.tsx#L362) | yes | pullRequestMergeMethod | search target/title spread, description, resetAction, control, mixed | self-closing |
| [ProjectDefaultsSettings:428](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProjectDefaultsSettings.tsx#L428) | yes | worktreeSubmodules | search target/title spread, description, resetAction, control, mixed | self-closing |
| [ProjectSettingsPanel:409](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProjectSettingsPanel.tsx#L409) | plain | keyless | title, description, control | self-closing |
| [ProjectSettingsPanel:424](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProjectSettingsPanel.tsx#L424) | plain | keyless | title, description, control, className | paired (children) |
| [ProjectSettingsPanel:489](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProjectSettingsPanel.tsx#L489) — Name | plain | keyless | title, description, control, className | self-closing |
| [ProjectSettingsPanel:514](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProjectSettingsPanel.tsx#L514) — Project icon | plain | keyless | title, description, resetAction, control, className | self-closing |
| [ProjectSettingsPanel:567](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProjectSettingsPanel.tsx#L567) | plain | keyless | title, description, control | self-closing |
| [ProviderAuthenticationSection:160](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProviderAuthenticationSection.tsx#L160) — Account | plain | keyless | title, description, status, control, className | paired (children) |
| [ProviderInstanceCard:261](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProviderInstanceCard.tsx#L261) | plain | keyless | title, description, control, className | self-closing |
| [ProviderInstanceCard:378](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProviderInstanceCard.tsx#L378) — Variables | plain | keyless | title, description, control, className | paired (children) |
| [ProviderInstanceCard:1123](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProviderInstanceCard.tsx#L1123) — Driver | plain | keyless | title, description, className | self-closing |
| [ProviderInstanceCard:1137](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProviderInstanceCard.tsx#L1137) — Status | plain | keyless | title, status | self-closing |
| [ProviderInstanceCard:1138](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProviderInstanceCard.tsx#L1138) — Display name | plain | keyless | title, control, className | self-closing |
| [ProviderSettingsForm:217](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProviderSettingsForm.tsx#L217) — Arguments | plain | keyless | title, description, control | paired (children) |
| [ProviderSettingsForm:468](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProviderSettingsForm.tsx#L468) | plain | keyless | title, description, control | self-closing |
| [ProviderSettingsPanel:1018](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProviderSettingsPanel.tsx#L1018) — Limited permissions | plain | keyless | title, description | self-closing |
| [ProviderSettingsPanel:1082](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProviderSettingsPanel.tsx#L1082) | plain | keyless | search target/title spread, title, description, resetAction, control, className | self-closing |
| [ProviderSettingsPanel:1363](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProviderSettingsPanel.tsx#L1363) — Cursor account | plain | keyless | title, description | self-closing |
| [ProviderSetupSection:54](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProviderSetupSection.tsx#L54) — Environment | plain | keyless | title, description, control, className | self-closing |
| [ProviderSetupSection:72](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProviderSetupSection.tsx#L72) — Setup unavailable | plain | keyless | title, description | self-closing |
| [ProviderSetupSection:74](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProviderSetupSection.tsx#L74) — Update required | plain | keyless | title, description | self-closing |
| [ProviderSetupSection:193](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProviderSetupSection.tsx#L193) — Runtime | plain | keyless | title, description, status, control, className | self-closing |
| [ProviderWizardAuthenticationStep:58](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ProviderWizardAuthenticationStep.tsx#L58) — Account | plain | keyless | title, description, control | self-closing |
| [SavedEnvironmentRows:598](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SavedEnvironmentRows.tsx#L598) | plain | keyless | search target/title spread, title, description, status, control | self-closing |
| [SavedEnvironmentRows:630](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SavedEnvironmentRows.tsx#L630) | plain | keyless | search target/title spread, title, description | self-closing |
| [SavedEnvironmentRows:636](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SavedEnvironmentRows.tsx#L636) | plain | keyless | search target/title spread, title, description, control | self-closing |
| [SavedEnvironmentRows:659](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SavedEnvironmentRows.tsx#L659) | plain | keyless | search target/title spread, title, description, control | self-closing |
| [SavedEnvironmentRows:687](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SavedEnvironmentRows.tsx#L687) — T3 Connect | plain | keyless | title, description | self-closing |
| [ScheduledTasksSettings:429](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ScheduledTasksSettings.tsx#L429) | plain | keyless | title | self-closing |
| [ScheduledTasksSettings:570](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ScheduledTasksSettings.tsx#L570) — Task unavailable | plain | keyless | title, description | self-closing |
| [ScheduledTasksSettings:577](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ScheduledTasksSettings.tsx#L577) — No scheduled tasks | plain | keyless | title, description | self-closing |
| [ScheduledTasksSettings:641](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ScheduledTasksSettings.tsx#L641) — Environment disconnected | plain | keyless | title, description | self-closing |
| [ScheduledTasksSettings:646](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ScheduledTasksSettings.tsx#L646) — Could not load scheduled tasks | plain | keyless | title, description | self-closing |
| [ScheduledTasksSettings:648](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ScheduledTasksSettings.tsx#L648) — Loading scheduled tasks… | plain | keyless | title | self-closing |
| [ScheduledTasksSettings:652](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ScheduledTasksSettings.tsx#L652) — Task unavailable | plain | keyless | title, description | self-closing |
| [ScheduledTasksSettings:659](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ScheduledTasksSettings.tsx#L659) — No scheduled tasks | plain | keyless | title, description | self-closing |
| [ScheduledTasksSettings:724](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ScheduledTasksSettings.tsx#L724) | plain | keyless | title, description, status, control, className | self-closing |
| [SettingsPanels:291](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L291) | plain | keyless | search target/title spread, title, description, control | self-closing |
| [SettingsPanels:314](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L314) | plain | keyless | search target/title spread, description, control, className | self-closing |
| [SettingsPanels:346](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L346) | plain | keyless | search target/title spread, description, control, className | self-closing |
| [SettingsPanels:710](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L710) | plain | keyless | search target/title spread, description, control | self-closing |
| [SettingsPanels:723](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L723) | plain | keyless | search target/title spread, description, control | self-closing |
| [SettingsPanels:736](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L736) | plain | keyless | search target/title spread, description, control | self-closing |
| [SettingsPanels:764](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L764) | plain | keyless | search target/title spread, description, control | self-closing |
| [SettingsPanels:778](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L778) | plain | keyless | search target/title spread, description, resetAction, control | self-closing |
| [SettingsPanels:813](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L813) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [SettingsPanels:853](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L853) | plain | keyless | search target/title spread, description, resetAction, control | self-closing |
| [SettingsPanels:882](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L882) | plain | keyless | search target/title spread, description, resetAction, control | self-closing |
| [SettingsPanels:907](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L907) | plain | keyless | search target/title spread, description, resetAction, control | self-closing |
| [SettingsPanels:932](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L932) | plain | keyless | search target/title spread, description, resetAction, control | self-closing |
| [SettingsPanels:958](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L958) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [SettingsPanels:1001](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1001) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [SettingsPanels:1060](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1060) | plain | keyless | search target/title spread, description, resetAction, control | self-closing |
| [SettingsPanels:1086](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1086) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [SettingsPanels:1132](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1132) | plain | keyless | search target/title spread, description, resetAction, control | self-closing |
| [SettingsPanels:1159](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1159) | plain | keyless | search target/title spread, description, resetAction, control | self-closing |
| [SettingsPanels:1188](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1188) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [SettingsPanels:1238](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1238) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [SettingsPanels:1294](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1294) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [SettingsPanels:1328](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1328) | plain | keyless | search target/title spread, description, resetAction, control | self-closing |
| [SettingsPanels:1353](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1353) | plain | keyless | search target/title spread, description, resetAction, control, className | self-closing |
| [SettingsPanels:1399](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1399) | plain | keyless | search target/title spread, description, resetAction, control | self-closing |
| [SettingsPanels:1442](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1442) | yes | idleCompaction, compactIdleThreads | search target/title spread, description, resetAction, control, mixed, className | self-closing |
| [SettingsPanels:1554](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1554) | yes | addProjectBaseDirectory | search target/title spread, description, resetAction, control, className | self-closing |
| [SettingsPanels:1595](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1595) | yes | autoResumeLimitedThreads | search target/title spread, description, control | self-closing |
| [SettingsPanels:1611](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1611) | yes | snoozeLimitedThreads | search target/title spread, description, control | self-closing |
| [SettingsPanels:1631](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1631) | yes | sidebarAutoSettleOnMerge | search target/title spread, description, resetAction, control | self-closing |
| [SettingsPanels:1661](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1661) | yes | sidebarAutoSettleAfterDays | search target/title spread, description, resetAction, control | self-closing |
| [SettingsPanels:1694](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1694) | yes | sidebarAutoSettleAfterDays | search target/title spread, title, description, control | self-closing |
| [SettingsPanels:1708](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1708) — Keep threads with a PR | yes | sidebarAutoSettleKeepPullRequests | title, description, control | self-closing |
| [SettingsPanels:1729](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1729) | yes | textGenerationModelSelection | search target/title spread, description, resetAction, control, className | self-closing |
| [SettingsPanels:1838](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1838) | yes | responseStreamingMode | search target/title spread, description, resetAction, control, className | self-closing |
| [SettingsPanels:1903](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1903) | yes | enableProviderUpdateChecks | search target/title spread, description, resetAction, control | self-closing |
| [SettingsPanels:1932](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1932) | yes | continueThreadsAfterServerUpdate | search target/title spread, description, status, resetAction, control | self-closing |
| [SettingsPanels:1978](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L1978) | plain | keyless | search target/title spread, description, control | self-closing |
| [SettingsPanels:2010](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L2010) | plain | keyless | search target/title spread, title, description | self-closing |
| [SettingsPanels:2021](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L2021) | plain | keyless | search target/title spread, description, control | self-closing |
| [SettingsPanels:2034](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SettingsPanels.tsx#L2034) | plain | keyless | search target/title spread, description, control | self-closing |
| [SnapShotSettings:355](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SnapShotSettings.tsx#L355) | plain | keyless | search target/title spread, description, status, control | self-closing |
| [SnapShotSettings:395](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SnapShotSettings.tsx#L395) | plain | keyless | search target/title spread, description, status, control | self-closing |
| [SnapShotSettings:413](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SnapShotSettings.tsx#L413) | plain | keyless | search target/title spread, description, status, control | self-closing |
| [SnapShotSettings:473](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SnapShotSettings.tsx#L473) | plain | keyless | search target/title spread, description, control, className | self-closing |
| [SnapShotSettings:533](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SnapShotSettings.tsx#L533) | plain | keyless | search target/title spread, description, status, control | self-closing |
| [SnapShotSettings:546](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SnapShotSettings.tsx#L546) | plain | keyless | search target/title spread, description, status, control | self-closing |
| [SnoozePresetsSettings:165](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SnoozePresetsSettings.tsx#L165) | yes | snoozePresets | search target/title spread, description, resetAction | paired (children) |
| [SourceControlWritingSettings:207](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SourceControlWritingSettings.tsx#L207) | yes | sourceControlWritingStyle | search target/title spread, description, resetAction, control, mixed, className | paired (children) |
| [SourceControlWritingSettings:324](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SourceControlWritingSettings.tsx#L324) | yes | reviewGuidesEnabled | search target/title spread, description, control, mixed | self-closing |
| [SourceControlWritingSettings:342](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SourceControlWritingSettings.tsx#L342) | yes | reviewGuideModelSelection | search target/title spread, description, control, mixed, className | self-closing |
| [SourceControlWritingSettings:443](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SourceControlWritingSettings.tsx#L443) | yes | reviewGuideInstructions | search target/title spread, description, resetAction | paired (children) |
| [SourceControlWritingSettings:491](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SourceControlWritingSettings.tsx#L491) | yes | sourceControlWritingStyle | search target/title spread, description, resetAction, control, mixed | self-closing |
| [SourceControlWritingSettings:528](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/SourceControlWritingSettings.tsx#L528) | yes | sourceControlWriterModelSelection | search target/title spread, description, control, className | self-closing |
| [StorageSettings:65](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/StorageSettings.tsx#L65) | yes | worktreesDirectory | search target/title spread, description, resetAction, control | self-closing |
| [StorageSettings:204](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/StorageSettings.tsx#L204) | plain | keyless | title, description, control, className | self-closing |
| [StorageSettings:369](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/StorageSettings.tsx#L369) | plain | keyless | search target/title spread, description, control, className | self-closing |
| [StorageSettings:511](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/StorageSettings.tsx#L511) — Automatic worktree cleanup | yes | worktreeCleanup | title, description, control, mixed | self-closing |
| [StorageSettings:555](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/StorageSettings.tsx#L555) — Delete worktrees with deleted threads | conditional | keyless | title, description, status, control | self-closing |
| [StorageSettings:568](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/StorageSettings.tsx#L568) — Delete merged worktrees | conditional | keyless | title, description, status, control | self-closing |
| [StorageSettings:581](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/StorageSettings.tsx#L581) — Delete inactive worktrees | conditional | keyless | title, description, status, control | self-closing |
| [StorageSettings:604](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/StorageSettings.tsx#L604) — Delete settled worktrees | conditional | keyless | title, description, status, control | self-closing |
| [StorageSettings:628](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/StorageSettings.tsx#L628) — Delete unchanged worktrees | conditional | keyless | title, description, status, control | self-closing |
| [StorageSettings:645](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/StorageSettings.tsx#L645) | conditional | keyless | search target/title spread, description, status, control | self-closing |
| [StorageSettings:728](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/StorageSettings.tsx#L728) — Delete old browser artifacts | yes | keyless | title, description, status, control | self-closing |
| [StorageSettings:741](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/StorageSettings.tsx#L741) — Delete old rotated logs | yes | keyless | title, description, status, control | self-closing |
| [ThreadTitleInstructionsSettings:22](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/ThreadTitleInstructionsSettings.tsx#L22) | yes | threadTitleInstructions | search target/title spread, description, resetAction | paired (children) |
| [TypographySettings:208](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/TypographySettings.tsx#L208) | plain | keyless | search target/title spread, description, resetAction, control | self-closing |
| [TypographySettings:236](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/TypographySettings.tsx#L236) | plain | keyless | search target/title spread, description, resetAction, control | self-closing |
| [TypographySettings:277](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/TypographySettings.tsx#L277) | plain | keyless | search target/title spread, description, control | self-closing |
| [TypographySettings:524](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/TypographySettings.tsx#L524) | plain | keyless | title, description, resetAction, control | paired (children) |
| [UsageProviderSettings:76](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/UsageProviderSettings.tsx#L76) — Cursor account usage | plain | keyless | title, description, control | self-closing |
| [UsageProviderSettings:91](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/UsageProviderSettings.tsx#L91) — No hubs configured. | plain | keyless | title | self-closing |
| [UsageProviderSettings:96](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/UsageProviderSettings.tsx#L96) | plain | keyless | title, description, control, className | self-closing |
| [WorktreesSettings:22](https://github.com/flamboh/t3code/blob/eda592b63f/apps/web/src/components/settings/WorktreesSettings.tsx#L22) | yes | newWorktreesStartFromOrigin | search target/title spread, description, resetAction, control | self-closing |

Total: 186 direct production JSX call sites.

## Completion and friction

Covered in pass 1: all 15 changed files, pinned changed render bodies, direct callers/routes, row layout and inheritance consumers, source-specific provider catalogs, support learning/cache and save planning, device-host grouping/save eligibility, server descriptor contract. No runtime assertions have been executed. All evidence statuses remain PENDING. No implementation finding is accepted/rejected by this fixture audit; outcomes must be checked against the latest logic revision while retaining these render fixtures.

FRICTION: none

VERDICT: INSUFFICIENT all rows (pass 1, no captures yet)
