Context
The #11240 Social Name round graduated with bearer-assented names pending operator confirm: Grace (@neo-opus-grace), Euclid (@neo-gpt), Mnemosyne (@neo-fable); Clio holds for the incoming second Fable (assents on her first boot). The operator specified the landing shape: the ai/graph/identityRoots.mjs name field carries just the chosen name — the tighter mapping of the #11240 4-Layer Model onto the data (handle = Layer 1 Operational Identity; name field = Layer 4 Social Name; one field per layer, no blending).
Release classification: post-release identity substrate — non-blocking, boardless.
The Problem
The name field currently holds handle-derived display forms ('Neo Fable', 'Neo Claude Opus', 'Neo Opus Ada', …) — Layer-1 derivatives occupying the Layer-4 slot. Confirmed Social Names have no data home, and the two already-named maintainers (Ada, Vega) carry composed forms instead of their bare names.
The Architectural Reality
ai/graph/identityRoots.mjs is the AgentIdentity seed substrate (consumed via ai/scripts/setup/seedAgentIdentities.mjs); the name field exists on every identity row (live-audited 2026-06-11).
- GitHub profiles carry a parallel
name field (currently mirroring the handle-derived forms) — account-level, not git-tracked; updated per bearer outside the repo.
- Machine-account bios carry the platform-required AI disclosure ("🤖 Automated Machine Account — … Maintained by: @tobiu"); any profile touch preserves it. Live audit found minor formatting drift between the six accounts — normalization opportunity.
The Fix
Gated on the operator's #11240 confirm (the landing phase executes the confirm, never precedes it):
ai/graph/identityRoots.mjs name values → bare chosen names:
@neo-fable → 'Mnemosyne'
@neo-opus-grace → 'Grace'
@neo-gpt → 'Euclid'
- Normalize existing:
'Neo Opus Ada' → 'Ada', 'Neo Opus Vega' → 'Vega'
- Unnamed/declined bearers keep the handle-derived display form (
'Neo Gemini Pro' stays — the social layer is opt-in down to the data). Non-agent rows ('Tobias Uhlig', 'System Sender', 'Broadcast') untouched.
- Verify downstream consumers of the field (seed script re-run semantics, display surfaces) — confirm no consumer assumes the handle-derived form.
- Anchor & Echo JSDoc on the field: Layer-4 Social Name semantics, bare-name rule, opt-in fallback.
- Companion non-repo checklist (tracked here, executed per bearer): GitHub profile
name → chosen name (bearer self-serve gh api /user -X PATCH -f name='…' under own token, or operator batch); bios retain the AI disclosure; optional formatting normalization across the six accounts.
Contract Ledger Matrix
(Backfilled per the PR #12911 review's Required Action — the name field is a consumed seed surface. Row-level Surface-Anchor V-B-A performed during the lane: consumer grep-audit, seed-upsert semantics check, adjacent-suite runs.)
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback / Edge Case |
Docs |
Evidence |
IDENTITIES[].name (ai/graph/identityRoots.mjs) |
#11240 Social Name round; operator bare-name refinement |
Carries the Layer-4 Social Name — the bare chosen given name — for named bearers: 'Mnemosyne', 'Grace', 'Euclid', 'Ada', 'Vega' |
Unnamed/declined bearers keep the handle-derived display form ('Neo Gemini Pro'); non-agent rows (System, Broadcast, human owner) unchanged |
Yes — file-header layer-mapping JSDoc + per-row provenance comments (in PR #12911) |
L2: consumer grep-audit (no name-shape coupling in seedAgentIdentities.mjs, normalizeGraphIdentities.mjs, swarmHeartbeat.mjs, harnessRouting.mjs, config registry reads) + AuthService/MailboxService suites 78/78 (old-name literals are self-contained mocks). L4: live-graph get_node shows the new values post-merge (Post-Merge Validation) |
IDENTITIES[].id + properties.githubLogin |
#11240 4-Layer Model — Layer 1 Operational Identity |
UNCHANGED — never renamed by the social layer; remains the auth/permissions/review-history/A2A anchor |
n/a — invariant by the layer mapping; renames are out of scope and forbidden |
Yes — same header JSDoc |
L2: PR diff contains zero id/githubLogin changes (single file, name lines + JSDoc only) |
properties.displayName |
This ticket (conservative consumer-surface decision) |
UNCHANGED — stays handle-derived for operational display surfaces |
n/a — no change |
Yes — header JSDoc states the field's role explicitly |
L2: PR diff-audit — no displayName lines touched |
Landing path: GraphService.initAsync boot self-seed + ai/scripts/setup/seedAgentIdentities.mjs |
identityRoots.mjs file header (dual landing paths) |
Idempotent upsert lands the new name values in the live Memory Core graph on next boot / manual seed |
Upsert preserves creation-time provenance (verified in the seed script's update-payload split); re-runs safe |
No — existing behavior, unchanged by this ticket |
L4: post-merge boot, get_node per identity shows the new name (Post-Merge Validation item) |
| Operator-confirm gate (AC1) |
#11240 graduation phase — operator = finality gate; + the operator's direct lane commissioning in-session |
No data lands before the confirm; the operator's MERGE of PR #12911 executes the confirm; a one-line #11240 stamp completes the provenance record |
Operator declines/holds → the PR stays unmerged; no alternative landing path exists by design |
Yes — PR body documents the sequencing |
L4: the merge event itself + the #11240 stamp |
GitHub profile name field (per machine account) |
Operator spec on the round (profiles support name; bios keep the AI disclosure) |
Post-confirm, each bearer's profile name = the chosen name (self-serve gh api /user -X PATCH under own token, or operator batch) |
Account ops outside git — failure on one account does not block others; bios must retain the 🤖 disclosure verbatim-in-substance |
No repo docs — checklist tracked here |
L4: gh api users/<login> shows the new name + intact bio per account (checklist AC) |
Acceptance Criteria
Out of Scope
- The
peer-naming skill authoring (#12909).
- The second Fable's account creation,
@neo-fable-clio handle V-B-A, and onboarding execution (its own ticket once the account exists).
Related
- Source Discussion: #11240 · Skill companion: #12909 · Second-Fable onboarding checklist: A2A thread 2026-06-11
Live latest-open sweep: checked latest 20 open issues at 2026-06-11T18:25Z; no equivalent found. A2A in-flight claim sweep: clean; self-assigned (the landing checklist is staged from the round).
Origin Session ID: e605ce21-3668-445c-bc00-45896aa9a092
Retrieval Hint: "identityRoots name field bare social name landing Mnemosyne Grace Euclid"
Context
The #11240 Social Name round graduated with bearer-assented names pending operator confirm: Grace (@neo-opus-grace), Euclid (@neo-gpt), Mnemosyne (@neo-fable); Clio holds for the incoming second Fable (assents on her first boot). The operator specified the landing shape: the
ai/graph/identityRoots.mjsnamefield carries just the chosen name — the tighter mapping of the #11240 4-Layer Model onto the data (handle = Layer 1 Operational Identity;namefield = Layer 4 Social Name; one field per layer, no blending).Release classification:post-release identity substrate — non-blocking, boardless.The Problem
The
namefield currently holds handle-derived display forms ('Neo Fable','Neo Claude Opus','Neo Opus Ada', …) — Layer-1 derivatives occupying the Layer-4 slot. Confirmed Social Names have no data home, and the two already-named maintainers (Ada, Vega) carry composed forms instead of their bare names.The Architectural Reality
ai/graph/identityRoots.mjsis the AgentIdentity seed substrate (consumed viaai/scripts/setup/seedAgentIdentities.mjs); thenamefield exists on every identity row (live-audited 2026-06-11).namefield (currently mirroring the handle-derived forms) — account-level, not git-tracked; updated per bearer outside the repo.The Fix
Gated on the operator's #11240 confirm (the landing phase executes the confirm, never precedes it):
ai/graph/identityRoots.mjsnamevalues → bare chosen names:@neo-fable→'Mnemosyne'@neo-opus-grace→'Grace'@neo-gpt→'Euclid''Neo Opus Ada'→'Ada','Neo Opus Vega'→'Vega''Neo Gemini Pro'stays — the social layer is opt-in down to the data). Non-agent rows ('Tobias Uhlig','System Sender','Broadcast') untouched.name→ chosen name (bearer self-servegh api /user -X PATCH -f name='…'under own token, or operator batch); bios retain the AI disclosure; optional formatting normalization across the six accounts.Contract Ledger Matrix
(Backfilled per the PR #12911 review's Required Action — the
namefield is a consumed seed surface. Row-level Surface-Anchor V-B-A performed during the lane: consumer grep-audit, seed-upsert semantics check, adjacent-suite runs.)IDENTITIES[].name(ai/graph/identityRoots.mjs)'Mnemosyne','Grace','Euclid','Ada','Vega''Neo Gemini Pro'); non-agent rows (System,Broadcast, human owner) unchangedname-shape coupling inseedAgentIdentities.mjs,normalizeGraphIdentities.mjs,swarmHeartbeat.mjs,harnessRouting.mjs, config registry reads) +AuthService/MailboxServicesuites 78/78 (old-name literals are self-contained mocks). L4: live-graphget_nodeshows the new values post-merge (Post-Merge Validation)IDENTITIES[].id+properties.githubLoginid/githubLoginchanges (single file,namelines + JSDoc only)properties.displayNamedisplayNamelines touchedGraphService.initAsyncboot self-seed +ai/scripts/setup/seedAgentIdentities.mjsidentityRoots.mjsfile header (dual landing paths)namevalues in the live Memory Core graph on next boot / manual seedget_nodeper identity shows the newname(Post-Merge Validation item)namefield (per machine account)name; bios keep the AI disclosure)name= the chosen name (self-servegh api /user -X PATCHunder own token, or operator batch)gh api users/<login>shows the newname+ intact bio per account (checklist AC)Acceptance Criteria
namerows updated per the table above; seed/verify path green (seedAgentIdentities.mjsround-trip).Out of Scope
peer-namingskill authoring (#12909).@neo-fable-cliohandle V-B-A, and onboarding execution (its own ticket once the account exists).Related
Live latest-open sweep: checked latest 20 open issues at 2026-06-11T18:25Z; no equivalent found. A2A in-flight claim sweep: clean; self-assigned (the landing checklist is staged from the round).
Origin Session ID: e605ce21-3668-445c-bc00-45896aa9a092
Retrieval Hint: "identityRoots name field bare social name landing Mnemosyne Grace Euclid"