Context
The view leaf of surface S2 from the graduated FM design-first record (D#15249, closed RESOLVED → #15254 Surface Registry, which carries the state-taxonomy table as its durable design record). Pairs with #14537 (setWakeEnabled write verb): a toggle without a telltale is a blind switch.
The Problem
TODAY the operator hand-disabled the wake daemon AND hit a session rate limit — both invisible in the cockpit, both at once. The cockpit renders neither wake-subscription state nor throttle state anywhere.
The Architectural Reality
- Graduated design direction (binding): two orthogonal axes, not one enum —
wake: on | off | suppressed | unknown × throttle: none | overage | rate-limited | unknown.
- Exception-based card rendering (the #15037 density contract): nominal earns ZERO card pixels; any non-nominal state on either axis earns exactly ONE compound chip; the full two-axis table lives in the detail view.
- Honest degradation: unknown renders as unknown, never as healthy — and this leaf ships BEFORE its producers if needed: both axes render
unknown until #15271/#15272 land (the record's design-first-without-blocking-on-wiring pattern). No ordering edge to the producers — the UI + taxonomy land against the DTO contract with unknown as the live default.
- Composes existing primitives (StateDot / chip system / TOKENS.md) — the record's matrix disposition for S2 was design-in-ticket + the registry taxonomy table; no new design doc.
- Clio's Signal-glow compose-or-conflict read was invited on #15254/PR #15255 (non-gating).
Acceptance Criteria
Contract Ledger (ADR 0020 §6 — the five rows the intake named)
| Surface |
Authority |
Contract this leaf holds |
Fail-closed behavior |
Verification |
| Wake observation feed (consumed) |
#15271 / PR #15280: FleetManager.fleetWakeStatus() — {agentId, wake: 'on'|'off'|'suppressed'|'unknown', confidence, source} rows + capability envelope (+ reason on unknown) |
The cockpit maps rows onto FleetAgent records through the SAME roster-assembly seam runtime status rides (mapRosterRow); the throttle sibling (#15272, not landed) mirrors the shape and is PENDING — its axis reads unknown until then |
Degraded/absent capability, missing row, or unlanded producer ⇒ unknown — never inferred from control intent, never defaulted nominal |
Unit: capability-envelope matrix (wired/degraded/absent) → record fields |
| FleetAgent model + factory defaults (extended) |
AgentOS.model.FleetAgent + fleetCardFactory |
Two new record fields wakeState/throttleState, model-defaulted 'unknown'; factory maps absence-tolerant (rows without the fields ⇒ unknown) |
A record never carries a fabricated nominal; unknown is the constructor-time truth |
Unit: model defaults + factory absence mapping |
| Card compound chip (produced) |
D#15249 OQ-S2.2 + the #15037 density contract + #15254 registry taxonomy table |
Predicate: chip renders IFF either axis is OBSERVED-deviant (wake ∈ {off, suppressed} OR throttle ∈ {overage, rate-limited}). unknown is card-SILENT and detail-visible — otherwise every card chips until producers land, violating nominal-zero-pixels at fleet scale; the registry's honest-unknown rule is satisfied by the detail table. Compound text orders wake before throttle. Exactly ONE chip regardless of double deviation |
Nominal or unknown ⇒ ZERO card pixels (spec-asserted) |
Unit: full 4×4 predicate matrix incl. the zero-pixel assertions |
| Detail two-axis table (produced) |
D#15249 OQ-S2.1/S2.2 resolutions |
AgentDetail renders the full two-axis readout — all four states per axis verbatim, unknown explicit (with reason when the feed carries it); pane-level freshness labeling per the S1-established rule |
Absent feed ⇒ both axes render explicit unknown rows, never an empty/hidden table |
Unit: table render states; NL e2e touch on the live module |
| Token/evidence ownership |
TOKENS.md / CARD-CONTRACT.md (primitives centralized — the registry never re-specs them) |
The chip composes EXISTING chip/StateDot classes + tokens; zero new SCSS vocabulary in this leaf (design-polish rides W1 if Grace's sign-off wants more); a11y: the chip carries an aria-label naming axis+state, full readout in title |
No literal colors/sizes — token references only |
Grace design sign-off per the #15242 AC pattern + a11y attr assertions in the unit specs |
Out of Scope
The producers (#15271, #15272 — this leaf renders whatever the DTO carries) · #14537's toggle affordance (the write verb's own leaf wires its control into the detail table later) · fleet-level aggregate telltales.
Related
Epic #14560 (parent) · #15271 + #15272 (the producers; no blocking edge — unknown-honest until they land) · #14537 (the paired write verb) · D#15249 (graduated record, OQ-S2.1/2.2/2.3 resolutions) · #15254 / PR #15255 (registry taxonomy table) · #15037 (density contract).
Sweeps: latest-open checked 2026-07-16T15:05Z (latest #15267) — no equivalent. A2A herd-window clean.
Origin Session ID: b42c5667-db78-4a0c-83a0-ce66c95ee0d9
Retrieval Hint: "FM cockpit telltale chip wake throttle two-axis exception-based"
Context
The view leaf of surface S2 from the graduated FM design-first record (D#15249, closed RESOLVED → #15254 Surface Registry, which carries the state-taxonomy table as its durable design record). Pairs with #14537 (
setWakeEnabledwrite verb): a toggle without a telltale is a blind switch.The Problem
TODAY the operator hand-disabled the wake daemon AND hit a session rate limit — both invisible in the cockpit, both at once. The cockpit renders neither wake-subscription state nor throttle state anywhere.
The Architectural Reality
wake: on | off | suppressed | unknown×throttle: none | overage | rate-limited | unknown.unknownuntil #15271/#15272 land (the record's design-first-without-blocking-on-wiring pattern). No ordering edge to the producers — the UI + taxonomy land against the DTO contract with unknown as the live default.Acceptance Criteria
AgentCard: one compound telltale chip appears ONLY when either axis is non-nominal (nominal = zero pixels — spec-asserted); chip content names the deviating axis/state; both themes.AgentDetail: the full two-axis table with all states,unknownrendered as explicit unknown.unknown— asserted; no fabricated nominal.Contract Ledger (ADR 0020 §6 — the five rows the intake named)
FleetManager.fleetWakeStatus()—{agentId, wake: 'on'|'off'|'suppressed'|'unknown', confidence, source}rows + capability envelope (+reasonon unknown)mapRosterRow); the throttle sibling (#15272, not landed) mirrors the shape and is PENDING — its axis readsunknownuntil thenunknown— never inferred from control intent, never defaulted nominalAgentOS.model.FleetAgent+fleetCardFactorywakeState/throttleState, model-defaulted'unknown'; factory maps absence-tolerant (rows without the fields ⇒ unknown)wake ∈ {off, suppressed}ORthrottle ∈ {overage, rate-limited}).unknownis card-SILENT and detail-visible — otherwise every card chips until producers land, violating nominal-zero-pixels at fleet scale; the registry's honest-unknown rule is satisfied by the detail table. Compound text orders wake before throttle. Exactly ONE chip regardless of double deviationAgentDetailrenders the full two-axis readout — all four states per axis verbatim,unknownexplicit (withreasonwhen the feed carries it); pane-level freshness labeling per the S1-established ruleTOKENS.md/CARD-CONTRACT.md(primitives centralized — the registry never re-specs them)aria-labelnaming axis+state, full readout intitleOut of Scope
The producers (#15271, #15272 — this leaf renders whatever the DTO carries) · #14537's toggle affordance (the write verb's own leaf wires its control into the detail table later) · fleet-level aggregate telltales.
Related
Epic #14560 (parent) · #15271 + #15272 (the producers; no blocking edge — unknown-honest until they land) · #14537 (the paired write verb) · D#15249 (graduated record, OQ-S2.1/2.2/2.3 resolutions) · #15254 / PR #15255 (registry taxonomy table) · #15037 (density contract).
Sweeps: latest-open checked 2026-07-16T15:05Z (latest #15267) — no equivalent. A2A herd-window clean.
Origin Session ID: b42c5667-db78-4a0c-83a0-ce66c95ee0d9 Retrieval Hint: "FM cockpit telltale chip wake throttle two-axis exception-based"