Skip to content

openclaw update: post-update plugin sync false-fails on format=bundle plugins ("package.json is missing"), exits 1 and unloads the gateway #97985

Description

@herove

Version

2026.6.10 (macOS Apple Silicon, npm global install)

Summary

openclaw update succeeds at the core swap but fails during the post-update plugin sync: every format=bundle plugin (Claude-plugin layout — .claude-plugin/plugin.json + skills/, no package.json) is reported as a missing payload. The update exits 1 and leaves the gateway unloaded (down), even though those bundle plugins load fine at runtime.

Environment

  • OpenClaw 2026.6.10, npm global (/opt/homebrew/lib/node_modules/openclaw)
  • ~13 first-party format=bundle plugins under ~/.openclaw/extensions/*, each with .claude-plugin/plugin.json + skills/, no top-level package.json; all in plugins.allow, all status=loaded at runtime.

Steps to reproduce

  1. Have at least one format=bundle plugin in ~/.openclaw/extensions/ (.claude-plugin/plugin.json, no package.json).
  2. Run openclaw update --yes.

Actual

  • Core update OK (✓ global update, ✓ global install swap).
  • For each bundle plugin: Plugin install payload missing after update: package.json is missing under ~/.openclaw/extensions/<name> then failed post-core payload smoke check (missing-package-json).
  • Update failed during plugin post-update sync., exit 1.
  • Gateway left unloaded (launchctl list | grep ai.openclaw.gateway empty; openclaw daemon status → Runtime unknown / Connectivity failed) → outage until manual recovery.

Expected

  • The smoke check should recognize format=bundle plugins (validate .claude-plugin/plugin.json), or skip the npm-payload check for non-npm plugin formats.
  • A plugin-sync failure must NOT unload an already-healthy gateway.

Workaround

The core update actually succeeded and the bundle plugins load fine. Recover with:

openclaw daemon start

The gateway returns on the new version with all bundle plugins loaded.

Notes

openclaw plugins list --json shows the affected plugins as format=bundle status=loaded — confirming this is the update-time smoke check being npm-format-specific, not a real payload problem.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High-priority user-facing bug, regression, or broken workflow.clawsweeper:fix-shape-clearClawSweeper found a clear likely implementation shape for this issue.clawsweeper:queueable-fixClawSweeper marked this issue as an existing queue_fix_pr work candidate.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.impact:crash-loopCrash, hang, restart loop, or process-level availability failure.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.maturity:stableIssue affects a taxonomy feature currently scored M4/M5.no-staleExclude from stale automation

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions