Summary
Auto-update consistently causes gateway crash loops because it is not atomic — config or plugin manifests get updated to require a newer version while the binary remains at the old version (or vice versa). This has caused 3 separate overnight outages in 6 days on our setup.
Environment
- macOS 15.x (arm64, Mac mini)
- Node: v22.22.0
- OpenClaw: experienced across v2026.3.13 → v2026.3.23-2 → v2026.3.24 → v2026.3.28
- LaunchAgent plist with
KeepAlive: true
Crash Pattern
Every auto-update follows the same failure mode:
- Auto-update triggers during
stableDelayHours window
npm i -g openclaw@latest runs, updates packages
- Gateway receives SIGTERM for restart
- On restart, version mismatch between config/plugins and binary
- Gateway fails to start → crash loop → launchd eventually SIGKILL with reason "inefficient"
- Manual
openclaw update required to recover
Incident 1 (Mar 25): Entrypoint change
- v2026.3.13 → v2026.3.23-2
- New version changed entrypoint from
dist/index.js → dist/entry.js
- LaunchAgent plist not updated by auto-update
- Gateway crash-looped ~10 hours overnight
Incident 2 (Mar 26): Same entrypoint issue
- v2026.3.23-2 → v2026.3.24
- Same plist/entrypoint mismatch
openclaw doctor flagged it but nobody was around to act
Incident 3 (Mar 31): Plugin version requirements
- v2026.3.24 → v2026.3.28
- Auto-update wrote config compatible with v2026.3.28
- Binary stayed at v2026.3.24
- Every plugin (including discord, imessage) refused to load:
plugins.entries.discord: plugin requires OpenClaw >=2026.3.28, but this host is 2026.3.24; skipping load
(19 plugins failed with same error)
- Gateway could not start at all
Root Cause
Auto-update is not atomic. It can update:
- npm packages (including plugin manifests with new version requirements)
- Config file (via doctor/migration)
- But NOT the plist entrypoint
- And sometimes partially updates, leaving binary at old version while config/plugins expect new version
Expected Behavior
Auto-update should either:
- Be fully atomic — update binary, config, plist, and plugins in one transaction, or roll back on failure
- Run
openclaw doctor --fix as part of the update before restarting
- Validate config against the current binary version before applying config changes
- Not modify config to require a version that is not yet running
Workaround
openclaw update (manual) works correctly every time. Only auto-update fails.
Related Issues
All three issues stem from the same fundamental problem: auto-update is not atomic and has no rollback mechanism.
Summary
Auto-update consistently causes gateway crash loops because it is not atomic — config or plugin manifests get updated to require a newer version while the binary remains at the old version (or vice versa). This has caused 3 separate overnight outages in 6 days on our setup.
Environment
KeepAlive: trueCrash Pattern
Every auto-update follows the same failure mode:
stableDelayHourswindownpm i -g openclaw@latestruns, updates packagesopenclaw updaterequired to recoverIncident 1 (Mar 25): Entrypoint change
dist/index.js→dist/entry.jsIncident 2 (Mar 26): Same entrypoint issue
openclaw doctorflagged it but nobody was around to actIncident 3 (Mar 31): Plugin version requirements
Root Cause
Auto-update is not atomic. It can update:
Expected Behavior
Auto-update should either:
openclaw doctor --fixas part of the update before restartingWorkaround
openclaw update(manual) works correctly every time. Only auto-update fails.Related Issues
All three issues stem from the same fundamental problem: auto-update is not atomic and has no rollback mechanism.