Repository navigation
fix(console): small refusal and focus fixes from the 10-19 audit - #2930
Conversation
- Channel Secrets: a save whose Configuration saved but whose Secret grants could not be confirmed is a warning from the start, not danger that turns into a warning when another Secret is picked (finding 2003). - Plugins: a save that finds the selections changed focuses Reload plugin selections, described by the message, instead of dropping focus to the page (finding 1998). - Create Agent: in a provisioning Namespace, a plan that provisions a Dedicated Agent disables Create Agent, described by the status line that now says so; every step of that plan needs a ready Namespace. Draft plans still save (#2867) (finding 2007).
|
🦞👀 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. |
…ng gate too Internal review nit: the handler re-checks the other gates that disable Create Agent, so it checks this one as well.
|
Codex review: needs maintainer review before merge. What this changesThis PR corrects Channel Secrets warning tone, restores focus after a plugin-save conflict, and disables Dedicated provisioning while its Namespace is not ready. Example: A plugin save discovers selections changed in another browser.
Review scores
ProductKind: Bug fix · Worth it: Yes · Fix scope: Complete Merge readiness✅ Ready for maintainer review Keep this useful, maintainer-authored PR open; the focused changes address current Console defects, and no introduced correctness or security bug was found. Priority: P2 Before mergeNone. FindingsNone. Tests
Agent review detailsHow this fits togetherThe OCC Console turns Namespace status and Agent API outcomes into form availability, feedback, and keyboard focus; server authorization and persistence remain unchanged. flowchart TD
A[Console user] --> B[Agent forms]
C[Namespace status] --> B
B --> D[Existing OCC API]
D --> E[Save outcome]
E --> F[Warning and focus handling]
Technical reviewBest possible solution: Retain these narrow repairs in the existing Console owners while preserving draft creation and deliberate user focus. Do we have a high-confidence way to reproduce the issue? Current-main source exposes all three paths, and the PR describes base-failing/head-passing browser cases; no target code was run during this read-only review. Is this the best way to solve the issue? The patch uses existing readiness, status-tone, and focus owners and extends existing regression cases without introducing a parallel mechanism. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against b10157ca98de. Provenance checked
TestingProof path: in-process harness. SecurityNone. EvidenceWhat I checked:
Likely related people:
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 Reviewed October 19, 2026, 7:29 AM ET / 11:29 UTC. |
Problem
Three small issues from the 10-19 bughunt of the console landings:
Change
credentials.mjs: asaveErrorTone()helper. A refused save is danger. A failed grant step after the Configuration saved is a warning. The catch block andrender()both use it, so the tone never flips.plugins.mjs: the reload-required outcome uses the samefocusSaveOutcome(save, [reload], feedback)as the unknown-outcome path. Reload plugin selections takes focus, described by "Plugin selections changed. Reload this Agent before saving again." Focus the reader moved elsewhere stays where it is (finding 1978).create.mjs: while the plan provisions on a not-ready Namespace, Create Agent is disabled. It is described by the status line, which now ends "Create Agent is unavailable until then." Draft plans still save (fix(console): first-run and not-ready Namespace guidance #2867); for example, an Embedded OpenClaw draft re-enables Create. This is presentation only: the API still decides. The Namespace snapshot is the same one the start page already uses to block other not-ready states.Verification
Each test below fails on main and passes with the change:
console-agent-channels.test.mjs, "Agent credentials report partial Slack Secret grant failure (403/429/503)": the grant warning readsdata-tone="warning"(main:danger).console-agent-saves.test.mjs, "saving and reloading plugin selections update the Agent page in place": after a save that finds the selections changed, Reload plugin selections is focused and described by the message (main: not focused).console-namespace-not-ready.test.mjs, "Create Agent names a provisioning Namespace's status before any start": the Dedicated plan shows the new line, Create Agent is disabled and described by it, and switching to an Embedded OpenClaw draft re-enables it with no description (main: times out on the new line, with Create enabled).These full files pass locally at 4 CPUs: namespace-not-ready 7/7, agent-saves 44/44, agent-channels 15/15, create-agent-provisioning-400 40/40, agents-2 22/22, form-fields 8/8, form-fields-2 8/8, console 48/48.
Conflicts with open PRs (3-way
git merge-treeagainst this head, compared withorigin/main): there is no new conflict hunk.create.mjs) has the same 2 hunks as against main.UI media (Storybook, before then after):
Components/Credentials, Slack grant denied (2003): the grant warning is a warning, not danger (media commit e0973a4)
Pages/Create Agent, Form, Namespace still provisioning (2007): Create Agent disabled, the status line says why (media commit e0973a4)
The media was committed in e0973a4 and dropped in the next commit, so the squash carries none.
1998 is a focus move and has no Storybook state: the fixture cannot change an Agent's
configurationIdbetween the page's read and the save's preflight. The browser test covers it.Risks
Low. These are console presentation changes only. If a Namespace becomes ready while the Create form is open, Create stays disabled until the page reloads its data (a navigation or refocus). The start page's other not-ready gates already behave this way, and the API refused this plan anyway.