The first usable release (v0.1.0) ships only after every gate below passes.
Gates 1–5 are runnable from a clean checkout with no GitHub credentials. Gate 6
needs a disposable repo with the App installed and a live coven-code binary —
it is the human-in-the-loop step that authorizes the tag.
# 1. Format
cargo fmt --all -- --check
# 2. Type/borrow check
cargo check --workspace
# 3. Lint (warnings are errors)
cargo clippy --workspace --all-targets -- -D warnings
# 4. Tests
cargo test --workspace
# 5. Docs smoke — config validation + webhook signature path
# (boot the server against a throwaway config, then:)
cargo build --release -p coven-github
./target/release/coven-github doctor --config config/local.toml
scripts/smoke-webhook.sh http://localhost:3000/webhook "$WEBHOOK_SECRET"Gate 5 detail: doctor must exit 0 on a filled-in config, and
scripts/smoke-webhook.sh must report unsigned → 401, bad signature → 401,
valid signature → 200. See docs/self-hosting.md.
On a throwaway repo with the GitHub App installed and worker.coven_code_bin
pointing at a real coven-code:
- Open an issue and assign it to the configured bot user (or apply a
trigger_labelslabel such ascoven:fix). - Confirm a Check Run appears and the familiar session starts.
- Confirm a draft PR opens in the familiar's voice and links back to the issue.
- Confirm the Check Run resolves to success/failure (not stuck).
Capture the issue/PR links in the release notes as evidence.
Only after gates 1–6 pass:
# Ensure the version in Cargo.toml ([workspace.package].version) is correct,
# the tree is clean, and you are on main.
git tag -s v0.1.0 -m "coven-github v0.1.0"
git push origin v0.1.0Tags are signed (
-s). Do not push an unsigned release tag.
| Gate | Result |
|---|---|
1. cargo fmt --all -- --check |
✅ clean |
2. cargo check --workspace |
✅ clean |
3. cargo clippy … -D warnings |
✅ clean |
4. cargo test --workspace |
✅ 18 passing |
5. docs smoke (doctor + smoke-webhook.sh) |
✅ verified locally |
| 6. disposable-repo E2E | ⏳ requires live App creds + coven-code |