Skip to content

Install smoke can bundle @openclaw/ai without runtime files #103552

Description

@vincentkoc

Bug type

Regression (worked before, now fails)

Beta release blocker

No

Summary

The release install-smoke update lane can construct an OpenClaw tarball that bundles only @openclaw/ai metadata, so upgrading a stable global install to the candidate succeeds but openclaw doctor fails because the AI runtime is missing.

Steps to reproduce

  1. Run the Install Smoke reusable workflow against release candidate 811ddd96180583bae00001f71971419182ae0520 while reusing the candidate root Docker image.
  2. Let scripts/test-install-sh-docker.sh copy /app/dist from the image and package the candidate with --skip-build.
  3. Install stable 2026.6.11, update to the generated candidate tarball, and run openclaw doctor.
  4. Observe that the packaged node_modules/@openclaw/ai contains metadata but no dist/internal/runtime.mjs.

Expected behavior

The install-smoke tarball should contain the same built @openclaw/ai runtime as the candidate image, and stable-to-candidate update plus openclaw doctor should succeed.

Actual behavior

The update install and swap exit successfully, but openclaw doctor exits 1 with a missing module error for /usr/local/lib/node_modules/openclaw/node_modules/@openclaw/ai/dist/internal/runtime.mjs.

OpenClaw version

2026.7.1-beta.3 candidate at 811ddd96180583bae00001f71971419182ae0520

Operating system

Ubuntu 24.04 runner with the install-smoke Docker fixture

Install method

npm global, stable-to-candidate update

Model

N/A

Provider / routing chain

N/A

Additional provider/model setup details

N/A

Logs

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/usr/local/lib/node_modules/openclaw/node_modules/@openclaw/ai/dist/internal/runtime.mjs'

Failing release checks run: https://github.com/openclaw/openclaw/actions/runs/29076524932

Failing installer job: https://github.com/openclaw/openclaw/actions/runs/29076524932/job/86309758690

Screenshots, recordings, and evidence

The malformed bundled tarball contains node_modules/@openclaw/ai/package.json but no runtime entries. Repacking with packages/ai/dist restored from the same candidate image produces the runtime entry and makes openclaw doctor exit 0. Installing the separately packed root and AI candidates also exits 0, so the published-package ordering path is unaffected.

Impact and severity

Affected: release install-smoke validation for candidates that split the private AI runtime into @openclaw/ai.

Severity: High for release validation because the exact stable-to-candidate doctor gate fails.

Frequency: deterministic when the harness reuses only root dist and packages with --skip-build.

Consequence: a valid candidate is blocked by a malformed harness-only tarball, while the existing strict tar check accepts the metadata-only bundled dependency.

Additional information

The root Docker image already contains both /app/dist and /app/node_modules/@openclaw/ai/dist. The Bun global install smoke restores both trees atomically; the npm installer smoke currently restores only root dist.

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingmaintainerMaintainer-authored PR

Type

No type

Fields

Priority

None yet

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions