cmux NEXT Home: Chiefs show their picked character, not CH
Leo, 2026-11-01:
also im not seeing chiefs with the selected avatar appearance for some reason
What was wrong
Since d1562beff34b (Home's iMessage-style CH monogram, Lawrence 2026-10-30: "no profile pic by default"), every Home fallback read only the Chief's uploaded picture (AppServices.wornUpload(of:)). A character picked in the Chief Settings popover, Settings > Chiefs or the config file was never read there, so every Chief showed CH.
The fix
ChiefPetSettingsRows.chosenPicture(of:) returns the worn upload, else the character the Chief was explicitly given, else nil:
- the default Chief:
home.chiefPetMascotwhen the config file sets it (SettingsController.fileRoot), not the schema default; - another Chief: its own pick (
ChiefMascotPicks, by participant id).
A Chief nobody picked for keeps Lawrence's CH monogram, so the 2026-10-30 design stands; only a real pick now shows. Home's list rows, header, group bubbles, New Message recipient and agent-chat Chief faces all read it (AppServices.chosenPicture(of:), which replaces the now-unused characterPicture(of:); no new App lines). The sidebar's Chief item is unchanged: Lawrence chose a plain glyph there on 2026-10-31.
Test
ChiefDefaultAvatarTests/aPickedCharacterIsTheChiefsHomePicture: a picked character is the Home picture, an unpicked Chief keeps the monogram, one Chief's pick never shows on another, and the default Chief's pick counts only when the file sets it.
- Red at 89ba15109c3e (test only): it doesn't compile because
chosenPicturedoesn't exist on base; base has no path that reads a pick. - Green at the head: see the fleet run below.
Observed / Not run
- Observed: the prepush gate passes. Fleet
package-test-lane.sh suite Packages/macOS/CmuxNext ChiefDefaultAvatarTests,ChiefAvatarUploadWiringTestsresults are posted in a comment. - Not run: a fresh-home launch and a DEV build check of Home's list; both are posted as comments before landing.
Prior art: d1562beff34b and 32f1c059a928 (lawrencecchen) kept as designed; #30243 (the sidebar's Chief avatar on chat rows) reads Home's chiefFaces, so it picks this up with no overlap in files.
Risk: normal. Chief area (CmuxNextChiefPetWiring): it only reads, with no write and no change to persistence.
Changelog
Fixed: Home shows each Chief's chosen character instead of the CH monogram.
No capture: native list rows. A DEV build check follows.
Agent session: agent session
🤖 Generated with Claude Code
![View with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-dark-v3-3x.png)
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Fixes Chiefs in cmux NEXT Home showing the CH monogram instead of the character they picked.
Home's avatar fallback read only each Chief's worn upload, so a character chosen in the Chief Settings popover, Settings > Chiefs, or the config file was never shown. AppServices.chosenPicture(of:) now returns the worn upload, else the explicitly picked character, else nil (the monogram). A Chief nobody picked for still keeps the CH monogram, so the 2026-10-30 no-profile-pic design is preserved.
The list, bubbles, and New Message fall back to the CH monogram for any Chief missing from chiefFaces, so the default Chief's pick or upload never shows on another Chief's row; the default Chief is always in chiefFaces, so its own row still wears its pick.
Home's list rows, header, group bubbles, New Message recipient, and agent-chat Chief faces all use the new lookup. The sidebar's Chief item is unchanged.
ChiefMascotPicks.picked(of:in:)returns the default Chief's character only when the config file setshome.chiefPetMascot, and each other Chief's own pick.- The header's redraw state now tracks whether the character was picked, so picking the default character (orb) on a Chief that wore it only by default shows orb instead of CH.
characterPicture(of:)is replaced; no new App wiring lines added.- Adds
ChiefDefaultAvatarTests/aPickedCharacterIsTheChiefsHomePictureandPerChiefPetTests/homeDrawsEachChiefsPickAndNoOneElsescovering picked, unpicked, and cross-Chief cases.