fix(profiles): remove redundant presence status row - #394
Conversation
Keep presence on the avatar with an accessible label across profile tabs, and preserve custom status text. Update the existing profile checks and presence documentation. Signed-off-by: Matt Toohey <contact@matttoohey.com>
737437b to
77d05db
Compare
wesbillman
left a comment
There was a problem hiding this comment.
Star Lord automated source review (via Wes’s account)
Reviewed head 77d05db555663faa80e98a756c3b023e5efdbd82 against base c6b47a5837fd8912dc84d98bb959714a23d70818.
One actionable accessibility finding, attached inline. No additional production or public-material findings in the reviewed scope. This is a COMMENT review, not approval or a request-changes review; the human decides disposition.
Source assessment
- The existing profile-priority subscription remains mounted (
ProfilePanel.tsx:186); removing the second consumer does not remove profile demand or introduce a new presence owner. - The avatar retains an accessible status name across tabs and leaves unknown evidence unbadged. The separate custom emoji/text status remains rendered through
UserStatusDisplay. - Existing component/browser assertions were updated without adding or removing browser cases. The assertions cover the new accessible name, missing badge for unknown evidence, online/away observations, and tab persistence. Error/retry and success/cancel focus paths have no changed interactive elements in this diff.
- Public repository surface checked: all four changed files, the sole commit message, PR description, and all four attached fixture screenshots. No disclosure issue identified there. The screenshots document older explicitly named revisions, not runtime evidence at this reviewed head.
Scores: minimalness 9/10; elegance 9/10; correctness 8/10 until the inline non-color presence cue regression is resolved. Keep the removal of the separate row; the repair need not restore duplicate layout or add another subscription.
Validation limits
Source-only review of 22 immutable, Git-blob-verified files; no dirty checkout inputs, code execution, tests, installs, or app launches. The single hosted-check snapshot at this head showed DCO, required CI, JavaScript, Rust/tool integration, browser measurements and all Chromium/WebKit journey shards successful; Windows native validation was skipped. Those checks and the submitted screenshots do not establish current-head attended/native/live-relay behavior or resolve the accessibility finding. Human testing and fail-before/pass-after evidence remain deferred as the PR states.
| <PresenceIndicator | ||
| presence={session.presence} | ||
| pubkey={pubkey} | ||
| profile | ||
| /> |
There was a problem hiding this comment.
[P2] Keep a non-color presence cue when removing the separate row
This removes the profile’s only visible text/symbol distinction between presence states. The remaining Avatar renders the same dot geometry for online and away; components.css:359–385 changes only its fill/outline colors, and Avatar.tsx:73–86 puts the status in an aria-label while hiding the dot from accessibility. There is no visible status label or disclosure on this avatar. A sighted user who cannot distinguish the status colors can no longer tell whether this person is online or away; an accessible name alone does not supply that visual information. This regresses the non-color cue previously provided by PresenceIndicator and conflicts with the WCAG 2.1 AA target (block/buzz/VISION.md, accessibility requirement; WCAG 1.4.1).
Preserve the intended row removal, but expose the status without relying on color—for example, compact visible status text beside the avatar using the existing presence value. Keep the single subscription and unknown-without-status behavior, and update the existing component coverage for the replacement cue. The shared design’s solid badge colors can remain unchanged.
There was a problem hiding this comment.
Worth considering ^^
Signed-off-by: Star Lord <b89298dbe87c6b3fd8a425b535d9d161f23c88d555a47925ae0b04dfe02b201e@buzz.block.builderlab.xyz>
wesbillman
left a comment
There was a problem hiding this comment.
One public-metadata change needed. The prior non-color presence finding is resolved; no further production-code changes requested in this follow-up.
- [P2] Use public-safe author/committer metadata for the repair commit. Commit
9aaed7a1adds an internal relay hostname and agent-account identifier in bothauthor.emailandcommitter.email, exposing deployment/account details in public Git metadata. Use an approved public contribution address while preserving the actual author and committer identities. The validSigned-off-byattribution is explicitly exempt; this finding does not request its removal or substitution of the human as author.
Star Lord’s automated source review via Wes’s account: head 9aaed7a154114b5b30e36881b67b0f5e3e30d826, base 986f68814fbc68bde053bc5e32ceb738e42b18b3. Source-only; no tests or app execution. The hosted snapshot has a failed WebKit 5/6 shard and required CI; cause unestablished. Current-head human/native/live-relay acceptance remains unverified. This is a COMMENT review, not approval.
The WebKit new-message journey failed on this branch because the separate send-reveal frame could run before a restore frame on DM remount. Main already moved reveal into the restore effect (#393). Signed-off-by: Rocket <0c41329ade659e01801116549bc617351689892a382bc864a1186dc9191293a7@buzz.block.builderlab.xyz>
|
Integrated main through |
* origin/main: (27 commits) Let plugin pages publish NIP-AR artifacts and embed the host thread view (#434) test(app): migrate entity-navigation test off removed buzz://open locator API (#463) Show agent activity in navigation (#423) test(browser): hold motion when it commits, not on its start event (#459) fix(navigation): ignore unknown query parameters on Buzz links and remove the buzz://open locator (#457) feat(design-system): distinguish controls on floating surfaces (#429) feat(native): add community extras and media preparation (#450) Clone inventory identities through reviewed text and fresh identity creation (#289) feat(communities): add right-click actions to the community rail (#400) fix(messages): keep a send reveal pending until its scroll runs (#454) fix(messages): reserve a stable scrollbar gutter on the channel feed (#451) fix(sidebar): list plugin pages as sidebar rows via an opt-in primary flag (#401) feat(channels): surface canvas content in channel settings (#426) fix(profiles): remove redundant presence status row (#394) test(browser): count live retries once the page handles startup controls (#443) feat(composer): host-owned resource links for the Projects picker (#445) feat: support native read state and recent channel activity (#444) feat(native): serve relay media and uploads in packaged builds (#433) feat(channels): suggest joined channels in the composer (#446) feat: support native agent activity, library, memories, and community resolution (#441) ... Signed-off-by: Codex <noreply@openai.com>
Summary
986f68814fbc68bde053bc5e32ceb738e42b18b3, including the current profile/agent-avatar behavior.Validation at
9aaed7a154114b5b30e36881b67b0f5e3e30d826presence.spec.mjsandprofiles.spec.mjs: 26/26 Chromium/WebKit cases passed. Existing cases updated; no browser cases added or removed. These exercise real profile wiring, live fixture updates and tab transitions; component coverage checks non-color text, away/offline and unknown suppression.986f6881. Main subsequently advanced to32a33eeewith shell/sidebar changes; clean merge-tree inspection is not validation of that newer integration.Acceptance still open
Draft pending hosted CI, explicit human app testing, and any necessary newer-main integration validation. Native/live-relay behavior was not exercised by this pass; fixture browser coverage is not human acceptance. No approval or merge is being asserted.
To try: open a community profile and switch Info → Channels → Info. Active/Away/Offline should remain visible beside the identity, unknown should show no presence text, custom status should remain in Info, and an agent's thinking state should remain accessible. Confirm the compact identity layout at narrow width.
The screenshots below show earlier revisions, not the new visible-text repair.
Historical before / after screenshots (predate the repair)
Captured from clean detached worktrees at the hosted PR merge base
df4b735c8bfa98018ee4e65de60b5fb8fd0e6f31(before) and hosted PR head737437bed997531c42be0d34c18580cac53a2b7a(after). Each image shows Alice Fixture → Info → Profile details, cropped from the same 1440 × 950 viewport with synthetic data. The generated fixture public keys differ between runs.Screenshot verification at these revisions:
profile snapshot and same-socket renewalcapture case passed in Chromium and WebKit for both revisions (4/4); all four images were visually inspected. Each siblingevidence.jsonrecords the expected clean revision and no page or console errors.Alice Fixture avatar, onlinelabel and online badge persist through Channels → Info, and Mic → Info retains 📅 In a meeting in the source fixture.Current main reconciliation
Integrated main through
e304e3f5in675c82fbwith no conflicts or new production edits. Hosted logs identified the failing WebKit case as the shared new-DM send/restore ordering bug already fixed in main by #393. Full Vitest (449 files / 5,442 tests), complete new-message and presence files (18 Chromium/WebKit cases), and ten WebKit repetitions of the failing case pass. Required local gates pass. This is hosted-failure → integrated-pass evidence, not a local red reproduction. Hosted checks and native/human acceptance remain pending; newer mainf778cb40is outside this local evidence and touches none of the PR’s four feature files. No approval or merge asserted.