# Release checklist
This checklist is for publishing PulseDeck to crates.io and creating the matching GitHub release.
## Preflight
```bash
git switch master
git pull origin master
git fetch --prune
```
Confirm the version:
```bash
grep -n 'version = "0.1.7"' Cargo.toml
grep -A2 -n 'name = "pulsedeck"' Cargo.lock
```
Run the full local gate:
```bash
cargo fmt --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all-targets --all-features
cargo build --release
cargo run
```
## Visual release smoke check
For the 0.1.7 visual-enchantments release, manually check:
```text
Split layout: cassette stays stable while reels animate
Right-only Bento layout: stable cassette, status strip, and framed signal screen compose cleanly
Visualizer modes: Spectrum, Real Oscilloscope, and Simulated Oscilloscope show framed mode titles
Spectrum analyzer: high-frequency bars do not show an artificial final-bin spike or deep treble valley
Footer status row: playback, volume, layout, and scope labels stay readable at common terminal widths
Shortcut row: normal mode shows Layout, Scope, Search, Remove, Undo, Config, Help, and Quit
Help overlay: Deck & Visuals section mentions deck layout and all scope modes
Library rows: selected/playing markers, country, and bitrate remain readable without long-name overflow
Search rows: saved-result stars and genre/country/bitrate metadata display cleanly
Deck page: title uses PulseDeck control-surface language
Theme cycling: Retrowave and all Catppuccin themes keep deck, footer, help, library/search rows, and visualizer colors consistent
```
Use these in-app keys during the smoke pass:
```text
b cycle split / library-only / full-deck Bento layout
v cycle visualizer modes
/ check search row metadata and saved-result stars
h check updated help overlay wording
, switch themes in settings
```
## Package checks
Inspect which files Cargo will package:
```bash
cargo package --list
```
Run the publish dry run:
```bash
cargo publish --dry-run
```
Cargo's dry run packages the crate and verifies it without uploading. Do not skip this step.
## Publish
Make sure you are logged in to crates.io:
```bash
cargo login
```
Then publish:
```bash
cargo publish
```
## Tag
After crates.io accepts the package, tag the exact commit that was published:
```bash
git tag -a v0.1.7 -m "PulseDeck 0.1.7"
git push origin v0.1.7
```
## GitHub release
Create a GitHub release from tag `v0.1.7` and paste the notes from the `0.1.7` section of `CHANGELOG.md`.
## Post-release sanity check
```bash
cargo install pulsedeck --version 0.1.7
pulsedeck
```
## Important
Published crates.io versions are permanent. A version cannot be overwritten after upload. If something goes wrong after publishing, publish a new patch version.