Skip to content

fix(console): show the error's own next step in the failed-deployment banner - #2989

Merged
freeqaz merged 6 commits into
mainfrom
ux-p4
Oct 20, 2026
Merged

freeqaz merged 6 commits into
mainfrom
ux-p4

Conversation

@freeqaz

@freeqaz freeqaz commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

UX spec P4 (plan A1, spec 3.4, finding 1898). #2866 already put the API's own next step and Deploy again into the failed-deployment banner, but the banner was still the old beige "Deployment needs attention" card: a warning-coloured label that said nothing about which version failed, a 23-28 px title, no failure code (only in Deployment details further down), plain links styled by card-local rules, and step tiles that all carried a tone wash. The spec makes it the page's one status block: danger tone, the failed version in the label, the code in the message, one primary action.

Change

  • agents/detail.mjs: the recovery section is now a full-width .status[data-tone=danger] block. Its .status-label reads "Deployment failed · vN", the title stays one line, and the body ends its first sentence with the failure code in <code>, for example "v7 did not deploy successfully (DEPENDENCY_UNAVAILABLE)." The rest of the message is unchanged from fix(console): show the error's own next step in the failed-deployment banner #2866. Each part is its own node, so a poll that reads back the same failure still writes nothing. The first action is button button--primary and the others are button (secondary). Which actions appear, and in what order, is fix(console): show the error's own next step in the failed-deployment banner #2866's logic: Deploy again only when the API's message says to deploy again (never for RUNTIME_AUTHENTICATION_FAILED or other credential failures), else Open vN Logs, then Open Credentials/Configuration. The region keeps its accessible name, "Deployment needs attention". The mockup shows Deploy again for CONVERGENCE_DEADLINE_EXCEEDED, but that is sample data: that code's message says to check the logs, then deploy a new version, so Logs stays the primary there.
  • console.css: the block uses the .status stripe and wash, --space-5/--space-6 padding (--space-4 under 520), a --text-lg semibold title with a --space-2 gap, and mono --text-md for the code. The card-local link chrome is gone because the actions use the C2 button classes. The muted edge on secondary actions stays (finding 1958, 3:1 on the wash). Under 520 px a status block's actions stack full width with a 44 px touch height (spec 4). Deployment step tiles become hairline inner cards on the surface (--radius-md), the marker carries the tone, and only a failed step keeps its wash.
  • Storybook: the New version failed, deploy again, and viewer-cannot-edit (Logs only) stories, plus status-block-workflow.md steps 14-15, describe the new block, its single primary, the phone stacking and the tiles.

Verification

Mockup: agent-failed-1440.png / agent-failed-390.png (ux-design-1019 gist). Storybook stories: Pages/Agent detail "Deployment failed" and "New version failed, deploy again".

Before: main before #2977. After: this head, which includes #2977's header.

Before After
Logs story (CONVERGENCE_DEADLINE_EXCEEDED), 1440 before after
Logs story, 390 before after
Deploy again story (DEPENDENCY_UNAVAILABLE), 1440 before after
Deploy again story, 390 before after

Walkthroughs at 390 (head, Storybook frames): Deploy again opens the draft with Deploy new version focused, Open v7 Logs selects v7 and focuses its Logs tab.

Mockup (alignment target; its CONVERGENCE_DEADLINE_EXCEEDED message and Deploy again are sample data, see Change):

1440 390
mockup mockup

Acceptance (spec 5, P4), measured with the shots script on the Storybook frames:

before after
Code-specific action top, Logs story, 1440x900 354 334 (< 900)
Same, 390x844 600 516 (< 844)
Code-specific action top, Deploy again story, 1440x900 354 312 (< 900)
Same, 390x844 580 494 (< 844)
.button--primary on the page 0 (the action used .overview-primary) 1
Visible accent-filled controls 1 1
accent elements, failed page 1440 3 3
danger elements, failed page 1440 5 6

The shots script's primaryCount counts all three class aliases and reads 2 both before and after. The second is native admin's "Open admin console" link, which stays hidden on this page. The danger count rises by one: the block's stripe and its label each count, while the failed tile's red edge is gone. Its remaining items are the lower CODE: message record and Stop/Delete, which belong to P5 and P8 (spec 3.3 target 3).

Tests:

  • console-agent-overview.test.mjs: the per-code above-the-fold test (RUNTIME_AUTHENTICATION_FAILED, DEPENDENCY_UNAVAILABLE, CONVERGENCE_DEADLINE_EXCEEDED at 1440x900 and 390x844) now also asserts the danger tone, the "Deployment failed · v1" label, the code in <code>, each action's class (one button button--primary: Deploy again or Open v1 Logs), that the page's only accent-filled control is that primary, and the full-width stack at 390 only. Against main's sources all 6 fail. With only main's console.css, the three 390 cases fail on the stacking check.
  • Exact-text and class assertions for the new copy and classes are updated in console-agent-overview, -deploy-again, -detail and -state. No assertion was dropped.
  • Full files green locally: overview, deploy-again, button-hierarchy, state, detail (119/119); status-block, console, channels, repositories, namespace-recheck, draft-guards (159/159).
  • Pin: overview and deploy-again files, 20/20 at 2 CPUs (52 tests per run).
  • After merging main (fix(console): header layout and compact Namespace selector #2977): overview, deploy-again, button-hierarchy, state, detail, page-header, status-block and draft-guards all pass (186/186).
  • Internal visual review of the head's screenshots against the mockup and spec 3.4/4: confirm. Acceptance passes and the phone actions are 44 px and full width. I applied its title-to-body gap nit (--space-2). Its other nits are a 32 px gap below the block, which P5 reshapes, and console-wide button height, which is P12.

Open-PR merge map (conflict hunks in the touched files, main vs this head): #2977 0/0, #2988 0/0, #2986 0/0, #2982 0/0, #2980 0/0, #2971 0/0, #2596 2/2, #2524 0/0, #2518 0/0, #2445 3/3, #1619 1/1, #906 0/0. No new conflict hunks.

Risks

Low. Console presentation only: no API change, and the action logic is #2866's. The phone-width stacking rule applies to every .status-actions, as spec 4 asks, so other status blocks with actions also stack under 520. The step tiles lose the green and amber washes on complete and in-progress steps, but the markers keep those tones.

… banner

The failed-deployment recovery becomes a full-width danger status block (UX spec 3.4, plan A1):
the label names the failed version, the code ends the message's first sentence, the title is
one --text-lg line, and the actions are buttons with one primary (Deploy again where the
message says to deploy again, else the failed version's Logs). At phone width a status block's
actions stack full width. Deployment step tiles become hairline inner cards; only a failed step
keeps its tone's wash.
@freeqaz
freeqaz requested a review from a team as a code owner October 20, 2026 01:45
@clawsweeper

clawsweeper Bot commented Oct 20, 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.

@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. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-environment Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. labels Oct 20, 2026
@clawsweeper

clawsweeper Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge.

What this changes

This PR presents failed deployments as danger status blocks with the failed version, inline error code, and responsive recovery buttons.

Example: Version v7 fails with CONVERGENCE_DEADLINE_EXCEEDED while v6 remains selected.

  • Before: A beige recovery card omits the error code and shows a compact Logs link at phone width.
  • After: A danger block names v7, includes the error code, and shows Open v7 Logs as a full-width primary action at phone width.

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) Focused presentation change with direct visual evidence, meaningful extensions to existing browser coverage, and no actionable findings.
Proof confidence 🐚 platinum hermit (4/6) ✨ media proof bonus Sufficient (screenshot): Inspected desktop and phone screenshots exercise the production console rendering in Storybook with simulated deployment responses and show the changed block, code, tiles, and responsive action; linked recordings could not be independently inspected because this review environment blocks their host.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Product

Kind: Bug fix · Worth it: Yes · Fix scope: Complete
User problem: The failed-deployment card obscures which version failed and leaves its error code in the lower deployment details.
Reason: The collaborator-authored direction improves failure recognition and phone recovery controls within the existing console design.

Merge readiness

✅ Ready for maintainer review

Keep open: this collaborator-authored PR delivers a distinct presentation improvement, and the reviewed diff introduces no actionable correctness or security defect.

Priority: P3
Reviewed head: 12aab2f906414f99fd0755771582f3c143f22343

Before merge

None.

Findings

None.

Agent review details

How this fits together

The console renders authorized deployment records and caller permissions into Agent status and recovery navigation; the existing API continues to authorize the destination operations.

flowchart TD
  A[Deployment API] --> B[Agent detail renderer]
  B --> C[Failure status block]
  D[Shared status and button styles] --> C
  C --> E[Logs or version draft]
Loading

Technical review

Best possible solution:

Use the shared status and button styles while retaining the existing recovery decisions, permission gates, and quiet polling behavior.

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

The pinned main source renders the older recovery card without the inline error code; supplied before/after screenshots independently show that presentation difference.

Is this the best way to solve the issue?

The change uses existing presentation owners, removes card-local button styling, and preserves recovery behavior without adding a parallel implementation.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 384fe535f69b.

Provenance checked

  • Failed-deployment recovery presentation changes intended behavior with a stated reason (4bf2532: Put failed-version recovery on the first screen while separating selected version, recorded deployment, and live serving.)
  • Recovery button styling keeps the original intent (90c63bf: Establish a shared button hierarchy with one primary action and visible secondary edges.)
  • Deployment step tiles changes intended behavior with a stated reason (7c3ecbf: Show durable deployment work as a three-step pipeline without implying verified live serving.)

Testing

Proof path: shipped entry point.

Security

None.

Evidence

What I checked:

Likely related people:

  • Free Wortley: Raw commit 6ce2de8 adds apps/controller/src/console/agents/detail.mjs:2015 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: 6ce2de8f8b26; files: apps/controller/src/console/agents/detail.mjs)
  • stevenlee-oai: Raw commit 7c3ecbf adds apps/controller/src/console/console.css:635 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: medium; commits: 7c3ecbfce4fa; files: apps/controller/src/console/console.css)

Labels

Label changes:

No label changes.

Label justifications:

  • P3: This is a low-risk console presentation improvement; recovery actions already exist on main.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • 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.

History

Review history (2 earlier review cycles)
  • reviewed 2026-10-20T02:01:02.269Z sha fd7d66e :: needs changes before merge. :: [P3] Update the existing Storybook recovery walkthroughs
  • reviewed 2026-10-20T02:17:17.086Z sha b8546c3 :: needs maintainer review before merge. :: none

Reviewed October 19, 2026, 10:43 PM ET / October 20, 2026, 02:43 UTC (Revision 3).

The New version failed stories and the status block workflow now describe the danger block's
label, inline code, single primary, phone stacking and the step tiles.
@freeqaz

freeqaz commented Oct 20, 2026

Copy link
Copy Markdown
Collaborator Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@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. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. proof: sufficient Contributor real behavior proof is sufficient. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. clawsweeper:intake:bug Preliminary submission classification; full source review pending. labels Oct 20, 2026
@clawsweeper clawsweeper Bot removed clawsweeper:intake:needs-environment Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. labels Oct 20, 2026
@freeqaz

freeqaz commented Oct 20, 2026

Copy link
Copy Markdown
Collaborator Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@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. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. and removed clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-environment Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. labels Oct 20, 2026
@freeqaz
freeqaz merged commit 8abd298 into main Oct 20, 2026
66 checks passed
@freeqaz
freeqaz deleted the ux-p4 branch October 20, 2026 02:53
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: 🐚 platinum hermit Good normal PR readiness with ordinary 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.

1 participant