Release Checklist (npm + macOS)
Usepnpm (Node 22+) from the repo root. Keep the working tree clean before tagging/publishing.
- Version & metadata
- Bump
package.jsonversion (e.g.,1.1.0). - Update CLI/version strings:
src/cli/program.tsand the Baileys user agent insrc/provider-web.ts. - Confirm package metadata (name, description, repository, keywords, license) and
binmap points todist/entry.jsforclawdbot. - If dependencies changed, run
pnpm installsopnpm-lock.yamlis current.
- Build & artifacts
- If A2UI inputs changed, run
pnpm canvas:a2ui:bundleand commit any updatedsrc/canvas-host/a2ui/a2ui.bundle.js. -
pnpm run build(regeneratesdist/). - Optional:
npm pack --pack-destination /tmpafter the build; inspect the tarball contents and keep it handy for the GitHub release (do not commit it).
- Changelog & docs
- Update
CHANGELOG.mdwith user-facing highlights (create the file if missing); keep entries strictly descending by version. - Ensure README examples/flags match current CLI behavior (notably new commands or options).
- Validation
-
pnpm lint -
pnpm test(orpnpm test:coverageif you need coverage output) -
pnpm run build(last sanity check after tests) -
pnpm release:check(verifies npm pack contents) - (Optional) Spot-check the web gateway if your changes affect send/receive paths.
- macOS app (Sparkle)
- Build + sign the macOS app, then zip it for distribution.
- Generate the Sparkle appcast (HTML notes via
scripts/make_appcast.sh) and updateappcast.xml. - Keep the app zip (and optional dSYM zip) ready to attach to the GitHub release.
- Follow
docs/mac/release.mdfor the exact commands and required env vars.APP_BUILDmust be numeric + monotonic (no-beta) so Sparkle compares versions correctly.- If notarizing, use the
clawdbot-notarykeychain profile created from App Store Connect API env vars (seedocs/mac/release.md).
- Publish (npm)
- Confirm git status is clean; commit and push as needed.
-
npm login(verify 2FA) if needed. -
npm publish --access public(use--tag betafor pre-releases). - Verify the registry:
npm view clawdbot versionandnpx -y [email protected] --version(or--help).
Troubleshooting (notes from 2.0.0-beta2 release)
- npm pack/publish hangs or produces huge tarball: the macOS app bundle in
dist/Clawdbot.app(and release zips) get swept into the package. Fix by whitelisting publish contents viapackage.jsonfiles(include dist subdirs, docs, skills; exclude app bundles). Confirm withnpm pack --dry-runthatdist/Clawdbot.appis not listed. - npm auth web loop for dist-tags: use legacy auth to get an OTP prompt:
NPM_CONFIG_AUTH_TYPE=legacy npm dist-tag add [email protected] latest
npxverification fails withECOMPROMISED: Lock compromised: retry with a fresh cache:NPM_CONFIG_CACHE=/tmp/npm-cache-$(date +%s) npx -y [email protected] --version
- Tag needs repointing after a late fix: force-update and push the tag, then ensure the GitHub release assets still match:
git tag -f vX.Y.Z && git push -f origin vX.Y.Z
- GitHub release + appcast
- Tag and push:
git tag vX.Y.Z && git push origin vX.Y.Z(orgit push --tags). - Create/refresh the GitHub release for
vX.Y.Zwith titleclawdbot X.Y.Z(not just the tag); body should inline the product-facing bullets from the changelog (no bare links) and must not repeat the title inside the body. - Attach artifacts:
npm packtarball (optional),Clawdbot-X.Y.Z.zip, andClawdbot-X.Y.Z.dSYM.zip(if generated). - Commit the updated
appcast.xmland push it (Sparkle feeds from main). - From a clean temp directory (no
package.json), runnpx -y [email protected] send --helpto confirm install/CLI entrypoints work. - Announce/share release notes.