diff --git a/.openclaw-sync/source.json b/.openclaw-sync/source.json index af7c63363..459d528a4 100644 --- a/.openclaw-sync/source.json +++ b/.openclaw-sync/source.json @@ -1,5 +1,5 @@ { "repository": "openclaw/openclaw", - "sha": "688fc288af0eaa8ee6a078d3606fc401853aeeca", - "syncedAt": "2026-04-23T01:38:54.505Z" + "sha": "1489febee934ab7a33d4506e3faf7d22a8a5e838", + "syncedAt": "2026-04-23T01:47:13.329Z" } diff --git a/docs/help/testing.md b/docs/help/testing.md index 85c760cca..6a1d19ca1 100644 --- a/docs/help/testing.md +++ b/docs/help/testing.md @@ -910,6 +910,7 @@ The live-model Docker runners also bind-mount only the needed CLI auth homes (or - Gateway networking (two containers, WS auth + health): `pnpm test:docker:gateway-network` (script: `scripts/e2e/gateway-network-docker.sh`) - MCP channel bridge (seeded Gateway + stdio bridge + raw Claude notification-frame smoke): `pnpm test:docker:mcp-channels` (script: `scripts/e2e/mcp-channels-docker.sh`) - Pi bundle MCP tools (real stdio MCP server + embedded Pi profile allow/deny smoke): `pnpm test:docker:pi-bundle-mcp-tools` (script: `scripts/e2e/pi-bundle-mcp-tools-docker.sh`) +- Cron/subagent MCP cleanup (real Gateway + stdio MCP child teardown after isolated cron and one-shot subagent runs): `pnpm test:docker:cron-mcp-cleanup` (script: `scripts/e2e/cron-mcp-cleanup-docker.sh`) - Plugins (install smoke + `/plugin` alias + Claude-bundle restart semantics): `pnpm test:docker:plugins` (script: `scripts/e2e/plugins-docker.sh`) - Bundled plugin runtime deps: `pnpm test:docker:bundled-channel-deps` builds a small Docker runner image by default, builds and packs OpenClaw once on the host, then mounts that tarball into each Linux install scenario. Reuse the image with `OPENCLAW_SKIP_DOCKER_BUILD=1`, skip the host rebuild after a fresh local build with `OPENCLAW_BUNDLED_CHANNEL_HOST_BUILD=0`, or point at an existing tarball with `OPENCLAW_BUNDLED_CHANNEL_PACKAGE_TGZ=/path/to/openclaw-*.tgz`. - Narrow bundled plugin runtime deps while iterating by disabling unrelated scenarios, for example: @@ -951,6 +952,10 @@ model key. It builds the repo Docker image, starts a real stdio MCP probe server inside the container, materializes that server through the embedded Pi bundle MCP runtime, executes the tool, then verifies `coding` and `messaging` keep `bundle-mcp` tools while `minimal` and `tools.deny: ["bundle-mcp"]` filter them. +`test:docker:cron-mcp-cleanup` is deterministic and does not need a live model +key. It starts a seeded Gateway with a real stdio MCP probe server, runs an +isolated cron turn and a `/subagents spawn` one-shot child turn, then verifies +the MCP child process exits after each run. Manual ACP plain-language thread smoke (not CI):