component · suite chrome

TuxUtilityCluster

The trailing app-control cluster and the enforcement point for its anatomy law: search · notifications · theme · waffle · identity, fixed DOM order, always. Optional seats are absent, never reordered; the waffle and identity never fold. The waffle is registry-fed via useTuxApps() — pass current and auth state, never an app list. Includes TuxUserMenu, the suite's one identity affordance (two blessed mounts: cluster here, rail-footer for workbench rails).

signed in · full cluster

The law's order

Theme toggle (light ↔ dark; announces via a role="status" region; high-contrast stays in the footer per ADR-0006 and in the menu's prefs section), the waffle, and the account chip — identical accessible name in both mounts ("Account: {name}").

<tux-utility-cluster
  current="landscape"
  :signed-in="identity.authenticated"
  :user-menu="{ state, identity, items, prefs }"
  @sign-out="signOut()"
>
  <template #search><!-- ⌘K trigger --></template>
  <template #notifications><!-- bell --></template>
</tux-utility-cluster>

tux-user-menu · state catalog

Every identity state renders deliberately

Loading → inert skeleton. Signed-out → a quiet link, not a menu. Local-only is first-class, not an error (the AI Studio AccountChip doctrine) — the menu offers sign-in. Error tints the avatar and offers retry; it never blocks the rest of the chrome. An unauthenticated product renders no identity seat at all.

rail-footer mount

The workbench chip

Workbench-shaped apps (persistent left rail) mount identity in the rail footer — the Copilot/VS Code convention. Same component, same menu order, wider chip.