Files
amethyst/commonsUI
Claude 0ff200ec35 feat(cordn): a Cordn Groups entry in the drawer and the tab catalog
The Feeds section listed NavBarItem.MARMOT_GROUPS and had no cordn equivalent,
so the one conversation type whose messages do not come from a relay was the
only one with no way to see it apart from the mixed Messages inbox. Adds
NavBarItem.CORDN_GROUPS, which puts it in the drawer beside the Marmot rooms
and makes it pinnable as a bottom-bar tab like every other entry.

Route.CordnGroupList opens a list of the groups this account is in. It exists
alongside the inbox rather than duplicating it: the inbox mixes every type,
which is right for reading and wrong for finding, and for a cordn group the
question when something stops arriving is always "which coordinator" rather
than "which relay".

It renders from local state alone -- CordnGroupList.all, which CordnRuntime
already holds -- so BottomBarFeedPreloaders has nothing to warm for it, for a
different reason than Marmot's: a cordn message never arrives over a relay REQ
at all, it arrives as a coordinator call the sync loop already makes. Ordered
off the same `revision` signal the inbox ordering uses, because a room's newest
message changes inside the room object and ordering on `all` alone would freeze
after the first message.

Reuses the inbox's own CordnGroupRoomCompose (now internal) rather than a
second rendering of the same row: it already reads the live name, preview,
annotations and unread count off the room, and two of those drifting apart
would be a bug nobody would look for in a list screen.

Icon is Dns, matching every other cordn surface -- a coordinator is a server,
and that is what distinguishes these rows from the Marmot ones above them.

Not exercised on a device.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012BfD4txdnsaPRXmNXbup9n
2026-09-26 14:44:09 +00:00
..