Skip to content

feat(ui): derive the activity-bar avatar initial through one owner (RIG-3737) - #1199

Merged
trunk-io[bot] merged 1 commit into
compass-ux/3736-glyph-primitivefrom
compass-ux/3737-avatar-initial
Sep 13, 2026
Merged

trunk-io[bot] merged 1 commit into
compass-ux/3736-glyph-primitivefrom
compass-ux/3737-avatar-initial

Conversation

@rigel-mintaka

@rigel-mintaka rigel-mintaka commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

This PR is part of a stack containing 5 PRs:

  1. main
  2. feat(ui): add the dot-matrix Glyph primitive and its four chrome bitmaps (RIG-3736) #1194
  3. "feat(ui): derive the activity-bar avatar initial through one owner (RIG-3737)" (this PR)
  4. feat(ui): split ActivityBarItem into its glyph and avatar arms (RIG-3738) #1202
  5. feat(ui): convert the chrome pictographs to dot-matrix glyphs (RIG-3739) #1211
  6. feat(ui): finish the chrome glyph conversion (RIG-3739) #1219

fleetItemForAgent and unreachableFleetItem each computed the fleet tab's
letter with (handle.at(0) ?? "?").toUpperCase(). Both now call
avatarInitial, which implements D1 of the glyph-primitives record.

.at(0) reads a UTF-16 code unit, so an astral first character came back as
half a surrogate pair. The helper takes the first grapheme instead, then
NFKD-normalizes it and strips combining marks so an accented handle keeps its
letter (Émile -> E) rather than degrading.

The result is clamped to one printable ASCII character. That clamp is the
condition on which the e2e Unifont pin can retire: the avatar arm is the only
activity-bar text whose glyph is not drawn by us, so bounding it to ASCII
removes the last reason to ship a fallback face for this surface.

? remains only for scripts no Latin letter represents. Those handles do
collapse to one tab letter, which the tab's title and aria-label already
compensate for — both carry the full handle, and the icon span is
aria-hidden. An uppercase that expands (ß -> SS) keeps its first letter
for the same reason: the initial exists to tell agents apart.

icon keeps its name here; splitting the field into the glyph and avatar arms
is the next commit in this stack.

Ref: RIG-3737, RIG-3603. Design: docs/designs/ui/compass-glyph-primitives/design.md (DL-367).

Co-authored-by: Matt Wilkinson matt@rigel.build

@linear-code

linear-code Bot commented Sep 13, 2026

Copy link
Copy Markdown

RIG-3737

RIG-3603

@rigel-mintaka
rigel-mintaka marked this pull request as ready for review September 13, 2026 00:37
@github-actions

github-actions Bot commented Sep 13, 2026

Copy link
Copy Markdown

Compass engineering docs preview: https://compass-ux-3737-avatar-initi.compass-eng-docs.pages.dev

Deployed from compass-ux/3737-avatar-initial at b66fc7c.

…IG-3737)

`fleetItemForAgent` and `unreachableFleetItem` each computed the fleet tab's
letter with `(handle.at(0) ?? "?").toUpperCase()`. Both now call
`avatarInitial`, which implements D1 of the glyph-primitives record.

`.at(0)` reads a UTF-16 code unit, so an astral first character came back as
half a surrogate pair. The helper takes the first grapheme instead, then
NFKD-normalizes it and strips combining marks so an accented handle keeps its
letter (`Émile` -> `E`) rather than degrading.

The result is clamped to one printable ASCII character. That clamp is the
condition on which the e2e Unifont pin can retire: the avatar arm is the only
activity-bar text whose glyph is not drawn by us, so bounding it to ASCII
removes the last reason to ship a fallback face for this surface.

`?` remains only for scripts no Latin letter represents. Those handles do
collapse to one tab letter, which the tab's `title` and `aria-label` already
compensate for — both carry the full handle, and the icon span is
`aria-hidden`. An uppercase that expands (`ß` -> `SS`) keeps its first letter
for the same reason: the initial exists to tell agents apart.

`icon` keeps its name here; splitting the field into the glyph and avatar arms
is the next commit in this stack.

Ref: RIG-3737, RIG-3603. Design: docs/designs/ui/compass-glyph-primitives/design.md (DL-367).

Co-authored-by: Matt Wilkinson <matt@rigel.build>
@rigel-mintaka
rigel-mintaka force-pushed the compass-ux/3737-avatar-initial branch from a37f467 to b66fc7c Compare September 13, 2026 22:06
@trunk-io
trunk-io Bot merged commit 9a783ef into main Sep 13, 2026
17 of 27 checks passed
@trunk-io
trunk-io Bot deleted the compass-ux/3737-avatar-initial branch September 13, 2026 22:43
@trunk-io

trunk-io Bot commented Sep 13, 2026

Copy link
Copy Markdown

This pull request was merged into main as part of stacked PR 1211.

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