Skip to content

Add status badge cutouts to avatars - #211

Open
klopez4212 wants to merge 35 commits into
mainfrom
kennylopez-online-badges-pr158
Open

klopez4212 wants to merge 35 commits into
mainfrom
kennylopez-online-badges-pr158

Conversation

@klopez4212

@klopez4212 klopez4212 commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Add rounded status cutouts to circular person avatars and matching squircles to agent avatars and badges. Preserve existing avatar sizes and loaded artwork during status changes.
  • Show known live presence on profile avatars, message and thread bylines, and one-to-one DM avatars in the left nav. Use solid green for online, yellow for away, and grey for offline in both themes; unknown status stays unbadged.
  • Announce known status on the relevant controls and avatars.

Conflict resolution: 00a50264

Merged current main 1e15d5d3 (#212 menu/popover changes) with PR head 8035c372. Resolved AgentChoice.tsx by retaining main’s shared MenuRadioItem/ChoiceRow/small-avatar layout and the PR’s live badges and accessible status/admission disclosure. Added admission-label assertions across unknown → known presence. Independent source review passed for the resolution and overlapping auto-merges.

Validation: all 14 cases in the complete agent-activity.spec.mjs and new-message.spec.mjs pass in Chromium/WebKit, two workers, zero retries (41.4s local). Run was on the integration before commit; the pre-commit hook only reformatted AgentChoice. Exact-head mandatory push hooks pass TypeScript, 654 related unit tests (53 files), design types and guards. Prior broader evidence is recorded below, not claimed as rerun at this head. No browser cases added/removed by conflict resolution; no toast repair or full viewer rerun. GitHub reports MERGEABLE (no conflicts) and DCO is green; hosted CI completion remains pending at this new head.

Previous validation: 8035c372

Carl, an automated contributor, updated this PR on Wes’s behalf.

  • Integrated main through be53d8e1, including test: isolate direct-message delivery gate from read-state publications #233’s existing fix for read-state publications stealing the held direct-message delivery callback. Independent source review verified that main’s profile Message/status/Memories changes and the PR’s presence accessibility changes survive.
  • Fixed the two journey setup boundaries without product changes, retries, delays, exclusions, or relaxed tolerances: wait for the channel history’s scrollend before recording the reading anchor; clear the rich composer using its select-all/backspace commands and assert it is empty before mention completion. The hosted WebKit trace shows the last 25px of wheel movement occurring after the old baseline; the local Chromium trace shows fill("") leaving the first mention intact. Independent reviewers checked both repairs.
  • 68/68 app journeys pass, Chromium + WebKit, zero retries, two workers, 2.3m local Apple Silicon wall time. Complete files: new-message, message-navigation, agent-activity, profiles, presence, avatar-shapes, dm-labels. Run used the staged integration tree, verified byte-for-byte equal to committed eef19a3e; the sole later change at 8035c372 updates the separate viewer test’s exact avatar count. New-message cases took 3.7s / 4.8s and the reading-anchor case 2.1s / 2.7s (Chromium / WebKit). Earlier integration run: 35/36 pass, 1.9m; different scopes, not a speedup comparison. No browser cases added or removed in this repair.
  • Exact-head pre-push passes: TypeScript, 651 related unit tests across 52 files, design types and all design guards. All 29 PR commits have sign-offs; hosted DCO is green. At eef19a3e, all 94 design unit tests, app build and both design builds also pass.
  • Design viewer: 61/62 pass in the complete two-engine run at 8035c372 (1.3m, one worker, zero retries). All avatar cases pass. Repaired the existing exact identity count to include this PR’s six new Morgan specimens (5 → 11); it failed in both engines before the correction. The remaining failure is WebKit toast modal focus at tests/fixtures/design-system/viewer.spec.ts:1622; it also failed in the preceding full viewer run. This is outside the avatar repair and has not been diagnosed or suppressed. The design-viewer browser suite is not part of the hosted functional matrix.

Not yet merge-ready: hosted CI at this head is running; the separate toast-focus failure needs owner disposition. GitHub currently reports approval, but no new approval or merge was performed by this takeover. No live-account or native-window validation; Windows CI is skipped. Local macOS evidence does not establish hosted Linux success.

Earlier takeover and screenshot-cleanup evidence

Validation

Carl, an automated contributor, updated this PR on Wes’s behalf.

At 50041597 (includes main through 7de47085):

  • Pre-push: TypeScript, 636 related unit tests, design types and all design guards pass. The full Vitest suite also passed 2,966 tests at 05917094, immediately before removing two unsupported RTL exact options from the test only.
  • All 32 cases in agent-activity.spec.mjs, presence.spec.mjs, and profiles.spec.mjs pass in Chromium/WebKit on the exact pushed head (86 seconds local wall time). No browser cases added/removed.
  • The failing activity journey now enables the existing strict read-state fixture only for that case and observes the actual signed/decrypted message frontier before opening the profile. Adding the publication barrier without the fixture reproduced the original kind-30078 rejection in WebKit; enabling the fixture passes without retries or relaxed unexpected-event checks. This browser test covers real dwell, broker socket publication, focus and panel transitions that DOM unit tests cannot.
  • The activity file’s local repair run passed 10/10 in 27.3s; the repaired case took 8.3s Chromium / 9.1s WebKit. Original hosted WebKit shard: 149 pass / 1 fail in 9.5m. These are different environments/scopes, not a speedup comparison.
  • Independent presence/lifecycle and UI reviews returned with no remaining code blocker. Known profile status has one accessible owner on Info; Channels/Memories retain the avatar status. The documented solid-fill direction is preserved.

Hosted CI/DCO at the new head and the required independent/code-owner approval remain merge gates. No live-account or native-window validation was performed in this takeover. The full hosted matrix supplies broad integration coverage.

Screenshot cleanup follow-up

At 918ff0fa (includes main through f6caa83f):

  • Removed 10 committed review captures (~1.02 MB): four avatar-status, three new-message, two sidebar-polish, and one channel-settings screenshot. Scanned tracked image/media files and references across the project; no tracked text referenced the removed paths. Product artwork, icons, and media fixtures remain unchanged. Removed the obsolete screenshot table above; Git history was not rewritten.
  • Cleanup commit is deletion-only. The automatic merge of current main preserves the previously reviewed non-screenshot feature diff exactly. TypeScript, all 636 hook-selected unit tests (49 files), design types/guards, and diff checks pass on this head. No browser cases or production behavior changed by the cleanup; no additional browser/native suite was run for image deletion.
  • The previous head's hosted browser matrix reported failures. This artifact cleanup does not diagnose or repair those failures; current hosted CI/DCO and independent/code-owner approval remain merge gates.

mahanti and others added 8 commits September 23, 2026 09:01
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>

# Conflicts:
#	tests/fixtures/design-system/viewer.spec.ts
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: klopez4212 <klopez4212@gmail.com>
@klopez4212
klopez4212 marked this pull request as ready for review September 24, 2026 10:11
@klopez4212
klopez4212 requested review from a team, comp615 and wesbillman as code owners September 24, 2026 10:11
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-25T07:29:12.644016Z ab2421c New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fabfd3980f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/shared/design-system/ui/Avatar.tsx Outdated
Comment thread src/shared/design-system/ui/Avatar.tsx Outdated

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

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Changes requested: one P2 accessibility finding in the new light-mode status colors (inline). Merge criteria: make the status boundary meet the existing 3:1 non-text target on supported surfaces and cover those mappings in the existing contrast guard. Live presence wiring remains out of scope.

Validation: source-only review of fabfd3980fdea11e05e5455651df2b7fc329e7dc against 804413b22c3866af4b6710d99b154a0414e3b142, plus committed screenshots; no builds/tests or live/native rendering executed. Existing journey shards passed, but they do not run the new design-viewer test. Browser measurements failed: channel-opening warm visibility was 105 ms versus <100 ms. I have not established that this diff caused it; required CI remains a separate merge gate.

Comment thread src/shared/design-system/styles/tokens.css Outdated
mahanti and others added 6 commits September 24, 2026 06:40
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: klopez4212 <klopez4212@gmail.com>
Signed-off-by: klopez4212 <klopez4212@gmail.com>
Signed-off-by: klopez4212 <klopez4212@gmail.com>

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

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Changes requested: one new accessibility regression in the profile integration; restore non-color status distinctions on the collapsed avatar. The inline P3 fallback note is nonblocking.

The previous contrast finding is resolved on all four declared surfaces in both themes. Actual online/away/offline changes preserve the image subtree; no presence redesign is requested.

Validation: source-only primary review, independent review, and coordinator integration at 9b45af4ac7f00c66d35c36eb9e6f37b563fe963b against 41c43393894fa18408a3dc1a6de8420156263b09. Existing exact-head CI reports 11 successes and one native skip. No builds/tests or live rendering were executed by this review; app-backdrop paint remains unverified.

Comment thread src/shared/design-system/styles/components.css
Comment thread src/app/shell/ProfileButton.tsx Outdated
Signed-off-by: klopez4212 <klopez4212@gmail.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0abf7d9708

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/app/shell/ProfileButton.module.css Outdated

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

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Changes requested: one remaining P2. The profile trigger's shared interaction-background feedback is suppressed; reproduction and the bounded fix are in this thread.

Reviewed head 0abf7d970832cbf6d4909646bac0607409db3db8 against base 41c43393894fa18408a3dc1a6de8420156263b09. Earlier status-contrast, non-color status-shape, and unnamed-profile fallback findings are resolved in the current implementation. The complementary lifecycle review found no additional material issue in the changed paths.

Validation: a review-local probe of the real built app reproduced the remaining defect in Chromium and WebKit, light/dark, and verified the cascade cause by removing only the override selector in the DOM. Contrast guard and diff whitespace check pass. Existing hosted checks are green; Windows native validation is skipped. No broad suite or native validation was rerun locally.

Merge criterion: restore shared hover/pressed/menu-open feedback and cover that rendered control. No additional presence feature work requested.

Signed-off-by: klopez4212 <klopez4212@gmail.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4d26aa3e53

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/app/shell/ProfileButton.tsx Outdated
Base automatically changed from codex/messages-polish to main September 24, 2026 15:32
Signed-off-by: klopez4212 <klopez4212@gmail.com>
Signed-off-by: klopez4212 <klopez4212@gmail.com>
Signed-off-by: klopez4212 <klopez4212@gmail.com>

# Conflicts:
#	src/bundled/profiles/ProfilePanel.tsx
Signed-off-by: klopez4212 <klopez4212@gmail.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 65b07f0abf

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/features/messages/MessageRow.tsx Outdated

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

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Changes requested: two P2 regressions in the newly added live-agent badge integration. Inline findings cover loaded-artwork resets on unknown/known transitions and visible presence that is absent from accessible names/descriptions. The previous profile interaction-fill defect remains fixed.

Reviewed head 65b07f0abff17402f541ad25ca9878a2eb0e9c2e against base 82bb3a631b96b92cd73940f16bcfb05fdaa7607e. Both independent delta-review lanes returned; these findings were separately challenged after focused reproduction.

Validation: 14 affected presence journeys pass in Chromium/WebKit; 48 focused component tests, the contrast guard and diff check pass. Additional review-local browser probes using the real AgentCard, AgentChoice, shared Avatar and CSS reproduce both findings in both engines; these probes control presence state at the external-store boundary, not through the relay. Existing byline coverage uses human authors, so its pass does not exercise the new agent contract. No production edits, live-account or native validation. Hosted CI was still running at the last snapshot; Windows native validation was skipped.

Merge criteria: keep loaded artwork stable across unknown/known presence changes, expose the visible agent status to assistive technology, and add regressions for those paths. Separately, I asked Wes to confirm the deliberate solid-fill and agent-byline direction changes; this review does not require reverting an authorized design decision. Align the presence documentation/coverage with that decision.

Comment thread src/shared/design-system/ui/Avatar.tsx Outdated
Comment thread src/features/sessions/AgentChoice.tsx
Signed-off-by: klopez4212 <klopez4212@gmail.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e615314335

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/shared/design-system/styles/components.css
klopez4212 and others added 4 commits September 24, 2026 20:03
Signed-off-by: klopez4212 <klopez4212@gmail.com>
Signed-off-by: klopez4212 <klopez4212@gmail.com>
Signed-off-by: klopez4212 <klopez4212@gmail.com>

# Conflicts:
#	src/bundled/channels/ChannelSidebarItem.tsx
#	src/bundled/channels/ChannelSidebarRow.tsx
Enable the strict read-state fixture for the profile activity journey and wait for its actual frontier publication. Avoid duplicate known-status narration on the profile Info tab while retaining the portrait name when status is unknown and status labels on other tabs. Document the intentional solid-fill badge exception.

Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
@wesbillman
wesbillman dismissed stale reviews from themself September 24, 2026 19:51

Carl, an automated reviewer, commenting via Wes’s GitHub account.

The findings in this review are fixed or explicitly superseded by the documented product direction. Rechecked during the PR takeover at 5004159. This dismissal is not an approval; required CI and independent/code-owner approval still apply.

@wesbillman

Copy link
Copy Markdown
Collaborator

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Addressed the outstanding threads and pushed 50041597. The WebKit failure is repaired with strict read-state fixture admission plus an observed-publication barrier; profile Info no longer duplicates known-status narration. Solid-fill visual intent is unchanged.

No remaining code blocker from the integrated review. Exact-head pre-push checks and all 32 affected Chromium/WebKit journeys pass; validation scope and fail-then-pass evidence are in the PR description. Earlier Carl changes-requested reviews have been dismissed as resolved/superseded, not converted into approval. Hosted CI/DCO and required independent/code-owner approval remain the merge gates.

Carl added 2 commits September 24, 2026 14:01
Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
Carl and others added 5 commits September 24, 2026 14:41
Bring in the existing read-state delivery-gate fix without losing profile integration. Wait for wheel completion before recording the channel anchor and clear the rich composer through its keyboard selection command.

Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
Resolve AgentChoice against shared MenuRadioItem and ChoiceRow components. Preserve known-status names and admission disclosures; cover both after a presence transition.

Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
Signed-off-by: klopez4212 <klopez4212@gmail.com>
Signed-off-by: klopez4212 <klopez4212@gmail.com>

# Conflicts:
#	tests/browser/agent-activity.spec.mjs

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6eefcec8c1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/presence.md
it is not relabeled Offline. Message and thread bylines neither display presence
nor demand snapshots. This describes recent Buzz
session status in this community, not proof that a person is available or an
Profiles show Active, Away, or Offline with text, while avatar badges use

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Add the required DCO sign-off

The reviewed commit message contains no Signed-off-by trailer (git interpret-trailers --parse returns no trailers), so a PR containing this commit cannot satisfy the repository's mandatory DCO policy. Add a sign-off from the commit's actual author before integration.

AGENTS.md reference: AGENTS.md:L153-L163

Useful? React with 👍 / 👎.

Signed-off-by: klopez4212 <klopez4212@gmail.com>

# Conflicts:
#	tests/browser/agent-activity.spec.mjs

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

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Source review clear; not merge-ready. No actionable code/product/security findings in head b47f4fc97fa89167793062855a85316099859f1f against base 223028bbb59273dae9c109675b6b7f3141d13340.

  • The shared avatar retains loaded artwork across status transitions; known presence is narrated by its owning control/image, unknown stays unbadged, and all consumers reuse the bounded session-owned presence directory. The documented solid-fill product exception is preserved.
  • Existing CI run 36076581594 passed for these exact head/base pins. The JavaScript checkout log confirms synthetic merge 5580c0f813d282079520c3913ba17c563b25af50; 321 files / 3,513 tests passed. Hosted Chromium/WebKit journeys and required checks passed; Windows native validation was skipped. This source-only review ran no code or live visual/accessibility acceptance.
  • Remaining merge gate: GitHub currently reports mergeable=false, mergeable_state=dirty, and no merge commit at the same pins. Resolve that conflict state; any changed head/base needs fresh integration CI. Not every agent surface has a production-broker browser journey. I contributed earlier fixes, so this COMMENT is not independent/code-owner approval; obtain required independent approval before merging.

Signed-off-by: klopez4212 <klopez4212@gmail.com>

# Conflicts:
#	src/app/shell/ProfileButton.tsx
#	src/bundled/profiles/ProfilePanel.tsx
#	tests/browser/message-navigation.spec.mjs
#	tests/browser/presence.spec.mjs
Signed-off-by: klopez4212 <klopez4212@gmail.com>

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

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Changes requested: one P2 native-Linux accessibility defect, detailed inline. Reviewed ab2421cb6246f9d70595fdb4069a79b1d0a8835d against df7b7e7f45739f3e06e12d81623385701acdc51d. The prior merge-conflict gate is resolved; the merge preserves main’s account/status behavior, and the DM polling change retains the authors predicate. The Linux gap was missed in my earlier review, not introduced by this merge.

Merge criteria: expose known presence once at each of the three affected controls through a WebKitGTK-compatible accessible name/description, retain silent unknown state, and update the corresponding accessibility assertions. The intentional solid-fill design does not need changing.

Existing CI run 36107597476, attempt 1, passed for these exact head/base pins: 660 Chromium/WebKit browser cases with zero retries and 3,705 unit tests. This was source-only review on isolated Blox, not a new test run or native accessibility validation. No native-window, live-relay or screen-reader acceptance was exercised; the optional design-viewer suite is outside hosted coverage and its author-reported WebKit toast-focus failure remains unverified here. I contributed earlier fixes, so this is not independent/code-owner approval.

aria-current={
selected === channel.id && !draftSelected ? "page" : undefined
}
aria-description={presenceDescription}

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] Use a presence description that WebKitGTK exposes

With known presence, this DM row puts the status only in aria-description; its nested avatar has alt="" and is therefore aria-hidden. The same pattern appears in MessageRow.tsx:209–211 and ActivityAccessory.tsx:155–157. Native Linux users therefore lose the accessible presence value on these three controls, although the badge is visible.

This is specifically the WebKitGTK/ATSPI path, not a general Firefox or Safari defect. At WebKit revision ceba48c3, the ATSPI description getter consumes accessibilityText(), whose help-text producer maps aria-describedby but not aria-description. The latter goes through extendedDescription(), which the Cocoa wrapper consumes, not ATSPI. Linux is a documented native target; the native CI job installs libwebkit2gtk-4.1-dev.

Use aria-describedby referencing status text, or include status in the owning accessible name, at all three sites. Preserve the single owner and omit presence when unknown. Update the tests to assert the resulting accessible name/description rather than merely the attribute’s presence.

Evidence is source-level: I did not run a native accessibility-tree/screen-reader probe or identify a specific distro’s WebKitGTK release. Green jsdom attribute assertions and functional browser journeys do not establish this native mapping.

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.

3 participants