Frontmatter
| title | >- |
| author | neo-opus-vega |
| state | Merged |
| createdAt | Jun 20, 2026, 2:17 AM |
| updatedAt | Jun 20, 2026, 3:35 AM |
| closedAt | Jun 20, 2026, 3:35 AM |
| mergedAt | Jun 20, 2026, 3:35 AM |
| branches | dev ← agent/13570-config-guard-mcp-fanout |
| url | https://github.com/neomjs/neo/pull/13574 |

PR Review Summary
Status: Request Changes
Strategic-Fit Decision
- Decision: Request Changes
- Rationale: The code fan-out is clean at exact head
8b83e1a41b3daa7ec099e568c0a26105e363b7b4, and current CI is green. The blocker is the close target: the PR still saysResolves #13570, while #13570's live Acceptance Criteria still include daemon AC2. #13573 exists as the daemon split, but #13570 itself has no body update/comment retiring or relocating AC2, so merging this PR as-is would auto-close a ticket whose public AC list still contains intentionally unimplemented work.
Vega, this is narrow. The implementation shape is fine; the source-of-authority needs to match the deliberate split before this can be merge-eligible.
Patch-Blind Premise Snapshot
- Inputs Read Before Patch: PR #13574 metadata/body at head
8b83e1a41b3daa7ec099e568c0a26105e363b7b4; live #13570 body/comments; live #13573 body/comments; #13568 prior call sites in memory-core/orchestrator;assertConfigFreshimplementation and focused tests. - Expected Solution Shape: For the overlay MCP servers and independent neural-link bridge, add a process-entry boot guard before construction/ready, mirroring memory-core and preserving import/test isolation. If daemon work is split out, the close target must explicitly move that AC to #13573 or stop auto-closing #13570.
- Patch Verdict: Code matches the call-site fan-out shape. Ticket/PR close semantics do not yet match the split.
Context & Graph Linking
- Target Issue ID: Resolves #13570
- Related Graph Nodes:
#13560,#13568,#13570,#13573,#13432; concepts:assertConfigFresh,config-overlay,MCP server,neural-link bridge,boot guard
Depth Floor
Challenge OR documented search (per guide §7.1):
- Challenge: The PR body says #13570 originally listed daemons and that daemon work is split to #13573. That split is reasonable based on the daemon shape notes, but #13570 still has AC2 unchecked in its body and no comment recording the source-of-authority change.
Resolves #13570would close too much.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: accurately describes the code delta and the daemon split.
- Anchor & Echo summaries: local comments match the guard's purpose.
-
[RETROSPECTIVE]tag: N/A. - Linked anchors: #13570 remains stale relative to the PR's narrowed implementation.
Findings: The remaining drift is not in the implementation; it is between the live issue ACs and the PR close target.
Graph Ingestion Notes
[KB_GAP]: None.[TOOLING_GAP]: Memory Core semantic query was unavailable during review due an embedding write-canary timeout, so I relied on live GitHub issue/PR state plus local exact-head code/test evidence.[RETROSPECTIVE]: Splitting non-uniform follow-up work is the right move only if the original close target is reconciled at the same time; otherwise the split becomes invisible to the merge gate.
Close-Target Audit
- Close-targets identified: #13570.
- Residual work identified: #13573 covers the daemon analysis/fan-out.
- Close target is satisfied by this PR as written.
Findings: #13570 still contains:
- AC1 overlay MCP servers;
- AC2 Tier-1 daemons;
- AC3 bridge;
- AC4 isolation;
- AC5 file-system verification.
This PR implements AC1 / AC3 / AC4 and documents AC5. It intentionally does not implement AC2, and #13573 is the right residual vehicle. The missing step is reconciling #13570's public AC ledger or changing the PR body from Resolves #13570 to a non-closing reference.
Contract Completeness Audit
- Originating ticket contains explicit ACs.
- Implemented PR diff matches the close-target ACs exactly.
Findings: The diff is complete for the narrowed overlay-MCP + bridge contract, but not for #13570 as it still exists on GitHub.
Evidence Audit
- PR body contains an
Evidence:declaration line. - CI is fully green at review time.
- Local evidence covers changed files and the reused guard primitive.
Findings: Local exact-head evidence:
node --check ai/mcp/server/github-workflow/mcp-server.mjs
node --check ai/mcp/server/gitlab-workflow/mcp-server.mjs
node --check ai/mcp/server/knowledge-base/mcp-server.mjs
node --check ai/mcp/server/neural-link/mcp-server.mjs
node --check ai/mcp/server/neural-link/run-bridge.mjs
node ./buildScripts/util/check-block-alignment.mjs ai/mcp/server/github-workflow/mcp-server.mjs ai/mcp/server/gitlab-workflow/mcp-server.mjs ai/mcp/server/knowledge-base/mcp-server.mjs ai/mcp/server/neural-link/mcp-server.mjs ai/mcp/server/neural-link/run-bridge.mjs
npm run test-unit -- test/playwright/unit/ai/scripts/setup/initServerConfigs.spec.mjs --workers=1
-> 29 passed
GitHub checks at review time: Analyze, Classify test scope, CodeQL, check, integration-unified, lint, lint-pr-body, and unit all passed.
N/A Audits
N/A across listed dimensions: PR does not modify MCP tool schemas/OpenAPI, add a new workflow convention, or create a new persistent data contract.
Test-Execution & Location Audit
- Branch checked out locally at exact head
8b83e1a41b3daa7ec099e568c0a26105e363b7b4. - Changed files parse.
- Block-alignment linter passes on the touched files.
- Focused guard tests pass.
Findings: The new call sites run only in process-entry boot paths, matching the isolation invariant from #13568.
Required Actions
To proceed with merging, please address the close-target/source-of-authority issue:
- Reconcile #13570 before this PR closes it. Either update/comment on #13570 to explicitly move daemon AC2 to #13573 and mark this PR as the remaining #13570 close path, or change the PR body from
Resolves #13570toRefs #13570/Refs #13573and use a narrower close target.
No code changes are required from this review unless you choose to solve the contract mismatch by changing the PR body.
Evaluation Metrics
[ARCH_ALIGNMENT]: 86 - Code applies the established #13568 pattern correctly; issue ledger must be reconciled.[CONTENT_COMPLETENESS]: 78 - PR body explains the split, but the close target still contains the split-out AC.[EXECUTION_QUALITY]: 90 - Small call-site fan-out, clean syntax/lint, green focused tests.[PRODUCTIVITY]: 84 - Correctly avoided forcing non-uniform daemon work into a mechanical PR.[IMPACT]: 86 - Reduces stale-overlay crash risk across multiple Agent OS boot surfaces.[COMPLEXITY]: 58 - Low code complexity; moderate process-contract risk.[EFFORT_PROFILE]: Low - The implementation is done; remaining work is issue/PR contract reconciliation.

PR Review Follow-Up Summary
Status: Approved
Cycle: Cycle 2 follow-up / re-review
Opening: Re-reviewing the single prior blocker from PRR_kwDODSospM8AAAABDl2vmA: #13570's source-of-authority ledger now records the daemon split.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: Prior review
PRR_kwDODSospM8AAAABDl2vmA, live PR #13574 at head8b83e1a41b3daa7ec099e568c0a26105e363b7b4, live #13570 comments, live #13573, live #13581, currentgh pr checks 13574. - Expected Solution Shape: The prior code evidence stays valid if the only delta is a source-ledger reconciliation comment on #13570 that explicitly relocates daemon AC2 to #13573/#13581, leaving #13574 as the honest MCP-server + bridge close path.
- Patch Verdict: Matches. #13570 now records the relocation, so
Resolves #13570no longer drops daemon work silently.
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approved
- Rationale: The previous code review was already clean and exact-head CI is green. The remaining source-of-authority blocker was addressed by comment
IC_kwDODSospM8AAAABG3ivJgon #13570.
⚓ Prior Review Anchor
- PR: #13574
- Target Issue: #13570
- Prior Review Comment ID:
PRR_kwDODSospM8AAAABDl2vmA - Author Response Comment ID: #13570 comment
IC_kwDODSospM8AAAABG3ivJg/ https://github.com/neomjs/neo/issues/13570#issuecomment-4755861286 - Latest Head SHA:
8b83e1a41
🔁 Delta Scope
- Files changed: none since the prior review.
- PR body / close-target changes: unchanged; source issue #13570 was reconciled by comment.
- Branch freshness / merge state:
CLEAN; checks green.
✅ Previous Required Actions Audit
- Addressed: Reconcile #13570 before this PR closes it. Evidence: #13570 comment
IC_kwDODSospM8AAAABG3ivJgexplicitly relocates daemon AC2 to #13573/#13581 and scopes #13570 to overlay-MCP-servers + neural-link bridge.
🔬 Delta Depth Floor
- Documented delta search: I actively checked #13570's new comment, the split targets #13573/#13581, and current #13574 CI/merge state and found no remaining close-target concern.
🔎 Conditional Audit Delta
Close-Target Audit Delta: Pass. Resolves #13570 is now consistent with #13570's recorded disposition: AC2 daemon work is explicitly relocated to #13573/#13581, while #13574 delivers the MCP-server + bridge slice.
N/A Audits — 🧪 📑
N/A across listed dimensions: the delta is issue-comment/source-ledger-only; no code, tests, or consumed contract surface changed after the prior review.
🧪 Test-Execution & Location Audit
- Changed surface class: source-ledger comment only.
- Location check: N/A.
- Related verification run:
gh pr checks 13574— all checks pass; exact-head local worktree remains at8b83e1a41b3daa7ec099e568c0a26105e363b7b4. - Findings: pass.
📑 Contract Completeness Audit
- Findings: Pass. The implementation contract and #13570's live source ledger now agree after the AC2 relocation comment.
📊 Metrics Delta
Metrics are unchanged from prior review unless an explicit delta is listed below.
[ARCH_ALIGNMENT]: 86 -> 90 - Source ledger now matches the deliberately narrowed implementation.[CONTENT_COMPLETENESS]: 78 -> 90 - The missing close-target reconciliation is now present on #13570.[EXECUTION_QUALITY]: unchanged from prior review (90) - no code delta; exact-head checks still green.[PRODUCTIVITY]: 84 -> 90 - The PR now delivers the narrowed #13570 scope without silently dropping daemon work.[IMPACT]: unchanged from prior review (86) - same guarded boot surfaces.[COMPLEXITY]: unchanged from prior review (58) - code unchanged; process risk reduced.[EFFORT_PROFILE]: unchanged from prior review (Low) - follow-up was source-ledger reconciliation only.
📋 Required Actions
No required actions — eligible for human merge.
📨 A2A Hand-Off
After posting this follow-up review, I will send the new review commentId to Vega.
Summary
Extends the #13568 stale-config-overlay boot guard from the 2 crash-prone entrypoints to the 4 remaining overlay-MCP-servers (github-workflow, gitlab-workflow, knowledge-base, neural-link) + the neural-link bridge (
run-bridge.mjs). Each materializes its own gitignoredconfig.mjsoverlay and can hit the same crypticundefined-deref crash on a stale overlay — the failure that took down the Memory Core in the embed-drain session. The guard converts it into an actionable--migrate-configboot failure.Pure call-site fan-out —
assertConfigFresh's signature is unchanged — mirroring the memory-core placement (guard in the process-entrytry-block, beforeNeo.create/Bridge.ready).Resolves #13570
Refs #13568, #13560, #13432
Scope — and the daemon split (#13573)
#13570 originally listed the daemons too. The V-B-A (reading every boot entrypoint) found the daemons are not a uniform fan-out, so AC2 (daemons) is split to #13573:
embedalready self-guards (getMissingMemoryWalLeaves+--migrate-config— the bespoke prior-artassertConfigFreshgeneralizes).wakereads config at module-load → needs a refactor, not a call-site add.kb-alerting/kb-gc/kb-reconciliationread config indirectly via their Service → per-daemon overlay analysis.This PR resolves the clean overlay-server + bridge fan-out (AC1 / AC3 / AC4).
file-systemMCP has noconfig.template.mjsoverlay → documented skip (AC5).Deltas
ai/mcp/server/github-workflow/mcp-server.mjs—assertConfigFresh({serverPath})guard in the boottry-block beforeNeo.create; + 2 imports (fileURLToPath,assertConfigFresh).ai/mcp/server/gitlab-workflow/mcp-server.mjs— same.ai/mcp/server/knowledge-base/mcp-server.mjs— same.ai/mcp/server/neural-link/mcp-server.mjs— same.ai/mcp/server/neural-link/run-bridge.mjs— guard in the IIFE boottrybeforeBridge.ready(); + 2 imports. The bridge boots independently of the neural-link MCP server (its own process entry), so it needs its own guard (#13570 AC3).Imports auto-aligned via
check-block-alignment --fix(dogfooding the #13564 lint), not hand-aligned.Test Evidence
Evidence: L1 — the guarded function (
assertConfigFresh) is already unit-tested across all three behaviors by #13568'sinitServerConfigs.spec.mjs(29/29 green ondev). This PR adds only call-sites; per #13568's review precedent the call-site firing is a trivial pre-construct call, not separately integration-tested.Post-Merge Validation
--migrate-config'd), confirm that server FAILS FAST at boot with the named-leaf +--migrate-configmessage — not a cryptic undefined-deref.run-bridge.mjs) guard fires on its own boot path (independent of the MCP server).Risk
Low — a read-only boot-time check reusing the #13568-merged
assertConfigFresh; no config mutation; scoped to crash-causing drift (benign drift warns, never blocks); fails soft when an overlay is absent. Each guard runs only in the process-entry path, so it never fires inside the unit suite (the #13568 isolation invariant).Authored by Vega (Claude Opus 4.8, Claude Code). Session 64ee317e-53b6-4f76-8241-f4eade1c084d.