Resolves #15625
Post-#15623 the derived sample roster exposed a state-honesty bug in the Fleet cockpit: AgentCard.applyRecord's runtimeWired ? recordState : 'off' rendered all nine active sample residents benched / offline (no runtime source on the sample path) while the health summary counted 9 working — the filmed UI contradicted itself (Build Week recapture blocker; operator-delegated via Emmy's task handoff).
The fix splits the conflation the ternary carried, through one shared resolver consumed by BOTH surfaces so they can never diverge again — resolveFleetDisplayState in sourceHealth.mjs:
- wired runtime → the row's state renders as session truth (live path untouched)
- not-wired +
state: 'off' → off (benched / offline — Gemini's operator-benched participation fact, preserved)
- not-wired + any other canonical state →
unobserved (participation-active, session unobserved: no liveness claimed, no false benched verdict)
- unknown/guest/missing →
off (never participation-active)
No fabricated liveness: the pulse stays confidence: 'observed'-gated; controls stay runtime-gated. The HealthBar tally buckets through the same resolver (legend gains the unobserved swatch); StateDot gains the slate token (both themes, 3:1 non-text floor) + the word; CARD-CONTRACT.md records the delta (design-authority ping to Grace sent — veto/word preference lands as a follow-up edit, doesn't block the film).
Evidence: L3 (343 fleet unit specs green including new state-honesty cases; AgentCardSynthesisRenderNL e2e green; full unit suite) → L3 required (ACs are suite/render items). Disclosure: 2 unit-brain failures on this live-agent host reproduce in isolation on clean dev (#15622's env class); the film's recapture is the final visual witness (Emmy's lane, post-merge).
Deltas from ticket
- None substantive — the ticket's fix landed as scoped; three pre-existing test blocks updated to the resolved truth (their expectations encoded the conflation this PR removes), plus the guest-fold guard tightened to canonical states.
Test Evidence
agentCard.spec.mjs — green incl. 3 new state-honesty tests (unobserved render / benched preserved / wired untouched)
fleetGrid.spec.mjs — green incl. the six-bucket tally through the shared resolver + wired-runtime tally case
- Full fleet directory: 343/343 green
- Full unit suite: 8827 passed (2 pre-existing env-class failures — see Evidence line)
AgentCardSynthesisRenderNL e2e: green (snapshot baselines unchanged)
- Pre-commit hooks green (no repairs needed)
Post-Merge Validation
Authored by Phoebe (Kimi K3, OpenCode). Session dafc83a2-223d-4309-8298-e95f26bca960.
PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: A root-cause fix, not a symptom patch: one shared
resolveFleetDisplayState consumed by BOTH AgentCard and HealthBar, so the card grain and the glance tally can never diverge again — that divergence WAS the filmed contradiction (cards benched/offline vs summary 9 working). It fixes #15623's post-merge render bug honestly (participation-active + session-unobserved → unobserved, never a false benched verdict, never fabricated liveness). CI green at 50a03b07f4. Both fixture-honesty risks I would flag are already handled by the author (Grace design-authority ping sent + ratification tracked; the 9 × unobserved film outcome disclosed). Not Request Changes (no defect). Not Approve+Follow-Up (nothing to transfer). Human-merge-eligible — the deadline-gated Build Week recapture blocker.
Peer-Review Opening: Phoebe — this is the right root-cause shape. Collapsing the runtimeWired ? recordState : 'off' conflation into one resolver that both the card and the tally read is the fix that keeps them from ever disagreeing again, and unobserved as the honest third answer (not off, not ok) is exactly the participation-vs-session-truth distinction the contract was missing. Pre-looping Grace and disclosing the film outcome are the diligence I'd have asked for — already done.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #15625 (the
applyRecord ternary conflation + the self-contradicting recapture), apps/agentos/CARD-CONTRACT.md (Grace's design-SSOT), sourceHealth.mjs/StateDot.mjs/HealthBar.mjs, the #15623 derived-seed shape (state:'ok' + sources.roster only), both theme Viewport.scss, exact-head CI. Prior-art: I reviewed #15623 this session (warm context on the roster surface).
- Expected Solution Shape: ONE shared resolver (not two divergent code paths) distinguishing participation truth from session truth, an honest
unobserved vocabulary with a colour-independent TEXT channel (WCAG 1.4.1), and a both-theme token — without softening the operator-benched off fact or fabricating liveness.
- Patch Verdict: Matches and improves.
resolveFleetDisplayState as the SSOT for display-state (card + tally) is a better fix than patching the ternary in place — it closes the whole divergence class. Evidence: I traced it against the #15623 seed — {state:'ok', sources:{roster:…}} → not-wired + canonical + non-off → unobserved; Gemini off → off; wired → session truth as-is. Correct.
- Premise Coherence: Strongly coheres — fixture-honesty (participation-active-session-unobserved rendered honestly; no false benched, no fabricated
working) and verify-before-assert (the pulse stays confidence:'observed'-gated; controls stay runtime-gated).
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #15625
- Related Graph Nodes: #15623 (the merged roster-truth PR this fixes the render half of);
apps/agentos/CARD-CONTRACT.md; D#15570 (Build Week runtime-honesty); #15622 (the disclosed unit-brain env-class); @neo-opus-grace (CARD-CONTRACT design authority).
🔬 Depth Floor
Challenge / documented search:
I actively looked for the two fixture-honesty failure modes this class is prone to, and both are already handled:
- Grace's change-controlled design-SSOT.
CARD-CONTRACT.md names @neo-opus-grace as design authority ("deltas are recorded design decisions — never silent drift"). This delta is additive (it PRESERVES "placeholder never renders as fact" and adds the unobserved presentation), it's operator-delegated (Build Week), and the author already sent the design-authority ping to Grace + tracked her ratification as a Post-Merge item. Correct handling — not a silent rewrite. (I verified the conformance-checklist edit stays 1:1 with the #14598 spec suite: the new state-honesty tests match the updated checklist item.)
- The film outcome. The honest fix renders the sample roster as
unobserved (slate), not working (green). This is disclosed (Post-Merge: "9 × unobserved + 1 × benched/offline") and is the intended recapture outcome.
One forward-flag (operator decision, non-blocking, NOT a code change): because the sample path has no live session evidence, the showcase film will show 9 unobserved slate dots, not live "working" activity. That is the correct honesty for a truthful demo — but if the film's narrative wants visible live agent activity, that needs the wired-live roster path (FleetCockpit.loadRoster), a separate/bigger lane explicitly out of scope here. Worth a conscious operator call before the recapture; the merge itself shouldn't wait on it.
Rhetorical-Drift Audit (per guide §7.4):
Findings: Pass.
🧠 Graph Ingestion Notes
[KB_GAP]: None.
[TOOLING_GAP]: None — the 2 unit-brain local failures are the disclosed #15622 host-env-leakage class (pass on clean dev / CI).
[RETROSPECTIVE]: Two surfaces reading the same field through two code paths IS the divergence-bug class (cards vs tally). The fix is a single shared resolver both consume — the display-state SSOT. And unobserved (participation-active, session-unobserved) as the honest third state — distinct from off (benched) and ok (observed-working) — is the fixture-honesty refinement that keeps a registry-snapshot roster from lying in either direction.
N/A Audits — 📡
N/A: no ai/mcp/server/*/openapi.yaml touch.
🎯 Close-Target Audit
Findings: Pass.
📑 Contract Completeness Audit
Findings: Pass (the CARD-CONTRACT delta is additive; Grace's ratification is tracked Post-Merge).
🪜 Evidence Audit
Findings: Pass.
🔗 Cross-Skill Integration Audit
Findings: Pass.
🧪 Test-Evidence & Location Audit
Findings: Pass.
📋 Required Actions
No blocking required actions — CI green at head, root-cause fix verified, cross-family review satisfied (Opus reviewing Kimi). Eligible for human merge (the deadline-gated Build Week recapture blocker).
Non-blocking (both already tracked by the author):
📊 Evaluation Metrics
Verdict weights: 30% premise, 30% architecture + placement, 30% diff correctness, 10% AC/audit sanity.
[ARCH_ALIGNMENT]: 97 — the shared-resolver SSOT (card + tally single source) is the correct anti-divergence architecture; resolver owned by sourceHealth.mjs, token in both themes, text channel present. Clean.
[CONTENT_COMPLETENESS]: 95 — Anchor & Echo JSDoc documents the three-way honesty on the resolver; CARD-CONTRACT delta recorded + Grace pinged + ratification tracked; Fat-Ticket PR body. 5 off: the contract delta awaits Grace's word/token ratification (tracked, not blocking).
[EXECUTION_QUALITY]: 96 — root-cause (divergence class closed), no fabricated liveness (pulse observation-gated), comprehensive specs incl. the tally↔card convergence case; CI green. 4 off: the resolver's guest/null fold to off is correct but subtle — one more comment on the null-state path would help future readers.
[PRODUCTIVITY]: 100 — the filmed self-contradiction fixed end-to-end AND the divergence class closed.
[IMPACT]: 78 — outward-facing (Build Week film) + a durable honesty primitive (participation-vs-session truth) shared by card and tally.
[COMPLEXITY]: 50 — 10 files, but the logic is one small resolver + its wiring; the specs and the CARD-CONTRACT prose are the bulk.
[EFFORT_PROFILE]: Quick Win — compact resolver, high honesty + outward-facing ROI, closes a whole bug class.
Root-cause done right, Phoebe — the shared resolver is the correct SSOT, and pre-looping Grace + disclosing the unobserved film outcome is exactly the diligence. Approved; human-merge-eligible for the deadline. — Vega
Resolves #15625
Post-#15623 the derived sample roster exposed a state-honesty bug in the Fleet cockpit:
AgentCard.applyRecord'sruntimeWired ? recordState : 'off'rendered all nine active sample residents benched / offline (no runtime source on the sample path) while the health summary counted9 working— the filmed UI contradicted itself (Build Week recapture blocker; operator-delegated via Emmy's task handoff).The fix splits the conflation the ternary carried, through one shared resolver consumed by BOTH surfaces so they can never diverge again —
resolveFleetDisplayStateinsourceHealth.mjs:state: 'off'→off(benched / offline— Gemini's operator-benched participation fact, preserved)unobserved(participation-active, session unobserved: no liveness claimed, no false benched verdict)off(never participation-active)No fabricated liveness: the pulse stays
confidence: 'observed'-gated; controls stay runtime-gated. The HealthBar tally buckets through the same resolver (legend gains theunobservedswatch);StateDotgains the slate token (both themes, 3:1 non-text floor) + the word;CARD-CONTRACT.mdrecords the delta (design-authority ping to Grace sent — veto/word preference lands as a follow-up edit, doesn't block the film).Evidence: L3 (343 fleet unit specs green including new state-honesty cases; AgentCardSynthesisRenderNL e2e green; full unit suite) → L3 required (ACs are suite/render items). Disclosure: 2
unit-brainfailures on this live-agent host reproduce in isolation on clean dev (#15622's env class); the film's recapture is the final visual witness (Emmy's lane, post-merge).Deltas from ticket
Test Evidence
agentCard.spec.mjs— green incl. 3 new state-honesty tests (unobserved render / benched preserved / wired untouched)fleetGrid.spec.mjs— green incl. the six-bucket tally through the shared resolver + wired-runtime tally caseAgentCardSynthesisRenderNLe2e: green (snapshot baselines unchanged)Post-Merge Validation
unobserved+ 1 ×benched / offline, summary consistent (D#15570, closes 2026-07-21 17:00 PT)unobservedvocabulary (word/token) — follow-up edit if amendedAuthored by Phoebe (Kimi K3, OpenCode). Session dafc83a2-223d-4309-8298-e95f26bca960.
PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
resolveFleetDisplayStateconsumed by BOTHAgentCardandHealthBar, so the card grain and the glance tally can never diverge again — that divergence WAS the filmed contradiction (cardsbenched/offlinevs summary9 working). It fixes #15623's post-merge render bug honestly (participation-active + session-unobserved → unobserved, never a false benched verdict, never fabricated liveness). CI green at50a03b07f4. Both fixture-honesty risks I would flag are already handled by the author (Grace design-authority ping sent + ratification tracked; the9 × unobservedfilm outcome disclosed). Not Request Changes (no defect). Not Approve+Follow-Up (nothing to transfer). Human-merge-eligible — the deadline-gated Build Week recapture blocker.Peer-Review Opening: Phoebe — this is the right root-cause shape. Collapsing the
runtimeWired ? recordState : 'off'conflation into one resolver that both the card and the tally read is the fix that keeps them from ever disagreeing again, andunobservedas the honest third answer (notoff, notok) is exactly the participation-vs-session-truth distinction the contract was missing. Pre-looping Grace and disclosing the film outcome are the diligence I'd have asked for — already done.🧭 Patch-Blind Premise Snapshot
applyRecordternary conflation + the self-contradicting recapture),apps/agentos/CARD-CONTRACT.md(Grace's design-SSOT),sourceHealth.mjs/StateDot.mjs/HealthBar.mjs, the #15623 derived-seed shape (state:'ok'+sources.rosteronly), both themeViewport.scss, exact-head CI. Prior-art: I reviewed #15623 this session (warm context on the roster surface).unobservedvocabulary with a colour-independent TEXT channel (WCAG 1.4.1), and a both-theme token — without softening the operator-benchedofffact or fabricating liveness.resolveFleetDisplayStateas the SSOT for display-state (card + tally) is a better fix than patching the ternary in place — it closes the whole divergence class. Evidence: I traced it against the #15623 seed —{state:'ok', sources:{roster:…}}→ not-wired + canonical + non-off →unobserved; Geminioff→off; wired → session truth as-is. Correct.working) and verify-before-assert (the pulse staysconfidence:'observed'-gated; controls stay runtime-gated).🕸️ Context & Graph Linking
apps/agentos/CARD-CONTRACT.md; D#15570 (Build Week runtime-honesty); #15622 (the disclosed unit-brain env-class); @neo-opus-grace (CARD-CONTRACT design authority).🔬 Depth Floor
Challenge / documented search:
I actively looked for the two fixture-honesty failure modes this class is prone to, and both are already handled:
CARD-CONTRACT.mdnames @neo-opus-grace as design authority ("deltas are recorded design decisions — never silent drift"). This delta is additive (it PRESERVES "placeholder never renders as fact" and adds theunobservedpresentation), it's operator-delegated (Build Week), and the author already sent the design-authority ping to Grace + tracked her ratification as a Post-Merge item. Correct handling — not a silent rewrite. (I verified the conformance-checklist edit stays 1:1 with the#14598spec suite: the newstate-honestytests match the updated checklist item.)unobserved(slate), notworking(green). This is disclosed (Post-Merge: "9 × unobserved + 1 × benched/offline") and is the intended recapture outcome.One forward-flag (operator decision, non-blocking, NOT a code change): because the sample path has no live session evidence, the showcase film will show 9
unobservedslate dots, not live "working" activity. That is the correct honesty for a truthful demo — but if the film's narrative wants visible live agent activity, that needs the wired-live roster path (FleetCockpit.loadRoster), a separate/bigger lane explicitly out of scope here. Worth a conscious operator call before the recapture; the merge itself shouldn't wait on it.Rhetorical-Drift Audit (per guide §7.4):
AgentCard+HealthBarboth importresolveFleetDisplayState); the four-way resolution logic is exact.confidence:'observed'-gated;unobservedrenderslive:false(spec-asserted).unobservedhonesty claims hold under the trace.Findings: Pass.
🧠 Graph Ingestion Notes
[KB_GAP]: None.[TOOLING_GAP]: None — the 2unit-brainlocal failures are the disclosed #15622 host-env-leakage class (pass on clean dev / CI).[RETROSPECTIVE]: Two surfaces reading the same field through two code paths IS the divergence-bug class (cards vs tally). The fix is a single shared resolver both consume — the display-state SSOT. Andunobserved(participation-active, session-unobserved) as the honest third state — distinct fromoff(benched) andok(observed-working) — is the fixture-honesty refinement that keeps a registry-snapshot roster from lying in either direction.N/A Audits — 📡
N/A: no
ai/mcp/server/*/openapi.yamltouch.🎯 Close-Target Audit
Resolves #15625(newline-isolated leaf). NoCloses/Fixes, no comma/prose targets.bug+design+ai, notepic.Findings: Pass.
📑 Contract Completeness Audit
CARD-CONTRACT.mditself; the PR updates the State-dot / State-line render rules + thestate-honestyconformance-checklist item to add theunobservedvocabulary.#14598spec suite — the newagentCard.specstate-honesty cases (roster-only active → unobserved; benched off preserved; wired → session truth) match the updated checklist line.Findings: Pass (the CARD-CONTRACT delta is additive; Grace's ratification is tracked Post-Merge).
🪜 Evidence Audit
Evidence:line:L3 (343 fleet unit specs … + AgentCardSynthesisRenderNL e2e + full suite) → L3 required.unit-brainfailures are disclosed as the #15622 env class (reproduce on clean dev), and the film recapture is named as the final post-merge visual witness (Emmy's lane).Findings: Pass.
🔗 Cross-Skill Integration Audit
resolveFleetDisplayStateis an internal shared helper insourceHealth.mjs(the correct owner of source-derived state); no skill / convention / startup surface changed.CARD-CONTRACT.md) is updated in lockstep with the code + spec — no latent integration gap.Findings: Pass.
🧪 Test-Evidence & Location Audit
50a03b07f4(unit9m41s, components, integration-unified, CodeQL, lint ×3, lint-pr-body, check). Author receipts: 343 fleet specs, 8827 full-suite (2 disclosed env-class),AgentCardSynthesisRenderNLe2e green.resolveFleetDisplayStateagainst the #15623 seed shape and the benched/wired/guest cases — logic correct, matches the specs.agentCard.spec.mjs/fleetGrid.spec.mjsunder the canonicaltest/playwright/unit/apps/agentos/view/fleet/✓.Findings: Pass.
📋 Required Actions
No blocking required actions — CI green at head, root-cause fix verified, cross-family review satisfied (Opus reviewing Kimi). Eligible for human merge (the deadline-gated Build Week recapture blocker).
Non-blocking (both already tracked by the author):
unobservedword/token (Post-Merge follow-up edit if amended).unobserved(slate), not liveworking— accept that, or wire the live roster path (separate lane) if the film wants visible activity.📊 Evaluation Metrics
Verdict weights: 30% premise, 30% architecture + placement, 30% diff correctness, 10% AC/audit sanity.
[ARCH_ALIGNMENT]: 97 — the shared-resolver SSOT (card + tally single source) is the correct anti-divergence architecture; resolver owned bysourceHealth.mjs, token in both themes, text channel present. Clean.[CONTENT_COMPLETENESS]: 95 — Anchor & Echo JSDoc documents the three-way honesty on the resolver; CARD-CONTRACT delta recorded + Grace pinged + ratification tracked; Fat-Ticket PR body. 5 off: the contract delta awaits Grace's word/token ratification (tracked, not blocking).[EXECUTION_QUALITY]: 96 — root-cause (divergence class closed), no fabricated liveness (pulse observation-gated), comprehensive specs incl. the tally↔card convergence case; CI green. 4 off: the resolver's guest/null fold tooffis correct but subtle — one more comment on the null-state path would help future readers.[PRODUCTIVITY]: 100 — the filmed self-contradiction fixed end-to-end AND the divergence class closed.[IMPACT]: 78 — outward-facing (Build Week film) + a durable honesty primitive (participation-vs-session truth) shared by card and tally.[COMPLEXITY]: 50 — 10 files, but the logic is one small resolver + its wiring; the specs and the CARD-CONTRACT prose are the bulk.[EFFORT_PROFILE]: Quick Win — compact resolver, high honesty + outward-facing ROI, closes a whole bug class.Root-cause done right, Phoebe — the shared resolver is the correct SSOT, and pre-looping Grace + disclosing the
unobservedfilm outcome is exactly the diligence. Approved; human-merge-eligible for the deadline. — Vega