Compare commits
1 Commits
feature/v0
...
feature/v0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b54aaea239 |
@@ -7,7 +7,8 @@
|
|||||||
|
|
||||||
| Version | Highlights |
|
| Version | Highlights |
|
||||||
|---|---|
|
|---|---|
|
||||||
| *(untagged, 2026-06-20)* | **Enterprise org vault — backend complete** (`7392795`): relicario-core `org` module (ECIES X25519 key wrap/unwrap, `OrgRole`/`OrgMember`/`OrgManifest` types, `filter_for_member`, `schema_version: 1`); relicario-server org hook (`verify-org-commit`: signature verification, path-scoped authz, `enforce_owner_only_elevation` on parent role, `enforce_schema_monotonicity`, `generate-org-hook`, new `[lib]` target); relicario-cli — all 19 `relicario org` subcommands: init, add-member/remove-member/set-role, create-collection/grant/revoke, rotate-key (re-encrypts all blobs), transfer-ownership, delete-org, status, audit, and item CRUD (add/get/list/edit/rm/restore/purge). **Not yet shipped:** `org add`/`edit` for Card/SshKey/Document/Totp; extension org parity (Dev-D); phase 2 (SSO/LDAP, read audit, per-collection subkeys, HTTP plane). |
|
| **v0.8.1** *(2026-06-20, tag pending PM)* | **Org item-type parity + collection-scoped attachments + grant-scoped hook** (`4c0a289`, four parallel streams): `relicario org add`/`edit` now cover **all 7 item types** — Card/Key/Totp (Dev-B `6e73c5e`) and Document (Dev-C `4c0a289`) on the shared `item_build` foundation (Dev-A `b09e0ce`); org attachments stored collection-scoped at `attachments/<slug>/<item-id>/<att-id>.enc` with a default cap (Dev-C); `relicario-server` `classify_path` grant-scopes those attachment writes (Dev-D `db4e05a`, server `0.1.1` — **requires pre-receive hook redeploy**). **Still deferred:** extension org read/write (forward plan: `docs/superpowers/specs/2026-06-20-extension-cli-parity-gap-analysis.md`); org phase 2. |
|
||||||
|
| v0.8.0 *(2026-06-20)* | **Enterprise org vault — backend complete** (`7392795`): relicario-core `org` module (ECIES X25519 key wrap/unwrap, `OrgRole`/`OrgMember`/`OrgManifest` types, `filter_for_member`, `schema_version: 1`); relicario-server org hook (`verify-org-commit`: signature verification, path-scoped authz, `enforce_owner_only_elevation` on parent role, `enforce_schema_monotonicity`, `generate-org-hook`, new `[lib]` target); relicario-cli — all 19 `relicario org` subcommands: init, add-member/remove-member/set-role, create-collection/grant/revoke, rotate-key (re-encrypts all blobs), transfer-ownership, delete-org, status, audit, and item CRUD (add/get/list/edit/rm/restore/purge). Org item-type parity for Card/Key/Document/Totp shipped subsequently in v0.8.1; extension org parity + phase 2 (SSO/LDAP, read audit, per-collection subkeys, HTTP plane) remain deferred. |
|
||||||
| v0.7.0 *(2026-06-01)* | Extension restructure (Plan C) complete — Phases 3/4/6 merged via 3 parallel worktree streams under PM coordination: setup wizard crypto migrated into the SW (`create_vault`/`attach_vault`; `setup.ts` 1230→58 LOC + step registry); `vault.ts` split 1037→194 LOC into 5 focused + 2 support modules; `vault_locked` intercept lifted into `shared/state.ts`; `get_vault_status` SW message + sidebar status indicator closing the last `relicario status` CLI/extension parity gap |
|
| v0.7.0 *(2026-06-01)* | Extension restructure (Plan C) complete — Phases 3/4/6 merged via 3 parallel worktree streams under PM coordination: setup wizard crypto migrated into the SW (`create_vault`/`attach_vault`; `setup.ts` 1230→58 LOC + step registry); `vault.ts` split 1037→194 LOC into 5 focused + 2 support modules; `vault_locked` intercept lifted into `shared/state.ts`; `get_vault_status` SW message + sidebar status indicator closing the last `relicario status` CLI/extension parity gap |
|
||||||
| v0.6.0 *(2026-05-30)* | Security audit fixes; device authentication; backup/restore + LastPass import; fullscreen UX Phases 1+2A+2B; v0.5.1 Streams A/B/C (3-column vault layout + bottom-sheet picker + toast system; left-nav settings; Recovery QR end-to-end + setup wizard Style C); 1C-γ (attachments + Document type + device registration + trash + field history); Plan B multi-stream refactor (commands/ split, prompt_or_flag, core/WASM seam); vault-tab management surfaces revamp (settings synced/local split, devices fingerprint, trash purge countdown, field-history polish, item-history-index, `#history/<id>` routing); doc-structure redesign (rename to DESIGN/CRYPTO/docs/FORMATS, scope headers + Next: footers); GPL-3.0-or-later license |
|
| v0.6.0 *(2026-05-30)* | Security audit fixes; device authentication; backup/restore + LastPass import; fullscreen UX Phases 1+2A+2B; v0.5.1 Streams A/B/C (3-column vault layout + bottom-sheet picker + toast system; left-nav settings; Recovery QR end-to-end + setup wizard Style C); 1C-γ (attachments + Document type + device registration + trash + field history); Plan B multi-stream refactor (commands/ split, prompt_or_flag, core/WASM seam); vault-tab management surfaces revamp (settings synced/local split, devices fingerprint, trash purge countdown, field-history polish, item-history-index, `#history/<id>` routing); doc-structure redesign (rename to DESIGN/CRYPTO/docs/FORMATS, scope headers + Next: footers); GPL-3.0-or-later license |
|
||||||
| v0.2.0 | Typed-item rewrite (Plans 1A/1B/1C-α/β₁/β₂) |
|
| v0.2.0 | Typed-item rewrite (Plans 1A/1B/1C-α/β₁/β₂) |
|
||||||
@@ -16,11 +17,11 @@ See `CHANGELOG.md` for tagged-release detail and `STATUS.md` for the per-train c
|
|||||||
|
|
||||||
## Up next
|
## Up next
|
||||||
|
|
||||||
All three 2026-05-04 architecture-review specs are shipped; enterprise org vault backend is shipped (2026-06-20). Pending items in rough priority order:
|
All three 2026-05-04 architecture-review specs are shipped; the enterprise org vault backend (v0.8.0) and org item-type parity + collection-scoped attachments (v0.8.1) are shipped. Forward plan for extension parity: `docs/superpowers/specs/2026-06-20-extension-cli-parity-gap-analysis.md`. Pending items in rough priority order:
|
||||||
|
|
||||||
- **Org-vault item-type parity** — `org add`/`edit` support for Card, SshKey, Document, Totp (Login/SecureNote/Identity ship today)
|
|
||||||
- **Extension org parity — read** — org switch + collection-filtered browse in the popup/vault tab (Dev-D, deferred)
|
- **Extension org parity — read** — org switch + collection-filtered browse in the popup/vault tab (Dev-D, deferred)
|
||||||
- **Extension org parity — write** — `org add`/`edit`/`rm` from the extension
|
- **Extension org parity — write** — `org add`/`edit`/`rm` from the extension (Plan B-2; the CLI side reached all-7-type org write in v0.8.1, so this is unblocked CLI-side)
|
||||||
|
- **Personal-side extension gaps** — favorites UI, group/tag/filter editing across all type forms, attachment-remove router wire + per-item purge UI, autofill registrable-domain matching (per the parity gap analysis)
|
||||||
- **Phase 4: command palette** — ⌘K global search + action dispatch across the vault tab (no spec yet)
|
- **Phase 4: command palette** — ⌘K global search + action dispatch across the vault tab (no spec yet)
|
||||||
|
|
||||||
## Medium-term
|
## Medium-term
|
||||||
|
|||||||
33
STATUS.md
33
STATUS.md
@@ -5,10 +5,23 @@
|
|||||||
## Version
|
## Version
|
||||||
|
|
||||||
**Last release tagged:** v0.6.0 — rolled up Phase 2B, v0.5.1 Streams A/B/C, 1C-γ, Plan B refactor (Cycles 1+2), management-surfaces revamp, and the doc-structure redesign into one tag.
|
**Last release tagged:** v0.6.0 — rolled up Phase 2B, v0.5.1 Streams A/B/C, 1C-γ, Plan B refactor (Cycles 1+2), management-surfaces revamp, and the doc-structure redesign into one tag.
|
||||||
**Active track:** **extension restructure (Plan C) — COMPLETE.** All six phases merged. Phases 1, 2, 5 merged 2026-05-30; Phases 3, 4, 6 merged 2026-05-31/06-01 via three parallel worktree streams (Dev-A/B/C under PM coordination). Versions bumped to v0.7.0; tag pending.
|
**Active track:** **v0.8.1 — org item-type parity — COMPLETE (on `main` `4c0a289`; tag pending PM).** All four parallel streams merged: shared item-build foundation + personal add/edit refactor (Dev-A, `b09e0ce`); org add/edit parity for Card/Key/Totp (Dev-B, `6e73c5e`); org Document + collection-scoped attachment storage (Dev-C, `4c0a289`); grant-scoped attachment write-path hook (Dev-D, `db4e05a`). See the v0.8.1 landing section below.
|
||||||
|
|
||||||
## What landed on main since the v0.5.0 version bump
|
## What landed on main since the v0.5.0 version bump
|
||||||
|
|
||||||
|
### v0.8.1 — org item-type parity + collection-scoped attachments + grant-scoped hook (merged 2026-06-20, `4c0a289`)
|
||||||
|
|
||||||
|
Spec: `docs/superpowers/specs/2026-06-20-relicario-v0.8.1-parity.md`; plan: `docs/superpowers/plans/2026-06-20-relicario-v0.8.1-parity.md`. Four parallel streams under PM coordination (relay-bus):
|
||||||
|
|
||||||
|
- **Dev-A — shared item-build foundation** (merge `b09e0ce`): `commands/item_build.rs` (shared secret-resolution, type parsers, per-type `build_*`/`edit_*` helpers, `push_history`); personal `add`/`edit` refactored onto it; personal `--*-stdin` flags for non-interactive scripting/tests.
|
||||||
|
- **Dev-B — org Card/Key/Totp parity** (merge `6e73c5e`): `OrgAddKind` gains Card/Key/Totp; `org edit` becomes per-type interactive dispatch (the old "login/secure-note/identity only" bail is gone).
|
||||||
|
- **Dev-C — org Document + collection-scoped attachments** (merge `4c0a289`): `OrgAddKind::Document`; `org_session.rs` attachment storage (`attachment_path`/`save_attachment`/`load_attachment`/`remove_item_attachments`) writing `attachments/<slug>/<item-id>/<att-id>.enc`; default org attachment cap; `org add document --file` + `org edit --file`; purge removes the item's attachment dir.
|
||||||
|
- **Dev-D — grant-scoped attachment hook** (merge `db4e05a`): `relicario-server` `classify_path` recognizes `attachments/<slug>/<item-id>/<att-id>.enc` (3 segments, slug-only `.`-free guard) as `Item { collection }`, converting attachment writes from `Unrestricted` to grant-scoped — closing a latent authz gap. Bumped `relicario-server` to 0.1.1; `docs/SECURITY.md` documents the required pre-receive hook redeploy.
|
||||||
|
|
||||||
|
Result: `relicario org add`/`edit` now reach **all 7 item types** (Login, Secure Note, Identity, Card, Key, TOTP, Document); org attachments are collection-scoped on disk and grant-enforced at the hook. The C↔D path contract held in the merge — Dev-C's `save_attachment` emitter (`attachments/{slug}/{item}/{att}.enc`) exactly matches Dev-D's `classify_path` authorization. **Deploy note:** the pre-receive hook must be rebuilt on the server for attachment writes to be grant-scoped in production.
|
||||||
|
|
||||||
|
**Still deferred — forward plan in `docs/superpowers/specs/2026-06-20-extension-cli-parity-gap-analysis.md`:** extension org **read** (Dev-D) and **write** (Plan B-2) — the extension has no org concept yet; org phase-2 (SSO/LDAP, read audit, per-collection subkeys, HTTP plane). That parity gap analysis is the authoritative forward plan for extension↔CLI parity (org read/write plus a cluster of personal-side extension gaps: favorites UI, group/tag/filter editing, attachment-remove router wire, per-item purge).
|
||||||
|
|
||||||
### Phase 2B — polish foundation + form layout (merged 2026-05-02, `5da1e52`)
|
### Phase 2B — polish foundation + form layout (merged 2026-05-02, `5da1e52`)
|
||||||
|
|
||||||
Spec: `docs/superpowers/specs/2026-05-02-phase-2b-form-layout-design.md`
|
Spec: `docs/superpowers/specs/2026-05-02-phase-2b-form-layout-design.md`
|
||||||
@@ -114,10 +127,10 @@ Item CRUD commands (B9–B14): `org add` (`OrgAddKind`: Login/SecureNote/Identit
|
|||||||
|
|
||||||
**A5 doc-fix** (`enforce_owner_only_elevation` parent-role close, `519e503`) and this living-docs sweep also landed.
|
**A5 doc-fix** (`enforce_owner_only_elevation` parent-role close, `519e503`) and this living-docs sweep also landed.
|
||||||
|
|
||||||
**Tracked follow-ups (deferred, not shipped):**
|
**Tracked follow-ups:**
|
||||||
- `org add` / `org edit` parity for Card, SshKey, Document, Totp item types (Login/SecureNote/Identity only today; `get`/`list` can display all types if present)
|
- `org add` / `org edit` parity for Card, Key, Document, Totp — ✅ **SHIPPED v0.8.1** (`4c0a289`; all 7 item types now supported)
|
||||||
- Extension org-vault switch + read parity (Dev-D deferred)
|
- Extension org-vault switch + read parity (Dev-D) — still deferred; forward plan in the parity gap analysis
|
||||||
- Extension org write operations
|
- Extension org write operations — still deferred (Plan B-2)
|
||||||
- Phase 2: SSO/LDAP federation, read audit log, per-collection subkeys (true cryptographic scope separation), HTTP management plane
|
- Phase 2: SSO/LDAP federation, read audit log, per-collection subkeys (true cryptographic scope separation), HTTP management plane
|
||||||
|
|
||||||
**Known limitations (by design in phase 1):** shared org master key — reads are not cryptographically scoped per collection (hook scopes writes; client filters manifest); no read audit (git records writes only); `delete-org` is a local tombstone only (hook rejects protected-file deletion on push).
|
**Known limitations (by design in phase 1):** shared org master key — reads are not cryptographically scoped per collection (hook scopes writes; client filters manifest); no read audit (git records writes only); `delete-org` is a local tombstone only (hook rejects protected-file deletion on push).
|
||||||
@@ -169,10 +182,10 @@ Per the 2026-05-30 post-v0.6.0 audit of the three 2026-05-04 architecture-review
|
|||||||
|
|
||||||
**Enterprise org vault** — ✅ **COMPLETE (backend)** — all 19 CLI subcommands + core + server hook merged `7392795` 2026-06-20. Deferred follow-ups tracked in the landing section above.
|
**Enterprise org vault** — ✅ **COMPLETE (backend)** — all 19 CLI subcommands + core + server hook merged `7392795` 2026-06-20. Deferred follow-ups tracked in the landing section above.
|
||||||
|
|
||||||
Pending org-vault follow-ups (in rough priority order):
|
Pending follow-ups (in rough priority order; **forward plan:** `docs/superpowers/specs/2026-06-20-extension-cli-parity-gap-analysis.md`):
|
||||||
- `org add`/`edit` parity for Card, SshKey, Document, Totp
|
- **Extension org parity — read** (Dev-D): org context switch + collection-filtered browse in the popup/vault tab
|
||||||
- Extension org switch + read parity (Dev-D)
|
- **Extension org parity — write** (Plan B-2): `org add`/`edit`/`rm` from the extension — blocked behind extension org-read landing (and now unblocked on the CLI side, which reached all-7-type org write in v0.8.1)
|
||||||
- Extension org write operations
|
- **Personal-side extension gaps** (from the parity analysis): favorites UI, group/tag editing on all type forms, popup type/tag filters, attachment-remove router wire + per-item purge UI, autofill registrable-domain matching
|
||||||
- **Phase 4: command palette** — ⌘K global search + action dispatch across the vault tab (no spec yet)
|
- **Phase 4: command palette** — ⌘K global search + action dispatch across the vault tab (no spec yet)
|
||||||
|
|
||||||
Long-term: relay server, mobile. See `ROADMAP.md` for the longer arc and `CHANGELOG.md` for tagged-release history (current head: `v0.6.0`; the `v0.7.0` entry covers extension-restructure completion).
|
Long-term: relay server, mobile. See `ROADMAP.md` for the longer arc and `CHANGELOG.md` for tagged-release history (the `v0.8.1` CHANGELOG entry + version bump are owned by the PM in this lift).
|
||||||
|
|||||||
@@ -24,10 +24,7 @@ under `src/commands/`. Each source file has one job.
|
|||||||
- **`src/main.rs`** (`main.rs:1-492`) — clap surface and the flat dispatcher.
|
- **`src/main.rs`** (`main.rs:1-492`) — clap surface and the flat dispatcher.
|
||||||
Owns the top-level `Cli` / `Commands` enum and every subcommand enum
|
Owns the top-level `Cli` / `Commands` enum and every subcommand enum
|
||||||
(`AddKind`, `TrashAction`, `SettingsAction`, `BackupAction`, `ImportAction`,
|
(`AddKind`, `TrashAction`, `SettingsAction`, `BackupAction`, `ImportAction`,
|
||||||
`DeviceAction`, `RecoveryQrCmd`), plus the org clap surface `OrgCommands`
|
`DeviceAction`, `RecoveryQrCmd`). `main()` is a single `match` that
|
||||||
(`main.rs:448`) and `OrgAddKind` (`main.rs:556`) — the latter's Card / Key /
|
|
||||||
Document / Totp variants carry `--collection` and the `--*-stdin` secret flags.
|
|
||||||
`main()` is a single `match` that
|
|
||||||
delegates each variant to `commands::<verb>::cmd_<verb>(...)`. Also owns the
|
delegates each variant to `commands::<verb>::cmd_<verb>(...)`. Also owns the
|
||||||
three test-only env-var hooks (`test_passphrase_override`,
|
three test-only env-var hooks (`test_passphrase_override`,
|
||||||
`test_item_secret_override`, `test_backup_passphrase_override`) — each is
|
`test_item_secret_override`, `test_backup_passphrase_override`) — each is
|
||||||
@@ -97,14 +94,7 @@ under `src/commands/`. Each source file has one job.
|
|||||||
(`items/<collection-slug>/<id>.enc` — the leading slug is what the pre-receive
|
(`items/<collection-slug>/<id>.enc` — the leading slug is what the pre-receive
|
||||||
hook authorizes against, never decrypting), fingerprint-based member matching
|
hook authorizes against, never decrypting), fingerprint-based member matching
|
||||||
(`relicario_core::fingerprint`, tolerant of OpenSSH whitespace/comment
|
(`relicario_core::fingerprint`, tolerant of OpenSSH whitespace/comment
|
||||||
differences), `atomic_write`, and `org_git_run`. As of v0.8.1 it also owns
|
differences), `atomic_write`, and `org_git_run`. Note `org_git_run` runs
|
||||||
**collection-scoped attachment storage** — `attachment_path` /
|
|
||||||
`save_attachment` / `load_attachment` / `remove_item_attachments`
|
|
||||||
(`org_session.rs:125-157`) at layout
|
|
||||||
`attachments/<collection-slug>/<item-id>/<att-id>.enc` (the same leading slug
|
|
||||||
the pre-receive hook authorizes against as for `item_path`), capped
|
|
||||||
per-attachment by `DEFAULT_ORG_ATTACHMENT_MAX_BYTES` (10 MiB,
|
|
||||||
`org_session.rs:20`). Note `org_git_run` runs
|
|
||||||
**bare git** — unlike `helpers::git_run` it does NOT inject
|
**bare git** — unlike `helpers::git_run` it does NOT inject
|
||||||
`commit.gpgsign=false`, because org commits MUST be signed (the hook verifies
|
`commit.gpgsign=false`, because org commits MUST be signed (the hook verifies
|
||||||
every commit's signature); signing config is established by
|
every commit's signature); signing config is established by
|
||||||
@@ -121,38 +111,19 @@ under `src/commands/`. Each source file has one job.
|
|||||||
concurrent-rotation abort), `transfer-ownership`, `delete-org`, `status` /
|
concurrent-rotation abort), `transfer-ownership`, `delete-org`, `status` /
|
||||||
`audit` (verified-signer attribution + `TAMPERED` flag).
|
`audit` (verified-signer attribution + `TAMPERED` flag).
|
||||||
|
|
||||||
*Item CRUD (7):* full item-type parity with the personal vault (v0.8.1).
|
*Item CRUD (7):* `org add` creates typed items via `OrgAddKind`
|
||||||
`org add` creates **all seven types** (Login / SecureNote / Identity / Card /
|
(`commands/org.rs:749`) — **Login / SecureNote / Identity only**; Card /
|
||||||
Key / Document / Totp) via `OrgAddKind` (`commands/org.rs:751`); each arm
|
SshKey / Document / Totp creation is a deferred follow-up. `get` / `list` can
|
||||||
delegates to the shared `item_build::build_*` builders through `build_org_item`
|
display any item type if present. `org get <query> [--show]` masks secrets
|
||||||
(`commands/org.rs:799`), and `run_add` (`commands/org.rs:823`) sets tags
|
unless `--show`; `org list [--trashed]` filters by the caller's collection
|
||||||
post-build. Document is special-cased in `run_add` (`commands/org.rs:839`): its
|
grants; `org edit <query>` is flag-driven (blank flags keep current values);
|
||||||
builder also yields an `EncryptedAttachment` that is written via
|
`org rm` soft-deletes, `org restore` undoes, `org purge` permanently removes
|
||||||
`save_attachment` and git-staged before the signed commit. Single-line secrets
|
the encrypted blob. All item ops are collection-scoped and grant-enforced. The
|
||||||
(card number/CVV/PIN, TOTP secret, login password) accept a `--*-stdin` flag;
|
audit trail emits `item-create` / `item-update` / `item-delete` /
|
||||||
multiline secrets (Key material, SecureNote body) read stdin to EOF — the same
|
`item-restore` / `item-purge`.
|
||||||
`resolve_secret_line` / `resolve_secret_multiline` convention as personal `add`
|
|
||||||
(`commands/item_build.rs`).
|
|
||||||
|
|
||||||
`org edit <query>` (`run_edit`, `commands/org.rs:1004`) is **interactive
|
Deferred: Card / SshKey / Document / Totp `org add` / `edit` parity;
|
||||||
per-type** as of v0.8.1 (it was flag-driven before): it prompts Title, then
|
extension org reads and writes (Dev-D).
|
||||||
dispatches on `&mut item.core` to the shared `item_build::edit_*` helpers
|
|
||||||
("blank keeps current", field-history capture via `push_history`), mirroring
|
|
||||||
personal `cmd_edit`. `--totp-qr` sets a Login TOTP from a QR image; `--file`
|
|
||||||
replaces a Document's primary attachment (`commands/org.rs:1039`, rejected for
|
|
||||||
non-Document items at `commands/org.rs:1018`). The edit commit carries
|
|
||||||
`Relicario-Action: item-update`.
|
|
||||||
|
|
||||||
`org get <query> [--show]` masks every secret unless `--show`; `org list
|
|
||||||
[--trashed]` filters by the caller's collection grants; `org rm` soft-deletes,
|
|
||||||
`org restore` undoes, `org purge` (`run_purge`, `commands/org.rs:1164`)
|
|
||||||
permanently removes the encrypted blob **and** the item's attachment directory
|
|
||||||
(`remove_item_attachments`, `commands/org.rs:1173`). All item ops are
|
|
||||||
collection-scoped and grant-enforced (`filter_for_member` over the manifest +
|
|
||||||
`ensure_grant` before any load/mutate). The audit trail emits `item-create` /
|
|
||||||
`item-update` / `item-delete` / `item-restore` / `item-purge`.
|
|
||||||
|
|
||||||
Deferred: extension org reads and writes (Plan B-2 / phase 2).
|
|
||||||
|
|
||||||
- **`src/helpers.rs`** (`helpers.rs:1-101`) — pure, no-state plumbing:
|
- **`src/helpers.rs`** (`helpers.rs:1-101`) — pure, no-state plumbing:
|
||||||
`find_vault_dir_from` (`helpers.rs:14-28`) walks up parent directories
|
`find_vault_dir_from` (`helpers.rs:14-28`) walks up parent directories
|
||||||
|
|||||||
Reference in New Issue
Block a user