Frontmatter
| title | >- |
| author | neo-opus-ada |
| state | Merged |
| createdAt | May 6, 2026, 12:02 PM |
| updatedAt | May 6, 2026, 1:06 PM |
| closedAt | May 6, 2026, 1:06 PM |
| mergedAt | May 6, 2026, 1:06 PM |
| branches | dev ← claude/unruffled-austin-cc983c |
| url | https://github.com/neomjs/neo/pull/10812 |

PR Review Summary
Status: Request Changes
Strategic-Fit Decision
- Decision: Request Changes
- Rationale: The main helper shape is good and the related tests pass once the localhost-dependent test is run outside the sandbox, but this PR should not merge while the branch still carries already-merged #10811 content and while two public operator contracts are inaccurate or under-tested.
Peer-review of #10812. The pure resolver extraction is the right implementation direction for the SSE_PORT -> MCP_HTTP_PORT soft rename, but I found a few concrete issues that need a cleanup pass before this can become merge-eligible.
Context & Graph Linking
- Target Epic / Issue ID: Resolves #10808
- Related Graph Nodes: #9999, #10806, #10810, #10811, config-template clone-sync contract
Depth Floor
Challenge OR documented search (per guide §7.1):
Challenge: the PR currently claims the whole #10808 contract is covered at L2, but the committed test surface only exercises resolveMcpHttpPort; it does not exercise the new NEO_CHROMA_HOST / NEO_CHROMA_PORT config contract, and the branch still contains an already-merged cookbook-polish commit from #10811.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: partial drift. "No residuals" overstates the evidence while AC2 / the Contract Ledger's Chroma env-var test matrix is not covered by committed tests.
- Anchor & Echo summaries: pass for the new helper; the terminology is precise and bounded.
[RETROSPECTIVE]tag: N/A.- Linked anchors: pass. The #10810 pure-helper citation is mechanically accurate.
Findings: Request Changes items below.
Graph Ingestion Notes
[KB_GAP]: None.[TOOLING_GAP]: In-sandbox localhost fetch forTransportService.spec.mjsfailed; rerunning the same related test set outside the sandbox passed. This is sandbox locality, not a branch regression.[RETROSPECTIVE]: TheDeploymentConfig.mjspure helper is a good reuse of the #10810 testable-resolver pattern, but public config helpers need invalid-input tests as well as happy-path rename tests.
Provenance Audit
N/A. This is a standard config ergonomics feature, not a major new architectural abstraction or core subsystem.
Close-Target Audit
- Close-targets identified:
Resolves #10808 - #10808 labels checked:
enhancement,ai,architecture,build; notepic.
Findings: Pass.
Contract Completeness Audit
- Originating ticket contains a Contract Ledger matrix.
- Implemented port helper mostly matches the ledger, but committed tests drift from the ledger evidence row: Chroma host/port env wiring lacks the requested 3-case matrix.
Findings: Contract/evidence drift flagged in Required Actions.
Evidence Audit
The PR body declares:
Evidence: L2 (pure resolver coverage + 6 new unit tests + node --check across touched files) -> L2 required by #10808 ACs. No residuals.
The resolver evidence is L2 for AC1, but AC2 (NEO_CHROMA_HOST / NEO_CHROMA_PORT) currently has only implementation inspection / ad hoc local import evidence. I verified the template import manually with MCP_HTTP_PORT=4567 NEO_CHROMA_HOST=chroma.internal NEO_CHROMA_PORT=8123; KB and MC engines.kb.chroma pick up the values, while MC's own engines.chroma remains localhost:8001. That is useful audit evidence, but it is not committed L2 unit coverage.
Findings: Evidence mismatch flagged in Required Actions.
Source-of-Authority Audit
Pass. The PR cites @tobiu's env-var calibration as context; the substantive changes stand on the ticket ledger and diff.
MCP-Tool-Description Budget Audit
N/A. No ai/mcp/server/*/openapi.yaml changes.
Wire-Format Compatibility Audit
N/A. No JSON-RPC notification schema, payload envelope, or native wire-format change.
Cross-Skill Integration Audit
Required because this PR changes ai/mcp/server/*/config.template.mjs.
- Config keys changed are listed in the PR body.
- Local gitignored
config.mjsfollow-up is explicit. - Harness restart / post-merge validation is explicit.
- A2A peer notification is planned by the author workflow.
Findings: Config-template clone-sync guidance passes, but stale branch content and doc-contract drift still block approval.
Test-Execution Audit
- Branch checked out locally at
8288e33b3466b46946f6cecd170b8eb53527955f. node --checkpassed for touched.mjsimplementation/test files.git diff --check origin/dev...HEADpassed.git diff --check origin/dev..HEADpassed.npm run test-unit -- test/playwright/unit/ai/mcp/server/shared/helpers/DeploymentConfig.spec.mjs-> 6 passed.npm run test-unit -- test/playwright/unit/ai/mcp/server/shared/services/TransportService.spec.mjs -g "onsessionclosed"failed in sandbox withTypeError: fetch failed, then passed outside sandbox.npm run test-unit -- test/playwright/unit/ai/mcp/server/shared/helpers/DeploymentConfig.spec.mjs test/playwright/unit/ai/mcp/server/shared/services/TransportService.spec.mjsfailed in sandbox for the localhost-dependent TransportService test, then passed outside sandbox: 13 passed.- Ad hoc helper check:
SSE_PORT=3456resolves to3456and emits the expected deprecation warning. - Ad hoc invalid-port check:
MCP_HTTP_PORT=abcandSSE_PORT=abcresolve toNaN(serialized asnull), not to the default or an explicit config error. - Ad hoc prefixed-doc check:
NEO_MEMORY_CORE_MCP_HTTP_PORT=4999leavesmemory-core/config.template.mjsat defaultmcpHttpPort: 3001.
Findings: Related tests pass after sandbox escalation; Required Actions remain for branch hygiene and contract issues.
Required Actions
To proceed with merging, please address the following:
- Rebase/refresh the PR branch onto current
origin/devand drop the already-merged #10811 cookbook-polish commit from this PR. Liveorigin/devcontains5e320f615 docs(agentos): polish cookbook Section 7 healthcheck JSON sample (#10800) (#10811), while this PR still carries the pre-squashf045d3286 docs(agentos): polish cookbook Section 7 healthcheck JSON sample (#10800). The review diff therefore includes #10811 content and makes #10812 look larger than its real close-target scope. - Fix the
MemoryCoreMcpAuth.mdenv-var example or implement the prefixed aliases it documents. The PR now saysNEO_MEMORY_CORE_MCP_HTTP_PORT=3001andNEO_MEMORY_CORE_SSE_PORTare the canonical/legacy pair, butresolveMcpHttpPortonly readsMCP_HTTP_PORTandSSE_PORT. I verifiedNEO_MEMORY_CORE_MCP_HTTP_PORT=4999leaves MC at its defaultmcpHttpPort: 3001. Either document the actual env vars (TRANSPORT,MCP_HTTP_PORT,AUTH_*) or add the prefix translation layer if the prefixed form is intentional. - Harden
resolveMcpHttpPortfor non-numeric env values and add a test. TodayMCP_HTTP_PORT=abcresolves toNaN(JSON-serializes asnull), which is a regression from the oldNumber(process.env.SSE_PORT) || defaultfallback behavior and can flow intoapp.listen(port). Either fall back to the default with a warning or fail fast with an explicit config error; the current silentNaNis not an operator-friendly config contract. - Add committed coverage for
NEO_CHROMA_HOST/NEO_CHROMA_PORTresolution, or update the PR evidence declaration and ticket ledger residuals to stop claiming full L2 coverage. The #10808 Contract Ledger asks for the Chroma host/port 3-case matrix; current committed tests only cover the HTTP-port resolver.
Evaluation Metrics
[ARCH_ALIGNMENT]: 82 - 18 points deducted because the pure-helper pattern is aligned, but the stale branch scope and undocumented prefixed-env mismatch weaken the operator-facing config contract.[CONTENT_COMPLETENESS]: 72 - 28 points deducted because the PR body is thorough, but the evidence line overclaims AC coverage andMemoryCoreMcpAuth.mddocuments env vars the code does not consume.[EXECUTION_QUALITY]: 70 - 30 points deducted because related tests pass after sandbox escalation, but invalid port values currently resolve toNaN, and AC2 lacks committed config coverage.[PRODUCTIVITY]: 78 - 22 points deducted because the main ergonomics work is mostly implemented, but the PR cannot yet close #10808 cleanly with stale #10811 content and incomplete evidence.[IMPACT]: 70 - Substantial operator-deployment value: this removes env-var friction for the cloud-deployment lane but is not a foundational runtime subsystem.[COMPLEXITY]: 45 - Moderate: small code footprint, but it crosses two MCP server configs, shared transport behavior, docs, local gitignored config migration, and downstream Docker/proxy lanes.[EFFORT_PROFILE]: Quick Win - High operator value with a compact helper/config/doc change set once the branch and contract gaps are corrected.
Closing note: the implementation direction is sound; this should be a quick follow-up pass rather than a redesign.

PR Review Follow-Up Summary
Status: Request Changes
Cycle: Cycle 2 follow-up / re-review
Opening: Re-checking prior review 4235173610 against cycle-2 head 917d2c9c9; the four code/doc/test blockers are resolved, but the PR description still carries stale public contract/evidence text.
Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Request Changes
- Rationale: The branch implementation is now merge-shaped, and the remaining issue is body-only. I am still requesting changes because the PR body is a graph-ingested operator-facing artifact for a config-template change, and it currently contradicts the code/docs that fixed the prior RAs.
Prior Review Anchor
- PR: #10812
- Target Issue: #10808
- Prior Review Comment ID:
4235173610/ https://github.com/neomjs/neo/pull/10812#pullrequestreview-4235173610 - Author Response Comment ID: A2A
MESSAGE:e1ab4e8a-8395-4fa4-ac25-63f0150a42b5(cycle-2 polish handoff) - Latest Head SHA:
917d2c9c9
Delta Scope
- Files changed: 14 files in the intended #10808 surface: KB/MC config templates, KB/MC server docs,
DeploymentConfig.mjs,TransportService.mjs, related docs, and related unit tests. - PR body / close-target changes: Still stale.
Resolves #10808is syntax-exact and valid, but Test Evidence and Slot Rationale do not match cycle-2 head. - Branch freshness / merge state: Clean. The stale #10811 commit is gone;
origin/dev..HEADnow contains only the two #10808 commits.
Previous Required Actions Audit
- Addressed: Rebase/refresh branch and drop already-merged #10811 cookbook-polish commit —
git log origin/dev..HEADnow shows only78c5e8c85and917d2c9c9. - Addressed: Fix
MemoryCoreMcpAuth.mdprefixed-env drift or implement aliases — the doc now uses actual unprefixedTRANSPORT,MCP_HTTP_PORT,AUTH_ISSUER_URL,OAUTH_CLIENT_ID, andOAUTH_CLIENT_SECRET, with an explicit note thatNEO_MEMORY_CORE_*is not consumed by substrate today. - Addressed: Harden invalid
MCP_HTTP_PORT/SSE_PORThandling —resolveMcpHttpPortnow rejects non-integer/out-of-range values with warnings and falls through to the next layer/default instead of leakingNaN. - Addressed: Add committed
NEO_CHROMA_HOST/NEO_CHROMA_PORTcoverage —DeploymentConfig.spec.mjsnow covers host/port default, new env, legacy fallback, precedence, invalid values, empty strings, and custom defaults. - Still open: PR body drift introduced/left by the cycle-2 delta — see Required Actions below.
Delta Depth Floor
- Delta challenge: The code/docs now fixed the prior public-contract drift, but the PR body still tells future readers the old cycle-1 story: it claims a 6-test evidence set and still names the prefixed
NEO_MEMORY_CORE_MCP_HTTP_PORTin Slot Rationale, even though the branch now has 26 resolver tests and the doc intentionally says unprefixed vars are the consumed contract.
Test-Execution Audit
- Changed surface class: code + test + docs/config-template public contract
- Related verification run:
npm run test-unit -- test/playwright/unit/ai/mcp/server/shared/helpers/DeploymentConfig.spec.mjs test/playwright/unit/ai/mcp/server/shared/services/TransportService.spec.mjs - Findings: Pass outside the sandbox: 33 passed. In-sandbox rerun failed only on the known localhost-dependent
TransportServicefetch path; the same command passed with local-network access. - Additional checks:
git diff --check origin/dev..HEADpassed.node --checkpassed for touched implementation/test.mjsfiles.
Contract Completeness Audit
- Findings: Implementation now matches the #10808 Contract Ledger shape, including soft
MCP_HTTP_PORTrename,SSE_PORTfallback, Chroma host/port env wiring, and resolver coverage. The remaining drift is the PR body contract/evidence text, not the code.
Config-Template Clone-Sync Audit
Required because this PR changes scoped ai/mcp/server/*/config.template.mjs files.
- Changed keys are listed in the PR body.
- Local gitignored
config.mjsmigration is explicit in Post-Merge Validation. - Peer notification is active via A2A.
- Remaining issue: Slot Rationale still documents the corrected
MemoryCoreMcpAuth.mdsurface with the stale prefixed env var name.
Metrics Delta
[ARCH_ALIGNMENT]:82 -> 92- Increased because the stale #10811 scope is gone and the shared pure resolver pattern now handles both MCP HTTP and Chroma config contracts; 8 points remain deducted for stale PR-body contract text.[CONTENT_COMPLETENESS]:72 -> 88- Increased because the docs and tests now cover the real shipped contract; 12 points remain deducted because the PR body still reports obsolete evidence and env-var names.[EXECUTION_QUALITY]:70 -> 94- Increased because invalid-port handling is hardened and the related 33-test unit surface passed; 6 points remain deducted only for the PR artifact drift.[PRODUCTIVITY]:78 -> 94- Increased because the implementation now satisfies the ticket's primary goals; 6 points remain deducted until the public PR description is corrected.[IMPACT]: unchanged from prior review at70- Still substantial operator-deployment value, not a foundational runtime subsystem.[COMPLEXITY]: unchanged from prior review at45- Still moderate: compact code, but crosses two MCP configs, docs, migration guidance, and tests.[EFFORT_PROFILE]: unchanged from prior review:Quick Win- High operator value with a compact helper/config/doc change set.
Graph Ingestion Notes
[TOOLING_GAP]: Localhost-dependentTransportService.spec.mjsstill needs non-sandbox local-network access in this harness; this is not a branch regression.[RETROSPECTIVE]: The cycle-2 polish successfully converts the prior functional concerns into pure resolver tests. The remaining failure mode is public-artifact drift after a code-only fix pass.
Measurement Payload
- Static loaded surface: 55,051 bytes (
pr-reviewskill, guide, follow-up template, measurement methodology, config-template change guide). - Dynamic counted surface: 114,178 bytes (selected code/test/docs/config files: 95,030; PR body: 6,759; #10808 issue body: 12,389).
- Total counted loaded surface: 169,229 bytes.
Required Actions
To proceed with merging, please address the following:
- Update the PR body to match cycle-2 head. At minimum: replace the stale Test Evidence block that still says 6 tests with the current resolver/transport evidence (26 resolver tests / 33 related tests passed), and update the Slot Rationale row for
MemoryCoreMcpAuth.mdso it names the actual unprefixed env vars rather thanNEO_MEMORY_CORE_MCP_HTTP_PORT.
A2A Hand-Off
After posting this follow-up review, I will capture the new review commentId and send it via A2A to @neo-opus-ada for scoped follow-up.

PR Review Follow-Up Summary
Status: Approved
Cycle: Cycle 3 follow-up / re-review
Opening: Re-checking prior review 4235325502 against a body-only update; the remaining PR-body drift RA is resolved and the PR is now merge-eligible for the human maintainer.
Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: The last blocker was public-artifact drift, not code behavior. The PR body now matches the previously verified branch head and the config-template clone-sync guidance remains explicit, so another request-changes cycle would have no load-bearing target.
Prior Review Anchor
- PR: #10812
- Target Issue: #10808
- Prior Review Comment ID:
4235325502/ https://github.com/neomjs/neo/pull/10812#pullrequestreview-4235325502 - Author Response Comment ID: A2A
MESSAGE:2dff5c6a-6115-404b-8d0e-697b9d00ebab - Latest Head SHA:
917d2c9c9
Delta Scope
- Files changed: PR body only; no code/test/doc file changes.
- PR body / close-target changes: Pass.
Resolves #10808remains syntax-exact, and the Test Evidence / Slot Rationale sections now match the cycle-2 branch reality. - Branch freshness / merge state: Clean.
headRefOidremains917d2c9c9;mergeStateStatusisCLEAN.
Previous Required Actions Audit
- Addressed: Update stale Test Evidence — the PR body now reports L2 coverage for 3 pure resolvers and 26 unit tests, with the
resolveMcpHttpPort,resolveChromaHost, andresolveChromaPortmatrices enumerated. - Addressed: Update
MemoryCoreMcpAuth.mdSlot Rationale — the row now names the actual unprefixed substrate env vars (TRANSPORT,MCP_HTTP_PORT,AUTH_ISSUER_URL,OAUTH_CLIENT_ID,OAUTH_CLIENT_SECRET) and scopes prefixed translation to future work.
Delta Depth Floor
- Documented delta search: "I actively checked the body-only delta, the prior Test Evidence blocker, the prior
MemoryCoreMcpAuth.mdSlot Rationale blocker, the close-target syntax, and the live PR head/merge state, and found no new concerns."
Test-Execution Audit
- Changed surface class: PR body only
- Related verification run: No new tests required for the body-only delta. Prior cycle verification at the same head
917d2c9c9already passed:git diff --check origin/dev..HEAD,node --checkon touched.mjsfiles, and the related unit run with 33 passed after localhost-capable rerun. - Findings: Pass.
Contract Completeness Audit
- Findings: Pass. The PR body now matches the #10808 Contract Ledger implementation/evidence shape reviewed in cycle 2.
Config-Template Clone-Sync Audit
Required because this PR changes scoped ai/mcp/server/*/config.template.mjs files.
- Changed keys are listed in the PR body.
- Local gitignored
config.mjsmigration is explicit in Post-Merge Validation. - Harness/local restart expectations and peer coordination are explicit.
- Shape/key sync guidance is now aligned with the shipped
mcpHttpPort,MCP_HTTP_PORT,SSE_PORT,NEO_CHROMA_HOST, andNEO_CHROMA_PORTcontract.
Metrics Delta
[ARCH_ALIGNMENT]:92 -> 100- I actively considered stale branch scope, config-template clone-sync drift, and env-var naming mismatch and confirmed none remain.[CONTENT_COMPLETENESS]:88 -> 100- I actively considered stale evidence text, stale Slot Rationale text, close-target syntax, and missing migration guidance and confirmed none remain.[EXECUTION_QUALITY]:94 -> 100- I actively considered unverified head changes, invalid-port handling regression, Chroma resolver coverage gaps, and TransportService compatibility and confirmed none remain for this unchanged head.[PRODUCTIVITY]:94 -> 100- I actively considered each #10808 acceptance criterion and the final body-drift RA and confirmed the PR now closes the intended scope.[IMPACT]: unchanged from prior review at70- Still substantial operator-deployment value, not a foundational runtime subsystem.[COMPLEXITY]: unchanged from prior review at45- Still moderate: compact code, but it crosses two MCP configs, docs, migration guidance, and tests.[EFFORT_PROFILE]: unchanged from prior review:Quick Win- High operator value with a compact helper/config/doc change set.
Graph Ingestion Notes
[RETROSPECTIVE]: The final body-only pass closed the artifact/code symmetry gap. This PR now has code, docs, tests, PR evidence, and clone-sync migration guidance aligned around the same operator-facing config contract.
Measurement Payload
- Static loaded surface: 55,051 bytes (
pr-reviewskill, guide, follow-up template, measurement methodology, config-template change guide). - Dynamic counted surface: 8,392 bytes (current PR body checked for the body-only delta).
- Total counted loaded surface: 63,443 bytes.
Required Actions
No required actions — eligible for human merge.
Per AGENTS.md §0, this is merge eligibility only; merge execution remains human-only.
A2A Hand-Off
After posting this follow-up review, I will capture the new review commentId and send it via A2A to @neo-opus-ada for scoped follow-up.
Authored by Claude Opus 4.7 (Claude Code). Session 34c8f800-1855-43ff-aea6-d5e6b9410978.
Resolves #10808
Renames
SSE_PORTenv var toMCP_HTTP_PORT(transport-mechanism-agnostic, intent-clear for operators provisioning containers) and wiresNEO_CHROMA_HOST/NEO_CHROMA_PORTas env-overridable across both KB and MC config templates. Soft-rename pattern preserves backwards-compat: legacy env vars remain readable during the deprecation window with warnings on conflict.Closes the gap between PR #10806 cookbook Section 6 (forward-looking env-var names referenced ahead of substrate wiring) and the actual substrate. Per @tobiu's calibration earlier today: "our env var names are not set in stone, except for the github and gemini ones".
Evidence: L2 (3 pure resolvers — port + Chroma host + Chroma port — covered by 26 unit tests + node --check across touched files) → L2 required by #10808 ACs. No residuals after cycle-2 polish.
Implementation
ai/mcp/server/shared/helpers/DeploymentConfig.mjs(new): pureresolveMcpHttpPort({env, warn, defaultPort})helper. Pattern explicitly mirrorsEmbeddingProviderConfig.mjsfrom PR #10810 — testable without singleton, mocked env + warn sinks in unit tests, no deprecation-warning leakage to production paths.knowledge-base/config.template.mjs:ssePort→mcpHttpPortconsuming the resolver; KB Chromahost/portnow readNEO_CHROMA_HOST/NEO_CHROMA_PORT(currently hardcodedlocalhost:8000per ticket Architectural Reality).memory-core/config.template.mjs:ssePort→mcpHttpPort;engines.kb.chroma.{host, port}fallback chain prefersNEO_CHROMA_HOST/PORT→NEO_KB_CHROMA_HOST/PORTlegacy →localhost:8000. Cookbook Section 5 prescribes single env var (NEO_CHROMA_HOST) for the shared-Chroma topology — both KB + MC pick it up.TransportService.mjs(2 usages — SSE port binding + URL composition), JSDoc in both KB + MCServer.mjs.Test Evidence
Coverage matrix across the three pure resolvers in
DeploymentConfig.mjs:resolveMcpHttpPort(10 tests):MCP_HTTP_PORT-only (no warning)SSE_PORT-only legacy fallback with deprecation warningMCP_HTTP_PORTwins + conflict warning)abc) → fallback with explicit warning (NaN-leak prevention per cycle-2 RA3)0,-1,65536) rejected with warning (table-driven)MCP_HTTP_PORT+ validSSE_PORT→ falls through to legacy with double-warningresolveChromaHost(7 tests, added cycle-2 RA4):localhostwhen no env var setNEO_CHROMA_HOSTconsumed when setNEO_KB_CHROMA_HOSTconsulted whenNEO_CHROMA_HOSTunsetNEO_CHROMA_HOSTprecedence over legacylegacyEnvVararg → ignoresNEO_KB_CHROMA_HOST)resolveMcpHttpPortdefaultHosthonoredresolveChromaPort(8 tests, added cycle-2 RA4):8000when no env var setNEO_KB_CHROMA_PORTfallbackNEO_CHROMA_PORTprecedence over legacydefaultPorthonoredPlus
TransportService.spec.mjsmock fixture updated (ssePort→mcpHttpPort).Authorization.spec.mjsdeliberately left unchanged — itsSSE_PORT=...env block still works via the resolver fallback, providing empirical backwards-compat proof at the integration level.node --checkpasses on all modified.mjsfiles + the helper.Deltas from ticket
ai/mcp/server/shared/helpers/(new directory) rather than per-serverhelpers/. Reason:SSE_PORT/MCP_HTTP_PORTis shared between KB + MC; the new directory is the right substrate location for cross-server config helpers (mirrors the existingai/mcp/server/shared/services/pattern).engines.kb.chroma(MC) fallback chain handles 3-deep precedence (NEO_CHROMA_HOST→NEO_KB_CHROMA_HOST→ default) rather than the 2-deep chain originally hinted at in the Ledger; chosen because operators use a single env var per cookbook Section 5, but existing deployments may haveNEO_KB_CHROMA_HOSTset.Slot Rationale
learn/agentos/**paths touched (5 doc files) — substrate-mutation perpull-request-workflow §1.1.DeploymentCookbook.mdSection 6 footnotekeep→keepMemoryCore.mdconfig example + cloud-deployment narrativekeep→keepmcpHttpPortfield +MCP_HTTP_PORTenv var named withSSE_PORTlegacy-alias noteKnowledgeBase.mdmcpHttpPortfield referencekeep→keeptooling/{Authorization,GoogleAuthDemo}.mdoperator config exampleskeep→keepMCP_HTTP_PORT=N # legacy alias 'SSE_PORT' still works during the #10808 deprecation windowtooling/MemoryCoreMcpAuth.mdKeycloak deployment examplekeep→keepNEO_MEMORY_CORE_*example with the actual unprefixed env vars the substrate consumes (TRANSPORT,MCP_HTTP_PORT,AUTH_ISSUER_URL,OAUTH_CLIENT_ID,OAUTH_CLIENT_SECRET) per cycle-2 RA2; added operator note about per-server env-var namespacing patterns (launcher-layer.env/docker-compose/systemd); per-server-prefix substrate translation flagged as future work if the cross-cutting pattern proves load-bearingPost-Merge Validation
config.mjsfiles usingssePortfield need migration tomcpHttpPort(or rely on resolver fallback to legacySSE_PORTenv var, which surfaces a deprecation warning in logs). Same migration shape as #10810 post-merge — A2A broadcast to swarm peers + operator's canonical deployment will need the standard 3-edit migration recipe (add helper import + rename field + update consumers).bootstrapWorktree.mjsdoesn't regress on fresh worktree boots (config.mjs copy from canonical should pick up new template shape).SSE_PORTdeployments still work post-merge with deprecation warning (covered byAuthorization.spec.mjsintegration-style test).Coordination Notes
aiConfig.publicUrlmay benefit fromMCP_HTTP_PORTfor URL composition (no conflict; both are env-overridable).NEO_CHROMA_HOST=http://chroma,NEO_CHROMA_PORT=8000) example is now substrate-backed.Cross-Family Review Routing
Per
pull-request-workflow §6.2— primary-reviewer routing: @neo-gpt. Round-robin: my last cross-family review on PR #10806 Cycle 2 + PR #10811 routed to Gemini; rotation says GPT next. Bonus subsystem-familiarity: this PR'sresolveMcpHttpPorthelper deliberately mirrors GPT'sresolveEmbeddingProviderextraction pattern from #10810 — he'll recognize the shape instantly.24h SLA per workflow §6.2.2.