openclaw - 💡(How to fix) Fix [Bug]: `openclaw update --tag 2026.4.25` can leave the old Gateway running against replaced package files, causing mixed-version runtime/import failures [1 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#72908Fetched 2026-04-28 06:30:26
View on GitHub
Comments
0
Participants
1
Timeline
1
Reactions
0
Participants
Timeline (top)
cross-referenced ×1

Updating from OpenClaw 2026.4.24 to 2026.4.25 with the documented CLI update path completed at the package level, but the updater exited with code 1 and no stdout/stderr. Afterward, openclaw --version reported 2026.4.25, while the already-running Gateway process still reported runtime 2026.4.24.

That old Gateway process then ran against the replaced 2026.4.25 global package tree and started failing dynamic imports for old hashed dist chunks. A manual Gateway restart brought the runtime to 2026.4.25. Running openclaw doctor --fix --non-interactive --yes then migrated legacy embeddedHarness config keys to agentRuntime, after which probe/status/health/cron checks recovered.

Error Message

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '<global-openclaw-install>/dist/run-model-catalog.runtime-<old-hash>.js' Error [ERR_MODULE_NOT_FOUND]: Cannot find module '<global-openclaw-install>/dist/heartbeat-runner.runtime-<old-hash>.js'

Root Cause

While in this mixed state, the old Gateway also evaluated new plugin metadata as invalid because some plugins required >=2026.4.25 while the live Gateway still reported 2026.4.24.

Fix Action

Fix / Workaround

Recovery / Workaround

This looks like an updater lifecycle/regression issue rather than a model routing problem. The config migration from embeddedHarness to agentRuntime appears to be an expected 2026.4.25 change and was resolved by doctor --fix.

Code Example

openclaw update --tag 2026.4.25 --yes --json --timeout 1200

---

exit code: 1
stdout/stderr: <empty>

---

OpenClaw 2026.4.25 (...)

---

{
  "cliVersion": "2026.4.25",
  "gatewayRuntimeVersion": "2026.4.24",
  "sameGatewayPidAsBeforeUpdate": true
}

---

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '<global-openclaw-install>/dist/run-model-catalog.runtime-<old-hash>.js'
imported from <global-openclaw-install>/dist/server.impl-<old-hash>.js

---

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '<global-openclaw-install>/dist/heartbeat-runner.runtime-<old-hash>.js'

---

openclaw gateway restart

---

agents.defaults.embeddedHarness -> agents.defaults.agentRuntime
agents.list[].embeddedHarness -> agents.list[].agentRuntime

---

openclaw doctor --fix --non-interactive --yes
RAW_BUFFERClick to expand / collapse

Summary

Updating from OpenClaw 2026.4.24 to 2026.4.25 with the documented CLI update path completed at the package level, but the updater exited with code 1 and no stdout/stderr. Afterward, openclaw --version reported 2026.4.25, while the already-running Gateway process still reported runtime 2026.4.24.

That old Gateway process then ran against the replaced 2026.4.25 global package tree and started failing dynamic imports for old hashed dist chunks. A manual Gateway restart brought the runtime to 2026.4.25. Running openclaw doctor --fix --non-interactive --yes then migrated legacy embeddedHarness config keys to agentRuntime, after which probe/status/health/cron checks recovered.

Environment

  • OS: macOS 26.4.1
  • Install kind: global package install
  • Package manager reported by openclaw update status: pnpm
  • Regression window: 2026.4.24 -> 2026.4.25
  • Update command:
openclaw update --tag 2026.4.25 --yes --json --timeout 1200

Baseline Before Update

On 2026.4.24:

  • openclaw --version: OpenClaw 2026.4.24 (...)
  • openclaw config validate --json: valid
  • openclaw gateway probe/status/health: OK
  • openclaw cron status: enabled, 11 jobs
  • openclaw cron list --all: returned successfully
  • Agent routing/config shape:
    • Default Claude-backed agent: agentRuntime equivalent was claude-cli, model anthropic/claude-opus-4-7, fallback none, thinking high
    • Secondary Claude-backed agent: claude-cli, model anthropic/claude-opus-4-7, fallback none, thinking high
    • Codex-backed agent: pi, model openai-codex/gpt-5.5, fallback none, thinking high

Actual Result

The update command exited 1 and produced an empty log:

exit code: 1
stdout/stderr: <empty>

Package-level version changed:

OpenClaw 2026.4.25 (...)

But Gateway was still the old running process:

{
  "cliVersion": "2026.4.25",
  "gatewayRuntimeVersion": "2026.4.24",
  "sameGatewayPidAsBeforeUpdate": true
}

The old Gateway process then tried importing old hashed chunks that no longer existed after the package replacement. Minimal sanitized example:

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '<global-openclaw-install>/dist/run-model-catalog.runtime-<old-hash>.js'
imported from <global-openclaw-install>/dist/server.impl-<old-hash>.js

Another cron-triggered path showed the same class of failure:

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '<global-openclaw-install>/dist/heartbeat-runner.runtime-<old-hash>.js'

While in this mixed state, the old Gateway also evaluated new plugin metadata as invalid because some plugins required >=2026.4.25 while the live Gateway still reported 2026.4.24.

Expected Result

The updater should not leave a successfully replaced package tree with the old Gateway process still running. Expected behavior would be one of:

  • restart/stop the old Gateway before replacing the dist tree,
  • keep the old dist files available until the old Gateway has exited,
  • fail before changing the package tree if Gateway restart verification cannot complete,
  • or surface the restart failure and exact diagnostics instead of exiting 1 with no output.

Recovery / Workaround

Manual restart:

openclaw gateway restart

After the restart, Gateway reported runtime 2026.4.25, but config validation surfaced legacy config keys:

agents.defaults.embeddedHarness -> agents.defaults.agentRuntime
agents.list[].embeddedHarness -> agents.list[].agentRuntime

Approved migration command:

openclaw doctor --fix --non-interactive --yes

After that migration:

  • openclaw config validate --json: valid
  • openclaw gateway probe: OK, runtime 2026.4.25, no legacy config issues
  • openclaw gateway status: OK
  • openclaw health: OK
  • openclaw cron status: enabled, 11 jobs
  • openclaw cron list --all: returned successfully
  • Agent routing still matched expected runtimes/models/fallbacks/thinking levels

Notes

This looks like an updater lifecycle/regression issue rather than a model routing problem. The config migration from embeddedHarness to agentRuntime appears to be an expected 2026.4.25 change and was resolved by doctor --fix.

The most important maintainer-facing failure is the mixed-version state: package files became 2026.4.25, the Gateway process remained 2026.4.24, and the old process attempted to import old hashed dist chunks after those files had been removed.

extent analysis

TL;DR

The update issue can be resolved by manually restarting the Gateway process after updating OpenClaw to ensure the new version is used.

Guidance

  • The update command should ideally restart the Gateway process or ensure it exits before replacing the package tree to prevent mixed-version states.
  • After updating, verify the Gateway runtime version matches the updated version using openclaw --version and openclaw gateway probe/status/health.
  • If config validation issues arise due to legacy config keys, run openclaw doctor --fix --non-interactive --yes to migrate configurations.
  • To prevent similar issues, consider adding a step to the update process that checks for and restarts any running Gateway processes.

Example

No specific code snippet is necessary for this issue, but the following command can be used to restart the Gateway process:

openclaw gateway restart

Notes

The root cause of the issue seems to be the updater not handling the running Gateway process correctly during the update, leading to a mixed-version state. The provided recovery steps should resolve the issue, but a more robust update process would prevent such situations.

Recommendation

Apply the workaround by manually restarting the Gateway process after updating OpenClaw until a more robust update mechanism is implemented. This ensures the new version is used and prevents mixed-version states.

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…

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]: `openclaw update --tag 2026.4.25` can leave the old Gateway running against replaced package files, causing mixed-version runtime/import failures [1 participants]