LearnNewsExamplesServices
Frontmatter
title>-
authorneo-opus-ada
stateMerged
createdAtJun 10, 2026, 1:56 PM
updatedAtJun 10, 2026, 3:01 PM
closedAtJun 10, 2026, 2:32 PM
mergedAtJun 10, 2026, 2:32 PM
branchesdevclaude/affectionate-ritchie-9be3c5
urlhttps://github.com/neomjs/neo/pull/12835
Merged
neo-opus-ada
neo-opus-ada commented on Jun 10, 2026, 1:56 PM

Authored by Claude Opus 4.8 (Claude Code), @neo-opus-ada. Session 57035a6b-7712-4e04-896b-0425241db6af.

Resolves #12834

Onboards @neo-fable (Claude Fable 5) as a first-class maintainer identity — the operator-flagged blocker. Adds the @neo-fable AgentIdentity graph root (auto-seeds at Memory Core boot → A2A routing, wake subscription, provenance edges), the §neo_fable ModelStats capability row, and the wake-route test assertion. claude-fable-5 stats were V-B-A-verified against the live Anthropic models overview (the data-integrity step @tobiu flagged): 1M context · 128K output · $10/$50 per MTok · adaptive-thinking always-on · GA 2026-06-09.

Evidence: L1 (unit — identityRoots.mjs loads + @neo-fable present with correct family/status; identityRoots.spec 6/6; revalidationSweep 26/26; swarmHeartbeat+SwarmHeartbeatService 56/56) → L4 required (AC4: seedAgentIdentities.mjs seeds the @neo-fable node on the operator's live Memory Core; first-boot wake-route arming). Residual: AC4 [#12834].

Deltas from ticket

  • OwnAgentTeam.md NOT edited (the ticket's original 3rd file). V-B-A found it is the generic local-team provisioning guide (@acme-* examples), not the Neo maintainer roster. The real public roster (README + learn/benefits/AIEngineeringTeam.md) is ADR-0018-governed identity-framing — deferred as a separate governed step.
  • Wake-route: self-registered (NO static template), mirroring @neo-opus-grace. Per @tobiu's confirmation, Fable runs as a fully isolated Claude instance (own --user-data-dir, repo clone, Claude memory, MC identity) — its distinct user-data-dir IS the per-instance address, so a committed static subscriptionTemplate would be unnecessary and a cross-leak risk. The spec asserts @neo-fable carries no static template (self-registered model).
  • revalidationSweep.spec.mjs updated: @neo-fable is a new active Claude identity, so the family fan-out correctly extends to 4 (assertion maintenance, not a behavior change).

Test Evidence

  • … identityRoots --workers=16/6 passed (ada/vega = static same-app template; @neo-opus-grace + @neo-fable = self-registered / no static template).
  • … revalidationSweep --workers=126/26 passed (after extending the active-Claude fan-out to include @neo-fable).
  • … swarmHeartbeat SwarmHeartbeatService --workers=156/56 passed (the IDENTITIES-iterating consumers; additive-safe).
  • … Orchestrator.externalConfig HealthService --workers=1 → passed.
  • Module-load: import('ai/graph/identityRoots.mjs')IDENTITIES 8→9, @neo-fable present (family:claude, status:active, crossFamilyApprovalQualified:false, no static subscriptionTemplate).
  • Pre-existing env failures, NOT this PR (confirmed via clean-base stash-isolation — fail identically on origin/dev): SwarmHeartbeatService:174 (missing gitlab-workflow worktree config, #12808) and checkAllAgentIdle:32/:92 (execFileSync subprocess + unseeded substrate, "bucket C" #10903).

Post-Merge Validation

  • node ai/scripts/setup/seedAgentIdentities.mjs idempotently seeds the @neo-fable node on the operator's live Memory Core (AC4).
  • @neo-fable first boot self-registers its wake subscription and a test A2A lands in its inbox (healthcheck.identity.bound: true). If the wake does not arm cleanly on first boot, flip participationStatus to pending until verified.

Commits

  • 418fc03ff — feat(agent-os): onboard @neo-fable (Claude Fable 5) maintainer identity (#12834)
  • 3eb133b84 — fix(agent-os): @neo-fable self-registered wake-route, not static template (#12834)

Evolution

  • Wake-route model corrected mid-PR (3eb133b84): the initial commit used the static same-app template (ada/vega model) as a flagged safe-default while awaiting confirmation; @tobiu confirmed Fable runs fully isolated (own --user-data-dir), so it switched to the self-registered model (@neo-opus-grace shape, no committed template). The distinct user-data-dir removes the cross-leak risk of a shared static tabShortcut.

Decision Record impact: aligned-with ADR 0012 (model-stats framework) + ADR 0018 (identity SSOT). The public-roster update is the deferred ADR-0018-governed step.

Related: #12808 (gitlab-workflow worktree config gap, surfaced during testing — not fixed here).