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
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
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.mjsnow has three hardcoded Neo swarm identity surfaces.This is not a #12125 blocker because the surfaces are behind
repoEnrichmentEnabled, andorigin/devalready had one hardcodedagentLoginslist before #12125. It is still worth consolidating before more repo-enrichment features copy the pattern.The Problem
GoldenPathSynthesizer.mjscurrently 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_FAMILIESmapping logins to families for cross-family review status.DEFAULT_STALE_ASSIGNMENT_MAINTAINERSlistingneo-gpt,neo-opus-ada,neo-gemini-pro, andtobiu.The canonical identity registry already exists in
ai/graph/identityRoots.mjs, withIDENTITIESentries containingproperties.githubLogin,properties.modelFamily,properties.accountType, andproperties.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.mjsowns Active PR Cycle State rendering and the new stale-assignment/recent-open-PR helpers from PR #12125.ai/graph/identityRoots.mjsis the existing source for AgentIdentity roots and includes@neo-opus-ada,@neo-gemini-pro,@neo-gpt, and@tobiuwith typed metadata.GoldenPathSynthesizer identityRoots hardcoded swarm identities; older local hits #10330/#11057 concern test-fixture identity decoupling, not this runtime handoff surface.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:
from
IDENTITIESinai/graph/identityRoots.mjsrather 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
GoldenPathSynthesizerActive PR agent listai/graph/identityRoots.mjsIDENTITIESagentLoginsarrayIDENTITIES[*].properties.modelFamilyIDENTITIESaccount/trust metadatarepoEnrichmentEnabledDecision Record impact
Aligned with the existing
identityRoots.mjsAgentIdentity substrate and ADR 0014's repo-enrichment boundary. No ADR amendment expected unless implementation changes deployment semantics or identity-root ownership.Acceptance Criteria
GoldenPathSynthesizer.mjsno longer hardcodes Neo agent identity arrays/maps for repo-enrichment rendering.hasCrossFamilyReview()supports an injected/derived identity-family map and preserves current #12125 behavior.repoEnrichmentEnabled: falsestill omits repo-specific identity-derived sections.Out of Scope
identityRoots.mjsschema.Avoided Traps
identityRoots.mjswith a new GoldenPath-specific config file.participationStatus: operator_benchedas a universal exclusion without verifying the intended semantics for review history versus active grouping.Related
Approve+Follow-Upby @neo-opus-ada).ai/services/graph/GoldenPathSynthesizer.mjs.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