# Recovered static evidence index — PR [#23629](https://github.com/pingdotgg/t3code/pull/23629)

## Recovery result

16 inherited before/after pairs (64 before/after/diff image URLs), plus one composer-bar crop, recovered verbatim from the supplied frozen PR metadata. The requested minimum is 11 pairs: R1 1440 dark; R2 1440/390 dark/light (4); R3 1440 dark; R4 390 dark; R5 390 dark; R6 1440/390 dark (2); R9 390 dark. Newly captured in this recovery: **zero**. No browser, dev server, automation, tests, repo edits, pushes, or forge mutation performed. T3 thread PR registration only; this index is the authorized public upload.

## SHA validation

Local git resolves before [8d3b061121](https://github.com/pingdotgg/t3code/commit/8d3b061121fe65669d5d43d011b48cd3027a4108), captured after [f347cf5c3c](https://github.com/pingdotgg/t3code/commit/f347cf5c3c30369918a0dc8fd74ded03787b6cb5), reviewed head [82ca801681](https://github.com/pingdotgg/t3code/commit/82ca80168159392415b3544d28589ffd9cc68283).

The complete captured-after → reviewed-head name diff contains only `.github/actions/setup-ci-deps/action.yml`, `apps/mobile/src/features/threads/ThreadFeed.tsx`, `apps/web/src/components/chat/MessagesTimeline.browser.test.tsx`, and `apps/web/src/components/chat/TimelineUserMessageRow.tsx`. Thus catalog/probe and relevant label/control renderer files are unchanged. This validates source equivalence for the affected controls, **not** whole-screen pixel identity on current head or the forthcoming fix.

## Threshold validation and access limit

Published Diff0 uses ImageMagick `compare -fuzz 0`; DiffT uses `compare -fuzz 10%`; AE is differing-pixel count, not a pass percentage. Counts below are recovered metadata, **not independently recomputed**. Python GET returned HTTP 403; curl HEAD for R2-390-dark-after returned HTTP 200, but batch GET failed with `curl: (55) Send failure: Broken pipe` and `(35) SSL_ERROR_SYSCALL`. No downloadable image was available for view_image at that point. No independent visual inspection or pixel rebuild is claimed. Larger R6 and R9 low-threshold counts must not be described as solely label pixels: cwd text/menu occlusion and blurred-backdrop repaint are documented below.

| Captured pair | Reported AE, fuzz 0 | Reported AE, fuzz 10% |
|---|---:|---:|
| R1-1440-dark | 0 | 0 |
| R1-390-dark | 0 | 0 |
| R2-1440-dark | 5476 | 1667 |
| R2-390-dark | 4444 | 1223 |
| R2-1440-light | 5502 | 1773 |
| R2-390-light | 4450 | 1307 |
| R3-1440-dark | 2 | 0 |
| R3-390-dark | 0 | 0 |
| R4-1440-dark | 5578 | 2519 |
| R4-390-dark | 4796 | 2198 |
| R5-390-dark | 2830 | 1169 |
| R5-1440-dark | 5699 | 1806 |
| R6-1440-dark | 163171 | 11114 |
| R6-390-dark | 168692 | 17315 |
| R9-1440-dark | 4640 | 1661 |
| R9-390-dark | 37893 | 1998 |

## Pending and unverified

- New per-model exemption row: top-level xhigh plus model override max must show Max unmarked. **Pending primary integration and capture**; inherited images do not prove it.
- Primary integrated Browser-panel pass at `/tmp/issue17110-proof-runtime` is separate work. Supplied screenshot path `/home/ubuntu/.t3/userdata/browser-artifacts/browser-screenshot-localhost-mvlsimf5-e8fc54a3.png` is not counted as a new matrix pair or independently certified here.
- R7 native iOS/Android toolbar and reasoning submenu remain unverified, including one-line clipping. Narrow web is not native-mobile proof.
- Windows native Electron/desktop renderer and Windows-host probing remain unverified. Web renderer reuse does not certify those.
- Optional R8 native Claude subagent strip remains unverified; parent effort alone is not a child-thread fixture.
- No committed matrix-specific fixture/seeding/capture script was found in the reviewed tree. General migrate-dev-db instructions and provider test fixtures do not reconstruct the exact old database, temp settings, browser state, fonts and seeded selections. Exact historical pixel rebuild is not established and cannot be claimed from these artifacts alone.
- Static labels/layout only. No supplied recording proves select/reopen persistence, Fast/resize transitions, refresh/reconnect timing, or turn/provider-output correlation. Those interaction/time claims are excluded.

## FRICTION

- tool: image GET failed (403, broken pipe, SSL syscall); no view_image inspection or recomputed AE available.
- brief: existing captures intentionally reused; forthcoming per-model exemption must remain a separate pending row.
- runbook: missing committed exact matrix fixture/seeding script prevents an exact old-state rebuild claim.
- infra: native mobile/Windows evidence absent; public image download transport failed.
- forge: frozen supplied metadata used; no forge reads, comments, edits, pushes or other forge mutation.
- policy: no browser/server/computer use; only temporary recovery files and requested ghdrop upload.
- model: Codex harness, gpt-6.1-sol; no further delegation.
- other: no fresh pixel rebuild performed.

## Recovered matrix context

# Proof audit pass 1 — published fixture matrix

Read-only audit of [#23629](https://github.com/pingdotgg/t3code/pull/23629), also [GitCafe #23629](https://git.cafe/pingdotgg/t3code/pull/23629). Reviewed [82ca801681](https://github.com/pingdotgg/t3code/commit/82ca80168159392415b3544d28589ffd9cc68283), using `git show origin/fix/issue-17110` and the complete `f054d1b801...82ca801681` diff. Metadata/evidence source: supplied `/tmp/17110-current-pr.json`. No tests, install, browser, dev server, or PR/repository edits performed. Existing images and recorder results below are reported evidence, not independently replayed or visually inspected in this pass.

## Result and scope

No concrete code finding identified in this bounded fresh pass. This is a proof-scope assessment, not fresh certification of all surfaces. The production diff changes only ClaudeProvider.ts and ClaudeModelCatalog.ts: SDK effective-settings probing and server catalog labels. Remaining changed files are tests/fixture support. Effort IDs, option order, defaults, selection handlers, and outgoing effort normalization remain unchanged. The fix makes the cap visible; it does not change Claude's clamp or fix project-local cap discovery.

Original trigger: [#17110](https://github.com/pingdotgg/t3code/issues/17110), Haiku 5.5 Max with `maxEffortLevel: "xhigh"`. Haiku has plain Max and Extra High options, so R2's Opus 5.5 is equivalent for the changed Max label. Haiku's default and other controls differ; do not claim its entire screen was captured. Its reported API-recorder result is separate functional evidence.

## Smallest visual matrix

11 before/after pairs reuse a subset of the existing 16 pairs. Dimensions: 1440×900 or 390×844; D = dark, L = light. R2 carries the full width/theme cross-product. Other rows add distinct content, renderer/layout, or negative-control states without repeating that entire product. Existing extra captures remain useful and need not be removed.

| Row | Seed and real control | Minimum capture | Expected result / reason to keep | Evidence status |
|---|---|---|---|---|
| R1 | F0: no cap; Opus 5.5, Max, Fast off; chat effort chip + open traits menu | 1440 D | Max unchanged; uncapped control. One width suffices because R2 covers width behavior. | Published both widths D; reported zero-pixel difference. |
| R2 | F1: cap xhigh; Opus 5.5, Max, Fast off; chat effort chip + checked Reasoning menu item | 1440/390 × D/L (4 pairs) | `Max (capped to Extra High)`; Extra High, Ultracode and Ultrathink unmarked. Check menu width, label legibility, Default badge/check state, neighboring access chip and displaced controls. At 390 Full access folds to a lock icon. | Published all four combinations. Haiku Max belongs to this label-equivalence class. |
| R3 | F3: cap xhigh; Sonnet 4.6, Max, 200k; same chat controls | 1440 D | Max stays unmarked because its runtime map already sends high; chip `Max · 200k`. Separate from no-cap R1. | Published both widths D; tiny reported 1440 rendering noise only. |
| R4 | F4: cap high; Opus 5.5, Extra High; same chat controls | 390 D | `Extra High (capped to High)`, `Max (capped to High)`, `Ultracode (capped to High)`; Ultrathink unmarked. Covers multiple affected options and the longer Extra High label on narrow layout. | Published both widths D. |
| R5 | F2: cap xhigh; Opus 5.5, Max + Fast; chat chip, open traits menu, access control | 390 D | Effort and access chips fold to icons; capped text remains available in the menu/accessibility label. Fast adds enough width to make this distinct from R2. | Published both widths D; 1440 also shows capped label + Fast. |
| R6 | F1; Settings → Project pingdotgg/t3code → New threads → Model; model picker + effort chip/menu | 1440/390 D (2 pairs) | Same capped label in the settings flex/wrap/right-aligned container. Keep both widths because this container differs from chat. | Published both; differing server cwd text is fixture noise, not a patch effect. |
| R9 | cap xhigh; Opus 4.6, Max, default 1M; chat chip/menu | 390 D | `Max (capped to High) · 1M`; model lacks Extra High, so effective cap is High. Context suffix and narrow menu provide distinct content. | Published both widths D. Opus 4.5 is equivalent for the cap label. |

All rows above are **static rendering** fixtures. Opening a menu or seeding Fast on is setup; it does not by itself make the claim time-dependent. Settled screenshots can prove the final menu text and icon-only layout. None of these rows requires a recording for its stated claim.

Record only if claiming a sequence: select Max and show the saved selection after reopen; toggle Fast or resize across the fold threshold and prove the transition; edit settings then show refresh/reconnect timing; or start a turn and correlate UI selection with provider output. Static screenshots do not prove those claims. This patch changes neither interaction handlers nor animation, so such recordings are not additional mandatory visual rows. API effort and timeout/fallback behavior need protocol/functional evidence, not a decorative video.

## Routes and reproducible seed

Chat route is `/$environmentId/$threadId` (TanStack source `/_chat/$environmentId/$threadId`); use real environment/thread IDs from the isolated restored snapshot. Existing captures use stopped thread “Issue 14464 triage” in pingdotgg/t3code, details panel closed. Settings route is `/settings/projects`; select that project's New threads Model control. Do not invent a hardcoded thread URL or reuse a pairing token.

Both builds need the same copied isolated `.t3` snapshot from `migrate-dev-db`, a configured authenticated Claude provider, and CLI version exposing the selected models (reported 2.1.303). Set the dev server's `CLAUDE_CONFIG_DIR` to an isolated temporary config holding required environment configuration plus each row's cap; do not alter live user settings. Set model/effort/Fast/context and project defaults as above; wait for the provider catalog and final layout before capture. F0 removes the cap; F1/F2/F3 use xhigh; F4 uses high. Custom models retain authored labels and can be checked functionally without another visual class.

Reported capture environment: Linux x86_64 fs-15, headless Chromium 1223 / Playwright 1.60.0, deviceScaleFactor 1, no device emulation/font scaling, en-US, UTC, fixed clock 2026-10-22T13:00:00Z, per-row color scheme, pointer (0,0), whole viewport. Before is [8d3b061121](https://github.com/pingdotgg/t3code/commit/8d3b061121); captured after is [f347cf5c3c](https://github.com/pingdotgg/t3code/commit/f347cf5c3c). Relevant catalog/probe, TraitsPicker, project defaults, composer layout, mobile toolbar and shared effort formatter are unchanged between captured-after and reviewed head. The merge does change unrelated timeline rendering, so this supports reuse for affected controls, not pixel identity of every current-head screen.

## Caller coverage and remaining limits

- Web chat renders descriptor option labels through TraitsPicker/buildTraitsTriggerDisplay. Menu values and persistence use IDs. Settings ProjectDefaultsSettings reuses TraitsPicker; text-generation and source-control settings also reuse it. ScheduledTasksSettings exposes ProviderModelPicker and has no direct TraitsPicker caller; do not assign it a separate capped-effort menu fixture from this inspection. The TraitsPicker callers are equivalent label renderers; R6 supplies a distinct settings-container proof, not a claim that every settings page was opened. Existing shortcuts cycle IDs; no new command-palette or keybinding behavior is introduced.
- Desktop embeds web, so R2/R6 cover its shared renderer. Native Electron/Windows rendering and host-side CLI probing are **unverified**; no desktop screenshot or Windows execution is claimed. A Windows-host probe smoke check is a platform validation gap, not another static label-state permutation.
- **R7 mobile, unverified:** native ThreadComposer/new-task toolbar plus Thread Settings → Reasoning submenu consume server descriptors/shared label helpers. Toolbar text is one line; clipping of the cap suffix needs a real native client. Minimum future capture: R2 seed, phone about 390 logical units wide, D/L, settled toolbar and open Reasoning submenu. Record only if testing select/reopen persistence. Existing device access was unavailable; 390 web captures do not cover native iOS or Android. Tablet/1440 native permutations add no changed label class.
- **R8 optional native-subagent strip, unverified:** ChatView/ThreadDetailScreen use shared `formatModelSelectionEffort`, then ProviderSubagentBar. Seed an actual provider-native Claude child thread whose selected/reported effort resolves to Max in the capped provider catalog. Parent Max alone is insufficient. Static bar capture at 1440/390 D can check full label/overflow; freeze status/time. A live spawning/status sequence would need recording only for those sequence claims. Seeded data lacks this child, so no strip proof is claimed.
- Probe evidence is nonvisual: `getSettings()` and usage run concurrently with separate equal deadlines; absent/rejected settings yields no cap while preserving successful usage/account data; workspace slash-command probes skip both optional reads. Existing added tests exercise cap propagation, unsupported settings, ID/default preservation, remapped efforts, missing Extra High and custom labels. Tests were inspected, not run here. Project-local `.claude/settings.json` caps remain explicitly outside this provider-level probe.

## Friction

- tool: none blocking; initial targeted searches used a few nonexistent paths, then located actual files with rg.
- brief: supplied metadata intentionally used as the frozen review/evidence input; no live forge refresh performed.
- runbook: no tests/install/browser/devserver by request; no independent visual replay.
- infra: previously unavailable native mobile device; native Windows/desktop evidence absent.
- forge: origin is GitCafe; no forge CLI/API reads or PR edits performed. T3 thread PR registration only.
- policy: no repository or PR mutation; only the requested temporary report and public ghdrop upload.
- model: fresh Codex harness / gpt-6.1-sol read-only pass; no delegated agents.
- other: none.


## Verbatim published evidence, environment and what else changed

### Evidence

Real web app (`vp run dev`) for both builds: before = merge-base `8d3b061121`, after = `f347cf5c3c`.

**What else changed, beyond the label:**
- At 390 px wide, the longer label makes the composer bar fold blocks to icon-only earlier, which is its existing width-based behaviour (`composerFooterLayout.ts`).
- With a capped label, the runtime-mode chip folds to an icon.
- With Max + Fast (R5), the effort chip folds to an icon as well, so the effort label is then only visible in the opened menu.
- At 1440 the wider chip shifts the controls to its right.

Environment (every capture): headless Chromium 1223 via Playwright 1.60.0 on Linux x86_64 (fs-15), no device emulation, deviceScaleFactor 1, no font scaling, locale en-US, timezone UTC, clock frozen with `page.clock.setFixedTime(2026-10-22T13:00:00Z)`, `prefers-color-scheme` emulated per row, viewports 1440×900 and 390×844, whole viewport captured, pointer parked at (0,0). Both sides: `vp run dev` web dev server against an isolated worktree `.t3` restored from one `migrate-dev-db` snapshot, thread "Issue 14464 triage" (pingdotgg/t3code), thread details panel closed. `CLAUDE_CONFIG_DIR` set on the dev server to a temp dir whose settings.json = `env` from ~/.claude/settings.json (+ `maxEffortLevel`).

Captures are at 1440 and 390 wide; the matrix's 1280 width was widened to the 1440 standard. Diff0 = `compare -fuzz 0` (any pixel that differs by ≥1 level painted solid red over a faded copy, so a one-level change is visible). DiffT = `compare -fuzz 10%`. AE = differing pixel count.

#### R1: Web traits menu + chip, F0 (no cap), Opus 5.5 Max — control

Expected/observed: Unchanged: Max both sides.

| Viewport / theme | Before | After | Diff0 | DiffT (10%) |
|---|---|---|---|---|
| 1440 dark | ![R1-1440-dark before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/364fe1bce632ff1b/R1-1440-dark-before.png)<br>`8d3b061121` | ![R1-1440-dark after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/09ef1023d7e66899/R1-1440-dark-after.png)<br>`f347cf5c3c` | ![R1-1440-dark diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e7dbb69e8962e6b3/R1-1440-dark-diff0.png)<br>`8d3b061121`↔`f347cf5c3c` AE=0, bbox 0x0+1440+900 | ![R1-1440-dark diff10](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/32ff529ac2f9e413/R1-1440-dark-diff10.png)<br>`8d3b061121`↔`f347cf5c3c` AE=0 |
| 390 dark | ![R1-390-dark before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e1e64d15b300ffd0/R1-390-dark-before.png)<br>`8d3b061121` | ![R1-390-dark after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ee517a8782b4ea27/R1-390-dark-after.png)<br>`f347cf5c3c` | ![R1-390-dark diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/96751a72ce68f539/R1-390-dark-diff0.png)<br>`8d3b061121`↔`f347cf5c3c` AE=0, bbox 0x0+390+844 | ![R1-390-dark diff10](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cd7a3810d1fc2a77/R1-390-dark-diff10.png)<br>`8d3b061121`↔`f347cf5c3c` AE=0 |

#### R2: Web traits menu + chip, F1 cap xhigh, Opus 5.5 Max, Fast off

Expected/observed: After: chip and checked item read "Max (capped to Extra High)". Extra High, Ultracode, Ultrathink unmarked.

| Viewport / theme | Before | After | Diff0 | DiffT (10%) |
|---|---|---|---|---|
| 1440 dark | ![R2-1440-dark before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/77f91d2cd2be592b/R2-1440-dark-before.png)<br>`8d3b061121` | ![R2-1440-dark after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/360da1a8be994ff0/R2-1440-dark-after.png)<br>`f347cf5c3c` | ![R2-1440-dark diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cc87bf71736d909b/R2-1440-dark-diff0.png)<br>`8d3b061121`↔`f347cf5c3c` AE=5476, bbox 497x238+701+623 | ![R2-1440-dark diff10](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f641eaccc62594bf/R2-1440-dark-diff10.png)<br>`8d3b061121`↔`f347cf5c3c` AE=1667 |
| 390 dark | ![R2-390-dark before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6e3aa6cfc67c65f3/R2-390-dark-before.png)<br>`8d3b061121` | ![R2-390-dark after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/57712104d40f3198/R2-390-dark-after.png)<br>`f347cf5c3c` | ![R2-390-dark diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4cefcacf6a1529d7/R2-390-dark-diff0.png)<br>`8d3b061121`↔`f347cf5c3c` AE=4444, bbox 176x256+145+568 | ![R2-390-dark diff10](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/deff594535b5a1a6/R2-390-dark-diff10.png)<br>`8d3b061121`↔`f347cf5c3c` AE=1223 |
| 1440 light | ![R2-1440-light before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1f5d2f543e14a80a/R2-1440-light-before.png)<br>`8d3b061121` | ![R2-1440-light after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7fd8551b9550cba3/R2-1440-light-after.png)<br>`f347cf5c3c` | ![R2-1440-light diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4411816b9262c49c/R2-1440-light-diff0.png)<br>`8d3b061121`↔`f347cf5c3c` AE=5502, bbox 497x240+701+623 | ![R2-1440-light diff10](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6b284de8d41a76e4/R2-1440-light-diff10.png)<br>`8d3b061121`↔`f347cf5c3c` AE=1773 |
| 390 light | ![R2-390-light before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eafc1a8f2c5df9e9/R2-390-light-before.png)<br>`8d3b061121` | ![R2-390-light after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/000a824ee4518789/R2-390-light-after.png)<br>`f347cf5c3c` | ![R2-390-light diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ca1c2293c5e3bd50/R2-390-light-diff0.png)<br>`8d3b061121`↔`f347cf5c3c` AE=4450, bbox 176x256+145+568 | ![R2-390-light diff10](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/571f17bd2d46588a/R2-390-light-diff10.png)<br>`8d3b061121`↔`f347cf5c3c` AE=1307 |

#### R3: Web traits menu, F3 cap xhigh, Sonnet 4.6 Max (negative)

Expected/observed: Unchanged: chip "Max · 200k", menu "Max".

| Viewport / theme | Before | After | Diff0 | DiffT (10%) |
|---|---|---|---|---|
| 1440 dark | ![R3-1440-dark before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6e546586295c7e89/R3-1440-dark-before.png)<br>`8d3b061121` | ![R3-1440-dark after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9911c30655958f17/R3-1440-dark-after.png)<br>`f347cf5c3c` | ![R3-1440-dark diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e6f911db26d0034b/R3-1440-dark-diff0.png)<br>`8d3b061121`↔`f347cf5c3c` AE=2, bbox 1x2+497+878 | ![R3-1440-dark diff10](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3f109e823227b62b/R3-1440-dark-diff10.png)<br>`8d3b061121`↔`f347cf5c3c` AE=0 |
| 390 dark | ![R3-390-dark before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/23a736205707b5c9/R3-390-dark-before.png)<br>`8d3b061121` | ![R3-390-dark after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/05b8891fc3664aa1/R3-390-dark-after.png)<br>`f347cf5c3c` | ![R3-390-dark diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fdc92f0b49b16fae/R3-390-dark-diff0.png)<br>`8d3b061121`↔`f347cf5c3c` AE=0, bbox 0x0+390+844 | ![R3-390-dark diff10](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9d918b480d271183/R3-390-dark-diff10.png)<br>`8d3b061121`↔`f347cf5c3c` AE=0 |

#### R4: Web traits menu, F4 cap high, Opus 5.5 Extra High

Expected/observed: After: "Extra High (capped to High)", "Max (capped to High)", "Ultracode (capped to High)"; Ultrathink unmarked.

| Viewport / theme | Before | After | Diff0 | DiffT (10%) |
|---|---|---|---|---|
| 1440 dark | ![R4-1440-dark before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1071d72e3edd4a51/R4-1440-dark-before.png)<br>`8d3b061121` | ![R4-1440-dark after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b45ea45eaa79af69/R4-1440-dark-after.png)<br>`f347cf5c3c` | ![R4-1440-dark diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f253bea615ade5a0/R4-1440-dark-diff0.png)<br>`8d3b061121`↔`f347cf5c3c` AE=5578, bbox 497x266+701+595 | ![R4-1440-dark diff10](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fa94a01482c5f978/R4-1440-dark-diff10.png)<br>`8d3b061121`↔`f347cf5c3c` AE=2519 |
| 390 dark | ![R4-390-dark before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/decd6ab5aa97c612/R4-390-dark-before.png)<br>`8d3b061121` | ![R4-390-dark after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/663d615b336718a7/R4-390-dark-after.png)<br>`f347cf5c3c` | ![R4-390-dark diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2c2ad82af3c27eb7/R4-390-dark-diff0.png)<br>`8d3b061121`↔`f347cf5c3c` AE=4796, bbox 178x288+145+536 | ![R4-390-dark diff10](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ed1d1563c1ed0279/R4-390-dark-diff10.png)<br>`8d3b061121`↔`f347cf5c3c` AE=2198 |

#### R5: Web composer bar, F2 cap xhigh, Opus 5.5 Max + Fast on

Expected/observed: After 1440: chip "Max (capped to Extra High) Fast". After 390: effort chip and access chip fold to icon-only (label kept as hidden text); before 390 shows "Max Fast" and "Full access".

| Viewport / theme | Before | After | Diff0 | DiffT (10%) |
|---|---|---|---|---|
| 390 dark | ![R5-390-dark before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/25c6573b25346940/R5-390-dark-before.png)<br>`8d3b061121` | ![R5-390-dark after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5b7dd7056f1c5022/R5-390-dark-after.png)<br>`f347cf5c3c` | ![R5-390-dark diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/748ce2578f2c5133/R5-390-dark-diff0.png)<br>`8d3b061121`↔`f347cf5c3c` AE=2830, bbox 176x256+122+568 | ![R5-390-dark diff10](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3a31560d0a9ec3ea/R5-390-dark-diff10.png)<br>`8d3b061121`↔`f347cf5c3c` AE=1169 |
| 1440 dark | ![R5-1440-dark before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a83f742c19248c1/R5-1440-dark-before.png)<br>`8d3b061121` | ![R5-1440-dark after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/235f196a6840eeb2/R5-1440-dark-after.png)<br>`f347cf5c3c` | ![R5-1440-dark diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/85065ce66e3567ec/R5-1440-dark-diff0.png)<br>`8d3b061121`↔`f347cf5c3c` AE=5699, bbox 719x257+497+623 | ![R5-1440-dark diff10](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/594151d3605fe7e1/R5-1440-dark-diff10.png)<br>`8d3b061121`↔`f347cf5c3c` AE=1806 |

#### R6: Settings → Project (pingdotgg/t3code) → New threads → Model, F1 cap xhigh, Opus 5.5 Max

Expected/observed: After: chip and menu "Max (capped to Extra High)".

| Viewport / theme | Before | After | Diff0 | DiffT (10%) |
|---|---|---|---|---|
| 1440 dark | ![R6-1440-dark before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1864693ac91b7f5a/R6-1440-dark-before.png)<br>`8d3b061121` | ![R6-1440-dark after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/78a81c8ddb1eb9db/R6-1440-dark-after.png)<br>`f347cf5c3c` | ![R6-1440-dark diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d01b59fe94900b06/R6-1440-dark-diff0.png)<br>`8d3b061121`↔`f347cf5c3c` AE=163171, bbox 993x463+447+411 | ![R6-1440-dark diff10](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/01631046374d1d57/R6-1440-dark-diff10.png)<br>`8d3b061121`↔`f347cf5c3c` AE=11114 |
| 390 dark | ![R6-390-dark before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c1c391603b09d926/R6-390-dark-before.png)<br>`8d3b061121` | ![R6-390-dark after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/18bbcc8eec057735/R6-390-dark-after.png)<br>`f347cf5c3c` | ![R6-390-dark diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6ebf6dc5b379a34e/R6-390-dark-diff0.png)<br>`8d3b061121`↔`f347cf5c3c` AE=168692, bbox 376x659+14+185 | ![R6-390-dark diff10](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/18905c5ea16766c6/R6-390-dark-diff10.png)<br>`8d3b061121`↔`f347cf5c3c` AE=17315 |

#### R9: Web traits menu, cap xhigh, Opus 4.6 Max (1M default)

Expected/observed: After: chip "Max (capped to High) · 1M", menu "Max (capped to High)".

| Viewport / theme | Before | After | Diff0 | DiffT (10%) |
|---|---|---|---|---|
| 1440 dark | ![R9-1440-dark before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ad72f190dc3f142a/R9-1440-dark-before.png)<br>`8d3b061121` | ![R9-1440-dark after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7106e7bab3a378da/R9-1440-dark-after.png)<br>`f347cf5c3c` | ![R9-1440-dark diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0f79e0e4b1a75425/R9-1440-dark-diff0.png)<br>`8d3b061121`↔`f347cf5c3c` AE=4640, bbox 701x288+497+592 | ![R9-1440-dark diff10](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4be7ac77c8b1a0b4/R9-1440-dark-diff10.png)<br>`8d3b061121`↔`f347cf5c3c` AE=1661 |
| 390 dark | ![R9-390-dark before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/740a0b4892e84bc5/R9-390-dark-before.png)<br>`8d3b061121` | ![R9-390-dark after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c30ad08e8e27da80/R9-390-dark-after.png)<br>`f347cf5c3c` | ![R9-390-dark diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b159ef60d6cf014c/R9-390-dark-diff0.png)<br>`8d3b061121`↔`f347cf5c3c` AE=37893, bbox 270x478+50+366 | ![R9-390-dark diff10](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/db9dcc54309a58cd/R9-390-dark-diff10.png)<br>`8d3b061121`↔`f347cf5c3c` AE=1998 |

#### Extra crop (in addition to whole-surface captures)

390 composer bars, menu open, before over after, rows R2, R4, R5, R9: ![390 composer bars before/after](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0152258add862caf/crop-390-composer-bars.png)

#### What else changed (every visible difference, from Diff0)

1. Intended: effort labels above the cap gain "(capped to …)" in the chip, the menu item and the menu's accessible name (R2, R4, R5, R6, R9). Ids, defaults ("Default" badge), order and checked state are unchanged.
2. Layout, 1440: the wider chip pushes everything to its right ("Full access" chip, model-strip separators) rightward (R2, R4, R5, R9). In Settings (R6), the chip is right-aligned, so the model picker shifts left. The open menu is anchored to the wider chip, so it moves and repaints the "Current checkout"/"Import scripts" controls it covers differently.
3. Layout, 390, unintended side effect: with any capped label, the runtime-mode chip collapses from "Full access" to a lock icon (R2, R4, R9). With Max + Fast (R5), the effort chip itself also collapses to an icon, so the effort label leaves the bar at 390 (before showed "Max Fast"). The label survives only as hidden text and in the opened menu. This fold is the resting-controls overflow collapse ("icon-only" blocks), not the CompactComposerControlsMenu overflow menu.
4. Menu width at 390: the menu grows to fit "Max (capped to Extra High)" / "Extra High (capped to High)", and its left edge moves (R2, R4, R5, R9).
5. R6 only, not caused by the change: the second Checkouts row shows each server's own cwd (`/tmp/i17110/before/apps/server` vs `/home/ubuntu/wt/issue-17110/apps/server`).
6. Rendering noise of 1–2 levels out of 255, below the 10% threshold: the textured send button and the composer's right/bottom border on rows where the bar re-laid out (R2, R4, R5, R9 at 1440), and 2 pixels at the composer's bottom-left corner in R3-1440 (srgb 20↔21, 16↔17). Nothing else differs. R1 (both widths) and R3-390 are identical at zero threshold (AE 0). Where the wider menu sits over the blurred backdrop, the backdrop repaints at low amplitude (e.g. R9-390: 37,893 px at fuzz 0, 1,998 px at 10%).

**Unverified:**
- **iOS (matrix R7):** device access is disabled in the environment that produced this PR, so the iOS simulator could not be run. The mobile code is unchanged and renders the same server-provided label through shared `client-runtime` helpers. The phone chip renders one line (`numberOfLines={1}`), so whether the `(capped to …)` suffix gets cut off on narrow phones is unchecked.
- **Optional R8:** the Claude native-subagent strip needs a live subagent thread, which the seeded data does not have.

