Use this checklist before tagging any public beta release (vX.Y.Z-beta.N).
All items must be ✅ before pushing the tag.
-
make -C tests allpasses — acceptancePASS: 207 FAIL: 0, beacon suite26 passed, 0 failed, all other suites green -
make -C tests asanpasses (ASan + UBSan — no memory errors or UB) -
cargo test -p rivr_corepasses — all Rust unit tests green -
cargo test -p rivr_hostpasses — replay + compiler CLI tests green -
cargo clippy --workspace -- -D warningsis clean -
cargo fmt --check --allis clean
- GitHub Actions
ci.ymlis green onmain(all jobs: rust-check, c-tests, asan-tests, size-check, determinism) - No skipped or manually-bypassed CI jobs
- CI badge in README.md points to the correct repository URL (not
YOUR_ORG/YOUR_REPO)
-
pio run -e client_esp32devkit_e22_900— builds without warnings -
pio run -e repeater_esp32devkit_e22_900— builds without warnings -
pio run -e client_lilygo_lora32_v21— builds without warnings -
pio run -e repeater_lilygo_lora32_v21— builds without warnings - Binary sizes have not regressed beyond the 5% gate:
make -C tests size_check - Build is deterministic:
make -C tests determinism_check
- Flash
client_esp32devkit_e22_900to a physical ESP32 DevKit + E22 board - Node boots, prints startup banner, shows
rivr>prompt at 115200 baud -
idcommand responds with correct role and firmware version -
neighborscommand responds (may show empty table if no peer present) -
chat testsuccessfully transmits (@CHT txlog line visible) -
supportpackcommand emits a well-formed@SUPPORTPACKJSON block
- docs/quickstart.md is accurate for the current firmware version
- docs/en/build-guide.md wiring tables are up to date
- docs/en/language-reference.md reflects any DSL changes
- docs/releasing.md release procedure matches actual Makefile targets
- README.md hardware matrix is accurate (no unreleased boards listed as Supported)
- README.md CI badge URL is updated to the real repository path
- No
your-orgorYOUR_ORG/YOUR_REPOplaceholder strings remain in published filesgrep -r "your-org\|YOUR_ORG" --include="*.md" --include="*.yml" --include="*.yaml" . # Expected: zero results
- RELEASE_CHECKLIST.md test count matches actual passing test count
- No accidental debug prints (
printf/ESP_LOGImarkedDBG:) left in firmware_core -
git log --oneline -10shows clean, descriptive commit messages (no "WIP" or "fixup")
- No private keys, PSKs, or credentials are committed (
git grep -i "key\|secret\|password") -
rivr_pubkey.hcontains the intended public key for OTA signature verification - HMAC PSK in test stub (
tests/test_stubs.c) is clearly marked as test-only
- Tag created:
git tag -a vX.Y.Z-beta.N -m "Rivr vX.Y.Z-beta.N" - GitHub Release draft created with:
- Summary of changes (link to commits since last tag)
- Known limitations for this beta
-
@SUPPORTPACKinstructions in the bug report template
- Release notes mention any wire-protocol changes that break compatibility with previous beta
- Milestone closed (if applicable)
# Full host test suite
make -C tests all
# Rust checks
cargo test --workspace && cargo clippy --workspace -- -D warnings && cargo fmt --check --all
# Check for leftover placeholders
grep -r "your-org\|YOUR_ORG" --include="*.md" --include="*.yml" .
# Size and determinism gates
make -C tests size_check
make -C tests determinism_check