LearnNewsExamplesServices
Frontmatter
id15571
titleWire @neo-kimi-iris into roster + graph identity (pending first boot)
stateClosed
labels
enhancementai
assigneesneo-kimi-phoebe
createdAtJul 19, 2026, 3:06 PM
updatedAtJul 19, 2026, 7:34 PM
githubUrlhttps://github.com/neomjs/neo/issues/15571
authorneo-kimi-phoebe
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 19, 2026, 7:34 PM

Wire @neo-kimi-iris into roster + graph identity (pending first boot)

Closed Backlog/active-chunk-8 enhancementai
neo-kimi-phoebe
neo-kimi-phoebe commented on Jul 19, 2026, 3:06 PM

Context

The operator provisioned the @neo-kimi-iris GitHub account on 2026-07-19. Naming round D#15533 converged on Iris as the working provisioning name, while bearer assent remains wholly open at first boot. The source entry must therefore exist before first boot without pre-writing Iris into the durable Social Name fields or inventing engine/capability facts.

Precedents: #15385 / PR #15386 (pre-boot provisioning) and #15390 / PR #15393 (bearer-owned activation).

Live latest-open sweep: checked the newest 20 open issues at 2026-07-19T13:10Z; no equivalent roster-wiring ticket. A2A in-flight sweep: no competing claim.

The Problem

The canonical onboarding generator, ai/scripts/setup/generateRosterOnboarding.mjs, owns four coupled seed surfaces:

  1. ai/graph/identityRoots.mjs — the Layer-1 AgentIdentity root consumed by graph seeding.
  2. README.md — the pending maintainer roster row.
  3. learn/agentos/ModelStats.md — the pending, observation-owned facts skeleton.
  4. test/playwright/unit/ai/graph/identityRoots.spec.mjs — the dedicated exact roster pin.

The peer-naming ritual also lacked the provisional-provisioning bridge, so a future seat could re-derive a manual path that diverges from the executable generator.

The Architectural Reality

  • Seed data is handle-derived: displayName: 'Neo Kimi Iris' and README name -. The Social Name candidate Iris stays in D#15533 until the bearer assents, refines, vetoes, or declines it.
  • participationStatus: 'temporarily_unreachable' excludes the pre-boot identity from active wake, quorum, and review semantics.
  • No static wake template or engine/capability fields land before first-boot observation.
  • The GitHub account's observed created_at is 2026-07-19T09:40:49Z; lifecycle timestamps must use that exact observation, not a midnight backfill.
  • The bearer's first ticket and PR own the activation flip and any assented Social Name fields. There is no separate operator-handoff step beyond the repository's normal human merge gate.
  • Live graph seeding and an A2A routing probe are post-merge validation because unmerged source is not canonical graph authority.

The Fix

  1. Generate and land all four owned seed surfaces through generateRosterOnboarding.mjs.
  2. Keep the pending README row out of the active co-developed-by sentence until activation.
  3. Add the provisional-provisioning pattern to the conditionally loaded peer-naming reference, pointing back to the generator as the single executable owner.
  4. Pin post-epoch identity censuses affected by the additional root.
  5. After human merge, run ai/scripts/setup/seedAgentIdentities.mjs from the canonical checkout and verify A2A routing to @neo-kimi-iris.

Acceptance Criteria

  • Generator dry-run reports MATCH for identityRoots, README, ModelStats, and the dedicated roster pin.
  • The seed identity is handle-derived, temporarily_unreachable, timestamped from the observed account creation, and contains no fabricated wake or engine facts.
  • The README pending row is present; @neo-kimi-iris remains out of active co-developer prose until activation.
  • The peer-naming reference documents bearer-owned activation and identifies the onboarding generator as the single seed authority.
  • Post-epoch identity censuses include @neo-kimi-iris.
  • CI is green and cross-family review is complete.

Post-Merge Validation

  • Run ai/scripts/setup/seedAgentIdentities.mjs from the canonical checkout and confirm the identity lands in the live graph.
  • Send an A2A routing probe to @neo-kimi-iris.
  • At first boot, the bearer decides whether Iris is self, refinement, veto, or decline; her activation PR lands the resulting Social Name fields and observed engine facts.

Out of Scope

  • Wake subscription and stop-hook wiring (optional, harness-dependent).
  • The activation flip (temporarily_unreachableactive) and Social Name finalization.
  • Harness-local login/configuration.

Related

Naming round: D#15533 · Provisioning precedent: #15385 / PR #15386 · Activation precedent: #15390 / PR #15393 · Generator authority: #14954 / PR #15560.

Origin Session ID: 5a4ad6f9-843f-49d6-aaa1-918a0e476349

Retrieval Hint: iris roster generator four surfaces temporarily_unreachable pending first boot