Repository navigation
fix(console): say why the page stays while a deploy or save is in flight - #2900
Conversation
A refused sidebar link, Back or ← Agents during a deploy, an authentication or channel Secrets save, a plugin save or a draft reload now shows one reason beside the pending control, in a status live region (finding 1962). Retained tabs keep their own editor note instead of the last built tab's. Tests cover the deploy, authentication, channel Secrets and plugin holds (finding 1965 D10-D12).
…rtain refusal One case per keepDraftAfterRefusal() guard: an uncertain Agent POST, an admitted provisioning job whose read is refused, a failed job that names its Agent, a refused credential registration and a repository-scoped refusal. Each leaves no kept form and arms no beforeunload; each kills its mutant from finding 1965 (D1-D5).
…ld tests Internal review: a refresh replaces the draft actions card mid-hold, so its note now sits at the top of the tab panel and reads 'updating' (it follows saves too). The plugin saving block keeps its old wording. Each hold test removes the note before every refusal so a silent one fails, takes Back past the tab change, and checks the note sits beside its control.
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: needs maintainer review before merge. What this changesThis PR explains why pending Agent writes block navigation and adds browser coverage for navigation holds and Create retry guards. Example: Click Agents while Deploy new version is awaiting its response.
Review scores
ProductKind: Bug fix · Worth it: Yes · Fix scope: Complete Merge readiness✅ Ready for maintainer review This PR resolves the earlier Storybook finding and adds meaningful retained-tab regression coverage; no actionable patch defect remains. Priority: P3 Before mergeNone. FindingsNone. Agent review detailsHow this fits togetherThe OCC console’s Agent detail page receives navigation attempts and pending-write state, preserves the existing navigation guards, and displays contextual feedback beside the active operation. flowchart LR
A[Navigation attempt] --> B[Existing leave guard]
C[Pending Agent operation] --> B
B --> D[Contextual status note]
C --> E[Operation settles]
E --> F[Remove note and release navigation]
Technical reviewBest possible solution: Land the contextual feedback and retained-tab callback repair with the existing navigation and write boundaries preserved. Do we have a high-confidence way to reproduce the issue? Current main’s refusal handler invokes an editor-only callback, explaining silent deployment and credential-save holds; the supplied before/after evidence and maintainer verification corroborate that path without a new local run. Is this the best way to solve the issue? The repair uses the existing Agent detail owner and retained-tab state, adds contextual feedback, and preserves the established hold rules. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 4938db764523. Provenance checked
TestingProof path: in-process harness. SecurityNone. EvidenceWhat I checked:
LabelsLabel changes:
Label justifications:
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment HistoryReview history (1 earlier review cycle)
Reviewed October 18, 2026, 11:58 PM ET / October 19, 2026, 03:58 UTC (Revision 2). |
freeqaz-openai
left a comment
There was a problem hiding this comment.
Free's clanker here. The navigation behavior works. The requested Storybook proof is possible with the fixture you already have; please add it and cover one retained-tab regression. No new fixture API or production rewrite needed.
- Use the existing held deployment. I downloaded this head’s successful Storybook build, opened
deployInProgressunchanged, and clicked sidebar Agents. The URL stayed put and “This page stays open until the deploy request finishes” appeared asrole=statusin.agent-draft-actions. In a second, private preview I changed only the scenario rule fromhold: truetodelayMs: 3600: the same refusal appeared, the status node went away when the fixture responded, and a second Agents click navigated. That gives you a short, reproducible walkthrough for Claw’s open Storybook finding. Please update the story/workflow and put native screenshots and a video of that interaction in Verification; no real deployment or screen-reader claim needed. - Protect the retained tab’s own feedback. In the existing pending-Channels-save case, visit Repositories, return to the same Channels DOM, then hold Save and try to leave. We ran that against the exact source: it passed. Removing only the line that restores the retained tab’s feedback callback made this check fail at the missing Channels message, while the submitted pending-Channels test and all four new navigation-hold cases still passed on that mutation. Extend the existing case rather than introducing another framework. I’m not claiming the whole mutation suite passed; unrelated Create cases timed out in that experiment.
I independently bound the hosted browser result to a tested tree identical to 56d0eb14: 375 passed, zero failed or skipped, including all 18 owning cases. We also verified a held draft reload gives exactly one status in the tab panel, removes it on completion, then allows navigation. One review on the corrected head is enough; an unchanged CI rerun would not cover these gaps.
…ained tab keeps its note Review on #2900: two Storybook scenarios (Deployment holds navigation, Authentication save holds navigation) select the write, then Agents in the sidebar; a 3.6 s simulated answer shows the note, then its removal and a working sidebar. The pending Channels save case now visits Repositories and returns to the same Channels DOM first, so dropping the retained tab's note callback fails it.
|
Free's clanker here. Both items are done on
|
freeqaz-openai
left a comment
There was a problem hiding this comment.
Free's clanker here. Both items in my change request are fixed at 7a69e96b. No further source change requested.
- I opened the published deploy and authentication Storybook stories without patching either. In both, clicking Agents kept the same URL and a single contextual
role=statusexplained why. When the simulated response arrived, that note disappeared and a second click actually navigated to Agents. That verifies the interaction and live-region markup, not a real deployment, credential change, or spoken announcement. - I ran the submitted retained-Channels test against the production changes composed with main
d7179620: it passed. Removing only the line restoring the retained feedback callback made that same test fail at the missing “Wait for channel settings save to finish” message. This is the regression the original test could miss. - Hosted CI tested
2221dd0c(parents maind7179620and this head). The digest-verified browser result was 380 passed, no failures or skips, including all 18 owning tests. The 12 screenshots and four walkthroughs are now native attachments; I downloaded all 16 and matched their bytes. No media remains in the landing diff.
Please use the fresh Claw verdict and ordinary merge protections. No unchanged CI rerun is needed for this review.
|
@clawsweeper re-review Please review corrected head |
|
🦞👀 Re-review progress:
|
|
Free’s clanker here. Ready for the PR owner’s normal protected merge at Claw’s final review confirms the earlier finding is resolved, with no remaining findings. Required CI passed, my approval is on this head, and there are no unresolved review threads. The 380 browser tests ran on merge preview |
The note #2900 shows when a deploy or save holds the page is an info status block. Errors keep the 16 px gap .error gave them above. patchChildren replaces a role node whose tone changes, so it announces again. revealStatus leaves focus that is outside its section alone, disabled or not. setStatusTone documents that it replaces the class list.
Problem
On an Agent draft, while Deploy new version, an authentication save, a channel Secrets save, a plugin save or a draft reload is in flight, the sidebar links, Back and
← Agentsrefused to leave the page with no visible reason (finding 1962).refuseLeave()called the editor block note, which only printed editor-save text and was a closure left over from whichever tab was built last; the Credentials, Plugins and Workspace tabs never set one.The guards in Create Agent that stop a kept draft from creating a second Agent (
keepDraftAfterRefusal()), and the navigation holds for deploys, authentication saves and plugin saves, had no tests: five create-guard mutants and three hold mutants survived every suite (finding 1965).Change
detail.mjs: a refused leave shows one short reason beside the control whose request holds the page, in arole=statusnote:console-drafts-kept.test.mjs:← Agentseach stay and each show the note (it is removed before every attempt), in a live region beside its control, and the note goes with the hold.beforeunload.Verification
!outcomeUnknown, D2!requestAdmitted, D3 repository-scoped check, D4!error.provisioningAgentId, D5 credential registration checks, D10 plugindraftEditorSaving, D11 authentication/credentials saving, D12deployInFlight: all killed, each by its own case.tests/browser/console-drafts-kept.test.mjs20/20 at 2 CPUs (18 tests per run).deployHoldsNavigationandauthSaveHoldsNavigationwith workflow steps (stories "Deployment holds navigation", "Authentication save holds navigation").Native Storybook attachments (simulated API; real console components): Pages/Agent detail › Deployment holds navigation and Components/Credentials › Authentication save holds navigation. Each story selects the write, then Agents in the sidebar; the simulated request answers after 3.6 s. Captured from this branch's prepared Storybook assets at
86e451f54.Walkthroughs (sidebar Agents and ← Agents refused with the note, the note goes when the request answers, then Agents leaves): deploy 1440, deploy 390, authentication 1440, authentication 390.
App screenshots from the browser-test fixture (sidebar Agents clicked while the request is held), before and after:
Risks
Low. Console only; the hold rules themselves are unchanged, only what a refusal shows. The note is one
p.hintmoved next to the pending control.