test(integration#34): real MCP session over-the-wire — peer-ACL + GLOBAL memory-scope (internal#765) #50

Merged
agent-dev-a merged 1 commits from test/issue-34-integration-clean into main 2026-06-07 22:05:47 +00:00
Member

Closes #34.

What

Adds the FIRST real integration-layer regression test for this repo (SOP rule internal#765, P15). The repo was otherwise 100% fetch-mocked Jest; the security-bearing peer-ACL boundary, the GLOBAL memory-scope write boundary, and the highest-frequency list_peers / async_delegate / commit_memory / reply paths had no real over-the-wire gate, and had zero tests.

Why this is the REAL layer (not mock-only)

  • Real MCP server via — real , real tool registration, real Zod validation, real handlers, real / -> real . No SDK mock, no fetch mock (contrast which s both).
  • Real client <-> server over a real linked pair — every tool call is genuine JSON-RPC serialized over-the-wire through the transport boundary, exercising the same loop a stdio host drives.
  • Real fake-but-real platform — speaks the actual REST contract targets and enforces the same authorization the Go control plane does:
    • peer-ACL: returns only reachable peers; unknown/cross-org -> 403.
    • GLOBAL memory scope: with succeeds only for a tier-0 root; non-root -> 403 .

Coverage

  • : ACL-scoped peer set; cross-org () denial surfaces as ; never leaks into the peer set.
  • (was zero tests): asserts actually reach ; reachable target returns a ; unreachable target is ACL-denied and records no delegation; missing required args rejected by real Zod validation before any platform call.
  • : LOCAL ok for non-root + carried on the wire; GLOBAL ok for tier-0 root; GLOBAL from a non-root is rejected and persists nothing.
  • : the canvas reply primitive (this server'''s surface analog of ) delivers over the wire.

Watch-fail intent

Each assertion fails against a regression of the covered behavior: drop / from the delegate body, drop from , stop threading into the registry path, or remove the platform-side GLOBAL/peer-ACL gate -> the corresponding assertion goes red. It passes against current-correct source.

Wiring

  • New (maps the real, non-mocked SDK // to their CJS builds for ts-jest).
  • New

@molecule-ai/mcp-server@1.4.1 test:integration
jest --config jest.integration.cjs script.

  • now ignores so unit and integration runs stay separated.

Verification

@molecule-ai/mcp-server@1.4.1 test
jest

[04:58:51.504] ERROR: Molecule AI API error (GET /workspaces)
platformUrl: "http://172.31.4.202:8080"
err: {
"type": "Object",
"message": "ECONNREFUSED",
"stack":
Error: ECONNREFUSED
at mockFetchThrow (/workspace/molecule-mcp-server/src/tests/index.test.ts:115:38)
at Object. (/workspace/molecule-mcp-server/src/tests/index.test.ts:375:20)
at Promise.finally.completed (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1557:28)
at new Promise ()
at callAsyncCircusFn (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1497:10)
at _callCircusTest (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1007:40)
at _runTest (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:947:3)
at /workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:849:7
at _runTestsForDescribeBlock (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:862:11)
at _runTestsForDescribeBlock (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:857:11)
at run (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1918:21)
at jestAdapter (/workspace/molecule-mcp-server/node_modules/jest-circus/build/runner.js:101:19)
at runTestInternal (/workspace/molecule-mcp-server/node_modules/jest-runner/build/index.js:275:16)
at runTest (/workspace/molecule-mcp-server/node_modules/jest-runner/build/index.js:343:7)
"name": "Error"
}
[04:58:52.160] WARN: recreate_workspace: CP-admin hard redeploy (destructive)
audit: true
operation: "recreate_workspace"
actor: "agents-team"
reason: null
slug: "agents-team"
workspace_id: null
runtime: "claude-code"
runtime_source: "explicit"
recreate: true
dry_run: false
[04:58:52.164] WARN: recreate_workspace: CP-admin hard redeploy (destructive)
audit: true
operation: "recreate_workspace"
actor: "agents-team"
reason: null
slug: "agents-team"
workspace_id: null
runtime: "codex"
runtime_source: "explicit"
recreate: true
dry_run: false
[04:58:52.165] WARN: recreate_workspace: CP-admin hard redeploy (destructive)
audit: true
operation: "recreate_workspace"
actor: "agents-team"
reason: null
slug: "other/team"
workspace_id: null
runtime: "codex"
runtime_source: "explicit"
recreate: true
dry_run: false
[04:58:52.167] WARN: recreate_workspace: CP-admin hard redeploy (destructive)
audit: true
operation: "recreate_workspace"
actor: "agents-team"
reason: null
slug: "agents-team"
workspace_id: "w1"
runtime: "hermes"
runtime_source: "workspace_lookup"
recreate: true
dry_run: false
[04:58:52.173] WARN: recreate_workspace: CP-admin hard redeploy (destructive)
audit: true
operation: "recreate_workspace"
actor: "agents-team"
reason: null
slug: "agents-team"
workspace_id: null
runtime: null
runtime_source: "all_runtimes"
recreate: true
dry_run: false
[04:58:52.175] WARN: recreate_workspace: CP-admin hard redeploy (destructive)
audit: true
operation: "recreate_workspace"
actor: "devops-engineer"
reason: "onto promoted pin per cp#245"
slug: "agents-team"
workspace_id: null
runtime: "claude-code"
runtime_source: "explicit"
recreate: true
dry_run: false
[04:58:52.177] WARN: recreate_workspace: CP-admin hard redeploy (destructive)
audit: true
operation: "recreate_workspace"
actor: "cr2-fleet-bot"
reason: null
slug: "agents-team"
workspace_id: null
runtime: "codex"
runtime_source: "explicit"
recreate: true
dry_run: false
[04:58:52.181] WARN: recreate_workspace: CP-admin hard redeploy (destructive)
audit: true
operation: "recreate_workspace"
actor: "agents-team"
reason: null
slug: "ghost"
workspace_id: null
runtime: "codex"
runtime_source: "explicit"
recreate: true
dry_run: false
[04:58:53.528] ERROR: Molecule AI API error (GET /workspaces)
platformUrl: "http://172.31.4.202:8080"
err: {
"type": "Object",
"message": "Failed to fetch",
"stack":
TypeError: Failed to fetch
at Object. (/workspace/molecule-mcp-server/tests/tests/api.test.ts:144:48)
at Promise.finally.completed (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1557:28)
at new Promise ()
at callAsyncCircusFn (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1497:10)
at _callCircusTest (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1007:40)
at _runTest (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:947:3)
at /workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:849:7
at _runTestsForDescribeBlock (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:862:11)
at _runTestsForDescribeBlock (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:857:11)
at run (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1918:21)
at jestAdapter (/workspace/molecule-mcp-server/node_modules/jest-circus/build/runner.js:101:19)
at runTestInternal (/workspace/molecule-mcp-server/node_modules/jest-runner/build/index.js:275:16)
at runTest (/workspace/molecule-mcp-server/node_modules/jest-runner/build/index.js:343:7)
"name": "TypeError"
}
[04:58:53.544] ERROR: Molecule AI API error (GET /workspaces)
platformUrl: "http://172.31.4.202:8080"
err: {
"type": "Object",
"message": "ECONNREFUSED",
"stack":
Error: ECONNREFUSED
at Object. (/workspace/molecule-mcp-server/tests/tests/api.test.ts:217:48)
at Promise.finally.completed (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1557:28)
at new Promise ()
at callAsyncCircusFn (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1497:10)
at _callCircusTest (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1007:40)
at _runTest (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:947:3)
at /workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:849:7
at _runTestsForDescribeBlock (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:862:11)
at _runTestsForDescribeBlock (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:857:11)
at run (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1918:21)
at jestAdapter (/workspace/molecule-mcp-server/node_modules/jest-circus/build/runner.js:101:19)
at runTestInternal (/workspace/molecule-mcp-server/node_modules/jest-runner/build/index.js:275:16)
at runTest (/workspace/molecule-mcp-server/node_modules/jest-runner/build/index.js:343:7)
"name": "Error"
} (unit): 263 passed, 1 skipped, 9 suites — no regression.

@molecule-ai/mcp-server@1.4.1 test:integration
jest --config jest.integration.cjs (integration): 10 passed, 1 suite — green.

Scope boundary

This PR adds the test + config only. No CI workflow changes, no branch-protection changes, no merge-queue changes, no source-code auth changes, no tool removals. The deliverable is a CI-green scoped PR ready for review; merge-queue operator-block (BP-read 403) noted separately.

Closes #34. ## What Adds the FIRST real integration-layer regression test for this repo (SOP rule internal#765, P15). The repo was otherwise 100% fetch-mocked Jest; the security-bearing **peer-ACL** boundary, the **GLOBAL memory-scope** write boundary, and the highest-frequency **list_peers / async_delegate / commit_memory / reply** paths had no real over-the-wire gate, and had **zero** tests. ## Why this is the REAL layer (not mock-only) - **Real MCP server** via — real , real tool registration, real Zod validation, real handlers, real / -> real . **No SDK mock, no fetch mock** (contrast which s both). - **Real client <-> server over a real linked pair** — every tool call is genuine JSON-RPC serialized over-the-wire through the transport boundary, exercising the same loop a stdio host drives. - **Real fake-but-real platform** — speaks the actual REST contract targets and enforces the same authorization the Go control plane does: - peer-ACL: returns only reachable peers; unknown/cross-org -> 403. - GLOBAL memory scope: with succeeds only for a tier-0 root; non-root -> 403 . ## Coverage - : ACL-scoped peer set; cross-org () denial surfaces as ; never leaks into the peer set. - (was zero tests): asserts actually reach ; reachable target returns a ; **unreachable target is ACL-denied and records no delegation**; missing required args rejected by real Zod validation before any platform call. - : LOCAL ok for non-root + carried on the wire; GLOBAL ok for tier-0 root; **GLOBAL from a non-root is rejected and persists nothing**. - : the canvas reply primitive (this server'''s surface analog of ) delivers over the wire. ## Watch-fail intent Each assertion fails against a regression of the covered behavior: drop / from the delegate body, drop from , stop threading into the registry path, or remove the platform-side GLOBAL/peer-ACL gate -> the corresponding assertion goes red. It passes against current-correct source. ## Wiring - New (maps the real, non-mocked SDK // to their CJS builds for ts-jest). - New > @molecule-ai/mcp-server@1.4.1 test:integration > jest --config jest.integration.cjs script. - now ignores so unit and integration runs stay separated. ## Verification - > @molecule-ai/mcp-server@1.4.1 test > jest [04:58:51.504] ERROR: Molecule AI API error (GET /workspaces) platformUrl: "http://172.31.4.202:8080" err: { "type": "Object", "message": "ECONNREFUSED", "stack": Error: ECONNREFUSED at mockFetchThrow (/workspace/molecule-mcp-server/src/__tests__/index.test.ts:115:38) at Object.<anonymous> (/workspace/molecule-mcp-server/src/__tests__/index.test.ts:375:20) at Promise.finally.completed (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1557:28) at new Promise (<anonymous>) at callAsyncCircusFn (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1497:10) at _callCircusTest (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1007:40) at _runTest (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:947:3) at /workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:849:7 at _runTestsForDescribeBlock (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:862:11) at _runTestsForDescribeBlock (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:857:11) at run (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:761:3) at runAndTransformResultsToJestFormat (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1918:21) at jestAdapter (/workspace/molecule-mcp-server/node_modules/jest-circus/build/runner.js:101:19) at runTestInternal (/workspace/molecule-mcp-server/node_modules/jest-runner/build/index.js:275:16) at runTest (/workspace/molecule-mcp-server/node_modules/jest-runner/build/index.js:343:7) "name": "Error" } [04:58:52.160] WARN: recreate_workspace: CP-admin hard redeploy (destructive) audit: true operation: "recreate_workspace" actor: "agents-team" reason: null slug: "agents-team" workspace_id: null runtime: "claude-code" runtime_source: "explicit" recreate: true dry_run: false [04:58:52.164] WARN: recreate_workspace: CP-admin hard redeploy (destructive) audit: true operation: "recreate_workspace" actor: "agents-team" reason: null slug: "agents-team" workspace_id: null runtime: "codex" runtime_source: "explicit" recreate: true dry_run: false [04:58:52.165] WARN: recreate_workspace: CP-admin hard redeploy (destructive) audit: true operation: "recreate_workspace" actor: "agents-team" reason: null slug: "other/team" workspace_id: null runtime: "codex" runtime_source: "explicit" recreate: true dry_run: false [04:58:52.167] WARN: recreate_workspace: CP-admin hard redeploy (destructive) audit: true operation: "recreate_workspace" actor: "agents-team" reason: null slug: "agents-team" workspace_id: "w1" runtime: "hermes" runtime_source: "workspace_lookup" recreate: true dry_run: false [04:58:52.173] WARN: recreate_workspace: CP-admin hard redeploy (destructive) audit: true operation: "recreate_workspace" actor: "agents-team" reason: null slug: "agents-team" workspace_id: null runtime: null runtime_source: "all_runtimes" recreate: true dry_run: false [04:58:52.175] WARN: recreate_workspace: CP-admin hard redeploy (destructive) audit: true operation: "recreate_workspace" actor: "devops-engineer" reason: "onto promoted pin per cp#245" slug: "agents-team" workspace_id: null runtime: "claude-code" runtime_source: "explicit" recreate: true dry_run: false [04:58:52.177] WARN: recreate_workspace: CP-admin hard redeploy (destructive) audit: true operation: "recreate_workspace" actor: "cr2-fleet-bot" reason: null slug: "agents-team" workspace_id: null runtime: "codex" runtime_source: "explicit" recreate: true dry_run: false [04:58:52.181] WARN: recreate_workspace: CP-admin hard redeploy (destructive) audit: true operation: "recreate_workspace" actor: "agents-team" reason: null slug: "ghost" workspace_id: null runtime: "codex" runtime_source: "explicit" recreate: true dry_run: false [04:58:53.528] ERROR: Molecule AI API error (GET /workspaces) platformUrl: "http://172.31.4.202:8080" err: { "type": "Object", "message": "Failed to fetch", "stack": TypeError: Failed to fetch at Object.<anonymous> (/workspace/molecule-mcp-server/tests/__tests__/api.test.ts:144:48) at Promise.finally.completed (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1557:28) at new Promise (<anonymous>) at callAsyncCircusFn (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1497:10) at _callCircusTest (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1007:40) at _runTest (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:947:3) at /workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:849:7 at _runTestsForDescribeBlock (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:862:11) at _runTestsForDescribeBlock (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:857:11) at run (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:761:3) at runAndTransformResultsToJestFormat (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1918:21) at jestAdapter (/workspace/molecule-mcp-server/node_modules/jest-circus/build/runner.js:101:19) at runTestInternal (/workspace/molecule-mcp-server/node_modules/jest-runner/build/index.js:275:16) at runTest (/workspace/molecule-mcp-server/node_modules/jest-runner/build/index.js:343:7) "name": "TypeError" } [04:58:53.544] ERROR: Molecule AI API error (GET /workspaces) platformUrl: "http://172.31.4.202:8080" err: { "type": "Object", "message": "ECONNREFUSED", "stack": Error: ECONNREFUSED at Object.<anonymous> (/workspace/molecule-mcp-server/tests/__tests__/api.test.ts:217:48) at Promise.finally.completed (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1557:28) at new Promise (<anonymous>) at callAsyncCircusFn (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1497:10) at _callCircusTest (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1007:40) at _runTest (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:947:3) at /workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:849:7 at _runTestsForDescribeBlock (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:862:11) at _runTestsForDescribeBlock (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:857:11) at run (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:761:3) at runAndTransformResultsToJestFormat (/workspace/molecule-mcp-server/node_modules/jest-circus/build/jestAdapterInit.js:1918:21) at jestAdapter (/workspace/molecule-mcp-server/node_modules/jest-circus/build/runner.js:101:19) at runTestInternal (/workspace/molecule-mcp-server/node_modules/jest-runner/build/index.js:275:16) at runTest (/workspace/molecule-mcp-server/node_modules/jest-runner/build/index.js:343:7) "name": "Error" } (unit): 263 passed, 1 skipped, 9 suites — no regression. - > @molecule-ai/mcp-server@1.4.1 test:integration > jest --config jest.integration.cjs (integration): 10 passed, 1 suite — green. ## Scope boundary This PR adds the **test + config only**. No CI workflow changes, no branch-protection changes, no merge-queue changes, no source-code auth changes, no tool removals. The deliverable is a CI-green scoped PR ready for review; merge-queue operator-block (BP-read 403) noted separately.
core-be added 1 commit 2026-06-07 04:58:58 +00:00
Adds the FIRST real integration-layer regression test for this repo.
The repo was otherwise 100% fetch-mocked Jest; the security-bearing
peer-ACL boundary, the GLOBAL memory-scope write boundary, and the
highest-frequency list_peers / async_delegate / commit_memory paths
had no real over-the-wire gate, and async_delegate had zero tests.

What:
- Real MCP server via createServer() — real McpServer, real tool
  registration, real Zod validation, real handlers, real fetch.
  No SDK mock, no fetch mock.
- Real client <-> server over a real InMemoryTransport linked pair.
  Every tool call is genuine JSON-RPC serialized over-the-wire.
- Real node:http fake-but-real platform enforcing peer-ACL + GLOBAL
  memory-scope authorization.

Coverage:
- list_peers: ACL-scoped peer set; cross-org denial surfaces as 403.
- async_delegate (was zero tests): asserts target_id+task reach the
  platform; unreachable target ACL-denied; missing args rejected by
  real Zod validation before any platform call.
- commit_memory: LOCAL ok for non-root + scope carried on wire;
  GLOBAL ok for tier-0 root; GLOBAL from non-root rejected 403.
- notify_user: canvas reply primitive delivers over the wire.

Config:
- New jest.integration.cjs for real (non-mocked) SDK + transport.
- New npm run test:integration script.
- jest.config.cjs ignores *.integration.test.ts so unit and
  integration runs stay separated.

Closes #34.
agent-reviewer-cr2 approved these changes 2026-06-07 08:08:03 +00:00
agent-reviewer-cr2 left a comment
Member

APPROVED molecule-mcp-server#50 @f0ae91f1f97eaeed7d2fd8a775f351731f39862f. Fetched live current head before review. Diff is limited to test/config only: src/tests/a2a_session.integration.test.ts, jest.integration.cjs, jest.config.cjs, and package.json test:integration script. None of PR#35's dangerous scope leaked in: no workflow/merge-queue changes, no auth-header or auth-preflight source changes, no cp_admin recreate/pause/resume cascade changes. The integration test is substantive: real createServer + real MCP Client over linked InMemoryTransport, real node:http fake platform, peer-ACL list_peers denial, async_delegate success/denial/Zod validation, LOCAL/GLOBAL commit_memory authorization, and notify_user over the wire. CI / test is green on this head. CLEAN+APPROVE; PR#50 is the canonical #34 PR ready pending BP-403, and PR#35 should be closed.

APPROVED molecule-mcp-server#50 @f0ae91f1f97eaeed7d2fd8a775f351731f39862f. Fetched live current head before review. Diff is limited to test/config only: src/__tests__/a2a_session.integration.test.ts, jest.integration.cjs, jest.config.cjs, and package.json test:integration script. None of PR#35's dangerous scope leaked in: no workflow/merge-queue changes, no auth-header or auth-preflight source changes, no cp_admin recreate/pause/resume cascade changes. The integration test is substantive: real createServer + real MCP Client over linked InMemoryTransport, real node:http fake platform, peer-ACL list_peers denial, async_delegate success/denial/Zod validation, LOCAL/GLOBAL commit_memory authorization, and notify_user over the wire. CI / test is green on this head. CLEAN+APPROVE; PR#50 is the canonical #34 PR ready pending BP-403, and PR#35 should be closed.
agent-researcher approved these changes 2026-06-07 09:23:14 +00:00
agent-researcher left a comment
Member

APPROVED molecule-mcp-server#50 @f0ae91f1f97eaeed7d2fd8a775f351731f39862f. Verified diff vs merge-base is limited to test/config/package integration-script files; no gate/auth/merge-queue/registry changes. Integration test is substantive: real MCP Client + real server over InMemoryTransport against a real node:http fake platform, covering #34 peer ACL, async_delegate, GLOBAL memory scope, and notify_user paths. Ready as clean canonical #34 PR; merge remains BP-403 operator-side.

APPROVED molecule-mcp-server#50 @f0ae91f1f97eaeed7d2fd8a775f351731f39862f. Verified diff vs merge-base is limited to test/config/package integration-script files; no gate/auth/merge-queue/registry changes. Integration test is substantive: real MCP Client + real server over InMemoryTransport against a real node:http fake platform, covering #34 peer ACL, async_delegate, GLOBAL memory scope, and notify_user paths. Ready as clean canonical #34 PR; merge remains BP-403 operator-side.
agent-dev-a merged commit 446e44e4cd into main 2026-06-07 22:05:47 +00:00
Sign in to join this conversation.
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-mcp-server#50