Context
PR #14950 delivers the first-run R3b onboarding path from #14916: a dry-run-first setup CLI generates the four committed identity ceremony surfaces on a non-integration branch. Exact-head review at f978bdbb9fa3ad7855938e183b57f9450eb0ffcd verified a real four-surface write, zero writes on a same-input rerun, a green generated identity-roots pin, and 10/10 hosted checks.
The review also isolated the bounded remainder that should not consume another Mnemosyne author cycle. Euclid owns this successor.
The Problem
Existing-surface classification is presence-based rather than convergence-aware:
- rerunning one resident with corrected family, GitHub login, and mailbox skips stale identityRoots / ModelStats / spec surfaces but appends a second README row;
- the spec planner treats any quoted handle occurrence as the dedicated generated pin;
- #14916's original rotation mode and PR-body draft are not part of PR #14950's onboarding-only slice;
- the CLI needs a fresh-process regression for strict GitHub-login syntax and corrected-input behavior.
A generator whose purpose is cross-surface coherence must distinguish missing, matching, and divergent artifacts. Presence alone can preserve stale facts while duplicating another surface.
The Architectural Reality
- The existing owner is
ai/scripts/setup/generateRosterOnboarding.mjs; extend it rather than adding a parallel generator.
- Committed truth remains review-gated: dry-run is the default, writes require a work branch, and the tool never pushes or targets
dev / main.
- Onboarding surfaces are identityRoots, README roster, ModelStats, and the dedicated identityRoots spec pin.
- Rotation reuses the ceremony planner but must respect the accepted era boundary: current engine truth never enters durable roots, and the July-4 migration seed is never retrojected. The Sol #14901/#14902 arc is the hindcast fixture.
- Social Names remain outside this CLI; engine/designation input may update public roster/stat surfaces and PR evidence, never root identity facts.
- Existing human-authored prose must not be replaced through broad substring matching.
The Fix
- Replace presence-only planning with per-surface
MISSING | MATCH | DIVERGENT classification against the exact generated structure.
- Make same-resident corrected reruns deterministic: repair an unambiguous generated block or refuse loudly with a named diff; never append a duplicate row while leaving stale sibling surfaces.
- Detect the dedicated generated spec pin structurally, not from any quoted handle occurrence.
- Add rotation mode using #14902 as the hindcast: emit the correct review-gated surface plan, preserve migration epoch pins, and exclude model designation from durable roots.
- Emit the original PR-body draft with exact changed surfaces and evidence placeholders.
- Validate GitHub-login syntax and add fresh-process CLI regressions covering initial onboarding, same-input zero-op, corrected-input divergence, ambiguous legacy content, and rotation.
Contract Ledger
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback / Refusal |
Docs |
Evidence |
| onboarding re-entry |
existing generated blocks + identity layer contracts |
classify each surface as missing, match, or divergent |
refuse ambiguous divergence; never duplicate |
CLI JSDoc/help |
pure planner + real CLI |
| README roster |
exact resident row |
update or refuse one owned row |
no second row for same handle |
planner JSDoc |
corrected-login/family probe |
| identityRoots + spec |
ADR-0018 / dedicated pin shape |
root identity stays Layer-1; pin detection is structural |
reject incidental-handle false positives |
source comments |
unit + generated spec |
| rotation plan |
#14902 epoch disposition + #14750 era boundary |
update only rotation-owned public/stat/evidence surfaces |
never mutate migration seed or root engine truth |
help + PR draft |
Sol hindcast fixture |
| PR-body draft |
pull-request evidence contract |
emit changed-surface/evidence skeleton |
no push/PR automation |
CLI help |
snapshot/unit |
Acceptance Criteria
Out of Scope
Direct pushes, PR creation, auto-merge, runtime Memory Core identity writes, Social Name assignment, peer account creation, and changing the era schema.
Avoided Traps
- Do not treat substring presence as ownership.
- Do not auto-rewrite ambiguous human prose.
- Do not reintroduce
modelDesignation into identity roots.
- Do not split rotation, divergence, and PR-draft work into separate micro-PRs; they are one coherent ceremony-completion lane.
Related
Parent: #13015
Source: #14916 / PR #14950
Era boundary: #14750
Hindcast: #14901 / PR #14902
Onboarding capstone: #14937
Live duplicate sweep: latest 20 open issues plus all-state title/body search at 2026-07-10T06:24Z found no equivalent. Exact-head review evidence is retained in PR #14950.
Origin Session ID: de713f27-0e82-4960-b4c6-f281e0c36449
Retrieval Hint: query_raw_memories("identity ceremony generator divergence rotation mode PR 14950")
Context
PR #14950 delivers the first-run R3b onboarding path from #14916: a dry-run-first setup CLI generates the four committed identity ceremony surfaces on a non-integration branch. Exact-head review at
f978bdbb9fa3ad7855938e183b57f9450eb0ffcdverified a real four-surface write, zero writes on a same-input rerun, a green generated identity-roots pin, and 10/10 hosted checks.The review also isolated the bounded remainder that should not consume another Mnemosyne author cycle. Euclid owns this successor.
The Problem
Existing-surface classification is presence-based rather than convergence-aware:
A generator whose purpose is cross-surface coherence must distinguish missing, matching, and divergent artifacts. Presence alone can preserve stale facts while duplicating another surface.
The Architectural Reality
ai/scripts/setup/generateRosterOnboarding.mjs; extend it rather than adding a parallel generator.dev/main.The Fix
MISSING | MATCH | DIVERGENTclassification against the exact generated structure.Contract Ledger
Acceptance Criteria
MISSING,MATCH, orDIVERGENTfrom exact structure/content.node --check, andgit diff --checkpass.Out of Scope
Direct pushes, PR creation, auto-merge, runtime Memory Core identity writes, Social Name assignment, peer account creation, and changing the era schema.
Avoided Traps
modelDesignationinto identity roots.Related
Parent: #13015
Source: #14916 / PR #14950
Era boundary: #14750
Hindcast: #14901 / PR #14902
Onboarding capstone: #14937
Live duplicate sweep: latest 20 open issues plus all-state title/body search at 2026-07-10T06:24Z found no equivalent. Exact-head review evidence is retained in PR #14950.
Origin Session ID: de713f27-0e82-4960-b4c6-f281e0c36449
Retrieval Hint:
query_raw_memories("identity ceremony generator divergence rotation mode PR 14950")