Skip to content

fix(profiles): remove redundant presence status row - #394

Merged
wesbillman merged 3 commits into
mainfrom
remove-redundant-status-on-profile
Sep 30, 2026
Merged

wesbillman merged 3 commits into
mainfrom
remove-redundant-status-on-profile

Conversation

@matt2e

@matt2e matt2e commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Remove the redundant presence row from profile details while preserving custom user status.
  • Preserve a non-color cue: compact Active/Away/Offline text under the profile name on every tab, using the existing presence subscription. Unknown stays suppressed.
  • Keep the avatar named on every tab so agent thinking remains accessible; remove obsolete Info-only description wiring.
  • Integrate main at 986f68814fbc68bde053bc5e32ceb738e42b18b3, including the current profile/agent-avatar behavior.

Validation at 9aaed7a154114b5b30e36881b67b0f5e3e30d826

  • Full Vitest suite: 5,396 tests / 446 files passed. Initial regression run failed on the missing visible Active cue and a stale decorative-avatar assertion; repaired run passed both.
  • Full presence.spec.mjs and profiles.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.
  • Required staged checks, pre-push types/related tests and design checks passed; hosted DCO Check succeeded at this head.
  • Independent source-only review found no remaining blocking defect, including the prior non-color finding. Optional shared-component cleanup is deliberately out of scope.
  • Local checks used integrated main 986f6881. Main subsequently advanced to 32a33eee with 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 head 737437bed997531c42be0d34c18580cac53a2b7a (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.

Engine Before — separate Active row and green avatar badge After — Active row removed; green avatar badge retained
Chromium 153.0.8010.12 Before: Chromium profile Info with Active row and green avatar badge After: Chromium profile Info with Active row removed and green avatar badge retained
WebKit 26.6 Before: WebKit profile Info with Active row and green avatar badge After: WebKit profile Info with Active row removed and green avatar badge retained

Screenshot verification at these revisions:

  • Existing profile snapshot and same-socket renewal capture case passed in Chromium and WebKit for both revisions (4/4); all four images were visually inspected. Each sibling evidence.json records the expected clean revision and no page or console errors.
  • Supplemental checks at the hosted head passed in both engines (4/4): the accessible Alice Fixture avatar, online label and online badge persist through Channels → Info, and Mic → Info retains 📅 In a meeting in the source fixture.
  • These focused screenshot checks supplement the original validation notes above. Full browser validation, independent agent review, fail-then-pass regression evidence, native/live-relay behavior, and human testing remain deferred. The Chromium custom-status source fixture emitted a ResizeObserver notification warning; its status assertion and capture passed.

Current main reconciliation

Integrated main through e304e3f5 in 675c82fb with 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 main f778cb40 is outside this local evidence and touches none of the PR’s four feature files. No approval or merge asserted.

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>
@matt2e
matt2e force-pushed the remove-redundant-status-on-profile branch from 737437b to 77d05db Compare September 29, 2026 06:41
@matt2e
matt2e marked this pull request as ready for review September 29, 2026 07:20
@matt2e
matt2e requested review from a team, comp615 and wesbillman as code owners September 29, 2026 07:20

@wesbillman wesbillman 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.

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.

Comment on lines -376 to -380
<PresenceIndicator
presence={session.presence}
pubkey={pubkey}
profile
/>

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.

[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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Worth considering ^^

Signed-off-by: Star Lord <b89298dbe87c6b3fd8a425b535d9d161f23c88d555a47925ae0b04dfe02b201e@buzz.block.builderlab.xyz>
@wesbillman
wesbillman marked this pull request as draft September 29, 2026 22:05
@wesbillman
wesbillman marked this pull request as ready for review September 29, 2026 22:09

@wesbillman wesbillman 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.

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 9aaed7a1 adds an internal relay hostname and agent-account identifier in both author.email and committer.email, exposing deployment/account details in public Git metadata. Use an approved public contribution address while preserving the actual author and committer identities. The valid Signed-off-by attribution 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>
@wesbillman

Copy link
Copy Markdown
Collaborator

Integrated main through e304e3f5 in 675c82fb with 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 main f778cb40 is outside this local evidence and touches none of the PR’s four feature files. No approval or merge asserted.

@wesbillman
wesbillman merged commit 329fe2a into main Sep 30, 2026
20 checks passed
@wesbillman
wesbillman deleted the remove-redundant-status-on-profile branch September 30, 2026 03:56
TheSentinel454 pushed a commit that referenced this pull request Sep 30, 2026
* 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants