component · suite chrome
TuxUtilityCluster
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.