verify-release
GitHub用于验证 OpenClaw 版本是否已完整发布、推广及通过冒烟测试。检查 GitHub Release、npm 包溯源、签名证明及 Gateway 在线状态,确保发布流程合规且证据链完整。
Trigger Scenarios
Install
npx skills add openclaw/openclaw --skill verify-release -g -y
SKILL.md
Frontmatter
{
"name": "verify-release",
"description": "Verify regular or extended-stable OpenClaw releases against the exact publication surfaces, workflow identities, package provenance, smoke tests, and live Gateway behavior expected for that release track."
}
Verify Release
Use this when asked whether an OpenClaw release is fully released, published,
promoted, smoke-tested, or live-verified. This is a verification skill, not a
publish skill; use $release-openclaw-maintainer before changing release state.
Rules
- Resolve short suffixes like
.27to the concrete CalVer version from the current date/context, then say the resolved version. - Resolve the track first. Both tracks use the shared GitHub Release evidence ledger. Regular beta/stable also uses the platform graph; extended-stable uses its canonical branch, npm selector, and Gateway surfaces. Do not require one track's native or ClawHub artifacts from the other.
- Verify live state. Do not trust local checkout state, release notes, or old memory as current truth.
- If the checkout is dirty or divergent, use it only for scripts/reference.
For version metadata, fetch from GitHub release/tag or unpack the tag tarball
under
/tmp. - Never print secrets. Use inherited live keys only for scoped smoke commands.
- Keep the final terse:
yes/no, evidence bullets, caveats, cleanup.
Regular beta/stable checks
Use these checks only for the regular orchestrated release track.
- GitHub release:
gh release view v<VERSION> --repo openclaw/openclaw --json tagName,name,publishedAt,isDraft,isPrerelease,targetCommitish,url,body,assets- Confirm stable releases are not draft/prerelease.
- Confirm release body has npm, CI, plugin npm, ClawHub, mac/appcast evidence links when expected.
- Confirm assets expected for stable mac releases are uploaded: zip, dmg, dSYM, dependency evidence, immutable full-validation manifest, postpublish evidence, and stable-main closeout manifest.
- Download each immutable evidence asset and its
.sha256companion, then verify the checksum before trusting the release record.
- Root npm:
npm view openclaw@<VERSION> version dist-tags.latest dist.tarball dist.integrity time.<VERSION> --jsonlatestmust equal<VERSION>for stable.- Record tarball, integrity, publish time.
- Confirm the release postpublish evidence records
npmRegistrySignaturesVerified: trueandnpmProvenanceAttestationMatched: true.
- Plugin publish set:
- Get exact tag metadata from GitHub, not the local checkout when dirty:
download
https://api.github.com/repos/openclaw/openclaw/tarball/v<VERSION>into/tmp/openclaw-v<VERSION>-src. - Derive the full expected npm and ClawHub package sets for the release track
with the canonical publication planners/collector from the recorded release
Tooling SHA, using the exact tag's package metadata.
Do not count raw publish flags:
openclaw.build.bundledDist === trueexplicitly defers external publication even when publish flags are set. Record deferred package names and reasons separately. - Reconcile expected package identities, versions, and counts across original
publication, previously published versions, and selected recovery runs using
immutable publication plans, registry readback, and workflow jobs. A selected
recovery subset must not narrow the full expected release set:
gh api repos/openclaw/openclaw/actions/runs/<RUN>/jobs --paginate. - Each expected npm plugin must have version
<VERSION>anddist-tags.latest === <VERSION>.
- Get exact tag metadata from GitHub, not the local checkout when dirty:
download
- ClawHub:
- Check the Plugin ClawHub Release workflow conclusion and publish job count.
- Use OpenClaw itself for live registry proof:
openclaw plugins search <known-plugin> --json. - Install one official plugin at the exact requested release version from
ClawHub in an isolated HOME:
openclaw plugins install clawhub:@openclaw/matrix@<VERSION>. Prefermatrixunless that plugin is not in the expected set. ClawHub versions belong in the spec;--pinis only supported for npm installs.
- Release workflows:
- Verify conclusions for release notes evidence links: Full Release Validation, OpenClaw Release Checks, OpenClaw NPM Release, Plugin NPM Release, Plugin ClawHub Release, mac preflight/validation/publish when stable mac assets are expected.
- For stable, verify
OpenClaw Stable Main Closeoutsucceeded and its manifest records the matching release tag, current rollback drill, stable soak, and blocking performance evidence. - Summarize only relevant successful/failed jobs; ignore routine skipped optional lanes unless the release body promised them.
Extended-stable checks
Extended-stable has a GitHub Release with shared release evidence but no native or ClawHub artifacts. Verify it alongside the live tag, workflow, registry, provenance, and image state.
- Identity: require final
v<VERSION>at patch33+, with no suffix, contained inextended-stable/YYYY.M.33. Only an active candidate must equal the tip. Root and every publishable official plugin must declare<VERSION>. Require the Git tag and a public, non-prerelease GitHub Release whose title and canonical body match the tag. RequireisLatest=false, the dependency evidence, immutable Full Release Validation manifest, postpublish evidence, and their checksums. Require no native or ClawHub assets. - Workflow chain: find the successful parent release run plus its
preflight, complete validation, plugin npm, and core publish children.
Require a protected
release-publish/*parent and canonicalrelease-ci/*validation producer with verified workflow SHA provenance. Validation must usererun_group=all,release_profile=stable, blocking soak/performance, and the saved attempt. Core publish must reference all three run IDs and bind its manifest, workflow ref, and tarball digest to the release SHA. - Registry: require exact and
extended-stableselectors to return<VERSION>for root, every preflightcorePackageTarballsentry, and everypublishToNpm === trueofficial plugin derived from the tag. Compare the plugin plan, jobs, and complete readback; never infer inventory from diffs. - Provenance: from trusted current tooling, run
node --import tsx scripts/openclaw-npm-postpublish-verify.ts <VERSION>. Require signatures, canonical-branch provenance, and publish/preflight digest binding to the release SHA. Preserve output and workflow URLs. - Docker: verify exact default, slim, browser, and architecture images and
attestations in both registries. Only the three
extended-stable*aliases may resolve to those digests. Require the successfulOpenClaw Release Publishparent run and its completed Docker verification. The normal route finalizes afterward; an explicitly requested fast path may activate GitHub first. Repair aliases through current-mainDocker Channel Promotionfor the exact tag, without rebuilding. - Recovery: never republish. Use
promote_extended_stablein theopenclaw/releasesdist-tag workflow for the root selector (an unsuffixed final patch33+) and approved credential-isolated tooling for others, then repeat complete readback. Do not require ClawHub, native/mobile apps, website, private dist-tags, or regularlatest. Require shared release evidence, but do not require regular native or ClawHub assets.
Shared live smoke
After the track-specific publication checks pass:
- Published package smoke:
- In
/tmp, isolated HOME:npm exec --yes --package openclaw@<VERSION> -- openclaw --version. - Run at least one harmless command that touches the published CLI surface,
for example
plugins --helporgateway --help.
- In
- Dev Gateway live model smoke:
- Use temp HOME/workspace, not the user's normal state:
HOME=/tmp/openclaw-release-smoke/home OPENCLAW_WORKSPACE=/tmp/openclaw-release-smoke/work pnpm openclaw --dev gateway run --auth none --force --verbose. - Resolve the launched Gateway's bound port from its startup output or log.
- For
--auth none, require unauthenticatedGET http://127.0.0.1:<PORT>/healthzto return HTTP 200 with the exact JSON object{"ok":true,"status":"live"}. - Reserve
gateway health --jsonfor intentionally credentialed or device-paired smoke, passing the explicit credential required by that Gateway. - Run one Gateway-backed agent turn with inherited
OPENAI_API_KEY, short prompt, explicit session key, JSON output, and a known-available model. - If the configured default model fails as unavailable, record that caveat and retry with the newest known-good OpenAI model instead of declaring the release failed.
- Stop the gateway and verify the port is not listening.
- Use temp HOME/workspace, not the user's normal state:
Caveats To Report
- Dist-tag caveat: stable
latestis release truth; if optionalbetamirrors still point at a beta version, report it as a caveat, not a stable-release blocker, unless the user asked to verify beta promotion. - Track caveat: name the track and intentionally absent surfaces. Do not call missing regular-release artifacts an extended-stable failure.
- Divergent checkout caveat: say when local source SHA differs from release tag or origin and which live sources were used instead.
- Smoke caveat: distinguish Gateway-backed agent success from local embedded
fallback. A valid auth-none live smoke has the exact
/healthzresult plus a successful Gateway-backed agent turn and the Gateway log/run id for that call.
Version History
-
8e18591
Current 2026-09-23 04:23
新增对非 Latest 扩展稳定版(extended-stable)的支持,完善发行物核对、发布审批及活跃线检查逻辑;优化 HTTP 存活检测以支持无认证场景下的冒烟测试。
- 3374458 2026-08-20 13:30


