fix(ui): give roster rows their avatar-text gap and add presence mock fixtures#111689
Conversation
|
Codex review: needs maintainer review before merge. Reviewed July 20, 2026, 2:03 AM ET / 06:03 UTC. Summary PR surface: Source +44, Other +7. Total +51 across 3 files. Reproducibility: no. high-confidence independent reproduction run was completed in this read-only review. The supplied source explanation identifies the Review metrics: none identified. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Keep the rendered-element spacing fix and reusable mock presence fixtures, then land only after a maintainer confirms the refreshed merge result on current Do we have a high-confidence way to reproduce the issue? No high-confidence independent reproduction run was completed in this read-only review. The supplied source explanation identifies the Is this the best way to solve the issue? Yes, based on the supplied diff: applying spacing to the rendered AGENTS.md: unclear because the file could not be read completely. Codex review notes: model internal, reasoning high; reviewed against 8c9ecd924238. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source +44, Other +7. Total +51 across 3 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
|
Re the rank-up move (refresh against current |
|
Merged via squash.
|
… fixtures (openclaw#111689) * fix(ui): add avatar-text gap in roster menu and presence mock fixtures * refactor(ui): keep presence snapshot helper out of the connect auth hunk
What Problem This Solves
Follow-up to #111668: the redesigned who's-online roster rendered with no gap between the avatar and the name/email text, so rows read as cramped and unfinished. Root cause: Web Awesome's dropdown-item spaces its icon slot via
#icon ::slotted(*) { margin-inline-end: 0.75em }, but the slottedopenclaw-viewer-avatarhost isdisplay: contents— it generates no box, so the margin silently never applies.Separately, the mock harness could not exercise any presence surface: its
system-presencefixtures carry no user identities, so the footer facepile and roster only rendered against a real gateway (the #111668 screenshots needed manual property injection).Why This Change Was Made
ui/src/styles/layout.css: the roster row now owns its avatar-to-text gap (margin-inline-end: 10pxon the light-DOM.viewer-avatar, where a real box exists), with a comment explaining why the slot margin can't do it; row padding bumped 5px → 6px vertical.ui/src/test-helpers/control-ui-e2e.ts: new optional scenario fieldpresenceUsers— the shared mock gateway now emits apresencelist in the connect snapshot, with theself-flagged entry adopting the connecting client'sinstanceIdso "you" resolves. Empty by default; existing scenarios and tests are unaffected.scripts/control-ui-mock-dev.ts: the dev harness ships three presence users (self + named + email-only), lighting up the footer identity, facepile, and roster from fixtures alone — no injection needed to develop or verify presence UI.User Impact
Roster rows get proper breathing room between avatar and text in both themes. No runtime behavior change outside CSS; the rest is test/dev tooling.
Evidence
Fixture-driven captures (no property injection) from
scripts/control-ui-mock-dev.ts:node scripts/run-vitest.mjs ui/src/test-helpers/control-ui-e2e.mock-gateway.test.ts ui/src/test-helpers/control-ui-e2e.test.ts ui/src/components/viewer-facepile.test.ts— 14/14 passed.oxfmt --checkclean on all three files;git diff --checkclean.gpt-5.6-sol, branch vs origin/main) — clean, no findings.