diff --git a/CHANGELOG.md b/CHANGELOG.md index 642b7de..5c627d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,56 @@ # Changelog +## v0.8.1 — 2026-06-20 — org item-type parity + collection-scoped attachments + +Brings `relicario org add` / `relicario org edit` to **full item-type parity** with the +personal vault: the org surface now supports **all 7 item types** (previously Login / +SecureNote / Identity only), adds collection-scoped attachment storage for Document +items, and grant-scopes attachment write paths in the pre-receive hook — closing a latent +authorization gap. Secrets are entered via interactive prompts by default, with `--*-stdin` +escape hatches for non-interactive scripting. Tracked under +`docs/superpowers/plans/2026-06-20-relicario-v0.8.1-parity.md`. + +> **⚠️ Coordinated server redeploy required.** The `relicario-server` pre-receive hook +> (now `0.1.1`) must be rebuilt and redeployed for attachment writes to be grant-scoped in +> production. Until the updated hook is installed, `attachments/…` pushes remain +> `Unrestricted` (gated only by the per-commit member-signature check). + +### Added +- **Shared `item_build` CLI module** (`crates/relicario-cli/src/commands/item_build.rs`): + centralizes per-type secret resolution, item builders (`build_*`), and interactive edit + helpers (`edit_*`) consumed by **both** the personal and org command surfaces, eliminating + the prior personal↔org builder duplication. +- **Org `add` / `edit` parity for Card, Key, TOTP, and Document** — `relicario org add` now + creates all 7 item types; `relicario org edit` is interactive per-type ("blank to keep", + field-history capture) instead of flat flags. +- **`--*-stdin` secret flags** on personal and org `add` for non-interactive entry of + passwords, card number/CVV/PIN, key material, TOTP secrets, and note bodies. +- **Collection-scoped org attachment storage** (`crates/relicario-cli/src/org_session.rs`): + attachments stored at `attachments///.enc` with a default + per-attachment cap (10 MiB, mirroring the personal default at + `crates/relicario-core/src/settings.rs`). `org add document --file`, `org edit --file` + (replace), and `org purge` (removes the item's attachment directory) round-trip with + git-status-clean staging. + +### Security +- **Grant-scoped attachment writes** (`relicario-server` `0.1.1`): `classify_path` now + recognizes `attachments///.enc` (exactly 3 path segments, `.`-free + slug guard) as `Item { collection }`, bringing attachment writes under the same grant + + slug-existence check as `items/` blobs. Previously such paths fell through to + `Unrestricted`. The Document source plaintext is read into a `Zeroizing` buffer and wiped + after encryption. See `docs/SECURITY.md`. + +### Changed +- Personal `add secure-note` `--body-prompt` flag renamed to `--body-stdin` (unified + multiline-secret model). + +### Docs +- Updated cli `ARCHITECTURE.md`, `docs/FORMATS.md` (org attachment layout + cap citation), + `docs/SECURITY.md`, `STATUS.md`, and `ROADMAP.md`. New + `docs/superpowers/specs/2026-06-20-extension-cli-parity-gap-analysis.md` is the forward + plan for extension↔CLI parity (org read/write plus a cluster of personal-side extension + gaps). End-user `user_docs/` guide lands as a fast-follow. + ## v0.8.0 — 2026-06-20 — enterprise org vault Git-native multi-user **org vaults**: a separate org git repository alongside each diff --git a/Cargo.lock b/Cargo.lock index 4eab0c4..2ca2cb8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2156,7 +2156,7 @@ checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "relicario-cli" -version = "0.8.0" +version = "0.8.1" dependencies = [ "anyhow", "arboard", @@ -2188,7 +2188,7 @@ dependencies = [ [[package]] name = "relicario-core" -version = "0.8.0" +version = "0.8.1" dependencies = [ "argon2", "base64", @@ -2235,7 +2235,7 @@ dependencies = [ [[package]] name = "relicario-wasm" -version = "0.8.0" +version = "0.8.1" dependencies = [ "base64", "ed25519-dalek", diff --git a/crates/relicario-cli/Cargo.toml b/crates/relicario-cli/Cargo.toml index 4843eb9..8c2e908 100644 --- a/crates/relicario-cli/Cargo.toml +++ b/crates/relicario-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "relicario-cli" -version = "0.8.0" +version = "0.8.1" edition = "2021" description = "CLI for relicario password manager" license = "GPL-3.0-or-later" diff --git a/crates/relicario-core/Cargo.toml b/crates/relicario-core/Cargo.toml index 532acaf..e6100c7 100644 --- a/crates/relicario-core/Cargo.toml +++ b/crates/relicario-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "relicario-core" -version = "0.8.0" +version = "0.8.1" edition = "2021" description = "Core library for relicario password manager" license = "GPL-3.0-or-later" diff --git a/crates/relicario-wasm/Cargo.toml b/crates/relicario-wasm/Cargo.toml index 2c4e299..d02c5a3 100644 --- a/crates/relicario-wasm/Cargo.toml +++ b/crates/relicario-wasm/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "relicario-wasm" -version = "0.8.0" +version = "0.8.1" edition = "2021" description = "WASM bindings for relicario password manager" license = "GPL-3.0-or-later"