LearnNewsExamplesServices
Frontmatter
id12126
titleDerive GoldenPathSynthesizer swarm identities from identityRoots
stateClosed
labels
enhancementairefactoringarchitecture
assigneesneo-gpt
createdAtMay 28, 2026, 7:18 AM
updatedAtJun 7, 2026, 7:16 PM
githubUrlhttps://github.com/neomjs/neo/issues/12126
authorneo-gpt
commentsCount1
parentIssue10219
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[x] 10219 Sandman active detector: stale assignments + recent open PRs
blocking[]
closedAtJun 1, 2026, 12:28 AM

Derive GoldenPathSynthesizer swarm identities from identityRoots

Closed v13.0.0/archive-v13-0-0-chunk-14 enhancementairefactoringarchitecture
neo-gpt
neo-gpt commented on May 28, 2026, 7:18 AM

Context

PR #12125 closed #10219 by adding Sandman handoff visibility for stale assignments and recent open PRs. The formal review approved the PR but surfaced a non-blocking follow-up: ai/services/graph/GoldenPathSynthesizer.mjs now has three hardcoded Neo swarm identity surfaces.

This is not a #12125 blocker because the surfaces are behind repoEnrichmentEnabled, and origin/dev already had one hardcoded agentLogins list before #12125. It is still worth consolidating before more repo-enrichment features copy the pattern.

The Problem

GoldenPathSynthesizer.mjs currently has identity data in local constants/lists:

  • agentLogins = ['neo-opus-ada', 'neo-gemini-pro', 'neo-gpt'] inside Active PR Cycle State rendering.
  • CORE_SWARM_AGENT_FAMILIES mapping logins to families for cross-family review status.
  • DEFAULT_STALE_ASSIGNMENT_MAINTAINERS listing neo-gpt, neo-opus-ada, neo-gemini-pro, and tobiu.

The canonical identity registry already exists in ai/graph/identityRoots.mjs, with IDENTITIES entries containing properties.githubLogin, properties.modelFamily, properties.accountType, and properties.participationStatus.

Keeping separate hardcoded lists creates drift risk if a maintainer identity changes, a new peer is added, a peer is operator-benched, or a non-neomjs deployment ever enables repo enrichment intentionally.

The Architectural Reality

Surface-anchor V-B-A before filing:

  • ai/services/graph/GoldenPathSynthesizer.mjs owns Active PR Cycle State rendering and the new stale-assignment/recent-open-PR helpers from PR #12125.
  • ai/graph/identityRoots.mjs is the existing source for AgentIdentity roots and includes @neo-opus-ada, @neo-gemini-pro, @neo-gpt, and @tobiu with typed metadata.
  • Local duplicate sweep found no existing issue or PR for GoldenPathSynthesizer identityRoots hardcoded swarm identities; older local hits #10330/#11057 concern test-fixture identity decoupling, not this runtime handoff surface.
  • KB ticket search attempted but currently failed with Error finding id; live GitHub issue/PR search returned no duplicate.

The Fix

Add a small identity projection helper for GoldenPathSynthesizer's repo-enrichment lane. It should derive:

  • active agent GitHub logins for Active PR Cycle State grouping,
  • login-to-family mapping for cross-family review detection,
  • maintainer logins for stale-assignment qualifying activity,

from IDENTITIES in ai/graph/identityRoots.mjs rather than local hardcoded constants.

Keep the behavior client-safe: the GoldenPathSynthesizer repo-enrichment gate remains the deployment boundary, and identity projection should fail closed or degrade cleanly if the registry shape is unexpected.

Contract Ledger Matrix

Target Surface Source of Authority Proposed Behavior Fallback / Edge Case Docs Evidence
GoldenPathSynthesizer Active PR agent list ai/graph/identityRoots.mjs IDENTITIES Derive agent logins from identity roots instead of local agentLogins array Empty/invalid registry yields no grouped agent subsection, while recent open PR list still renders JSDoc on helper Unit test with fixture identity list
Cross-family review status IDENTITIES[*].properties.modelFamily Build login-to-family map from identity roots Missing family means reviewer does not satisfy cross-family logic Existing handoff section Unit test for active, benched, unknown, and external authors/reviewers
Stale-assignment maintainer set IDENTITIES account/trust metadata Derive maintainer set from agent identities plus owner/human maintainer identities Unknown maintainer comments do not count unless config/registry says so Helper JSDoc Unit test that assignee comments still qualify and maintainer ack uses registry-derived login
Repo-enrichment deployment boundary ADR 0014 / existing repoEnrichmentEnabled Preserve current gate; no client deployment runs this unless explicitly enabled Disabled enrichment emits none of these repo-specific sections Existing PR #12125 docs/body Existing enrichment-disabled test remains green

Decision Record impact

Aligned with the existing identityRoots.mjs AgentIdentity substrate and ADR 0014's repo-enrichment boundary. No ADR amendment expected unless implementation changes deployment semantics or identity-root ownership.

Acceptance Criteria

  • GoldenPathSynthesizer.mjs no longer hardcodes Neo agent identity arrays/maps for repo-enrichment rendering.
  • Active PR Cycle State grouping uses identityRoots-derived active agent logins.
  • hasCrossFamilyReview() supports an injected/derived identity-family map and preserves current #12125 behavior.
  • Stale-assignment maintainer activity uses an identityRoots-derived maintainer set, while assignee comments still qualify independently.
  • repoEnrichmentEnabled: false still omits repo-specific identity-derived sections.
  • Focused unit coverage proves identity projection, cross-family status, stale-assignment maintainer ack, and enrichment-disabled behavior.

Out of Scope

  • Changing identityRoots.mjs schema.
  • Changing cross-family review policy or quorum rules.
  • Enabling repo enrichment for downstream deployments.
  • Mutating assignments, labels, or PR review state.

Avoided Traps

  • Do not replace identityRoots.mjs with a new GoldenPath-specific config file.
  • Do not remove the repo-enrichment deployment gate.
  • Do not treat participationStatus: operator_benched as a universal exclusion without verifying the intended semantics for review history versus active grouping.
  • Do not require live GitHub or Memory Core availability for unit tests.

Related

  • Follow-up from PR #12125 review (Approve+Follow-Up by @neo-opus-ada).
  • Resolves #10219 follow-up lineage; #10219 remains the close-target for the original Sandman active detector.
  • Source file: ai/services/graph/GoldenPathSynthesizer.mjs.
  • Identity source: ai/graph/identityRoots.mjs.

Origin Session ID: 019e6bee-56cb-77a3-9fc5-c175d289418c

Handoff Retrieval Hints: GoldenPathSynthesizer identityRoots hardcoded swarm identity repoEnrichmentEnabled cross-family review DEFAULT_STALE_ASSIGNMENT_MAINTAINERS

tobiu closed this issue on Jun 1, 2026, 12:28 AM
tobiu referenced in commit ddf58f8 - "feat(ai): derive gps maintainers from identity roots (#12126) (#12278) on Jun 1, 2026, 12:28 AM