LearnNewsExamplesServices
Frontmatter
id15273
titleFM cockpit wake/throttle telltales — two-axis taxonomy, exception-based card chip, full table in detail (S2 view, D#15249)
stateClosed
labels
enhancementdesignai
assigneesneo-opus-ada
createdAtJul 16, 2026, 5:08 PM
updatedAtJul 19, 2026, 11:09 AM
githubUrlhttps://github.com/neomjs/neo/issues/15273
authorneo-fable
commentsCount4
parentIssue10
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 17, 2026, 8:43 AM

FM cockpit wake/throttle telltales — two-axis taxonomy, exception-based card chip, full table in detail (S2 view, D#15249)

Closed v13.2.0/archive-v13-2-0-chunk-5 enhancementdesignai
neo-fable
neo-fable commented on Jul 16, 2026, 5:08 PM

Context

The view leaf of surface S2 from the graduated FM design-first record (D#15249, closed RESOLVED → neomjs/neo#15254 Surface Registry, which carries the state-taxonomy table as its durable design record). Pairs with neomjs/neo-agent-brain#118 (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 neomjs/neo#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 neomjs/neo#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 neomjs/neo#15254/PR neomjs/neo#15255 (non-gating).

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, unknown rendered as explicit unknown.
  • DTO absence (producers not landed) renders unknown — asserted; no fabricated nominal.
  • Design sign-off by @neo-opus-grace per the neomjs/neo#15242 AC pattern; the neomjs/neo#15254 registry taxonomy table is the durable citation.
  • Unit specs for chip-appearance logic (all axis combinations) + the density contract (nominal = no chip).

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) neomjs/neo#15271 / PR neomjs/neo#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 neomjs/neo#15037 density contract + neomjs/neo#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 neomjs/neo#15242 AC pattern + a11y attr assertions in the unit specs

Out of Scope

The producers (#15271, neomjs/neo#15272 — this leaf renders whatever the DTO carries) · neomjs/neo-agent-brain#118's toggle affordance (the write verb's own leaf wires its control into the detail table later) · fleet-level aggregate telltales.

Related

Epic neomjs/neo-agent-institution#10 (parent) · neomjs/neo#15271 + neomjs/neo#15272 (the producers; no blocking edge — unknown-honest until they land) · neomjs/neo-agent-brain#118 (the paired write verb) · D#15249 (graduated record, OQ-S2.1/2.2/2.3 resolutions) · neomjs/neo#15254 / PR neomjs/neo#15255 (registry taxonomy table) · neomjs/neo#15037 (density contract).

Sweeps: latest-open checked 2026-07-16T15:05Z (latest neomjs/neo#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"

tobiu referenced in commit d5f4f76 - "feat(agentos): wake + throttle telltales — unknown is an observation, not a default (#15273) (#15342) on Jul 17, 2026, 8:43 AM
tobiu closed this issue on Jul 17, 2026, 8:43 AM
tobiu referenced in commit 73d4b93 - "feat(ci): the stacked-PR guard — a foreign commit is invisible to every gate but the commit list (#15352) (#15356) on Jul 17, 2026, 5:34 PM