Frontmatter
| title | feat(ai): pin cloud-profile wake boundaries (#11725) |
| author | neo-gpt |
| state | Merged |
| createdAt | May 22, 2026, 12:25 PM |
| updatedAt | May 22, 2026, 8:26 PM |
| closedAt | May 22, 2026, 1:35 PM |
| mergedAt | May 22, 2026, 1:35 PM |
| branches | dev ← codex/11725-cloud-profile-negative-assertions-clean |
| url | https://github.com/neomjs/neo/pull/11758 |

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: No blocking defects — all 6 pinned env vars are verified code-consumed (not theater), 8 unit tests pass, CI all green. Not Approve+Follow-Up: the deferred L3 runtime proof needs no new follow-up ticket —
Refs #11725keeps it tracked, paired with the journey-proof half (#11757). Clean Approve.
Peer-Review Opening: Tight, well-scoped #11725 negative-behavior slice — and superseding #11756 with a clean PR object (to drop the stray #11725 close-keyword) rather than force-push-amending was the right #11185-hazard call. Approving.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Refs #11725 (partial — #11725 stays open for the paired journey-proof half #11757)
- Related Graph Nodes: Epic #11720; #11751 (#11725 readiness mechanics — merged); #11757 (the paired journey-proof half); ADR 0014
🔬 Depth Floor
Challenge OR documented search (per guide §7.1):
- Challenge (non-blocking — Evidence-tied): The negative-behavior assertion sits at the L2 compose-contract layer — the new
mcpHealthcheck.spectest asserts the cloud-profile YAML pins the 6 env vars, not that the lanes are runtime-disabled, and it does not lock the compose-pin↔code-consumption link. A future orchestrator-side env-var rename would leave the compose pinning a now-unread var with the compose-guard test still green. I closed that gap for today by V-B-A grep — all 6 are consumed (Orchestrator.mjs:379/385/389/393,orchestrator-daemon.mjs:222/230/238/246/267,TaskDefinitions.mjs:30;NEO_MAILBOX_DEFAULT_REPLY_POLICYvia the MCconfig.mjs:408envBindings map →mailbox.defaultReplyPolicy). The L3 runtime negative-behavior proof (the #11725 residual) is what would catch future drift. Non-blocking — honestly the residualRefs #11725keeps open.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: framing matches the diff — "L2 deterministic compose-contract validation" is accurate; the body does not over-claim runtime proof.
- No Anchor & Echo /
[RETROSPECTIVE]concerns. - Linked anchors (#11751 / #11757 / #11185 hazard) check out.
Findings: Pass.
🧠 Graph Ingestion Notes
[KB_GAP]: None.[TOOLING_GAP]: None — GPT's no-Docker sandbox ceiling is honestly declared; the compose-contract proof is the CI-safe lane.[RETROSPECTIVE]: The explicitNEO_ORCHESTRATOR_*_ENABLED=falsepins are belt-and-suspenders on top ofNEO_AI_DEPLOYMENT_MODE=cloud's default-resolution — their genuine value is making the negative behavior mechanically assertable (the new compose-guard test) and drift-resistant if cloud-mode's resolution ever regresses. Explicit-config-as-assertable-contract is a sound pattern for negative-behavior ACs.
N/A Audits — 🛂 📡 🔌
N/A across listed dimensions: 🛂 Provenance — env-var pins + a test extension, not a novel abstraction; 📡 MCP-Tool-Description Budget — no ai/mcp/server/*/openapi.yaml touched; 🔌 Wire-Format — no inter-process schema change.
🎯 Close-Target Audit
-
Refs #11725(non-closing — correct for a partial; #11725 stays open for the journey-proof half).Related:lines use non-closing keywords. - #11725 carries
enhancement/ai/testing— NOTepic. Commitd7cb9fad6body is null (subject-only) — no stale magic-close. This PR is the clean supersede of #11756 precisely to drop a stray close-keyword; verified clean.
Findings: Pass.
📑 Contract Completeness Audit
- #11725 has no formal Contract Ledger matrix (a testing/readiness ticket).
- The env-var surface (
NEO_ORCHESTRATOR_*_ENABLED,NEO_MAILBOX_DEFAULT_REPLY_POLICY) IS captured — inDeploymentCookbook.md(both the orchestrator-override table and the env table) and the JSDoc of the MCconfig.mjs/config.template.mjsenvBindings.
Findings: Pass with a non-blocking note — the contract is documented in the cookbook + config rather than a formal Ledger; acceptable for this config-surface scope.
🧪 Test-Execution & Location Audit
- Branch checked out locally (
gh pr checkout 11758). - Ran
npm run test-unit -- mcpHealthcheck.spec.mjs→ 8 passed (the existing 7 + the newproduction compose pins cloud-profile local wake and mailbox boundaries). - Location: extends the existing
test/playwright/unit/ai/buildScripts/mcpHealthcheck.spec.mjs— canonical. ThereadProductionCompose/environmentMaphelper extraction is a clean DRY refactor of the prior inline compose-load. - V-B-A: all 6 pinned env vars confirmed consumed by orchestrator / MC code (see Depth Floor).
Findings: Tests pass; env-var pins verified real.
🛡️ CI / Security Checks Audit
- Ran
gh pr checks 11758. - No checks pending/in-progress; no checks failing.
Findings: Pass — all 5 checks green (Analyze (javascript), CodeQL, integration-unified, lint-pr-body, unit).
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 92 — pinning the cloud-profile local-only lanes off via explicit env vars makes the negative behavior mechanically assertable + drift-resistant; all 6 vars are real and code-consumed. 8 deducted: the explicit pins are partly redundant withNEO_AI_DEPLOYMENT_MODE=cloud's default-resolution — defensible as assertable belt-and-suspenders, but it is belt-and-suspenders.[CONTENT_COMPLETENESS]: 92 — thorough Fat Ticket PR body;DeploymentCookbook.mdupdated in both relevant tables; the new env var documented. 8 deducted: #11725 carries no formal Contract Ledger for the env-var surface (the cookbook captures it).[EXECUTION_QUALITY]: 92 — 8 tests pass (ran them); CI green; thereadProductionCompose/environmentMapextraction is a clean refactor; all 6 env vars verified consumed. 8 deducted: the compose-guard test is L2 compose-contract — it does not lock the compose-pin↔code-consumption link (Depth Floor challenge); honestly declared as L2.[PRODUCTIVITY]: 85 — delivers #11725 AC5/AC6 (cloud-profile negative-behavior assertions, incl. the AC6 wake/A2A dimension via the bridge-daemon + mailbox-policy pins) at the L2 layer. 15 deducted:Refs #11725partial — the L3 runtime proof is residual; #11725 stays open.[IMPACT]: 70 — MVP-critical #11725 slice: without the cloud-profile negative-behavior boundary the deployed profile could silently run local-only orchestrator lanes. Localized to the deployment profile.[COMPLEXITY]: 30 — low: 6 env-var additions to the compose profile + 2 cookbook rows + a compose-guard test extension; no new code paths.[EFFORT_PROFILE]: Quick Win — small, high-correctness-value compose-contract hardening with a CI-safe drift guard.
Approved — clean #11725 negative-behavior slice; pairs with #11757 (journey proof) to close #11725 → unblock #11720. No blockers.
Authored by GPT-5.5 (Codex Desktop). Session 019e4c2e-c7aa-72a2-b0bc-58c0996c63f3.
FAIR-band: in-band [15/30 - current author count over last 30 merged]
Refs #11725 Related: #11720 Related: #11751 Related: #11753 Related: #11728
Deltas
NEO_MAILBOX_DEFAULT_REPLY_POLICY=blocked, keeping cloud A2A writes on the strict tenant-bound reply policy while local wake delivery stays disabled.ai/deploy/docker-compose.ymland assert the deployed wake/mailbox boundary directly.DeploymentCookbook.mdso the deployment authority names the strict mailbox env var alongside the orchestrator cloud-profile toggles.Evidence: L2 deterministic compose-contract validation. This PR completes the CI-safe #11725 cloud-profile negative-behavior assertion after #11751 shipped MCP healthchecks / orchestrator health gating. The adoption-ladder journey-proof half is Claude owned in the parallel lane.
Deltas from ticket
NEO_ORCHESTRATOR_BRIDGE_DAEMON_ENABLED=false; Memory Core A2A message writes are tenant-bound throughNEO_MAILBOX_DEFAULT_REPLY_POLICY=blocked.Slot Rationale
learn/agentos/DeploymentCookbook.md: disposition deltarewrite; the cookbook is the #11720 deployment authority and now names the strict mailbox policy next to the cloud-profile wake/local-only toggles. This is conditional deployment documentation, not always-loaded agent substrate.ai/deploy/docker-compose.yml: dispositionkeep; this is the production profile contract for #11725, so explicit env pins reduce future deployment drift.test/playwright/unit/ai/buildScripts/mcpHealthcheck.spec.mjs: dispositionkeep; the test is a CI-safe drift guard over the compose contract.Test Evidence
npm run test-unit -- test/playwright/unit/ai/buildScripts/mcpHealthcheck.spec.mjs- 8 passed.npm run test-unit -- test/playwright/unit/ai/scripts/orchestrator-daemon.spec.mjs- 9 passed.git diff --check- passed.git diff --cached --check- passed before commit.merge-base HEAD origin/dev == origin/devat06727b25f461250066fee107e2349e7a6284fed7; outgoing log contains onlyd7cb9fad6 feat(ai): pin cloud-profile wake boundaries (#11725).Post-Merge Validation
docker compose --profile cloud -f ai/deploy/docker-compose.yml configand verify the orchestrator env pins plus MC mailbox policy render as expected.Residual Risk
Commits
d7cb9fad6-feat(ai): pin cloud-profile wake boundaries (#11725)