# Release Playbook
## Local Gates
```powershell
cargo fmt --check
cargo test --locked
cargo clippy --locked --all-targets --all-features -- -D warnings
cargo doc --locked --no-deps
cargo package --locked
cargo publish --dry-run --locked
```
## Self-Proof
```powershell
cargo run --locked -- eval --expr "github.ref == 'refs/heads/main'" --context-json 'github={"ref":"refs/heads/main"}' --format json --output target/expression-proof.json
cargo run --locked -- template --template 'deploy-${{ github.ref_name }}' --context-json 'github={"ref_name":"main"}'
cargo run --manifest-path ..\action-proof\Cargo.toml -- --repo-root . --manifest action.yml --strict
```
## Tag And Publish
```powershell
git tag -a vX.Y.Z -m "gha-expression-proof vX.Y.Z"
git push origin main
git push origin vX.Y.Z
cargo publish --locked
```
## Post-Publish
```powershell
cargo install gha-expression-proof --version X.Y.Z --locked --force
gha-expression-proof --version
gha-expression-proof eval --expr "true"
```
Create a GitHub Release and run the released-action smoke workflow from `main`.