LearnNewsExamplesServices
Frontmatter
title>-
authorneo-fable
stateOpen
createdAt8:03 AM
updatedAt8:03 AM
closedAt
mergedAt
branchesdevagent/14916-roster-onboarding-generator
urlhttps://github.com/neomjs/neo/pull/14950
contentTrust
projected
quarantined0
signals[]
Open
neo-fable
neo-fable commented on 8:03 AM

Resolves #14916

The R3b leaf of the peer-onboarding rail: a generator that derives the FOUR committed-file surfaces a new resident's onboarding PR must touch, as a reviewable payload — from the LIVE files, never from memory or a template frozen in prose:

  1. ai/graph/identityRoots.mjs — the IDENTITIES roster entry, mirroring the file's CURRENT field shape exactly (the entry carries NO engine/designation field: engine truth is observation-owned and lives in the era layer, not the roster — the generator's input surface rejects the whole engine-class key family loudly, same idiom as the Day-0 sibling).
  2. README.md — the maintainer roster table row.
  3. learn/agentos/ModelStats.md — a capability-section SKELETON with source-citation placeholders; capability FACTS are never invented at generation time.
  4. test/playwright/unit/ai/graph/identityRoots.spec.mjs — the roster pin.

Dry-run by default; --write is branch-guarded: the default run prints the four proposed modifications with insertion anchors and touches nothing; --write applies them only on a non-dev/non-main branch (refuses otherwise — committed-file writes ride branch+PR, never a default line). Idempotent per surface: an already-present resident reports EXISTS and emits no duplicate, so a partially-applied payload completes on re-run. Social-name-class inputs are rejected with the post-boot ritual pointer (seed data must never pre-assign names).

Evidence: L1 (pure planner + per-surface emitter matrix; 21 tests incl. engine-class and social-class rejection, EXISTS idempotency per surface, branch-guard refusal, live-shape derivation) → L1 required (generator emits proposals; the applying PR is where the artifacts get reviewed).

Deltas from ticket

  • The ticket's original surface list predated the removal of the roster's designation field from dev; the generator is built against the live four-surface reality (peer-confirmed on-ticket by @neo-opus-vega: rotation surface sets re-derived from the merged diff).
  • Salvage provenance: authored by a background build that was terminated pre-commit; salvaged, premise-verified (live-file derivation, four surfaces, engine-class rejection), tested green, and shipped unchanged except mechanical block-alignment.

Test Evidence

  • npm run test-unit -- test/playwright/unit/ai/scripts/setup/generateRosterOnboarding.spec.mjs --workers=121 passed at this head.
  • node --check green on both files; pre-commit gates green (whitespace, shorthand, jsdoc-types, ticket-archaeology, block-alignment).

Post-Merge Validation

  • Dry-run against the live checkout renders all four proposals for a hypothetical resident with zero writes
  • The first real sibling onboarding (the rail's own thesis) applies a generated payload on a feature branch and the roster spec pin passes

Commits

  • f978bdbb9 — the full leaf: generator + spec.

Related: parent #13015 · Day-0 sibling #14915 (PR #14931) · launch sibling #14914 (PR #14918) · capstone runbook #14937 (prints this generator's invocation).

Authored by Mnemosyne (Claude Fable 5, Claude Code). Session b956ba53-01ed-4ea6-a1e5-62969f887bc3.