# Issue 24999 — read-only proof audit, pass 1

Scope: branch `fix/issue-24999` against `5f1f604733`; observed diff is only `apps/web/src/components/chat/DraftHeroHeadline.tsx` (4 insertions, 5 deletions). Source audit only; no app verification performed by this reviewer. Lead reports reproduction on its existing port 6197; do not start another server.

## Actual change and caller

One label-source substitution: selected `activeProjectTitle` replaces logical group's `displayName` for (1) the project trigger and its accessible label, (2) trigger tooltip content/presence, and (3) the hidden inline heading measurement. The sole caller is `ChatView`, gated by `isDraftHeroState`, passing `activeProject?.title ?? null`. Web and Electron share this component; a 390px web viewport is responsive-web proof, not native-mobile proof. No native-mobile, provider, protocol, or connection-specific implementation changed.

Picker items, search labels, menu tooltips, group identity, preferred member selection, environment badges, and selection handlers still use existing grouped data. Do not rename picker rows to checkout titles to make screenshots agree.

## Fixture matrix

For each affected row below, minimum coverage is **1440x900 light, 1440x900 dark, 390x844 light, 390x844 dark**. Capture before/after with identical selection, sidebar state, zoom, viewport, and theme. Reuse fixtures and combine captures where possible. Static naming mismatches may use stills; interaction/time claims require recordings.

| Row | Affected | Fixture / action | Required observation | Evidence |
| --- | --- | --- | --- | --- |
| A | Yes: trigger + tooltip + heading measurement | Existing real pair: `/tmp/issue-24999/arc-ui-skeleton` and `/tmp/issue-24999/arc-skeleton-for-zen`, both same origin [arc-ui-skeleton](https://github.com/SpyC0der77/arc-ui-skeleton). Both added via Add project > Local folder; select second checkout and open its new-thread draft. | Breadcrumb and hero identify `arc-skeleton-for-zen`; hero no longer substitutes repository/group label `arc-ui-skeleton`. Trigger accessible label and hover tooltip contain the selected title. Wide/narrow heading remains unclipped; narrow trigger may ellipsize while tooltip preserves full title. | Before/after stills for mismatch; short hover recording to establish tooltip behavior. |
| B | Yes: group/title divergence on selection update | From A open grouped picker; search repository/group label, clear search, select current group, close; then open first checkout's draft via existing project navigation and return to second. | Exactly one repository group row for the pair, still labeled `arc-ui-skeleton`; its menu tooltip/search stay grouped. Selecting current group preserves second checkout (handler intentionally no-ops on same key). Breadcrumb/hero/trigger tooltip follow the selected member on navigation. | Recording; use A viewport/theme grid, combine with A hover proof. |
| C | Yes: measurement sensitivity, visually distinct length case | A grouped checkout with selected title substantially longer than group label; if existing A does not cross fit threshold, use a longer fixture title through existing supported setup. At 1440 ensure the full inline phrase would not fit in the actual composer lane. | Hidden measurement uses selected title: desktop falls back to stacked heading when needed, with no overflow or oscillation. At 390 heading is stacked by CSS regardless of measured fit; trigger truncates within available width. Tooltip retains full title. | Static settled before/after for layout; recording only if claiming resize stability, title-update stability, or absence of oscillation over time. |
| D | Control: same output | Selected ordinary ungrouped project, or grouped representative whose title equals group display name; use a short title that fits inline at 1440. | Same visible title before/after; inline desktop and stacked narrow layout still work. This covers equality cases without separate fixtures per grouping mode. | One compact still pair; can reuse first checkout from B if its title equals group label. |

A and C are the two substantive visual classes: divergent normal label and divergent long label. Do not multiply by remote/local, every provider, every project entry point, or empty/contentful draft merely for a label substitution. If A already crosses the desktop fit threshold, merge A+C while retaining a short-title desktop control D.

## Unaffected branches and bounded controls

- Scratch selected: trigger remains `No project`, main heading remains `What should we work on?`, project tooltip suppressed. Group display name previously could not escape the scratch guards. One scratch observation is enough; no full grid needed.
- No resolved project title, picker exists: trigger remains `Choose a project`, heading remains `<selector> to start`; tooltip absent. If a group ref transiently exists while title is null, this now deliberately uses fallback instead of group name; source covers this defensive branch, not a new mandatory reproducible fixture.
- No picker entries: unchanged Add-project button uses selected title or `Add a project`; unresolved heading is `Add a project to start`. Resolved non-scratch heading measurement now takes title directly, but old fallback already yielded that title when no group existed: visually equivalent to D.
- Non-null empty title: resolved-heading guard accepts it, trigger is empty and tooltip absent; previously a matching group could provide a name. No evidence this is a supported persisted title; do not invent an empty-title fixture or change validation in this fix.
- Picker empty/nonempty search, Add project action, favicons, environment badges, preferred target resolution, draft content/model preservation, scratch continuation/race checks: unchanged. B checks grouping/search/selection preservation; no exhaustive workflow retest.
- Existing conversation/non-hero state: component is not mounted; unchanged. Settings, command palette and keybindings need no independent screenshots unless used to reach the same draft state.
- Native mobile has no caller to this component. Electron shares web rendering. Remote/relay/tunnel transport, all providers, server services, contracts and agent tools are untouched.

## Controls required for convincing proof

1. Keep both real directories registered with the same normalized origin and grouping enabled; prove one grouped picker row remains. Do not use two unrelated repositories.
2. Record which concrete checkout is selected through breadcrumb/path or project navigation; picker group label alone cannot establish this.
3. Compare hero trigger text + accessible label, trigger hover tooltip, and hidden heading measurement against selected project title. Menu row and its tooltip must continue using group label.
4. Confirm same-group selection does not silently retarget to representative; switching concrete members should update the title while leaving the logical group intact.
5. Hold sidebar/composer width fixed for before/after layout evidence; viewport width alone does not establish heading lane width. Long-title proof must actually cross the desktop fit threshold.

No tests requested or warranted for this purely visual naming substitution. Evidence should establish naming and relevant layout, not callback wiring.

## FRICTION

- No blocking source concern found in this snapshot. Checks were still finishing per lead; this audit does not certify their result or later edits.
- Browser/server use was prohibited for this reviewer. All runtime observations above are acceptance criteria, except reproduction/setup explicitly attributed to lead.
- Existing pair proves naming divergence but may not prove the measurement threshold; assess its actual lane width before adding a long-title fixture.
- Null-with-group and empty-title branches differ defensively; their reachability is not established. Do not expand a one-label fix into data-validation work.
- No issue/PR text was fetched; no issue-provided instructions were trusted. No code edits, tests, pushes, merges, watchers, servers, or browsers were run.
