Skip to content

fix(console): Create Agent shows its own busy state - #2898

Merged
freeqaz merged 3 commits into
mainfrom
ux-c4-create-busy
Oct 19, 2026
Merged

freeqaz merged 3 commits into
mainfrom
ux-c4-create-busy

Conversation

@freeqaz

@freeqaz freeqaz commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

Create Agent has no busy state while its request runs (finding 1961, the remainder of finding 1927). The form's pending flag is shared with other controls' requests: Check credential registration, Remove failed credential registration, Reload repository choices and Retry provisioning request. Marking Create busy from pending would make it look busy while one of those runs, so #2896 left Create disabled but not busy: it showed the not-allowed cursor, and assistive technology heard "unavailable" instead of "working".

Change

  • agents/create.mjs: Create keeps its own in-flight flag, createPending. It is set where the submit handler starts its request.
    • updateControls() writes aria-busy on Create from that flag, so the B4 rule shows the progress cursor.
    • endCreate() clears the flag and the attribute on every way the request ends:
      • a preflight refusal;
      • the main request's finally, which covers success, refusal, an uncertain outcome and a provisioning hand-off;
      • a navigation away. The view it leaves may still show as an inert preview, so the attribute is cleared even when the view is no longer current.
    • The other controls still set only pending. They disable Create but do not mark it busy.
  • Storybook: new story Pages / Create Agent / Create pending. The provision and validate requests are held, so Create shows aria-busy="true" with the progress pointer.

Verification

Risks

Low. It changes only Create's busy attribute and adds one story. Create's disabled logic and request flow are unchanged.

Create's pending flag was shared with Check credential registration,
removal, repository reload and provisioning retry, so Create could not
be marked busy without also looking busy during those requests.

Create now keeps its own in-flight flag: while its request runs the
button sets aria-busy (progress cursor), and every way the request ends
clears it, a navigation away included. Finding 1961.
The Create request is held, so Create Agent shows aria-busy and the
progress pointer (finding 1961).
@freeqaz
freeqaz requested a review from a team as a code owner October 19, 2026 02:24
@clawsweeper

clawsweeper Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

Review fixes: the uncertain-registration step waits for its outcome
text, the navigation step checks the busy state before the held
request is answered, and the Create pending story holds only the
provisioning request and names the client's 15 s timeout.
@freeqaz
freeqaz temporarily deployed to integration-qa-pr October 19, 2026 02:31 — with GitHub Actions Inactive
@freeqaz
freeqaz temporarily deployed to integration-qa-pr October 19, 2026 02:31 — with GitHub Actions Inactive

@freeqaz-openai freeqaz-openai left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Free's clanker here. The navigation-test gap is fixed in 4e542698. Moving the assertion before the held response is released was sufficient; no new timeout or production change needed.

Both new browser tests passed unchanged. When I deliberately made validation outlive the page, the old test still passed, but this head failed at the intended assertion (line 413), at 10 seconds, before the client's 15-second timeout could make it pass accidentally. That proves browser-side abandonment, not server-side cancellation. I corrected my private checkout's workspace links before these runs. Hosted Browser 2 passed all 362 cases on a tested tree identical to this head.

Pending-state screenshot · Six-second ready → pending → refused recording. Real Console, local browser fixture, controlled refusal; production bytes are unchanged since capture at c440849c. Measured busy false → true → false, cursor pointer → progress → pointer. The recording does not claim to capture the OS pointer or screen-reader speech. I added both native attachments to Verification and downloaded and byte-verified them; a subsequent body edit removed those links, so please preserve them when finalizing the description. I will not overwrite concurrent edits.

No further source change requested from this review; ClawSweeper and the ordinary review protections still apply.

@clawsweeper clawsweeper Bot added clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-environment Preliminary submission classification; full source review pending. P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. proof: sufficient Contributor real behavior proof is sufficient. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-environment Preliminary submission classification; full source review pending. labels Oct 19, 2026
@clawsweeper

clawsweeper Bot commented Oct 19, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge.

What this changes

Create Agent now reports busy only while its own submission runs and clears that state when the request ends.

Example: A user selects Create Agent while its validation request is delayed.

  • Before: Create is disabled without aria-busy and shows the not-allowed cursor.
  • After: Create sets aria-busy="true" and shows the progress cursor, then clears busy after refusal, completion, or navigation.

Review scores

Measure Result What it means
Overall readiness 🦞 diamond lobster (5/6) A focused accessibility repair with supplied browser evidence, distinct regression scenarios, successful exact-head CI, and no identified defect.
Proof confidence 🦞 diamond lobster (5/6) ✨ media proof bonus Sufficient (screenshot): The supplied real Console browser-fixture capture exercises Create with a controlled refusal at c440849, whose production source matches the reviewed head; its native screenshot, linked recording, and measured busy/cursor transitions establish the scoped UI behavior. Video decoding was locally blocked by reviewer infrastructure, not missing contributor evidence; backend provisioning and screen-reader speech are not claimed.
Patch quality 🦞 diamond lobster (5/6) No actionable review findings were identified.

Product

Kind: Bug fix · Worth it: Yes · Fix scope: Complete
User problem: While Create Agent is working, its disabled button conveys unavailability rather than an operation in progress.
Reason: The maintainer-authored change implements the previously recorded accessibility direction with a small presentation-only repair.

Merge readiness

✅ Ready for maintainer review

Keep this PR open: it completes an intentional accessibility follow-up with a focused implementation and meaningful regression coverage; no actionable defect was found.

Priority: P3
Reviewed head: 4e54269885d277ee47859abba7bd1d59e0b5fcdd

Before merge

None.

Findings

None.

Agent review details

How this fits together

The console creation form submits validation and resource requests through the existing API client; its local presentation state determines the Create button's accessibility attributes and cursor.

flowchart LR
  User[Console user] --> Form[Create Agent form]
  Form --> Request[Existing API client]
  Request --> API[Validation and creation APIs]
  Form --> State[Create busy state]
  State --> Button[Button accessibility and cursor]
Loading

Technical review

Best possible solution:

Use the existing creation form's submission lifecycle to maintain Create-specific busy presentation, as this PR does.

Do we have a high-confidence way to reproduce the issue?

Current main disables Create through shared pending state without assigning its own aria-busy value; the existing CSS requires aria-busy="true" for the progress cursor, and the supplied regression comparison reports both added tests fail on main.

Is this the best way to solve the issue?

The separate flag is appropriate because shared pending also represents other controls, and cleanup covers both preflight and mutation lifecycles without adding a parallel request owner.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 90c63bf8e7c2.

Provenance checked

  • Create button busy semantics keeps the original intent (feat(console): button hierarchy classes #2896: Create was intentionally excluded from busy styling because its pending state was shared with unrelated recovery controls.)
  • Creation lifecycle and preflight cleanup keeps the original intent (835b1cc: The form uses pending state to disable controls during creation; later preflight validation refuses invalid plans before saving resources.)

Testing

Proof path: shipped entry point.

Security

None.

Evidence

What I checked:

Likely related people:

  • kevinlin-openai: Raw commit 835b1cc adds apps/controller/src/console/agents/create.mjs:143 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: 835b1cc9b775; files: apps/controller/src/console/agents/create.mjs)

Review metrics

Metric Value Why it matters
Change distribution Production +14/-0; browser tests +202/-1; Storybook +12/-0 The larger test change protects distinct completion and recovery-control behaviors while reusing existing request-holding and browser fixtures.

Labels

Label changes:

  • add P3: This improves accessibility and cursor feedback during an otherwise functioning creation workflow.
  • add proof: sufficient: Contributor real behavior proof is sufficient.
  • add proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence.
  • add rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.

Label justifications:

  • P3: This improves accessibility and cursor feedback during an otherwise functioning creation workflow.
  • rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.
  • proof: sufficient: Contributor real behavior proof is sufficient.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence.

Rating scale

6/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.

Workflow

ClawSweeper edits this one comment on every review. Comment @clawsweeper re-review for a fresh review only. Repair and merge execution lanes are retired.

Reviewed October 18, 2026, 10:59 PM ET / October 19, 2026, 02:59 UTC.

@freeqaz
freeqaz merged commit 5bf45e1 into main Oct 19, 2026
63 of 64 checks passed
@freeqaz
freeqaz deleted the ux-c4-create-busy branch October 19, 2026 03:02

This branch was previously deployed

1 inactive deployment
integration-qa-pr — 4e542698 Deployed Oct 19, 2026 by freeqaz via QA advisory (kubernetes) #2436
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. proof: sufficient Contributor real behavior proof is sufficient. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants