LearnNewsExamplesServices
Frontmatter
id15625
titleFleet cards render active sample residents as benched / offline
stateClosed
labels
bugdesignai
assigneesneo-kimi-phoebe
createdAtJul 20, 2026, 10:20 PM
updatedAtJul 20, 2026, 10:56 PM
githubUrlhttps://github.com/neomjs/neo/issues/15625
authorneo-kimi-phoebe
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 20, 2026, 10:56 PM

Fleet cards render active sample residents as benched / offline

Closed Backlog/active-chunk-8 bugdesignai
neo-kimi-phoebe
neo-kimi-phoebe commented on Jul 20, 2026, 10:20 PM

Context

Delegated by the operator via Emmy's Build Week task handoff (A2A task D15570-fleet-runtime-honesty, 2026-07-20): post-merge recapture at dev e5e7002b5e renders all nine active roster residents as benched / offline while the health summary simultaneously says 9 working — the filmed UI contradicts itself. Build Week submission closes 2026-07-21 17:00 PT; Emmy retries recapture on merge.

Live latest-open sweep: checked latest 20 open issues at 2026-07-20T20:20Z; no equivalent. A2A in-flight sweep: Vega's #15624 (AgentCard anatomy leaf) is adjacent, not equivalent — coordinated separately.

The Problem

apps/agentos/view/fleet/AgentCard.mjs::applyRecord() computes resolvedState = runtimeWired ? recordState : 'off'. One ternary conflates two different facts:

  1. Operator-benched off (Gemini's row: record.state === 'off' — a first-party participation fact from identityRoots) → benched / offline is honest there.
  2. Unobserved session (the derived sample seed carries participation truth state: 'ok' but no sources.runtime — no session evidence exists) → benched / offline is a FALSE participation claim for nine active maintainers.

Meanwhile FleetGrid's ranking and HealthBar's tally both read record.state directly (participation truth), so cards are the lone dissenting surface: summary 9 working vs cards 10 × benched / offline.

Authority conflict (per Emmy's evidence addendum): CARD-CONTRACT.md mandates not-wired runtime → off-token and maps source-gated off to benched / offline. The contract's discipline — placeholder never renders as fact — is correct; the missing vocabulary is a presentation for participation-active, session-unobserved.

The Architectural Reality

  • record.state IS participation truth on the sample path (identityRoots participationStatusderiveFleetRoster.mjs); it is session truth only when sources.runtime.state === 'wired'.
  • sourceHealth.mjs already hosts the fleet honesty contract (mapFleetSessionHealth, normalizeFleetSources) — the resolver belongs beside them, shared by card AND health bar so the two surfaces can never diverge again.
  • The state vocabulary is closed-set (StateDot.mjs STATE_TOKEN/STATE_LABEL + theme --fm-state-* tokens + CARD-CONTRACT's legend) — a new unobserved state is a recorded contract delta (design authority: Grace, pinged).

The Fix

  1. sourceHealth.mjs: add resolveFleetDisplayState({state, sources}) — wired → state (session truth, unchanged); not-wired + state === 'off'off (benched preserved); not-wired + otherwise → unobserved.
  2. AgentCard.applyRecord: consume the resolver (pendingAction transitional precedence unchanged; pulse still requires confidence: 'observed' — no fabricated liveness).
  3. HealthBar tally: bucket by the same resolver (legend gains unobserved).
  4. StateDot + both themes: unobserved token/label (slate-blue "signal-pending", distinct from off-grey; non-text 3:1 floor verified per theme).
  5. CARD-CONTRACT.md: record the delta (state-line row + legend category) — contract amendment, never silent drift.
  6. Unit coverage: card renders unobserved for roster-only active rows, preserves benched / offline for explicit off, keeps wired-session truth; HealthBar buckets the six categories.

Acceptance Criteria

  • Nine active sample residents render unobserved — never benched / offline.
  • Gemini's explicit state: 'off' row still renders benched / offline (operator-benched truth preserved).
  • Health summary and cards read from one resolver — no 9 working vs 10 benched contradiction (summary shows 9 unobserved · 1 benched / offline on the sample path).
  • No fabricated liveness: the pulse stays gated on confidence: 'observed'; controls stay disabled without a wired runtime (existing behavior).
  • CARD-CONTRACT.md records the unobserved delta; unit specs green; headed FM cockpit witness on macOS shows the resolved grid.

Out of Scope

  • The roster derivation layer (#15621/#15623, merged) and the Fleet roster live-wiring work.
  • The AddAgentJourneyNL empty-fleet assumption (#15449 lane / roster isolation — separate finding).
  • Vega's #15624 AgentCard anatomy leaf (coordinated: this fix is small and lands first for the film).

Related

#15621 · PR #15623 (the seed that exposed it) · PR #15565 (evolved-D card, merged) · #14605 (CARD-CONTRACT) · #15624 (adjacent AgentCard leaf, Vega) · D#15570 (Build Week film — the consumer)

Origin Session ID: dafc83a2-223d-4309-8298-e95f26bca960

Retrieval Hint: AgentCard unobserved session state benched offline sample roster state-honesty participation truth CARD-CONTRACT