| name | release |
| description | Cut a GitHub release - full gate, version bump, Release builds, package the worker + tools zip, tag, gh release create. Stops before any cargo publish (crates.io is gated). |
| disable-model-invocation | true |
/release — cut a GitHub release
Deliberate-invocation only. Releases ship the worker binary to non-Rust consumers (the
chromedriver shape: any language that can spawn a process + speak the framed protocol).
Preconditions (verify ALL before touching versions)
- Working tree clean, on
main, synced with origin/main.
./test-all.ps1 green (builds → pregate → tests → selftest).
- Ask the user to confirm they have run
docs/SMOKE.md on this build — the interactive
layer cannot be auto-verified. Do not proceed on an unconfirmed smoke.
1. Version
Ask the user: patch (0.1.0 → 0.1.1, compatible fix) or minor (0.1.0 → 0.2.0, breaking —
in 0.x the minor is the breaking slot). Pre-crates.io, all five publishable crates stay in
lockstep with the release tag; bump version in:
crates/tagpipe/Cargo.toml, crates/protocol/Cargo.toml, crates/client/Cargo.toml,
crates/bridge-worker/Cargo.toml, crates/abi/Cargo.toml
- AND the
version = "..." half of every internal path dependency that names one of them
(protocol→tagpipe; worker→abi+protocol; client→protocol; bridge-host/lab→client).
- The worker's handshake ident embeds
CARGO_PKG_VERSION automatically — nothing to edit.
[workspace.package] version in the root Cargo.toml (keeps the unpublished members aligned).
NOTE: a wire-visible change additionally requires the VOCAB_VERSION/TRANSPORT_VERSION +
docs bump (pregate cross-checks this) — crate semver and wire versions are separate axes.
Commit: release: vX.Y.Z.
2. Release builds + verification
cargo build --release -p winamp-vst2-dsp-host-worker -p dsp_ref
cargo build --release -p bridge-host --target x86_64-pc-windows-msvc
# Verify the RELEASE binaries (tests above ran Debug): battery vs the release worker:
./target/x86_64-pc-windows-msvc/release/bridge-host.exe `
./target/i686-pc-windows-msvc/release/winamp-vst2-bridge-worker.exe `
./target/i686-pc-windows-msvc/release/dsp_ref.dll --out out_release_verify
Require: output ends with "CLEAN: worker exited 0" and the impulse analysis shows the
echo/delay signature. (Release-profile FP differences can shift battery numbers vs the Debug
baseline — the assertion here is the CLEAN + echo signature, not a byte-diff.)
3. Package
One zip: winamp-vst2-dsp-host-vX.Y.Z-windows.zip containing:
winamp-vst2-bridge-worker.exe (i686 release) — the worker any program can spawn
bridge-host.exe (x64 release) — battery/report/chain CLI for testing plugins
dsp_ref.dll (i686 release) — the known-good reference plugin
LICENSE, THIRD-PARTY-NOTICES.md
README-RELEASE.txt (write it): one paragraph per file above + "drive the worker from any
language: docs/PROTOCOL.md + docs/TRANSPORT.md in the repo" + the repo URL.
Stage in a temp dir, Compress-Archive, verify the zip lists exactly those files.
4. Tag + publish the release
git tag vX.Y.Z
git push origin main --tags
gh release create vX.Y.Z .\winamp-vst2-dsp-host-vX.Y.Z-windows.zip `
--title "vX.Y.Z" --notes "<3-6 bullet summary of changes since the last tag (git log <prev>..HEAD)>"
5. STOP — no cargo publish
crates.io publishing is GATED until the downstream integration (Resonance) has consumed the
crates and proven the API. When that gate opens, the publish sequence (account setup, docs.rs
metadata, readme fields, dependency-order publishes) follows the maintainer's playbook; this
skill grows that step then. Until then: GitHub releases only.