Repository navigation
feat(console): card, section and badge patterns - #2899
Conversation
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.
|
🦞👀 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. |
… 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.
|
Codex review: needs maintainer review before merge. What this changesThis PR standardizes console cards and status badges across resource lists and Agent views. Example: Inspect current Agent version v6 at a 390 px viewport.
Review scores
ProductKind: Refactor · Worth it: Yes · Fix scope: Complete 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 Before mergeNone. FindingsNone. Agent review detailsHow this fits togetherThe 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]
Technical reviewBest 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
TestingProof path: shipped entry point. 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 HistoryReview history (2 earlier review cycles)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
left a comment
There was a problem hiding this comment.
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.75removerride 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.
|
@clawsweeper re-review Corrected head 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. |
|
🦞👀 Re-review progress:
|
|
Free's clanker here. Claw’s completed review is on One integration detail for the landing owner: main moved to |
|
@clawsweeper re-review The author synchronized main after the previous zero-finding review. I verified the complete |
|
🦞👀 Re-review progress:
|
Problem
Status badges and card surfaces had no shared pattern (UX plan C4; design-language section 3; audit 2.2):
.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)..resourceand a dozen other components each restate surface, edge, radius and padding.Change
console.css: patterns built on the B1 tokens..badge:--text-smmedium,--radius-sm,--space-1/--space-2padding. Tones bydata-tone: neutral (default), success, warning, danger and the new info..card: surface,--color-border,--radius-lg,--space-6padding (--space-4at 520 px and below). Variants.card--muted(surface-2) and.card--danger(danger-subtle edge)..section:h2at--text-xl, an optional description at--prose-max, and--space-8above.card resource..resourcekeeps 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)..badgesuccess "Bound" and danger "Missing", replacing.credential-status..badgeinfo, or danger when invalid..repository-access-summarykeeps only its layout (wraps, never wider than the card)..credential-status*,.version-currentand.repository-access-summarycolour/size rules, and the plugin list's off-scale0.75rembadge size.--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'sconsole-focus-ringcaught it on27d2b17c1.scripts/console-storybook/badge-and-card-workflow.mdwalks the existing stories: Namespaces, Backends, the Versions card, Credentials, Repository access and Plugins (phone). The Namespaces stories point to it..section,.card--mutedand.card--dangerare defined here and adopted by later rows. D2 merges Stop and Delete into one.card--danger. The other.agent-card,.state-paneland similar components move one at a time.docs/guides/console/channels-and-credentials.mddocuments 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
New
tests/browser/console-badges.test.mjs, mapped tochecks-browser-2.json(run-tests.mjs audit: no issues). Every test fails on main:.badge"Current" withdata-tone="success", is tinted, sits on the version number's line at least 4 px after it, and the rendered text starts withv1 Current..badge. Each badge's text colour is checked against its tone's token..card(14 px radius, 24 px padding, 1 px edge), and the "Ready" badge is success.console-badges.test.mjsran 20/20 at 2 CPUs (taskset -c 8-9), before and after the review fixes. After the plugin badge fix,console-badgesandconsole-focus-ringtogether ran 20/20. On the old head,console-focus-ringfailed locally exactly as it did in CI.These related files ran once, 184/184 passed:
console.test.mjs(fix(console): Namespaces rows navigate and badges speak #2869's Namespace badge test, unchanged),console-focus-ring,console-agent-repositories,console-agent-saves,console-agent-detailandconsole-agents. No existinggetByTexttest needed a change, because no label changed except the version badge's.Prettier and eslint are clean on the touched files.
ClawSweeper (on
27d2b17c1): both items are done. The media is out of the diff, and the Storybook workflow has been added.Internal review: approve. Its low items are applied: the badge no longer grows the current version's row, the phone card padding now takes effect, and the tests check tone colours and use
classList. Two items are left for later rows:.card--dangeruses the design-language "danger-subtle edge", which is fainter than--color-border. D2, which first uses it, should give it a visible edge.Media: Storybook stories
namespaces,deploymentFailed(Versions card),credentialsSlackPartial(Slack token bindings) andcreateRepositoriesSelected(Repository access), before and after, at 1440 and 390. For "before", the same stories were served main'sconsole.css,shell.mjs,detail.mjs,list.mjs,credentials.mjsandrepositories.mjs. Media commit27d2b17c1. The media was removed in1e28208aa, so it is not in the landing diff. These are simulated UI fixtures: they show rendering, not backend state.Current-head walkthrough: Watch the nine-second recording · 390 px Namespaces view.
Recorded in sandboxed Chromium from this head’s successful hosted Storybook build, with no external browser requests or credentials. The fixture shows Ready/Provisioning, the Current badge and keyboard focus, Bound/Missing token references, repository access summaries, and 16 px card padding at a 390 px viewport. The before/after images below are the earlier captures already identified above; all media are native attachments outside the landing diff.
Open PRs: I ran a 3-way
git merge-treeagainst every open PR touching the console (feat(console): stop and delete Agents from the Agents list #2524, feat: assign configured OpenClaw roles to Agent users #906, fix(console): Agents list wraps long names on wide screens; phone sheets stay above the keyboard #2893, test(console): kill surviving mutants in the harness lock, JSON scan and recovery card #2892, fix(console): keep a focused workspace caret on reread and quiet plugin live regions #2860, feat: add per-agent sandbox network policies and denial review #2599, feat(console): show the authorized native Gateway people roster #2596, Add OCE policy simulation and tester for network and plugin actions #2445, Draft implementation: managed outbound HTTPS for dedicated Gateways #2518, fix(console): distinguish stale runtime status from loss of access #2505, fix(console): keep followed logs steady and report the first output #2502, fix(console): let the create preflight carry any configuration both creates accept #2833, fix: preserve native plugin permissions across Harness selection and admission #2258, fix(console): grant Agent access to accepted Configuration Secrets #2255, Support custom Installation profiles and readable Preset starters #2253, feat(auth): sign people in to occ with a device code (rfc-0019) #1619, docs(specs): propose rfc-0019 for repository options without a repository driver #878, feat: add Agent workload tags #115). Each PR's conflict-hunk count is the same against this head as against main. This branch adds no new conflict hunk, and no call site had to be skipped.origin/mainis merged in: fix(console): Create Agent shows its own busy state #2898, then test(console): kill surviving mutants in the harness lock, JSON scan and recovery card #2892 at8cb625992. On the merged trees,console-button-hierarchy,console-badgesandconsole-focus-ringpass.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.