Upstream bug report DRAFT — pending Trent blind-pass
Target: github.com/openclaw/openclaw/issues
Status: DRAFT v0 — not filed.
Title
openclaw update exits code 1 on disabled-plugin ClawHub 429 even though core update succeeded; should treat disabled plugins as no-op for sync
Environment
- OpenClaw
2026.4.25 → 2026.4.26 (be8c246) update
- Install: pnpm-detected install, real path under
.npm-global/lib/node_modules/openclaw
- Affected plugin:
apify (in config but enabled: false)
Summary
openclaw update --channel stable --yes --no-restart --json succeeded on the core package update (4.25 → 4.26) but exited code 1 because the post-update plugin sync hit a ClawHub 429 (rate limit) for the apify plugin. The apify plugin is enabled: false in our config — it should never have been queued for sync.
Per docs.openclaw.ai/cli/update: "Post-update plugin sync failures fail the update result and stop restart follow-up work... fix the plugin install or update error, then rerun openclaw update." Following this guidance would require us to fix the rate-limited update for a plugin we don't even use, OR to remove the plugin entry entirely from config.
Reproduction
- Have
apify (or any other ClawHub-distributed plugin) in plugins.entries with enabled: false and a config block present
- Run
openclaw update --channel stable --yes --no-restart --json
- If ClawHub returns 429 for the apify update query, the entire update exits code 1
The ClawHub URL queried for the disabled plugin: /api/v1/packages/%40apify%2Fapify-openclaw-plugin/download
Source locations (4.26)
dist/update-kKaOeGGE.js:432-440 — ClawHub install/update path
dist/update-kKaOeGGE.js:451-456 — update errors pushed into outcomes
dist/update-cli-CgKMD06I.js:1274-1287 — JSON plugin update result status includes npm outcomes
dist/update-cli-CgKMD06I.js:1313-1325 — non-JSON result status
dist/update-cli-CgKMD06I.js:1797-1810 — post-update-plugins sets overall update error + exits code 1
Expected behavior
Plugin sync should:
- Skip disabled plugins — they're not loaded, not running, sync isn't required for runtime correctness
- OR: classify plugin-sync failures for disabled plugins as warnings (not fatal), allowing the update to succeed code 0 with a warning surfaced
Workaround we used
Treated the code 1 as non-blocking since:
- Core 4.26 install completed
- Apify is disabled (no runtime impact)
- Doctor passed (with same baseline-of-known-warnings)
Continued with the controlled restart path (--no-restart had been passed, so we did the restart manually). 4.26 is now LIVE and healthy. But this required a judgment call against documented guidance.
Why this matters
The current behavior creates pressure to either (a) keep retrying updates against ClawHub until rate-limit clears or (b) remove disabled-plugin entries entirely. Both are friction. Disabled-but-configured is a legitimate state (we may want to enable apify later without re-adding the config block).
Suggested fix
A disabled plugin present in plugins.entries should be skipped or downgraded to warning during the plugin-sync step. Plugin sync is for plugins that will actually be loaded; it shouldn't gate the entire update on a plugin we're not running.
In the plugin-sync code path (dist/update-cli-CgKMD06I.js:1797-1810), check plugins.entries.<name>.enabled before attempting any ClawHub query. If enabled: false, log skip + move on.
No config option was found in 4.26 to suppress sync for disabled plugins — operators have to either (a) keep retrying until rate-limit clears, or (b) remove the plugin entry entirely from config (loses the keep-disabled-but-configured state).
Upstream bug report DRAFT — pending Trent blind-pass
Target: github.com/openclaw/openclaw/issues
Status: DRAFT v0 — not filed.
Title
openclaw updateexits code 1 on disabled-plugin ClawHub 429 even though core update succeeded; should treat disabled plugins as no-op for syncEnvironment
2026.4.25→2026.4.26(be8c246) update.npm-global/lib/node_modules/openclawapify(in config butenabled: false)Summary
openclaw update --channel stable --yes --no-restart --jsonsucceeded on the core package update (4.25 → 4.26) but exited code 1 because the post-update plugin sync hit a ClawHub 429 (rate limit) for theapifyplugin. Theapifyplugin isenabled: falsein our config — it should never have been queued for sync.Per docs.openclaw.ai/cli/update: "Post-update plugin sync failures fail the update result and stop restart follow-up work... fix the plugin install or update error, then rerun
openclaw update." Following this guidance would require us to fix the rate-limited update for a plugin we don't even use, OR to remove the plugin entry entirely from config.Reproduction
apify(or any other ClawHub-distributed plugin) inplugins.entrieswithenabled: falseand aconfigblock presentopenclaw update --channel stable --yes --no-restart --jsonThe ClawHub URL queried for the disabled plugin:
/api/v1/packages/%40apify%2Fapify-openclaw-plugin/downloadSource locations (4.26)
dist/update-kKaOeGGE.js:432-440— ClawHub install/update pathdist/update-kKaOeGGE.js:451-456— update errors pushed into outcomesdist/update-cli-CgKMD06I.js:1274-1287— JSON plugin update result status includes npm outcomesdist/update-cli-CgKMD06I.js:1313-1325— non-JSON result statusdist/update-cli-CgKMD06I.js:1797-1810— post-update-plugins sets overall update error + exits code 1Expected behavior
Plugin sync should:
Workaround we used
Treated the code 1 as non-blocking since:
Continued with the controlled restart path (--no-restart had been passed, so we did the restart manually). 4.26 is now LIVE and healthy. But this required a judgment call against documented guidance.
Why this matters
The current behavior creates pressure to either (a) keep retrying updates against ClawHub until rate-limit clears or (b) remove disabled-plugin entries entirely. Both are friction. Disabled-but-configured is a legitimate state (we may want to enable apify later without re-adding the config block).
Suggested fix
A disabled plugin present in
plugins.entriesshould be skipped or downgraded to warning during the plugin-sync step. Plugin sync is for plugins that will actually be loaded; it shouldn't gate the entire update on a plugin we're not running.In the plugin-sync code path (
dist/update-cli-CgKMD06I.js:1797-1810), checkplugins.entries.<name>.enabledbefore attempting any ClawHub query. Ifenabled: false, log skip + move on.No config option was found in 4.26 to suppress sync for disabled plugins — operators have to either (a) keep retrying until rate-limit clears, or (b) remove the plugin entry entirely from config (loses the keep-disabled-but-configured state).