Skip to content

2026.2.26: pnpm global install fails — all bundled plugins rejected as "unsafe plugin manifest path" #29455

@robcean

Description

@robcean

Environment

  • OS: Debian 13, Linux 6.12.63
  • Node: v22.22.0
  • Package manager: pnpm 10.29.2 (global install)
  • Previous version: 2026.2.22-2 (working)
  • Updated version: 2026.2.26 (broken)

Description

After upgrading from 2026.2.22-2 to 2026.2.26 via pnpm add -g openclaw@latest, the gateway fails to start. All bundled plugins in extensions/ are rejected with:

unsafe plugin manifest path: .../extensions/telegram/openclaw.plugin.json (validation)
unsafe plugin manifest path: .../extensions/memory-core/openclaw.plugin.json (validation)
... (all ~35 bundled plugins)
plugins.slots.memory: plugin not found: memory-core

openclaw doctor --fix also fails with the same validation error, making recovery impossible without a rollback.

Root cause

The new openBoundaryFileSync security check in 2026.2.26 sets rejectHardlinks: true by default. pnpm's content-addressable store uses hardlinks (typical Links: 3 on plugin manifest files), so every bundled plugin manifest is rejected as "unsafe".

The relevant code path:

// openBoundaryFileSync in openclaw-root-*.js
const opened = openVerifiedFileSync({
  filePath: absolutePath,
  resolvedPath,
  rejectHardlinks: params.rejectHardlinks ?? true,  // <-- hardlinks rejected by default
  maxBytes: params.maxBytes,
  ioFs
});

Related changelog entries:

  • Security/Plugins/Hooks: enforce runtime/package path containment with realpath checks...
  • Security/Plugins: harden plugin discovery by blocking unsafe candidates...

Steps to reproduce

  1. Install OpenClaw globally with pnpm: pnpm add -g openclaw@2026.2.26
  2. Start the gateway: openclaw gateway --port 18789
  3. Gateway crashes with "unsafe plugin manifest path" for all bundled plugins

Expected behavior

Bundled plugins shipped inside the OpenClaw package should be trusted regardless of filesystem hardlink count, since pnpm's hardlinks are a standard package manager behavior.

Workaround

Rollback to 2026.2.22-2: pnpm add -g openclaw@2026.2.22-2

Possible fix

  • Skip hardlink validation for bundled plugins (those inside the package's own extensions/ directory)
  • Or allow pnpm install --config.package-import-method=copy as a documented workaround (not tested)

Additional context

This affects any pnpm global install. npm installs may not be affected since npm copies files instead of hardlinking.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions