# Relicario — Project Status > Update this file at the end of every dev iteration. It is the single source of truth for what is done, in progress, and next. ## 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. **Active track:** extension restructure execution — Plan C Phases 1, 2, 5 merged 2026-05-30 (three parallel worktree streams). Phases 3, 4, 6 remain. ## What landed on main since the v0.5.0 version bump ### Phase 2B — polish foundation + form layout (merged 2026-05-02, `5da1e52`) Spec: `docs/superpowers/specs/2026-05-02-phase-2b-form-layout-design.md` Plan: `docs/superpowers/plans/2026-05-02-phase-2b-polish-and-form-layout.md` - Patina gold palette tokens (`--gold-base` `#a88a4a`, `--gold-mid`, `--gold-shadow`, etc.) replacing the bright amber `#d2ab43` - `.surface-backdrop` (radial top-glow + 18px grid texture) on popup body, setup body, vault body - `.glass` card class with `backdrop-filter: blur(8px)` for unlock card, setup steps, form columns - `.btn-primary` / `.btn-secondary` button hierarchy alongside existing `.btn` - `GLYPH_NEXT = '▸'` (U+25B8) replacing ASCII `→` in next/continue buttons - Unlock view restructure: logo-lockup (logo + brand + tagline) + glass card + primary "unlock vault" button + secondary open-vault/settings demoted - Setup wizard: backdrop + glass step cards + glass mode-picker cards + ▸ on next buttons - Two-column login form (`surface: 'popup' | 'fullscreen'` flag on `renderForm`) - Sticky save bar in fullscreen forms with `externalActions` flag - Form header with title + dirty-state subtitle + platform-aware save hint (⌘+S / Ctrl+S) ### v0.5.1 Stream A — fullscreen + popup layout polish (merged 2026-05-03, `c16adc4`) - 3-column vault tab: sidebar (200px) + list (flex) + detail drawer (440px) - Sidebar type-category nav replacing flat item list (All items + per-type counts) - Bottom sheet for "new item" type picker (pane-only scrim, sidebar stays interactive) - Shared toast system at `extension/src/shared/toast.ts` (`showToast(message, type, durationMs)`) - `GLYPH_VAULT_TAB = '⧉'` (U+29C9) replacing `⤴` pop-out button in popup - Per-type glyph icons in popup item rows - Empty-state treatments (popup list empty, popup search-empty, vault list section-empty) - Emoji sweep — all remaining UI emoji replaced with monochrome glyph constants ### v0.5.1 Stream B — settings UX redesign (merged 2026-05-03, `bd6a301`) - Unified left-nav settings page (Device / Vault grouping) - Sections: Autofill (Device), Display (Device — password coloring), Security (Vault — Recovery QR + trusted devices), Generator (Vault), Retention (Vault), Backup (Vault), Import (Vault) - `devices` standalone sidebar entry subsumed into Security section ### v0.5.1 Stream C — Recovery QR (merged 2026-05-03, `934dfe0`) Spec: `docs/superpowers/specs/2026-05-01-recovery-qr-design.md` Plan: `docs/superpowers/plans/2026-05-01-recovery-qr-and-entropy-floor.md` - Rust core: `relicario-core/src/recovery_qr.rs` — `generate_recovery_qr` / `unwrap_recovery_qr` / `recovery_qr_to_svg` (109-byte binary payload, never written to disk) - WASM bindings: `generate_recovery_qr` / `unwrap_recovery_qr` + session stores `image_secret` for regeneration - CLI: `relicario recovery-qr generate` / `recovery-qr unwrap` subcommands (TTY render) - Extension: three-state Security settings card; setup wizard "generate before you go" banner - Setup wizard Style C redesign — centered hero card + colored progress track + glyph mode icons (replacing the prior glass-card vertical wizard) ### 1C-γ — attachments + Document type + device registration + trash + history Specs: `docs/superpowers/specs/2026-04-24-relicario-extension-1c-gamma1-design.md`, `docs/superpowers/specs/2026-04-26-relicario-extension-1c-gamma2-design.md` Plans: `docs/superpowers/plans/2026-04-24-relicario-extension-1c-gamma1.md`, `docs/superpowers/plans/2026-04-26-relicario-extension-1c-gamma2.md` - Core: `relicario-core/src/item_types/document.rs` (DocumentCore — signature + signed-on date) - Extension: Document type form + signature-block detail (`extension/src/popup/components/types/document.ts`) - Attachments wired into 6 type forms via shared disclosure; 📎 indicator in item list - Attachment cap setting (per-vault bytes cap) in vault settings; CLI enforces cap on attach - Service worker: trash operations (listTrashed, restoreItem, purgeItem, purgeAllTrash); batched purge - Device registration from the popup (no setup-wizard detour) - Field history end-to-end (WASM `get_field_history`, popup viewer) - Attachment IDs expanded to 128 bits with `is_valid` check (audit I2) - Per-vault attachment bytes cap enforced (audit I3) - IDs validated on backup restore (audit B4) ### Plan B multi-stream refactor (2026-05-09 → 2026-05-25) Cycle 1: - Stream A: security audit fixes + docs polish (`89090a8`) - Stream B: `main.rs` split into `commands/` modules + `git_run` helper (`b9bd152`) Cycle 2: - Stream A: `prompt_or_flag` + builder compression — compressed `build_*_item` helpers (`3dd1e1b`) - Stream B: `Vault::after_manifest_change` wrapper, single canonical `ParamsFile` in session (`3759f6a`) - Stream C: core/WASM seam — `base32_decode_lenient`, `parse_month_year`, `guess_mime` exported from WASM; CLI parsers migrated to `relicario-core::parse` (`e69b347`) Misc: - CLI: `gen` alias for `generate`, `-l`/`-w` short flags, batched purge - `base32` module extracted from core, two duplicate RFC-4648 impls deduplicated - License switched to GPL-3.0-or-later ### Vault-tab management surfaces revamp (2026-05-24 → 2026-05-30) Spec: `docs/superpowers/specs/2026-05-23-vault-tab-management-surfaces-revamp-design.md` Plan: `docs/superpowers/plans/2026-05-24-vault-tab-management-surfaces-revamp.md` - Shared utilities: `relative-time.ts` consolidating 5 duplicate inline copies (`9da45dd`, `a587965`), webcrypto `ssh-fingerprint.ts` (`1edfa67`), shared section-header / glyph-btn / kv-row / fingerprint CSS (`367adce`), history/revoke/restore glyph constants (`c943a06`) - Settings pane revamp — synced/local split + session timeout UI (`299e7db`) - Devices pane revamp — SHA256 fingerprint + added-by display + glyph revoke with inline two-step confirm (`047df6e`) - Trash pane revamp — per-item purge countdown via `daysUntilPurge` + glyph restore + bottom-right empty-trash (`ed6e218`) - Field-history pane visual polish — section headers + glyph reveal/copy buttons (`32e674e`) - Item-history-index pane — top-level "items with history" list (`32e1632`) - Sidebar slot wiring + `#history/` route with `#field-history/` legacy normalization (`88d7228`) ### Doc-structure redesign (2026-05-30, complete) Spec: `docs/superpowers/specs/2026-05-30-doc-structure-redesign-design.md` Plan: `docs/superpowers/plans/2026-05-30-doc-structure-redesign.md` (all 37 sub-step boxes ticked) - Task 1: Renamed `ARCHITECTURE.md` → `DESIGN.md`, `docs/ARCHITECTURE.md` → `docs/CRYPTO.md`, `FORMATS.md` → `docs/FORMATS.md` (`36a59cd`) - Task 2: Added scope headers + "Next:" footers to all tour docs (`5e7023f`) - Task 3: Fixed incoming links to renamed paths (`01377e7`) - Task 4: Updated CLAUDE.md living-docs table + added three discipline rules (`bae3f7c`) - Task 5: Final verification gate — all 6 steps pass cleanly (Step 3 grep had three false positives — correct new-path sibling links inside `docs/`, not stale references) ### Post-audit cleanup (2026-05-30) - `STATUS.md` + `ROADMAP.md` synced with three weeks of stealth-shipped work (`72a59c6`, `0bde093`) - CLAUDE.md gains rule #4 (plan-state hygiene) + doc-structure plan checkboxes ticked retroactively (`cccb7d7`) - Vault lock-screen logo: `` added to `renderLockScreen` for parity with popup unlock view (`39ae629`) - Extension test-debt cleared: 17 stale tests (settings + devices + router) updated to match the post-Stream-B + post-revamp components — 371/371 extension + 281 Rust tests green (`797709b`, `c9802ef`, `361f3b4`) - v0.6.0 cut: version bumps + CHANGELOG entry covering the full v0.5.x train ## In progress (uncommitted on main) - `.claude/settings.json` — harness config tweaks (kept aside intentionally) - Two superseded doc-plan/spec files showing modifications — `2026-04-22-relicario-extension-1c-beta1.md` and `2026-04-11-relicario-design.md` (kept aside intentionally) ## Up next Per the 2026-05-30 post-v0.6.0 audit of the three 2026-05-04 architecture-review specs: - **CLI restructure** (`2026-05-04-cli-restructure-design.md`) — *already shipped* as Plan B Cycles 1+2 (`b9bd152`, `3dd1e1b`, `3759f6a`, `e69b347`); the last gap (read-side `refresh_groups_cache` callers in list/get) closed in `d717f0d`. Done-criteria all met. - **Security polish** (`2026-05-04-security-polish-design.md`) — *already shipped* as Stream A Cycle 1 (`89090a8`) plus follow-ups (`0c9387f` start.sh fourth window, `229e483` recovery_qr.rs docs). All four phases done. - **Extension restructure** (`2026-05-04-extension-restructure-design.md`, plan `docs/superpowers/plans/2026-05-30-extension-restructure.md`) — half-shipped: - ✅ **Phase 1 (StateHost typing)** — merged `c3f8e35` (4 commits, 378/378 tests). View+PopupState moved to `shared/popup-state.ts`; `StateHost` interface fully typed; `__resetHostForTests` exported; double-registration guard. PopupState widened to absorb VaultState's vault-tab-only fields. - ✅ **Phase 2 (SW storage extract)** — merged `b6707f4` (1 commit, 376/376 tests). `loadDeviceSettings` / `saveDeviceSettings` / `loadBlacklist` / `saveBlacklist` consolidated in `service-worker/storage.ts`; `itemToManifestEntry` moved to `service-worker/vault.ts`. Router files shrank ~70 LOC combined. - ✅ **Phase 5 (P2 cluster)** — merged `0496dfe` (5 commits, 377/377 tests). Inactivity timer rule inverted (READ_ONLY_CONTENT_CALLABLE exclusion set); `state.gitHost` cleared on session expiry; `teardownSettingsCommon` extracted; `Promise.allSettled` in devices (trash.ts was a no-op — single-message load path on current main); MutationObserver `scan()` debounced 200ms. - ⏳ **Phase 3 (Setup wizard SW migration + step registry)** — Effort: L. Depends on Phase 1 ✅. Biggest single phase. Adds `create_vault` / `attach_vault` SW handlers; setup.ts drops direct WASM imports + collapses six renderStepN/attachStepN pairs into a step registry + adds `clearWizardState`. - ⏳ **Phase 4 (vault.ts split + vault_locked channel lift)** — Effort: M. Depends on Phase 1 ✅. Splits 1037-LOC vault.ts into 5 modules (vault-shell, vault-sidebar, vault-list, vault-drawer, vault-form-wrapper); lifts the vault_locked RPC intercept into shared/state.ts's sendMessage wrapper. - ⏳ **Phase 6 (get_vault_status + sidebar status indicator)** — Effort: S-M. Depends on Phase 4. Closes the `relicario status` CLI/extension parity gap. - Combined test count at end of three-stream merge: **389/389** vitest passing (baseline 371 + 18 new across the three phases). Beyond extension restructure, ROADMAP medium-term holds Phase 4 command palette (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.5.0` entry, dated 2026-05-02 — predates the v0.5.1 train work and will be revised when the next tag cuts).