Repository navigation
gallery: expired harness sign-in states (Harness health notice, Settings Agents) (carry #27742) - #28834
Conversation
Red: since acpmux reports auth "expired" (#26658), the Harnesses page shows Ready, the chat shows no Log In, the model picker does not dim it and Settings > Agents shows no badge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-c46713109b72034b1840
acpmux's harness health reports auth "expired" (#26658); the Harnesses page, the chat's Log In line, the model picker's signed-out list and Settings > Agents only knew "signedOut", so an expired sign-in read as Ready. Each now treats expired as needing a login. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-c46713109b72034b1840
…cpmux does Without one the expired row fell back to Ready (review finding). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-c46713109b72034b1840
…boarding-a-expired-auth # Conflicts: # webviews/src/agent-session/acpmux/harnesses/HarnessesScreen.gallery.tsx # webviews/test/signed-out-harness.test.tsx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-f71664ebfb6cf5206479
A `sign-in-expired` state beside `signed-out` in the harness health notice, so the gallery shows the chat line this PR adds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-f71664ebfb6cf5206479
`agents-harness-sign-in-expired`: Codex's sign-in expired, so Agents gets its badge and the row says Signed out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-f71664ebfb6cf5206479
Its row was below the fold, and the base build could not mount the state (it waited for the expired marker). It now waits for the row and focuses its Check button, which both sides have. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-f71664ebfb6cf5206479
|
Found 1 test failure on Blacksmith runners: Failure
|
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Gallery before/after for
States
Pick other states with a web and size checks: green Shipped in:
|
|
Review (codex gpt-6-astra high, next-review): SHIP at ebfd968 No blocking findings. Visual verdict: The expired-sign-in states are clear and readable in both themes and fit alongside ChatGPT or Claude. Before/after comparisons show no introduced clipping, overlap, or layout regression. |
|
Handing off to ux-owner, which carries this to the finish. Open: it conflicts with feat-cmux-next (merge base; that also clears the stale Default cursor red). The body still says STILLS_PLACEHOLDER: run 41165136637's gallery artifact has agent-pane.harness-health-notice/sign-in-expired and agent-pane.harnesses/sign-in-expired at head, plus harnesses/this-mac before/after. Then a fresh exact-head review. |
harnessRows: base's rule (no answer is Checking; Ready only on a signedIn answer) kept, with this branch's expired sign-in going to Sign In through needsLogin. The gallery host keeps both base's authMissing and this branch's expired fixtures. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-f71664ebfb6cf5206479
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
|
Review at 351e3f7 came back BLOCK on three visual findings. All three are in code this PR does not change, and the reviewer notes that "these issues also appear in base screenshots":
The reviewer found no functional regression in the diff. These are base findings for the model picker and Harnesses surfaces, not regressions from this PR. The P2, a Settings expired-sign-in capture, is a follow-up. |
|
Landing at 351e3f7. Its review there said BLOCK, but only on visual findings in code this PR does not change. The reviewer called them identical to base and found no functional defect (comment 6542408748). Under the blocking rule (breaks base, loses data, security, or a regression) those findings are base follow-ups, not this PR's. Tests at this head pass. |
|
Review (the owner lane's independent review, at its land request): SHIP at 351e3f7 Recorded by lane-gh-broker from this PR's owner lane, which asked to land this exact head after its independent review. next-autoland lands it once every red is the base's; a BLOCK at this head, a HOLD line or a hold label still stops it. |
#27742 landed on base (64943fa) with the expired sign-in fix itself; the gallery host takes base's side (its login comes from the catalog). What this branch adds now is two gallery states: the Harness health notice's sign-in-expired and Settings > Agents' sign-in-expired. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-f71664ebfb6cf5206479
|
Review (the owner lane's independent review, at its land request): SHIP at f358ed8 Recorded by lane-gh-broker from this PR's owner lane, which asked to land this exact head after its independent review. next-autoland lands it once every red is the base's; a BLOCK at this head, a HOLD line or a hold label still stops it. |
|
Review (next-review patch-id; carried): SHIP at 8d9774c The independent SHIP at f358ed8 carries to this head: the PR's own change ( |
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
|
Review (codex gpt-6.1-sol high fast, router-review): SHIP at e9de6c2 This head is the lander's update-branch for stale guards. The full diff was reviewed (gallery entries only): no correctness findings. |
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Update: #27742 itself landed on
feat-cmux-next(64943fa) with the expired sign-in fix. After a base merge, this PR adds only two gallery states for that fix:agent-pane.harness-health-notice/sign-in-expiredand Settingsagents-harness-sign-in-expired(the Settings capture asked for in review).Carries #27742 (its lane is gone): the original commits and their authorship are kept, merged with current
feat-cmux-next, plus gallery before/after stills for each surface it changes.What this carry adds
feat-cmux-next(310 commits): no conflicts.bun test src/agent-session/acpmux/HarnessHealthNotice.test.tsx src/pages/settings/harnessesCard.test.tsx test/harnesses-page.test.tsx test/signed-out-harness.test.tsx: 40 pass, 0 fail.sign-in-expiredstate for the chat's harness health notice (agent-pane.harness-health-notice), beside the existingsigned-outone, so the chat Log In line has a still. The Harnesses page already hadagent-pane.harnesses/sign-in-expired.harnessRows.tsstatus expression. This PR changes onlychecked?.auth === "signedOut"toneedsLogin(checked?.auth)there; fix(setup): preserve auth uncertainty and recover rejected launches (carry #27874) #28748 rewrites the expression so an answer without a sign-in is never Ready. Whichever lands second keeps both:needsLogin(checked.auth)takes the"signIn"branch in fix(setup): preserve auth uncertainty and recover rejected launches (carry #27874) #28748's version.Before / After
No stills: Leo, 2026-10-31: "WE DON'T NEED SCREENSHOTS, JUST LET ME TRY THE STUFF OUT." The gallery state
sign-in-expired(Harnesses) and the Settings expired-sign-in state show it.Original description (#27742)
Fixes an internal report: harness readiness should never claim a verified sign-in it does not have.
Since #26658, acpmux's
_acpmux/harness/healthreportsauth: "expired"when a check or probe says the credential expired. Every webview consumer of that row only knew"signedOut", so an expired sign-in:signedOutHarnesses), so a pick started a chat that failed on its first turn;Now
expiredneeds a login everywheresignedOutdoes. The Harnesses row shows Sign In, and after Sign In it keeps waiting while the check still says expired. The chat line reads the existing "Your sign-in expired. Sign in again to continue." with Log In. The picker dims the harness, and Settings badges Agents and marks the row (data-harness-auth="expired", with the existing "Signed out" text). The native host already passesauththrough unchanged (SettingsHarnesses.swift,readHarnessHealth), so this is webview-only.unknownand absent health are unchanged.Changelog
Fixed: a harness whose sign-in expired no longer shows as Ready; it offers Sign In / Log In like a signed-out one.
Testing
Command:
cd webviews && bun test src/agent-session/acpmux/HarnessHealthNotice.test.tsx test/harnesses-page.test.tsx test/signed-out-harness.test.tsx src/pages/settings/harnessesCard.test.tsxObserved / Not run
73a7c90ac3d7972c8a41de2c1a8115c0c65f0299(on base760ac107c6bc5bb422613bba3bff77c833964e27, plus the"expired"type literal): 4 failing (the four new tests), 34 passing: run 40979542776.3e4c9433747be3b13b40195162dfc5d298b13a73: 38 passing, 0 failing: run 40987332498. The fix commitdcf5aedcwas green too: run 40979841785.scripts/web-lint.shpassed.HarnessesScreenstatesign-in-expired(Claude Code expired → Sign In; Codex signed out; Grok ready). Its fixture now names a login for every harness, as acpmux does (review finding: without one the expired row fell back to Ready). It does not exist at the base, so there is no before for it; the before is the same row reading Ready.risk: normal (webview display and picker gating of an existing health value; no protocol, daemon or native change).
#27742 closes once this lands.
Agent session: agent session
🤖 Generated with Claude Code