Repository navigation
fix(console): match Chromium's break points for long Agent names - #2916
Conversation
The unbroken-name rule treated a hyphen, dash, soft hyphen or wide space before closing punctuation as a break and missed word-initial hyphens, so some names stayed unmarked and widened the table. It also kept a digit-group case Chromium does not need (1000-1001 breaks after the hyphen) and counted combining marks, ideographs, kana, Hangul and emoji as one run. Finding 1982.
…ints The digit-group story described a non-break that Chromium does not make; a new story shows a name whose hyphens sit before closing punctuation.
no-misleading-character-class flags a zero-width joiner between two characters of a class.
|
🦞👀 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. |
Review: a hyphen-minus pair breaks, a word-initial hyphen-minus holds a digit but not a letter, a word-initial hyphen or dash holds a letter after a space, a combining mark between a break character and closing punctuation keeps the hold, and the hyphen a line breaks after stays on the line, so a 20-letter run plus its hyphen is 21. Rows for each, plus the right double quote; the browser count skips hanging spaces.
|
@freeqaz make sure you're waiting for clawsweeper feedback before landing PRs. |
|
Codex review: needs maintainer review before merge. What this changesThis PR refines long Agent name classification and adds browser and Storybook coverage for Chromium line breaks. Example: An Agent has a 200-character name built from repeated abc-.5 groups at a 1440 px viewport.
Review scores
ProductKind: Bug fix · Worth it: Yes · Fix scope: Complete Merge readiness✅ Ready for maintainer review Keep this PR open: it fixes a demonstrated layout bug still present on main, addresses the prior joined-ideograph finding, and introduces no definite code defect found in this review. Priority: P2 Before mergeNone. FindingsNone. Tests
Agent review detailsHow this fits togetherThe console Agents list receives Agent names from API responses, classifies unbreakable runs, and applies an existing CSS class that bounds desktop name links. flowchart LR
A[Agent API response] --> B[Agents list renderer]
B --> C[Unbroken run classifier]
C --> D[Name link class]
D --> E[Existing console CSS]
E --> F[Browser table layout]
Technical reviewBest possible solution: Retain the focused correction within the existing classifier and bounded-link CSS owner. Do we have a high-confidence way to reproduce the issue? Current main's classifier and the supplied before screenshot establish the punctuation-name failure; no target code or tests were run during this review. Is this the best way to solve the issue? The change preserves the existing layout owner and threshold while correcting measured break rules, with independent browser-layout assertions rather than a copied classifier oracle. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 5963327b74b6. Provenance checked
TestingProof path: in-process harness. SecurityNone. EvidenceWhat I checked:
Likely related people:
Review metrics
LabelsLabel changes:
Label justifications:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
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 (1 earlier review cycle)
Reviewed October 19, 2026, 5:00 AM ET / 09:00 UTC (Revision 2). |
A word joiner or zero-width joiner forbids a break before it, so a name of ideographs joined by word joiners is one unbreakable run; the ideograph rule had ended the run at each one. Rows for joined ideographs and for emoji family sequences, which still break between sequences.
|
@clawsweeper re-review |
|
🦞👀 Re-review progress:
|
Problem
The Agents list marks a name with a run of 21 or more characters that cannot wrap, so the name breaks anywhere inside the width of its ID instead of setting the table's width (finding 1955, #2906). Measured in Chromium, the rule disagreed with the browser both ways (finding 1982):
. , : ; ) ] } / ! ’ ” », a joiner or a word joiner) is not a break, but the rule treated it as one. "abc-.5" repeated stayed unmarked and pushed the table to 1949 px inside a 1101 px scroller in Storybook.Change
apps/controller/src/console/agents/list.mjs: the rule is built from named parts, each one a measured Chromium break point:$, an Arabic-Indic digit, or a hyphen, figure dash or en dash. It does not hold another hyphen-minus.-5). Between digits it breaks (1000-1001), so the digit-group case from fix(console): badge tones, danger tone and long-name wrapping #2906 is removed.tests/browser/console-agents-list-return.test.mjs: one row per measured case. The digit-group row now expects unmarked. Each row is checked two ways: against the rule, and against the browser's own layout. The test measures the longest run the browser keeps on one line in the link's font, and it must be 21 or more exactly when the name is marked. The 1440 px table must still not scroll sideways.UX plan finding fix (bughunt-126, finding 1982).
Verification
tests/browser/console-agents-list-return.test.mjs: 18/18. On the final head, the whole file was pinned 20/20 at 2 CPUs (taskset 2,3).git merge-tree, conflict hunks main → this head): fix(console): finish moving errors and notices to the status block #2912 0→0, fix(console): let the create preflight carry any configuration both creates accept #2833 0→0, feat(console): show the authorized native Gateway people roster #2596 0→0, feat(console): stop and delete Agents from the Agents list #2524 4→4, feat: add per-agent sandbox network policies and denial review #2599 33→33, RFC and implementation: managed outbound HTTPS for dedicated Gateways #2518 11→11, fix(console): distinguish stale runtime status from loss of access #2505 2→2, fix(console): keep followed logs steady and report the first output #2502 6→6, Add OCE policy simulation and tester for network and plugin actions #2445 4→4, fix: preserve native plugin permissions across Harness selection and admission #2258 3→3, fix(console): grant Agent access to accepted Configuration Secrets #2255 5→5, Support custom Installation profiles and readable Preset starters #2253 3→3, feat(auth): sign people in to occ with a device code (rfc-0019) #1619 17→17, feat: assign configured OpenClaw roles to Agent users #906 6→6, docs(specs): propose rfc-0019 for repository options without a repository driver #878 2→2. No new hunks.Media (Storybook, Pages/Agents):
At 1440 the punctuation name scrolled the table sideways on main (scrollWidth 1949 in a 1101 px scroller) and fits after (1101/1101). The digit-group name is no longer boxed: it wraps at its hyphens. The 390 layouts are unchanged (stacked rows break names anywhere at phone width). Stories: Pages/Agents "Long name with punctuation after hyphens" (new) and "Long name of digit groups".
Risks