On this page
On this page
Release process
Release checks stages
Release checks stages
OpenClaw Release Checks is the largest child workflow. It resolves the target
once and validates the umbrella's shared package artifact when available. A
direct or focused dispatch prepares its own release-package-under-test
artifact when package or Docker-facing stages need it.
| Stage | Details |
|---|---|
| Release target | Job: Resolve target ref |
| Backing workflow: none | |
| Tests: selected ref, optional expected Validation SHA, profile, concrete release-check groups, and focused live suite filter. | |
| Rerun: select the concrete group for the failed surface. | |
| Package artifact | Job: Prepare release package artifact |
| Backing workflow: none | |
| Tests: validates the umbrella's immutable package tuple, or packs one candidate tarball for a direct/focused Release Checks dispatch, then exposes it to downstream package-facing checks. | |
| Rerun: the affected package, cross-OS, or live/E2E group. | |
| Install smoke | Job: Run install smoke |
Backing workflow: Install Smoke |
|
| Tests: full install path with root Dockerfile smoke image reuse, QR package install, root and gateway Docker smokes, installer Docker tests, and Bun global install plus CLI/local-agent/Gateway runtime smoke and the advisory Bun-only runtime smoke (except frozen targets). | |
Rerun: rerun_group=install-smoke. |
|
| Cross-OS | Job: cross_os_release_checks |
Backing workflow: OpenClaw Cross-OS Release Checks (Reusable) |
|
| Tests: fresh and upgrade lanes on Linux, Windows, and macOS for the selected provider and mode, using the candidate tarball plus a baseline package. Linux, Windows, and macOS Gateway install and upgrade suites gate beta, stable, and full publication, with recorded pass/fail conclusions. | |
Rerun: rerun_group=cross-os. |
|
| Windows node | Jobs: stable, prerelease, and main E2E |
Backing workflow: pinned openclaw-windows-node reusable workflow |
|
| Tests: setup/connect against the same immutable OpenClaw candidate; newest stable must pass; prerelease and main are advisory. | |
Rerun: rerun_group=windows-node. |
|
| Repo and live E2E | Job: Run repo/live E2E validation |
Backing workflow: OpenClaw Live And E2E Checks (Reusable) |
|
Tests: repository E2E, live cache, OpenAI websocket streaming, native live provider and plugin shards, and Docker-backed live model/backend/gateway harnesses selected by release_profile. |
|
Runs: run_release_soak=true, release_profile=full, or focused rerun_group=live-e2e. |
|
Rerun: rerun_group=live-e2e, optionally with live_suite_filter. |
|
| Docker release path | Job: Run Docker release-path validation |
Backing workflow: OpenClaw Live And E2E Checks (Reusable) |
|
| Tests: release-path Docker chunks against the shared package artifact. | |
Runs: run_release_soak=true, release_profile=full, or focused rerun_group=live-e2e. |
|
Rerun: rerun_group=live-e2e. |
|
| Package Acceptance | Job: Run package acceptance |
Backing workflow: Package Acceptance |
|
Tests: offline plugin package fixtures, plugin update, and published-upgrade survivor checks against the same tarball. The standard mock-OpenAI Telegram package E2E is deferred for beta all without soak; explicit package and soak select it by default. Blocking release checks use the default latest published baseline; soak checks (run_release_soak=true) resolve the latest stable baseline once and run the reported-issue upgrade fixtures against it. |
|
Rerun: rerun_group=package. |
|
| Maturity scorecard | Job: Render maturity scorecard release docs |
Backing workflow: maturity-scorecard.yml |
|
Tests: renders the advisory maturity scorecard docs against the target ref. Only runs when run_maturity_scorecard=true is passed. |
|
Rerun: direct manual rerun_group=qa with run_maturity_scorecard=true. |
|
| QA parity | Job: Run QA Lab parity lane and Run QA Lab parity report |
| Backing workflow: direct jobs | |
| Tests: candidate and baseline agentic parity packs, then the parity report. | |
Rerun: rerun_group=qa-parity; direct manual child dispatch may aggregate with qa. |
|
| QA runtime parity | Job: Verify QA Lab runtime-pair lanes |
| Backing workflow: direct job | |
Tests: the standard core openclaw/codex lane (pnpm openclaw qa suite --runtime-pair openclaw,codex --runtime-pair-lane core) and, with run_release_soak=true, the soak lane. Includes the OpenClaw core restart proof. The release verifier enforces the recorded lane status. |
|
Rerun: rerun_group=qa-parity; direct manual child dispatch may aggregate with qa. |
|
| QA runtime tool coverage | Job: Enforce QA Lab runtime tool coverage |
| Backing workflow: direct job | |
Tests: dynamic tool drift between openclaw and codex in the standard core runtime-pair lane (pnpm openclaw qa coverage --tools), using that lane's output. Blocking: this job is not advisory-overridable. |
|
Rerun: rerun_group=qa-parity; direct manual child dispatch may aggregate with qa. |
|
| QA live Matrix | Job: Run QA Live Matrix catalog |
Backing workflow: QA-Lab - All Lanes reusable workflow |
|
Tests: catalog-derived YAML scenarios through the shared Matrix live adapter in the qa-live-shared environment, distributed across fixed shards. |
|
Rerun: rerun_group=qa-live with live_suite_filter=qa-live-matrix; direct manual child dispatch may aggregate with qa. |
|
| QA live Buzz | Job: Run QA Lab live Buzz lane |
Backing workflow: QA-Lab - All Lanes reusable workflow |
|
| Tests: signed canary and mention-gating round trips through the real Buzz plugin using dedicated Convex-leased identities and a hosted relay room. | |
Rerun: rerun_group=qa-live with live_suite_filter=qa-live-buzz; direct manual child dispatch may aggregate with qa. |
|
| QA live Telegram | Job: Run QA Lab live Telegram lane |
Backing workflow: trusted OpenClaw Release Telegram QA dispatch |
|
| Tests: live Telegram QA with Convex CI credential leases. | |
Rerun: rerun_group=qa-live; direct manual child dispatch may aggregate with qa. |
|
| QA live Discord | Job: Run QA Lab live Discord lane |
| Backing workflow: direct job with recorded status enforced by the release verifier | |
Tests: live Discord QA with Convex CI credential leases when OPENCLAW_RELEASE_QA_DISCORD_LIVE_CI_ENABLED is enabled. |
|
Rerun: rerun_group=qa-live with live_suite_filter=qa-live-discord. |
|
| QA live WhatsApp | Job: Run QA Lab live WhatsApp lane |
| Backing workflow: direct job with recorded status enforced by the release verifier | |
Tests: live WhatsApp QA with Convex CI credential leases when OPENCLAW_RELEASE_QA_WHATSAPP_LIVE_CI_ENABLED is enabled. |
|
Rerun: rerun_group=qa-live with live_suite_filter=qa-live-whatsapp. |
|
| QA live Slack | Job: Run QA Lab live Slack lane |
| Backing workflow: direct job with recorded status enforced by the release verifier | |
Tests: live Slack QA with Convex CI credential leases when OPENCLAW_RELEASE_QA_SLACK_LIVE_CI_ENABLED is enabled. |
|
Rerun: rerun_group=qa-live with live_suite_filter=qa-live-slack. |
|
| Release verifier | Job: Verify release checks |
| Backing workflow: none | |
| Tests: required release-check jobs for the selected rerun group. | |
| Rerun: rerun after focused child jobs pass. |
Windows-node candidate lanes
Windows-node checks run only in the candidate phase, after package preparation,
not in the independent phase. The shared release planner selects them for all
and windows-node. The newest stable node must pass setup, connection, and a
Gateway-mediated invocation for every selected Gateway candidate, including
betas. Stable failures, protocol mismatches, and skips block release. Alpha and
main still run, but failures or unavailable coverage are advisory.
The release resolver selects the latest published canonical stable (vX.Y.Z
or correction vX.Y.Z-N) and production alpha (vX.Y.Z-alpha.N), requires a
hashed x64 Tray ZIP (or MSIX when no ZIP exists), and records the tag, source
commit, asset name, and digest. Missing, unresolvable, artifact-less, or superseded
alpha coverage is reported without blocking stable validation. The
main lane resolves main once to a commit and never substitutes for release
artifact coverage. The callee verifies downloaded bytes against these digests.
The immutable reusable workflow revision is separate from the app source
revision and also pins the maintained setup/test harness. Release lanes use the
published app bytes; main builds its separately checked-out source commit. The
harness installs the exact candidate (including beta versions), connects the app,
and invokes system.which through the real Gateway. It does not require old
apps to advertise the current harness's full capability inventory.
The harness installs one local tarball inside WSL and resolves every other
dependency from npm. Release-shaped candidates keep core dependencies such as
@openclaw/ai unbundled because they publish together with core, so package
preparation hands Windows-node a self-contained copy: it bundles each unbundled
core dependency at the exact candidate version from the verified prerelease
plugin registry, and passes the candidate through unchanged when there is no
registry or nothing to bundle. Other lanes keep installing the unmodified
release package.
Evidence names distinguish the app source kind and release tag or source SHA. No lane accepts a protocol mismatch as a passing test. Preview failures retain their raw GitHub job conclusions; Release Checks can therefore appear red while Full Release Validation passes with explicit advisory evidence. The release policy admits only the named preview jobs and main-source resolver, and only when stable E2E succeeds and the release-check verifier passes the existing trusted-tooling policy. Independently approved provider waivers retain their aggregate-log checks. Unrelated unwaived failures and whole-workflow cancellation still block. Automatic child reuse remains limited to green runs; advisory-red children run again rather than reusing red evidence.
The harness OIDC check binds the called workflow, not the caller's authority. The workflow receives caller-scoped read permissions, no inherited secrets, and runs on GitHub-hosted Windows; it does not publish releases. This is setup/connect coverage, not MXC/AppContainer containment proof.
Docker release-path chunks
The Docker release-path stage runs these chunks when live_suite_filter is
empty:
| Chunk | Coverage |
|---|---|
core |
Core Docker release-path smoke lanes. |
package-update-openai |
OpenAI package and tool-call proof, Codex on-demand install and live progress, root-managed VPS upgrades, and authenticated update restart. |
package-update-onboarding |
Channel onboarding, install switching, and skill installation. |
package-update-migrations |
Channel switching and published-package upgrade survival. |
package-update-self-upgrade |
Local upgrade survival and compatibility with published September update drivers. |
plugins-runtime-plugins |
Plugin runtime lanes that exercise plugin behavior. |
plugins-runtime-services |
Service-backed and live plugin runtime lanes. |
plugins-runtime-install-a through plugins-runtime-install-h |
Plugin install/runtime batches split for parallel release validation. |
openwebui |
OpenWebUI compatibility smoke isolated on a dedicated large-disk runner when requested. |
All package/update rows retain their coverage across every release profile.
With multiple published baselines, package-update-migrations expands into one
channel-switching job and one isolated upgrade job per baseline. Every job reuses
the exact candidate package and images, retains the existing weighted npm limit,
and uploads a separate shard artifact. This avoids serializing all published
upgrades behind one runner's npm pool without increasing per-host concurrency. package-update-core and package-update remain aggregate
manual chunk names. Root-managed VPS upgrade and authenticated restart checks
run in the OpenAI row.
Missing required credentials still fail the job; the diagnostic pool continues
so independent non-live checks also report their results. Setup failures and
cancellation do not start that pool.
Expanded published-upgrade survivor and update-migration coverage runs in baseline-specific, isolated scenario jobs, with up to 32 targeted Docker jobs active per matrix. Long standalone restart/auth, plugin-update, and root-managed upgrade jobs are admitted before the scenario expansion; pinned baseline cohorts start newest first. The grouping and execution planners share the same baseline compatibility rules; package identities, fresh scenario containers, per-runner npm limits, and failure reporting remain unchanged.
Use targeted docker_lanes=<lane[,lane]> on the reusable live/E2E workflow when
only one Docker lane failed. The release artifacts include per-lane rerun
commands with package artifact and image reuse inputs when available.