fix(agent status): keep spinner defaults and preserve dot options

Merged
TE
13d ago
+283-160

Agent-working indicators fall back to the shared spinner in web panes, and Jump to latest keeps a static arrow while a reply streams below. Neither default path runs a repeating opacity or scale pulse.

Leo: "GUARANTEE the breathing dot doesn't come back". Clarification: "23870 no just leave it as an option. just dont make it the default."

Thin Arc remains the default Loading Indicator style. Pulsing Dot remains selectable; stored dot and explicit Debug breathe choices retain their behavior. Native runtime code, settings choices, decoding, and motion tokens are unchanged. Only an explicit data-working-look="breathe" enables the web breathing look; absent or unknown values draw the shared spinner.

The spinner and explicit breathing loop stop under Reduce Motion, Static status indicators (including the Indicators category switch), or when their working element unmounts; CSS animation removal is their cleanup. Jump to latest has no loop; its show/hide transition ends after the existing --agent-motion-in/out duration, snaps through the web motion gate, and is discarded with the element. Native layer tests also check that changing to idle removes the working loop.

Validation

On fleet host cmux16 at final integrated head f61b3a3b25:

cd webviews
CMUX_BROWSER_TESTS=1 bun test test/no-breathing-dots.test.ts test/static-status-loops.test.ts test/transcript-jump-latest.test.tsx

Green: 17 passed, 0 failed, 55 assertions (Chromium enabled, 2.85s). The same command on regression parent 50cd1cbd61, with these tests and the old CSS, produced 12 passed / 5 failed: the absent/unknown working look breathed and the Jump control still had pulse styling.

On fleet mini cmux13s-Mac-mini.local (Xcode 26.6), the focused native command passed at source-equivalent head ca045643d4: 8 tests in 3 suites (NoBreathingDotTests 2, StatusWorkingLookTests 5, StatusIndicatorStyleDefaultTests 1), STATUS=0. The guards exercise default StatusIndicatorView/TabCell plans and their real CALayer trees, verify spinner rotation and idle cleanup, retain explicit .dot/.breathe choices, and verify Settings default arc plus stored dot remains dot. Native runtime, schema and decoder files are byte-identical to current incorporated base 39e07dce42.

Observed / Not run

prepush-gate.py and git diff --check pass; web lint against base 39e07dce42 passes at final head f61b3a3b25. Source and the baseline-only cleanup passed independent Codex and Astra reviews with no P1/P2/P3 findings. The previous integrated source head passed independent Codex and Astra reviews. The final head also carries a five-line CI parser/test fix for the current vp lint summary ordering: Found N warnings and M errors is run-summary noise, matching the existing errors and warnings form. Two stale design-token allowances from the removed Jump dots were deleted. No native build or test suite was run on the agent host. Focused native tests passed on fleet mini cmux13s-Mac-mini.local at 0acceabd3d (Xcode 26.6); a repeat at final head f61b3a3b25 is in progress.

Earlier controller web/native jobs were cancelled before a worker claimed them, after observing an inherited bundle setup error. Those jobs did not execute tests and are not green evidence. The bundle job at the prior source-identical head failed because imported harnessStatus.css is missing from build-agent-pane-web.sh; both paths are unchanged by this PR. The direct browser command above avoids that unrelated app bundle prerequisite. The prior fast gate also reported the two now-fixed baseline allowances plus App.tsx declaration-order errors present in the current base; The branch now incorporates that newer base and constructs the existing tray JSX after its callback/ref declarations, resolving those declaration-order errors without moving hooks or changing tray behavior. Local web lint with --base 39e07dce42 --new-only passes; integrated-head gates are running.

No capture: native runtime is unchanged. These fixture-only web captures were made by Chromium on fleet host cmux16, comparing base 1983234545 with source-identical f7db10e727 (the integrated head retains the same indicator CSS and Jump markup):

Left is base; right is the fixed pane. The working-look attribute was removed in the browser fixture to exercise the real fallback: base cmux-breathe, head cmux-spin.

Absent working-look fallback: before dot, after spinner

Jump to latest: before dots, after static arrow

Live gallery comparison. Both raw strips and the gallery URL returned HTTP 200 from the fleet; both strips also returned HTTP 200 from the agent host. Native reference captures remain private. References inspected privately: cmux-design-references cmux live status-loading-blinker and status-working-duration-indicator; no private reference screenshot is published.

Changelog

Fixed agent chat's fallback working indicator and Jump to latest pulsing without an explicit choice.

Agent session: big-red