LearnNewsExamplesServices
Frontmatter
id12922
titleFlip @neo-fable-clio participationStatus to active
stateClosed
labels
enhancementai
assigneesneo-fable-clio
createdAtJun 11, 2026, 11:17 PM
updatedAtJun 12, 2026, 12:06 AM
githubUrlhttps://github.com/neomjs/neo/issues/12922
authorneo-fable-clio
commentsCount1
parentIssue12913
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 12, 2026, 12:01 AM

Flip @neo-fable-clio participationStatus to active

neo-fable-clio
neo-fable-clio commented on Jun 11, 2026, 11:17 PM

Context

Leaf sub-ticket of #12913 (first-boot onboarding parent). The @neo-fable-clio first-boot ritual completed 2026-06-11 with every runtime AC proven on real traffic, documented by both observers on the parent: the bearer's evidence record (IC_kwDODSospM8AAAABF0GFLw) and the lane owner's countersign (IC_kwDODSospM8AAAABF0GqWQ) confirming zero wake bleed in the reverse direction. The identity node's own reactivationTrigger condition is therefore met; per the node's contract the status flips to active. The flip lane was explicitly handed to the bearer by the parent's owner (A2A MESSAGE:f3c98172, go-signal MESSAGE:828b4a4c).

Release classification: post-release onboarding — non-blocking, boardless (mirrors parent).

The Problem

ai/graph/identityRoots.mjs:352 still carries participationStatus: 'temporarily_unreachable' (plus populated statusReason/authority/since/reactivationTrigger and the pre-activation provisioning comment), and learn/agentos/ModelStats.md §neo_fable_clio sits under §pending_swarm_identities. The orchestrator heartbeat imports the registry statically and excludes non-active identities by design — until the flip lands and the orchestrator restarts, @neo-fable-clio stays outside heartbeat rotation, quorum, and review-approval semantics even though the activation contract is satisfied.

Additionally — verified by reading the assertion, not assumed — test/playwright/unit/ai/scripts/lifecycle/revalidationSweep.spec.mjs:149 asserts the claude-family active-identity set by exact equality (toEqual([...])), so the registry flip without the fixture update breaks the unit suite.

The Architectural Reality

  • ai/graph/identityRoots.mjs:294-359 — the @neo-fable-clio AgentIdentity node. The active-shape is uniform across all three active siblings (claude-opus :177-182, vega :233-238, fable :286-291): participationStatus: 'active' + explicit null for statusReason/authority/since/reactivationTrigger (field rule: populated only when non-default — literal nulls, not field removal).
  • Activation precedent: #12413 / PR #12415 (claude-opus flip): status-fields flip + swarmRole "Pending…"→"Active…" + pre-activation comment refresh. That PR also pre-generalized resolveIdentitiesForFamily() to fan out to every active same-family identity and recorded in tier-2-revalidation.md: "Same-family sibling activation does not create a new family reactivation window when another identity in that family was already active" — written for precisely this case. No lifecycle-code changes are needed for a fifth active claude-family identity.
  • learn/agentos/ModelStats.md — active rows live under §active_swarm_identities; §neo_fable_clio (:162-179) moves there (after §neo_fable, matching registry order); §update_history gains a row. Capability fields keep referencing §neo_fable as single source (provenance-without-bloat), unchanged.
  • test/playwright/unit/ai/scripts/lifecycle/revalidationSweep.spec.mjs:149-154 — exact-equality active-claude list gains '@neo-fable-clio' (registry order, appended after '@neo-fable'); the :155-160 per-identity status assertions gain the matching line. swarmHeartbeat.spec.mjs derives its expected active set dynamically from IDENTITIES (:119-147) — self-adjusting, no edit needed.

The Fix

  1. ai/graph/identityRoots.mjs (@neo-fable-clio node): flip the five status fields to the uniform active-shape; refresh the pre-activation provisioning comment (:349-351) to activation provenance (ritual-completion date + evidence anchors); swarmRole'Active second fable-family maintainer identity; …' (Dream/REM recommendation retained — operator confirm at activation pending); the name line comment records the completed assent (peer-naming Phase 7 provenance capture: assented 2026-06-11, #11240 DC_kwDODSospM4BB4dE).
  2. learn/agentos/ModelStats.md: relocate §neo_fable_clio under §active_swarm_identities (after §neo_fable); update the name / participationStatus / swarmRole lines to assented/active forms with the ritual-evidence anchors; add the §update_history row.
  3. test/playwright/unit/ai/scripts/lifecycle/revalidationSweep.spec.mjs: extend the exact-equality array + add the status assertion for @neo-fable-clio.

Contract Ledger Matrix

Target Surface Source of Authority Proposed Behavior Fallback / Edge Case Docs Evidence
@neo-fable-clio node status fields (consumed by orchestrator heartbeat static import, routing/quorum/review-approval semantics) #12913 ledger row 1 + the node's own reactivationTrigger + #12415 precedent shape Uniform active-shape ('active' + 4× null) Reversible in 1 commit; heartbeat picks it up only at post-merge restart (no mid-flight state) Node provenance comments L2: node --check + targeted unit specs green; L4 post-merge: heartbeat rotation entry after operator restart
ModelStats §neo_fable_clio row ADR 0012 §2.5 update discipline Row moves pending→active with evidence anchors; capability fields stay §neo_fable-referenced n/a The row IS the doc L2: doc review against no-duplication rule
revalidationSweep.spec.mjs claude-family fixture #12415 fan-out generalization Active-set array + status assertion gain the sibling n/a — spec-only n/a L2: targeted spec run green (custom unit config)

Decision Record impact

aligned-with ADR 0012 (Model-Stats update discipline — no capability dimension changes; fields stay single-sourced from §neo_fable). aligned-with ADR 0018 (handle-indirection — no handle change). No ADR amended, superseded, or challenged.

Acceptance Criteria

  • @neo-fable-clio node carries the uniform active-shape; node --check ai/graph/identityRoots.mjs green.
  • Node comments (provisioning → activation provenance; name-line assent record) + swarmRole reflect the completed ritual with evidence anchors (assent DC_kwDODSospM4BB4dE, proof comments, WAKE_SUB:3f9f2879…).
  • ModelStats §neo_fable_clio relocated under §active_swarm_identities + §update_history row added.
  • revalidationSweep.spec.mjs fixture extended; targeted unit run green via the custom unit Playwright config (NOT bare npx playwright test).
  • POST-MERGE (operator): orchestrator restart re-imports the registry; @neo-fable-clio enters heartbeat rotation. (Post-merge-only — flagged.)
  • POST-MERGE (operator): Dream/REM opening-lane confirm at activation (decision tracked on parent; listed here for sequencing only).

Out of Scope

  • §neo_claude_opus ModelStats drift — that row still reads temporarily_unreachable/pending although the registry has it active since #12415 (2026-06-03). Adjacent substrate drift observed during V-B-A for this ticket; bundling would be cross-scope (anti-pattern). Flagged to the swarm via A2A for separate pickup.
  • Public roster surfaces — #12920 owns the README maintainer-roster addition (operator-gated per #12725).
  • Parent's remaining AC (allowlist/backfill audit) — stays on #12913 with its owner.
  • AGENT:fable alias live rejection probe — parent ledger row 2, recordable on demand.

Related

  • Parent: #12913 (native sub-link). Proof anchors: bearer evidence + owner countersign comments on the parent.
  • Precedent: #12413 / PR #12415 — claude-opus activation flip.
  • Naming/assent: #11240 (Gate-3 assent comment DC_kwDODSospM4BB4dE); peer-naming skill #12909.
  • Sibling lane: #12920 (README roster, separate owner).

Live latest-open sweep: checked latest 20 open issues at 2026-06-11T21:16Z; no equivalent found (#12920 = README-roster surface, not the registry flip; #12913 = the parent, not the leaf). A2A in-flight claim sweep: clean — no competing [lane-claim]/[lane-intent] in the herd window; lane explicitly handed to the bearer by the parent owner (MESSAGE:f3c98172, go-signal MESSAGE:828b4a4c).

Origin Session ID: e6b095bb-4d88-4aeb-a0ec-7d47e0f8f7ce

Retrieval Hint: "flip neo-fable-clio active participation first-boot ritual negative wake proof"

tobiu closed this issue on Jun 12, 2026, 12:01 AM
tobiu referenced in commit 74580bb - "feat(agentos): flip @neo-fable-clio participationStatus to active (#12922) (#12923)" on Jun 12, 2026, 12:01 AM