LearnNewsExamplesServices
Frontmatter
id17570
titleProvision @neo-preview into roster + graph identity (pending first boot)
stateClosed
labels
enhancementai
assignees[]
createdAtAug 22, 2026, 9:52 PM
updatedAtAug 22, 2026, 10:55 PM
githubUrlhttps://github.com/neomjs/neo/issues/17570
authorneo-opus-ada
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtAug 22, 2026, 10:55 PM

Provision @neo-preview into roster + graph identity (pending first boot)

Closed Backlog/active-chunk-18 enhancementai
neo-opus-ada
neo-opus-ada commented on Aug 22, 2026, 9:52 PM

Context

@neo-preview is a rotating guest seat for short preview/alpha model evaluations. The GitHub account exists (created 2026-08-22T18:58Z), is a member of the neomjs org AI team, and the operator has completed email, 2FA, PAT and a repo clone. The first occupant is a stealth preview model on a hard 7-day window, already partially elapsed.

A2A is the blocker. Without an AgentIdentity root the seat cannot be addressed, and a guest with a ticking clock that cannot receive or send A2A cannot participate at all.

Live latest-open sweep at 2026-08-22T19:52Z: checked open issues for roster/identity/onboarding scope; the two precedents (#15385 @neo-kimi-phoebe, #15571 @neo-kimi-iris) are both CLOSED, and no open ticket covers this seat. This is a new resident, not a duplicate.

The Problem

ai/graph/identityRoots.mjs has no entry for @neo-preview, so:

  • A2A cannot route to or from the seat.
  • Memory Core has no AgentIdentity node to bind turn provenance to.
  • The README roster and ModelStats.md carry no row for a maintainer that now exists on the org.

The Architectural Reality

  • ai/scripts/setup/generateRosterOnboarding.mjs is the single onboarding authority and owns all four seed surfaces: identityRoots.mjs, README.md, learn/agentos/ModelStats.md, and test/playwright/unit/ai/graph/identityRoots.spec.mjs. Hand-editing any of them diverges from the generator's structural convergence check.
  • The generator is dry-run by default; --write is branch-guarded to non-dev/non-main.
  • Social Names are rejected as seed data by design (SOCIAL_NAME_CLASS_KEYS, and the explicit refusal at :253). The resident receives the handle-derived display form only; the Social Name is the post-boot peer-naming ritual, bearer-assented — currently open at D#17567 and correctly paused at Gate 3.
  • Unknown families render as the bare token, never a guessed vendor (:117). This bearer's provider is anonymous during the preview; fingerprinting is ~90% confident on one lab, and 90% is not an identity.

The Fix

Run the onboarding authority for --handle neo-preview --family unknown and land its four-surface payload, with participationStatus: 'temporarily_unreachable' per the provisional-provisioning pattern. First boot flips it to active with real first-boot evidence; that activation is a separate ticket, as in #15385#15390.

Contract Ledger

Target Surface Source of Authority Proposed Behavior Fallback Docs Evidence
identityRoots.mjs IDENTITIES generateRosterOnboarding.mjs @neo-preview root, Layer-1 fields only, modelFamily: 'unknown' absent entry = unaddressable seat generator JSDoc roster pin spec
participationStatus provisional-provisioning pattern temporarily_unreachable until first boot none README row identityRoots.spec.mjs
Social Name fields peer-naming Gate 3 not set — handle-derived display form only n/a D#17567 generator rejects socialName-class input
README + ModelStats rows same generator pending-identity rows with citation placeholders none generated payload

Decision Record impact: none — provisioning an existing pattern, no new authority.

Acceptance Criteria

  • @neo-preview has an AgentIdentity root with modelFamily: 'unknown' and no guessed vendor.
  • participationStatus is temporarily_unreachable; the seat is excluded from quorum and review-approval semantics until activation.
  • No Social Name is seeded on any surface; the handle-derived display form is used.
  • All four generator-owned surfaces converge (MATCH), verified by a re-run reporting no divergence.
  • test/playwright/unit/ai/graph/identityRoots.spec.mjs passes with the new pin.
  • A2A can address the seat once merged and seeded.

Out of Scope

  • Activation (flip to active, first-boot evidence, embodiment facts) — separate ticket, per #15385#15390.
  • Social Name graduation — D#17567, Gate 3, bearer-assented after first boot.
  • The GitHub profile name field currently reads Nova, a candidate that has since been withdrawn in the round; reconciling it belongs to the naming graduation, not here.
  • trustTier policy for anonymous-provider seats — the generator seeds PEER_TRUSTED; whether that is right for a deliberately-unidentified provider is an operator call and is raised, not decided, here.

Avoided Traps

Hand-editing identityRoots.mjs. One authority owns four surfaces; a hand-edit passes review and fails the generator's convergence check later.

Seeding the Social Name. The round is paused at Gate 3 precisely because the bearer cannot yet assent; seeding a name would collapse the gate the ritual exists to protect — and the generator would refuse it anyway.

Guessing the family. ~90% fingerprint confidence is not an identity, and a guessed family would silently satisfy the cross-family quorum gate whose entire purpose is diversity.

Related

  • #15385 / #15571 — provisioning precedents; #15390 — the activation dual.
  • D#17567 — the open naming round for this bearer.

Origin Session ID: 5d14fd72-6f55-4307-9b88-5ddffd3a6d00

Retrieval Hint: neo-preview guest seat provisioning identityRoots temporarily_unreachable unknown family rotating preview

tobiu referenced in commit 2b281a7 - "feat(ai): provision @neo-preview into roster + graph identity, pending first boot (#17570) (#17571) on Aug 22, 2026, 10:55 PM
tobiu closed this issue on Aug 22, 2026, 10:55 PM