openclaw - 💡(How to fix) Fix [Bug]: Plugin runtime-deps tree staged in waves during openclaw update; gateway restart fires before tree is complete, causing channel-loader ENOENT spam (~60+ min unhealthy gateway) [1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#75231Fetched 2026-05-01 05:36:36
View on GitHub
Comments
1
Participants
2
Timeline
7
Reactions
2
Author
Timeline (top)
cross-referenced ×2closed ×1commented ×1labeled ×1

On macOS, openclaw update from 2026.4.26 to 2026.4.27 fires the LaunchAgent supervisor restart before the plugin runtime-deps dist/ tree finishes staging. The gateway comes up against an incomplete tree, eight bundled channels fail to load with ENOENT, and openclaw status reports the gateway unreachable for ~60+ minutes until a second staging wave completes (or openclaw doctor --repair is run manually).

Error Message

  1. Observe post-install warning: Completion cache update failed: Error: spawnSync /usr/local/Cellar/node/25.8.1_1/bin/node ETIMEDOUT.
  • Update CLI prints Update Result: OK · Before: 2026.4.26 · After: 2026.4.27 followed by Completion cache update failed: Error: spawnSync /usr/local/Cellar/node/25.8.1_1/bin/node ETIMEDOUT.

Root Cause

  • Update CLI prints Update Result: OK · Before: 2026.4.26 · After: 2026.4.27 followed by Completion cache update failed: Error: spawnSync /usr/local/Cellar/node/25.8.1_1/bin/node ETIMEDOUT.
  • Restart step prints: Gateway did not become healthy after restart. Gateway version mismatch: expected 2026.4.27, running gateway reported unavailable. Service runtime: status=running, state=xpcproxy, pid=2021. Gateway port 18789 status: free.
  • For ~60+ minutes, openclaw status shows Gateway unreachable (connect ECONNREFUSED 127.0.0.1:18789) while channel loaders emit ENOENT against eight bundled channels. Notably, openclaw gateway status --deep reports Connectivity probe: ok · Listening: 127.0.0.1:18789 simultaneously — the two probe paths disagree (separate bug).
  • dist/ directory has 2,867 entries with mtime spread across ~65 minutes, confirming non-atomic staging.
  • Manual openclaw gateway invocation later triggers a third staging step that runs in 14.7 seconds (staging bundled runtime deps before gateway startup (1 missing, 22 install specs): chokidar@^5.0.0), then fails with EADDRINUSE: address already in use 127.0.0.1:18789 because the supervised gateway is still holding the port.
  • openclaw doctor --repair (run manually) installs 23 missing bundled plugin runtime deps in ~2 seconds and brings the gateway to a clean reachable state.

Fix Action

Fix / Workaround

Last known good: 2026.4.26. First known bad: 2026.4.27. Workaround: run openclaw doctor --repair after the update — installs the missing bundled plugin runtime deps and reinstalls the LaunchAgent plist with a clean PATH (related issue, filed separately for LaunchAgent PATH pollution). Suggested fix direction: hold supervisor restart in openclaw update until plugin-runtime-deps dist/ tree is fully staged and verifiable; treat Completion cache update failed: spawnSync ETIMEDOUT as a hard failure that triggers re-stage; auto-run openclaw doctor --repair as a post-install step.

Code Example

Gateway did not become healthy after restart.
   Gateway version mismatch: expected 2026.4.27, running gateway reported unavailable.
   Service runtime: status=running, state=xpcproxy, pid=2021
   Gateway port 18789 status: free.

---

# openclaw status output (~5 min after update) showing channel ENOENT spam:

09:46:32 [channels] failed to load bundled channel discord: ENOENT: no such file or directory, open '/Users/Nick/.openclaw/plugin-runtime-deps/openclaw-2026.4.27-17c3fa238f70/dist/bundled-public-surface-runtime-root-CYsvLGbQ.js'
09:46:36 [channels] failed to load bundled channel feishu: ENOENT: ... brave-web-search-provider.shared-DugI7i0_.js
09:46:43 [channels] failed to load bundled channel imessage: ENOENT: ... abort-CagsLiDX.js
09:47:18 [channels] failed to load bundled channel msteams: ENOENT: ... binding-routing-DzFH-7-S.js
09:47:22 [channels] failed to load bundled channel nextcloud-talk: ENOENT: ... channel-bootstrap.runtime.js
09:47:54 [channels] failed to load bundled channel telegram: ENOENT: ... acp-spawn-BLrG40RH.js
09:48:09 [channels] failed to load bundled channel twitch: ENOENT: ... brave-web-search-provider.runtime.js
09:48:20 [channels] failed to load bundled channel zalo: ENOENT: ... binding-routing-DzFH-7-S.js

# Plugin runtime-deps tree (inspected ~75 min after update):

$ ls -la ~/.openclaw/plugin-runtime-deps/openclaw-2026.4.27-17c3fa238f70/
total 16
drwxr-xr-x     7 Nick  staff    224 Apr 30 10:42 .
drwx------     5 Nick  staff    160 Apr 30 09:30 .openclaw-npm-cache
-rw-------     1 Nick  staff    615 Apr 30 10:41 .openclaw-runtime-deps.json
drwx------  2867 Nick  staff  91744 Apr 30 10:35 dist          # second wave mtime
drwx------   188 Nick  staff   6016 Apr 30 10:41 node_modules
-rw-------     1 Nick  staff    773 Apr 30 10:41 package.json

# Manual gateway start (10:41 CT) showing third staging wave:

10:41:40 [gateway] [plugins] staging bundled runtime deps before gateway startup (1 missing, 22 install specs): chokidar@^5.0.0
10:41:55 [gateway] [plugins] installed bundled runtime deps before gateway startup in 14734ms: chokidar@^5.0.0
Gateway failed to start: another gateway instance is already listening on ws://127.0.0.1:18789 | listen EADDRINUSE: address already in use 127.0.0.1:18789

# openclaw doctor --repair output showing 23 missing deps installed:

Installed bundled plugin runtime deps in 2s: @agentclientprotocol/claude-agent-acp@0.31.0, @buape/carbon@0.16.0, @discordjs/voice@^0.19.2, @grammyjs/runner@^2.0.3, @grammyjs/transformer-throttler@^1.2.1, @mariozechner/pi-ai@0.70.5, @modelcontextprotocol/sdk@1.29.0, @zed-industries/codex-acp@0.12.0, acpx@0.6.1, chokidar@^5.0.0, commander@^14.0.3, discord-api-types@^0.38.47, express@5.2.1, grammy@^1.42.0, https-proxy-agent@^9.0.0, opusscript@^0.1.1, playwright-core@1.59.1, semver@7.7.4, tslog@^4.10.2, typebox@1.1.33, undici@8.1.0, ws@^8.20.0, zod@^4.3.6
RAW_BUFFERClick to expand / collapse

Bug type

Regression (worked before, now fails)

Beta release blocker

No

Summary

On macOS, openclaw update from 2026.4.26 to 2026.4.27 fires the LaunchAgent supervisor restart before the plugin runtime-deps dist/ tree finishes staging. The gateway comes up against an incomplete tree, eight bundled channels fail to load with ENOENT, and openclaw status reports the gateway unreachable for ~60+ minutes until a second staging wave completes (or openclaw doctor --repair is run manually).

Steps to reproduce

  1. On macOS 15.7.5 with multiple Node version managers in PATH (Volta, asdf, fnm, pnpm), run openclaw update to bump 2026.4.26 → 2026.4.27.
  2. Observe post-install warning: Completion cache update failed: Error: spawnSync /usr/local/Cellar/node/25.8.1_1/bin/node ETIMEDOUT.
  3. Observe restart-step failure printed by the update CLI:
    Gateway did not become healthy after restart.
    Gateway version mismatch: expected 2026.4.27, running gateway reported unavailable.
    Service runtime: status=running, state=xpcproxy, pid=2021
    Gateway port 18789 status: free.
  4. Within ~5 minutes, run openclaw status. Observe Gateway field reporting unreachable (connect ECONNREFUSED 127.0.0.1:18789) and the channel loaders emitting ENOENT against specific dist files for eight bundled channels (discord, feishu, imessage, msteams, nextcloud-talk, telegram, twitch, zalo).
  5. Inspect ~/.openclaw/plugin-runtime-deps/openclaw-2026.4.27-HASH/. Observe dist/ directory mtime is later than the update timestamp, and individual files inside have mixed mtimes spread across ~65 minutes — staging is in waves.
  6. Wait ~65 minutes. openclaw status eventually reports gateway reachable as the second staging wave completes (self-heal). Or run openclaw doctor --repair to install the missing bundled plugin runtime deps in ~2 seconds and bring the gateway healthy immediately.

Expected behavior

In 2026.4.26 the supervisor restart completed cleanly and the gateway came up healthy with all bundled channels loaded. The expected behavior on 2026.4.27 is the same: openclaw update should hold off the LaunchAgent restart until the plugin runtime-deps dist/ tree is fully staged and verifiable (e.g. via a staging.complete sentinel or manifest hash). The gateway should report healthy immediately after the restart with no channel ENOENT errors. The Completion cache update failed: spawnSync ETIMEDOUT warning should escalate to a hard failure or trigger an automatic re-stage rather than being treated as a soft warning.

Actual behavior

After running openclaw update 2026.4.26 → 2026.4.27:

  • Update CLI prints Update Result: OK · Before: 2026.4.26 · After: 2026.4.27 followed by Completion cache update failed: Error: spawnSync /usr/local/Cellar/node/25.8.1_1/bin/node ETIMEDOUT.
  • Restart step prints: Gateway did not become healthy after restart. Gateway version mismatch: expected 2026.4.27, running gateway reported unavailable. Service runtime: status=running, state=xpcproxy, pid=2021. Gateway port 18789 status: free.
  • For ~60+ minutes, openclaw status shows Gateway unreachable (connect ECONNREFUSED 127.0.0.1:18789) while channel loaders emit ENOENT against eight bundled channels. Notably, openclaw gateway status --deep reports Connectivity probe: ok · Listening: 127.0.0.1:18789 simultaneously — the two probe paths disagree (separate bug).
  • dist/ directory has 2,867 entries with mtime spread across ~65 minutes, confirming non-atomic staging.
  • Manual openclaw gateway invocation later triggers a third staging step that runs in 14.7 seconds (staging bundled runtime deps before gateway startup (1 missing, 22 install specs): chokidar@^5.0.0), then fails with EADDRINUSE: address already in use 127.0.0.1:18789 because the supervised gateway is still holding the port.
  • openclaw doctor --repair (run manually) installs 23 missing bundled plugin runtime deps in ~2 seconds and brings the gateway to a clean reachable state.

OpenClaw version

2026.4.27 (regressed from 2026.4.26)

Operating system

macOS 15.7.5 (x64)

Install method

npm global at /usr/local/lib/node_modules/openclaw

Model

gpt-5.5 (default agent — not relevant; bug is in update flow, not model routing)

Provider / routing chain

openclaw direct (not relevant — bug is in update flow, not provider routing)

Additional provider/model setup details

No response

Logs, screenshots, and evidence

# openclaw status output (~5 min after update) showing channel ENOENT spam:

09:46:32 [channels] failed to load bundled channel discord: ENOENT: no such file or directory, open '/Users/Nick/.openclaw/plugin-runtime-deps/openclaw-2026.4.27-17c3fa238f70/dist/bundled-public-surface-runtime-root-CYsvLGbQ.js'
09:46:36 [channels] failed to load bundled channel feishu: ENOENT: ... brave-web-search-provider.shared-DugI7i0_.js
09:46:43 [channels] failed to load bundled channel imessage: ENOENT: ... abort-CagsLiDX.js
09:47:18 [channels] failed to load bundled channel msteams: ENOENT: ... binding-routing-DzFH-7-S.js
09:47:22 [channels] failed to load bundled channel nextcloud-talk: ENOENT: ... channel-bootstrap.runtime.js
09:47:54 [channels] failed to load bundled channel telegram: ENOENT: ... acp-spawn-BLrG40RH.js
09:48:09 [channels] failed to load bundled channel twitch: ENOENT: ... brave-web-search-provider.runtime.js
09:48:20 [channels] failed to load bundled channel zalo: ENOENT: ... binding-routing-DzFH-7-S.js

# Plugin runtime-deps tree (inspected ~75 min after update):

$ ls -la ~/.openclaw/plugin-runtime-deps/openclaw-2026.4.27-17c3fa238f70/
total 16
drwxr-xr-x     7 Nick  staff    224 Apr 30 10:42 .
drwx------     5 Nick  staff    160 Apr 30 09:30 .openclaw-npm-cache
-rw-------     1 Nick  staff    615 Apr 30 10:41 .openclaw-runtime-deps.json
drwx------  2867 Nick  staff  91744 Apr 30 10:35 dist          # second wave mtime
drwx------   188 Nick  staff   6016 Apr 30 10:41 node_modules
-rw-------     1 Nick  staff    773 Apr 30 10:41 package.json

# Manual gateway start (10:41 CT) showing third staging wave:

10:41:40 [gateway] [plugins] staging bundled runtime deps before gateway startup (1 missing, 22 install specs): chokidar@^5.0.0
10:41:55 [gateway] [plugins] installed bundled runtime deps before gateway startup in 14734ms: chokidar@^5.0.0
Gateway failed to start: another gateway instance is already listening on ws://127.0.0.1:18789 | listen EADDRINUSE: address already in use 127.0.0.1:18789

# openclaw doctor --repair output showing 23 missing deps installed:

Installed bundled plugin runtime deps in 2s: @agentclientprotocol/[email protected], @buape/[email protected], @discordjs/voice@^0.19.2, @grammyjs/runner@^2.0.3, @grammyjs/transformer-throttler@^1.2.1, @mariozechner/[email protected], @modelcontextprotocol/[email protected], @zed-industries/[email protected], [email protected], chokidar@^5.0.0, commander@^14.0.3, discord-api-types@^0.38.47, [email protected], grammy@^1.42.0, https-proxy-agent@^9.0.0, opusscript@^0.1.1, [email protected], [email protected], tslog@^4.10.2, [email protected], [email protected], ws@^8.20.0, zod@^4.3.6

Impact and severity

Affected: macOS users running openclaw update to 2026.4.27, particularly with multiple Node version managers in PATH. Severity: High while degraded — gateway unreachable, channels emitting ENOENT. Self-heals or resolves via openclaw doctor --repair. Frequency: 1/1 observed updates on this environment. Likely deterministic for this hardware/PATH combination. Consequence: Telegram/Discord channel events lost or delayed during the ~60+ min unhealthy window; misleading diagnostic state (status command lies about gateway reachability) prolongs incident triage.

Additional information

Last known good: 2026.4.26. First known bad: 2026.4.27. Workaround: run openclaw doctor --repair after the update — installs the missing bundled plugin runtime deps and reinstalls the LaunchAgent plist with a clean PATH (related issue, filed separately for LaunchAgent PATH pollution). Suggested fix direction: hold supervisor restart in openclaw update until plugin-runtime-deps dist/ tree is fully staged and verifiable; treat Completion cache update failed: spawnSync ETIMEDOUT as a hard failure that triggers re-stage; auto-run openclaw doctor --repair as a post-install step.

extent analysis

TL;DR

The most likely fix is to modify the openclaw update process to wait for the plugin runtime-deps dist/ tree to be fully staged before restarting the LaunchAgent supervisor.

Guidance

  • Verify that the dist/ directory is fully populated before restarting the supervisor by checking the directory's modification time or using a sentinel file.
  • Consider treating the Completion cache update failed: spawnSync ETIMEDOUT warning as a hard failure that triggers a re-stage of the plugin runtime-deps.
  • Run openclaw doctor --repair as a post-install step to ensure that any missing dependencies are installed and the LaunchAgent is properly configured.
  • Investigate the cause of the non-atomic staging of the dist/ directory and address any underlying issues to prevent similar problems in the future.

Example

No code snippet is provided as the issue is related to the update process and not a specific code block.

Notes

The provided information suggests that the issue is specific to macOS and the openclaw update process. The workaround of running openclaw doctor --repair after the update is effective in resolving the issue, but a more permanent fix is needed to address the root cause.

Recommendation

Apply the workaround of running openclaw doctor --repair after the update until a permanent fix is implemented to modify the openclaw update process to wait for the plugin runtime-deps dist/ tree to be fully staged before restarting the LaunchAgent supervisor. This will ensure that the gateway is properly configured and functional after the update.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

In 2026.4.26 the supervisor restart completed cleanly and the gateway came up healthy with all bundled channels loaded. The expected behavior on 2026.4.27 is the same: openclaw update should hold off the LaunchAgent restart until the plugin runtime-deps dist/ tree is fully staged and verifiable (e.g. via a staging.complete sentinel or manifest hash). The gateway should report healthy immediately after the restart with no channel ENOENT errors. The Completion cache update failed: spawnSync ETIMEDOUT warning should escalate to a hard failure or trigger an automatic re-stage rather than being treated as a soft warning.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - 💡(How to fix) Fix [Bug]: Plugin runtime-deps tree staged in waves during openclaw update; gateway restart fires before tree is complete, causing channel-loader ENOENT spam (~60+ min unhealthy gateway) [1 comments, 2 participants]