| name | wax-deploy |
| description | Wax deployment orchestration skill. Use when releasing new versions of Wax across npm, Homebrew, OpenClaw, OpenCode, or Claude Code channels. Covers version bumping, congruency validation, binary building, staged publishing, and rollback procedures. |
Wax Deployment
Overview
Wax deploys to 5 channels from a single source of truth. This skill ensures predictable, resilient, and congruent releases across all channels.
Deployment Channels
| Channel | Artifact | Location |
|---|
| npm | waxmcp package | Resources/npm/waxmcp/ |
| Homebrew | wax.rb formula | Resources/npm/waxmcp/homebrew-wax/ |
| OpenClaw | @wax/openclaw-wax-memory plugin | Resources/openclaw/wax-memory-plugin/ |
| OpenCode | .pi extension + agents | .pi/extensions/wax-agents/ |
| Claude Code | MCP server registration | wax-cli mcp install |
Quick Reference
One-command release
scripts/release-all.sh 0.1.23
git add -A && git commit -m "release: waxmcp v0.1.23"
git tag waxmcp-v0.1.23 && git push origin main --tags
scripts/publish-all.sh --tag next
Check current state
scripts/validate-congruency.sh
scripts/validate-congruency.sh --json
Dry-run everything first
scripts/release-all.sh 0.1.23 --dry-run
scripts/publish-all.sh --tag next --dry-run
Release Pipeline
Phase 1: Bump
scripts/bump-version.sh atomically updates all 7 version surfaces:
Resources/npm/waxmcp/package.json
Sources/WaxMCPServer/main.swift
Resources/openclaw/wax-memory-plugin/package.json (version)
Resources/openclaw/wax-memory-plugin/package.json (waxmcp dependency)
Resources/npm/waxmcp/homebrew-wax/Formula/wax.rb (URL)
Resources/npm/waxmcp/homebrew-wax/Formula/wax.rb (SHA256)
.pi/extensions/wax-agents/package.json
scripts/bump-version.sh 0.1.23
scripts/bump-version.sh patch
scripts/bump-version.sh 0.1.23 --dry-run
Phase 2: Build
scripts/release-all.sh builds darwin-arm64 and darwin-x64 binaries:
scripts/release-all.sh 0.1.23
scripts/release-all.sh 0.1.23 --skip-build
Phase 3: Validate
scripts/validate-congruency.sh asserts all surfaces match:
scripts/validate-congruency.sh
scripts/validate-congruency.sh --json
scripts/validate-congruency.sh --quiet
Phase 4: Publish (staged)
scripts/publish-all.sh supports canary → soak → promote workflow:
scripts/publish-all.sh --tag next
scripts/publish-all.sh --promote
scripts/publish-all.sh --tag next --dry-run
Version Congruency
All channels must share the same version. The canonical source is Resources/npm/waxmcp/package.json.
Common incongruency scenarios
| Symptom | Cause | Fix |
|---|
| openclaw ≠ npm | Plugin not bumped after waxmcp release | scripts/bump-version.sh $(npm version) |
| homebrew ≠ npm | Formula manually edited, not via script | scripts/bump-version.sh recomputes URL + SHA |
| opencode ≠ npm | Extension version never tracked | scripts/bump-version.sh aligns it |
CI integration
Add to .github/workflows/release-waxmcp.yml before publish:
- name: Validate version congruency
run: scripts/validate-congruency.sh --quiet
Rollback
Before publish (local)
git checkout -- Resources/npm/waxmcp/package.json \
Sources/WaxMCPServer/main.swift \
Resources/openclaw/wax-memory-plugin/package.json \
.pi/extensions/wax-agents/package.json \
Resources/npm/waxmcp/homebrew-wax/Formula/wax.rb
After npm publish (next tag)
npm unpublish waxmcp@0.1.23
npm unpublish @wax/openclaw-wax-memory@0.1.23
After promote to latest
npm dist-tag add waxmcp@0.1.22 latest
npm dist-tag add @wax/openclaw-wax-memory@0.1.22 latest
Troubleshooting
"Git working tree is dirty"
Commit or stash changes before running release-all.sh:
git stash
scripts/release-all.sh 0.1.23
git stash pop
Or use --allow-dirty (not recommended for production releases).
"Version incongruency detected"
Run the bump script to align all surfaces:
scripts/bump-version.sh $(node -p "require('./Resources/npm/waxmcp/package.json').version")
"npm publish fails with E403"
Version already published. Check:
npm view waxmcp versions --json | tail -5
Homebrew SHA mismatch
The SHA in the formula is computed from local git archive. After pushing the tag, verify:
curl -sL https://github.com/christopherkarani/Wax/archive/refs/tags/waxmcp-v0.1.23.tar.gz | shasum -a 256
If different, update the formula manually or re-run bump-version.sh after the tag is pushed.
Design Decisions
- Single source of truth: npm package version is canonical; all others derive from it
- Atomic bumps:
bump-version.sh updates all surfaces in one invocation
- Dry-run everywhere: Every script supports
--dry-run for safe preview
- Staged publishing:
next tag for canary, latest for production
- Fail-fast:
set -euo pipefail on all scripts; validation gates before publish
- Delegate, don't duplicate: New scripts call existing
Resources/scripts/ helpers