Skip to content

Commit 3ed391b

Browse files
Merge pull request #38 from Spacecraft-Software/release-prep-v0.1
docs: RELEASING.md checklist + reconcile PRD §11–§12 v0.1 status
2 parents d16ab12 + 9fbcc90 commit 3ed391b

3 files changed

Lines changed: 81 additions & 16 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ range may break in any release.
1010

1111
### Added
1212

13+
- **`RELEASING.md` + v0.1 status reconcile.** A maintainer checklist for cutting
14+
the `v0.1.0` tag (operational gates → mechanical version bump / CHANGELOG date
15+
/ signed tag), and PRD §11–§12 annotated with each criterion's status. Docs
16+
only — no version bump or tag yet (those wait on the operational gates).
17+
1318
- **Scrolling detail pane.** The detail pane now scrolls to keep the focused
1419
field visible — the granular identity view is ~18 fields and could overflow a
1520
shorter terminal. Reuses the form's `scroll_offset`; only the detail-focused

PRD.md

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
| Posture | Personal / Hobby (Standard §5) |
1313
| Standard | The Spacecraft Software Standard v1.12 |
1414
| Document state | Draft v0.1 |
15-
| Last updated | 2026-06-01 |
15+
| Last updated | 2026-06-16 |
1616

1717
## 1. Summary
1818

@@ -251,24 +251,29 @@ vault/
251251

252252
Vault is "v0.1 done" when:
253253

254-
1. A user can install (`cargo install vault`), `register`, `login`, `sync`, and reach `vault get` end-to-end against both bitwarden.com and a Vaultwarden test container.
255-
2. The TUI sustains daily-driver use for the maintainer for two consecutive weeks without a blocker.
256-
3. `cargo audit`, `cargo deny`, `cargo fmt --check`, `clippy -D warnings`, and the integration suite pass on every PR.
257-
4. Fuzz harness for the EncString parser has run ≥ 24 h with no findings.
258-
5. README, NOTICE, CONTRIBUTING, CREDITS, and CHANGELOG are present and accurate; §13.2 attribution block appears in `--version`, `--help` footer, README, and TUI About screen.
254+
1. A user can install (`cargo install vault`), `register`, `login`, `sync`, and reach `vault get` end-to-end against both bitwarden.com and a Vaultwarden test container. — **✅ capability complete** (CLI flow + `docs/m2-vaultwarden.md`); the final live confirmation against both servers is a maintainer step.
255+
2. The TUI sustains daily-driver use for the maintainer for two consecutive weeks without a blocker. — **⏳ operational** (maintainer attestation pending).
256+
3. `cargo audit`, `cargo deny`, `cargo fmt --check`, `clippy -D warnings`, and the integration suite pass on every PR. — **✅ done** (CI enforces all five on every PR).
257+
4. Fuzz harness for the EncString parser has run ≥ 24 h with no findings. — **⏳ harness built** (`fuzz/`, `docs/fuzzing.md`); the ≥ 24 h soak is pending.
258+
5. README, NOTICE, CONTRIBUTING, CREDITS, and CHANGELOG are present and accurate; §13.2 attribution block appears in `--version`, `--help` footer, README, and TUI About screen. — **✅ done**.
259+
260+
**Status (2026-06-16): code complete.** Remaining for the `v0.1.0` tag are the
261+
operational gates above — the two-week daily-driver (2), the ≥ 24 h fuzz soak
262+
(4), and a live PQC handshake test (§12 M7) — after which the tag is cut per
263+
[`RELEASING.md`](RELEASING.md).
259264

260265
## 12. Milestones
261266

262-
| Phase | Deliverable | Gate |
263-
| ----- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
264-
| M0 | Workspace skeleton, posture files, CI (fmt/clippy/audit/deny), signed commits verified | Empty `vault --version` returns Standard §13.2 attribution block |
265-
| M1 | `vault-core` + `vault-store`: parse Bitwarden export JSON, decrypt offline | Round-trip an exported vault locally |
266-
| M2 | `vault-api`: login + sync against Vaultwarden in a test container | `vault sync` populates encrypted cache |
267-
| M3 | `vault-agent` + IPC + `vault unlock` / `lock` / `get` / `list` | `rbw` parity for read paths |
268-
| M4 | CLI write paths (`add` / `edit` / `remove` / `generate`) with `--json` on every command | Scripts drive Vault end-to-end |
269-
| M5 | `vault-tui` MVP: list / detail / search / copy / generate | Daily-driver usable in a terminal |
270-
| M6 | Vim layer, theme loader, accessibility toggles | §8 / §9.1 / §11 boxes ticked |
271-
| M7 | PQC transport feature flag, hardening pass, EncString fuzz harness | `v0.1` tag |
267+
| Phase | Deliverable | Gate | Status |
268+
| ----- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ------ |
269+
| M0 | Workspace skeleton, posture files, CI (fmt/clippy/audit/deny), signed commits verified | Empty `vault --version` returns Standard §13.2 attribution block ||
270+
| M1 | `vault-core` + `vault-store`: parse Bitwarden export JSON, decrypt offline | Round-trip an exported vault locally ||
271+
| M2 | `vault-api`: login + sync against Vaultwarden in a test container | `vault sync` populates encrypted cache ||
272+
| M3 | `vault-agent` + IPC + `vault unlock` / `lock` / `get` / `list` | `rbw` parity for read paths ||
273+
| M4 | CLI write paths (`add` / `edit` / `remove` / `generate`) with `--json` on every command | Scripts drive Vault end-to-end ||
274+
| M5 | `vault-tui` MVP: list / detail / search / copy / generate | Daily-driver usable in a terminal ||
275+
| M6 | Vim layer, theme loader, accessibility toggles | §8 / §9.1 / §11 boxes ticked | ◑ vim + accessibility toggles done; runtime theme loader not implemented (out of scope for v0.1 — the palette ships as `vault-theme` tokens) |
276+
| M7 | PQC transport feature flag, hardening pass, EncString fuzz harness | `v0.1` tag | ◑ PQC flag ✅ / hardening (core dumps + ptrace + mlock) ✅ / fuzz harness ✅; `v0.1` tag pending the operational gates in §11 |
272277

273278
## 13. Risks and open questions
274279

RELEASING.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<!-- SPDX-License-Identifier: GPL-3.0-or-later -->
2+
3+
# Releasing Vault
4+
5+
Vault's posture is **Personal / Hobby** (Standard §5): no SLA, no semver promise,
6+
and `0.x` may break in any release. This checklist is a maintainer aid for
7+
cutting a tag, not a contract.
8+
9+
All code-side work for `v0.1` has landed (see `CHANGELOG.md` `[Unreleased]`). The
10+
remaining `v0.1` success metrics (PRD §11) are **operational** — run them, then
11+
do the mechanical cut below.
12+
13+
## 1. Operational gates (run before tagging `v0.1.0`)
14+
15+
- [ ] **EncString fuzz soak** — ≥ 24 h with no findings (PRD §11.4):
16+
`cargo +nightly fuzz run enc_string_parse -- -max_total_time=86400`
17+
(see `docs/fuzzing.md`). Any reproducer under `fuzz/artifacts/` blocks the
18+
tag until fixed.
19+
- [ ] **Live PQC handshake** — build with PQC and confirm an X25519MLKEM768
20+
handshake against a PQC-enabled endpoint:
21+
`cargo build -p vault-agent --features pqc` (see `docs/pqc.md`).
22+
- [ ] **End-to-end** (PRD §11.1) — `register` / `login` / `sync` / `get` against
23+
both bitwarden.com and a Vaultwarden container (`docs/m2-vaultwarden.md`).
24+
- [ ] **Daily-driver** (PRD §11.2) — two consecutive weeks of maintainer use with
25+
no blocker.
26+
27+
## 2. Cut the release (mechanical)
28+
29+
- [ ] Bump the version once: `[workspace.package] version` in the root
30+
`Cargo.toml` (`0.0.1``0.1.0`); all crates inherit it. Commit the updated
31+
`Cargo.lock`.
32+
- [ ] `CHANGELOG.md`: rename `## [Unreleased]``## [0.1.0] - <YYYY-MM-DD>`
33+
(ISO 8601 UTC, Standard §12) and open a fresh empty `[Unreleased]`.
34+
- [ ] Run the CI-exact gates locally and confirm green:
35+
`cargo fmt --all -- --check`;
36+
`rm -rf target/clippy && RUSTFLAGS="-D warnings" CARGO_TARGET_DIR=target/clippy cargo clippy --workspace --all-targets --all-features -- -D warnings`;
37+
`RUSTFLAGS="-D warnings" cargo test --workspace --all-targets`;
38+
`cargo deny check`;
39+
`cargo build -p vault-cli --no-default-features --features cli` and
40+
`cargo build -p vault-agent --no-default-features`.
41+
- [ ] `vault --version` shows `0.1.0` and the Standard §13.2 attribution block
42+
(the CI `version-gate` mirror).
43+
- [ ] Refresh `projects/PROJECTS.md` (the umbrella status tracker): status,
44+
`Last Updated`, milestone — per `projects/CLAUDE.md` editing rules.
45+
- [ ] Commit (signed, Ed25519 — Standard §6.3), open the PR, merge when green.
46+
- [ ] On the merge commit, create a **signed annotated tag** and push it:
47+
`git tag -s v0.1.0 -m "Vault v0.1.0"` then `git push origin v0.1.0`.
48+
Confirm the tag shows "Verified" (signing key registered on GitHub).
49+
50+
## Notes
51+
52+
- Every commit and the tag must be cryptographically signed and show "Verified"
53+
(Standard §6.3). Never `--no-verify` / `--no-gpg-sign`.
54+
- The `fuzz/` crate is a standalone workspace (nightly + sanitizer) and is not a
55+
CI gate; the soak above is the manual equivalent.

0 commit comments

Comments
 (0)