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
- Run the
Install Smoke reusable workflow against release candidate 811ddd96180583bae00001f71971419182ae0520 while reusing the candidate root Docker image.
- Let
scripts/test-install-sh-docker.sh copy /app/dist from the image and package the candidate with --skip-build.
- Install stable
2026.6.11, update to the generated candidate tarball, and run openclaw doctor.
- 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.
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/aimetadata, so upgrading a stable global install to the candidate succeeds butopenclaw doctorfails because the AI runtime is missing.Steps to reproduce
Install Smokereusable workflow against release candidate811ddd96180583bae00001f71971419182ae0520while reusing the candidate root Docker image.scripts/test-install-sh-docker.shcopy/app/distfrom the image and package the candidate with--skip-build.2026.6.11, update to the generated candidate tarball, and runopenclaw doctor.node_modules/@openclaw/aicontains metadata but nodist/internal/runtime.mjs.Expected behavior
The install-smoke tarball should contain the same built
@openclaw/airuntime as the candidate image, and stable-to-candidate update plusopenclaw doctorshould succeed.Actual behavior
The update install and swap exit successfully, but
openclaw doctorexits 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
811ddd96180583bae00001f71971419182ae0520Operating 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.jsonbut no runtime entries. Repacking withpackages/ai/distrestored from the same candidate image produces the runtime entry and makesopenclaw doctorexit 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
distand 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/distand/app/node_modules/@openclaw/ai/dist. The Bun global install smoke restores both trees atomically; the npm installer smoke currently restores only rootdist.