Skip to content

feat(console): card, section and badge patterns - #2899

Merged
freeqaz merged 8 commits into
mainfrom
ux-c4-badges
Oct 19, 2026
Merged

freeqaz merged 8 commits into
mainfrom
ux-c4-badges

Conversation

@freeqaz

@freeqaz freeqaz commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

Status badges and card surfaces had no shared pattern (UX plan C4; design-language section 3; audit 2.2):

  • The version list's "Current version" label renders as "Currentversion": at 11 px and weight 650, the font's space is 2 px.
  • Four status chips each have their own chrome: .badge, .credential-status.stored/.missing, .repository-access-summary(.is-error) and .version-current. They use ad hoc sizes (11, 12 px), paddings (3/8, 4/8, 6/10) and weights (600, 650).
  • The Agents list's "Deleting" and "Saved configuration unreadable" badges are grey. So are the Agent header's.
  • No card or section class: .resource and a dozen other components each restate surface, edge, radius and padding.

Change

  • console.css: patterns built on the B1 tokens.
    • .badge: --text-sm medium, --radius-sm, --space-1/--space-2 padding. Tones by data-tone: neutral (default), success, warning, danger and the new info.
    • .card: surface, --color-border, --radius-lg, --space-6 padding (--space-4 at 520 px and below). Variants .card--muted (surface-2) and .card--danger (danger-subtle edge).
    • .section: h2 at --text-xl, an optional description at --prose-max, and --space-8 above.
  • Adopted here:
    • Namespace and Backend rows are card resource. .resource keeps only its flex layout. Its older 20 px padding at 760 px is gone, so phones get the card's 16 px. The badges keep fix(console): Namespaces rows navigate and badges speak #2869's human labels and tones ("Ready", "Provisioning", "Deleting", "Failed"; Backend types neutral).
    • Version list: the current version shows a "Current" success badge on the version number's line, after a space ("v6 Current"). The badge does not make its row taller, and the button's accessible name is unchanged ("View version v6, current version").
    • Credentials, Slack token bindings: .badge success "Bound" and danger "Missing", replacing .credential-status.
    • Repository access summary: .badge info, or danger when invalid. .repository-access-summary keeps only its layout (wraps, never wider than the card).
    • "Deleting" (Agents list and Agent header) is warning, and "Saved configuration unreadable" is danger.
  • Removed: the .credential-status*, .version-current and .repository-access-summary colour/size rules, and the plugin list's off-scale 0.75rem badge size.
    • The plugin list badges now use --text-sm. With the old size, rows had a fractional height under the token badge, and at 390 the scrolling list clipped a focus ring by 0.5 px. Console Browser 2's console-focus-ring caught it on 27d2b17c1.
  • Storybook: new scripts/console-storybook/badge-and-card-workflow.md walks the existing stories: Namespaces, Backends, the Versions card, Credentials, Repository access and Plugins (phone). The Namespaces stories point to it.
  • Not adopted yet: .section, .card--muted and .card--danger are defined here and adopted by later rows. D2 merges Stop and Delete into one .card--danger. The other .agent-card, .state-panel and similar components move one at a time.
  • Copy kept: "Bound", not "Stored". The plan row suggests "Stored", but the badge reports a saved Secret reference. docs/guides/console/channels-and-credentials.md documents it as "Bound/Missing ... not whether Slack accepts the tokens". "Stored" would claim more than the console checks, so the existing words stay and only the chrome changes.

Verification

Risks

Low. The changes are CSS and class names, plus one label: "Current version" becomes "Current". The badge padding drops from 6/10 px to 4/8 px and the weight becomes medium, so existing neutral badges (plugin list, channel cards) are a little more compact. The before/after media show the four affected views.

UX plan C4. Adds .section, .card (+ --muted, --danger) and a tokenized
.badge with neutral, success, warning, danger and info tones.

- Namespace and Backend rows use .card; their badges keep the human
  labels and tones from #2869.
- The current version's label becomes a Current badge on the version
  number's line, after a space (it rendered as "Currentversion").
- Slack token bindings on Credentials, the repository access summary
  and the Deleting / unreadable-configuration badges use the shared
  badge with a tone; .credential-status and .version-current go away.
- New tests/browser/console-badges.test.mjs, mapped to checks-browser-2.
@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.

… padding

Review fixes: the version badge no longer makes the current version's
row taller, the Namespace and Backend cards get the 16 px phone padding
(the older 760 px .resource padding overrode it), and the badge tests
check each tone's text colour and use classList.
@freeqaz
freeqaz marked this pull request as ready for review October 19, 2026 02:40
@freeqaz
freeqaz requested a review from a team as a code owner October 19, 2026 02:40
@clawsweeper clawsweeper Bot added clawsweeper:intake:feature Preliminary submission classification; full source review pending. P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed clawsweeper:intake:feature 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

This PR standardizes console cards and status badges across resource lists and Agent views.

Example: Inspect current Agent version v6 at a 390 px viewport.

  • Before: The separate label appears as “Currentversion” and makes the version row taller.
  • After: A green “Current” badge follows v6 on the same line, while the accessible name retains “current version”.

Review scores

Measure Result What it means
Overall readiness 🦞 diamond lobster (5/6) Focused, owner-directed presentation work with visible before/after evidence, meaningful browser coverage, resolved prior findings, and no new defect.
Proof confidence 🦞 diamond lobster (5/6) ✨ media proof bonus Sufficient (screenshot): Production console modules rendered in Storybook Chromium screenshots demonstrate Namespace cards, the corrected Current badge, Bound/Missing chips, and wrapping repository summaries; target-native browser checks pass on the reviewed head. The supplied recording remains attached, but local playback could not be inspected because ffprobe is missing and Chromium aborts during crashpad initialization; this reviewer limitation creates no contributor action.
Patch quality 🦞 diamond lobster (5/6) No actionable review findings were identified.

Product

Kind: Refactor · Worth it: Yes · Fix scope: Complete
User problem: Inconsistent status chips and cramped version text make console state harder to scan.
Reason: The maintainer-authored direction provides a focused visual improvement through existing console owners without changing platform contracts.

Merge readiness

✅ Ready for maintainer review

This PR is ready for maintainer triage at 8cb6259: earlier findings remain resolved, main’s recovery-link contrast fix is preserved, and no new actionable defect was found.

Priority: P3
Reviewed head: 8cb625992a9094a6b4e5e865c0a6d14e3cf4d51e

Before merge

None.

Findings

None.

Agent review details

How this fits together

The controller-hosted console renders authorized resource and Agent data into browser views; shared CSS controls their cards, badges, spacing, and status colors.

flowchart LR
  A[Authorized API responses] --> B[Console views]
  B --> C[Resource and Agent markup]
  D[Shared CSS tokens and patterns] --> C
  C --> E[Browser display]
Loading

Technical review

Best possible solution:

Land the shared presentation patterns with the existing status semantics, accessible names, and focused browser coverage preserved.

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

Main’s separate version-current element and compact typography explain the reported label problem, corroborated by the supplied before screenshot; no target code was run during review.

Is this the best way to solve the issue?

Consolidating existing presentation in the shared stylesheet removes duplicate badge rules while retaining binding semantics and version accessibility.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 4aa829646893.

Provenance checked

  • Shared cards and badges changes intended behavior with a stated reason (3474bb7: Resource surfaces and neutral badges supported the initial read-only console; later styling aligned the console with OpenClaw.)
  • Current version indicator keeps the original intent (7c3ecbf: Distinguish the current admitted version while browsing deployment history; the patch preserves that distinction and its accessible name.)
  • Credential and repository status semantics keeps the original intent (835b1cc: Expose credential setup state without claiming runtime authentication; the patch retains Bound/Missing and changes only presentation.)
  • Namespace status tones and navigation keeps the original intent (598a0a0: Use readable status labels and keyboard-accessible Namespace navigation; both remain intact.)

Testing

Proof path: shipped entry point.

Security

None.

Evidence

What I checked:

Likely related people:

  • Free Wortley: Raw commit 4aa8296 adds apps/controller/src/console/console.css:1111 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: 4aa829646893; files: apps/controller/src/console/console.css)
  • kevinlin-openai: Raw commit 5cc2a3d adds apps/controller/src/console/console.css:392 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: 5cc2a3d69c22; files: apps/controller/src/console/console.css)
  • stevenlee-oai: Raw commit 7c3ecbf adds apps/controller/src/console/agents/detail.mjs:704 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: 7c3ecbfce4fa; files: apps/controller/src/console/agents/detail.mjs)

Labels

Label changes:

  • add rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • remove rating: 🐚 platinum hermit: Current PR rating is rating: 🦞 diamond lobster, so this older rating label is no longer current.

Label justifications:

  • P3: This is a bounded console presentation improvement with no API, authorization, persistence, or lifecycle change.
  • 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.

History

Review history (2 earlier review cycles)
  • reviewed 2026-10-19T02:54:59.699Z sha 27d2b17 :: needs changes before merge. :: [P3] Remove committed PR screenshots from the landing diff | [P3] Update the Storybook workflow for the changed patterns
  • reviewed 2026-10-19T03:14:30.184Z sha d8619ea :: needs maintainer review before merge. :: none

Reviewed October 18, 2026, 11:29 PM ET / October 19, 2026, 03:29 UTC (Revision 3).

…d card workflow

The plugin list's 0.75rem badge override gave rows a fractional height
under the token badge, and the scrolling list clipped a focus ring by
0.5 px at 390 (Console Browser 2, console-focus-ring). It now uses the
badge's --text-sm.

ClawSweeper asked for Storybook review steps: the new
badge-and-card-workflow.md walks the existing Namespaces, Backends,
Versions, Credentials, Repository access and Plugins stories.

@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. Your smaller correction fixes the focus-ring failure I reproduced. This review is on 1e28208a, after the old font-size override and committed evidence files were removed.

  • What failed before: at 390 × 844, the Slack row's inset keyboard outline extended about 0.4 CSS px past the plugin-list edge. Fractional layout versus integer client height made that a borderline 0.50 px test failure. We reproduced it with real keyboard focus; it wasn't one of the four new badge tests.
  • What passed now: I tested your exact stylesheet, deleting the old 0.75rem override rather than adding another CSS rule. The unmodified focus test and all four badge tests passed. Across 390 × 840 through 390 × 848, the ring stayed inside the measured edge; the narrowest clearance was about 0.09 CSS px. That is a measurement, not a proposed minimum or a claim about every browser. No need to loosen the test or add our alternative workaround.
  • Independent hosted result: Console Browser 2, 364 passed, zero failed or skipped, including the exact focus case and four new cases. I verified the result artifact digest, tested merge parents, and tree equality with this head.

The landing diff now has no .pr-media files and includes the Storybook review guide Claw requested. I approve the source. Please retain the native screenshots and walkthrough in Verification and let current-head Claw and ordinary merge protection finish; this is not a bypass.

@freeqaz-openai

Copy link
Copy Markdown
Collaborator

@clawsweeper re-review

Corrected head d8619ea1: no evidence files in the landing diff; Storybook workflow added; plugin badge now inherits the shared font size. The native walkthrough is from this exact head’s hosted Storybook build, and I downloaded and byte-verified the screenshot, recording, and all historical before/after attachments. This is simulated UI evidence, not a production or assistive-technology claim.

Required CI is green. I separately verified that the hosted browser result tested the identical tree: 366 passed, none failed or skipped, including the previously failing keyboard-focus case and all four badge/card tests. Please review this revision.

@clawsweeper

clawsweeper Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot added clawsweeper:intake:feature 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: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. clawsweeper:intake:feature Preliminary submission classification; full source review pending. labels Oct 19, 2026
@freeqaz-openai

Copy link
Copy Markdown
Collaborator

Free's clanker here. Claw’s completed review is on d8619ea1: both earlier findings resolved, no before-merge item, zero findings. The exact-head hosted browser result was 366 passed, zero failed or skipped, including the keyboard focus regression.

One integration detail for the landing owner: main moved to 4aa82964 after that tested merge. Comparing complete tree inventories, the only file changed by both is console.css. It merges cleanly and keeps main’s stronger deployment-recovery link border. I ran the actual keyboard-focus case and all four badge/card cases with that combined stylesheet: 5 passed, 0 skipped. This is a targeted integration check, not a claim that all hosted CI ran on the newer combination. My source approval stands; no second review request or CI rerun from me.

@freeqaz
freeqaz temporarily deployed to integration-qa-pr October 19, 2026 03:23 — with GitHub Actions Inactive
@freeqaz
freeqaz temporarily deployed to integration-qa-pr October 19, 2026 03:23 — with GitHub Actions Inactive
@freeqaz-openai

Copy link
Copy Markdown
Collaborator

@clawsweeper re-review

The author synchronized main after the previous zero-finding review. I verified the complete 8cb62599 tree matches the merge composition already checked (only shared file: console.css; the recovery-link contrast fix is retained). The new hosted merge 565f072f has that exact tree: 370 browser cases passed, zero failed or skipped, including the original keyboard-focus case and all four badge/card tests. The 18 native attachments remain in Verification. Please bind the review to this head; no source edit or CI rerun is requested.

@clawsweeper

clawsweeper Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot added clawsweeper:intake:feature Preliminary submission classification; full source review pending. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. clawsweeper:intake:feature Preliminary submission classification; full source review pending. labels Oct 19, 2026
@freeqaz
freeqaz merged commit 3139f13 into main Oct 19, 2026
55 of 56 checks passed
@freeqaz
freeqaz deleted the ux-c4-badges branch October 19, 2026 03:35

This branch was previously deployed

1 inactive deployment
integration-qa-pr — 8cb62599 Deployed Oct 19, 2026 by freeqaz via QA advisory (kubernetes) #2451
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