# Pre-v0.3.0 manual test checklist Date: 2026-04-27 Scope: every change in `CHANGELOG.md`'s `Unreleased` section since `v0.2.0` (commits `a7dbf35`, `f79a67b`, `3f0f5b1`, `b951741`, `c66fd52`). Purpose: smoke-walk the audit pass before drawing the line and tagging v0.3.0. Treat as a logic-spot-check, not a regression suite — the automated tests (`cargo test`, the extension's vitest suite) cover everything covered by tests already; this list is the things that need human eyeballs. ## CLI — new commands (commit `3f0f5b1`) - [ ] `relicario status` inside an active vault — shows root path, item counts (active / trashed), attachment count + total bytes, device count, `git log -1` last-commit line. - [ ] `relicario status` with at least one trashed item — trashed count is non-zero; active count excludes it. - [ ] `relicario history ` — masked by default (passwords show as `••••`). - [ ] `relicario history --show` — values revealed in the clear. - [ ] `relicario history --field login_password` — filter works. Also try the raw form (`--field core:login_password`) — both should match. - [ ] `relicario history ` on an item with no captured history — prints "no history captured". - [ ] `relicario detach ` — removes the attachment ref, deletes the encrypted blob on disk, commits `detach: …`. - [ ] `relicario detach ` — refuses with "use `purge` instead". - [ ] `relicario edit ` — rotate issuer, label, then secret; verify a `core:totp_secret` history entry is captured (visible via `relicario history`). - [ ] `relicario settings generator-defaults` (no flags) — prints current defaults. - [ ] `relicario settings generator-defaults --random --length 32` — flips mode + length, persists across runs. - [ ] `relicario settings generator-defaults --bip39 --words 7 --separator -` — mode flip persists. - [ ] `relicario generate` inside vault — uses the stored defaults. - [ ] `relicario generate --length 8` inside vault — explicit flag overrides the stored default. - [ ] `relicario generate` outside any vault — still works at hardcoded defaults (length 20, BIP39 5 words). No unlock prompt. ## Extension — popup (commit `a7dbf35`) - [ ] Settings view → "Sync now" — refresh succeeds with "synced ✓"; force a sync with a bad token to confirm the error string surfaces. - [ ] Item-list toolbar sync button — same coverage. - [ ] Devices view on a fresh install whose `device_name` isn't on the remote — banner appears. - [ ] Click "Register this device" → enter a name → confirm → device appears in the list, banner disappears. - [ ] Verify keypair persists across SW restart (re-open popup; banner should NOT return). ## Extension — vault tab parity (commit `a7dbf35`) - [ ] Open `vault.html` (Ctrl+Shift+L or popup pop-out). All views render: list, detail, add, edit, settings, settings-vault, trash, devices, field-history. - [ ] `register_this_device` works from the vault tab the same way as the popup. - [ ] Inactivity timer still fires when only the vault tab is open (no popup activity). - [ ] Wrong-extension sender check — install a second extension, send a message; should be rejected. (Covered by `router.test.ts:373-384` but worth one manual sanity run if time permits.) ## Setup wizard (commit `f79a67b` — pure-helper extraction) - [ ] First-run new-vault path: zxcvbn meter still updates within ~150 ms of typing; strength label changes through the five tiers as the passphrase strengthens. - [ ] First-run attach path: passphrase / image rejection produces the exact "Could not decrypt vault — wrong passphrase or reference image." string (no oracle leak). - [ ] Step 5 device registration completes without manual fallback when the extension is reachable. ## Refactor — cmd_add / cmd_edit per-type helpers (commit `3f0f5b1`) For each `ItemCore` variant: spin up the form, save, re-open, edit, save, verify the on-disk item stays valid. Drives both `build_*_item` and `edit_*`. - [ ] Login (with embedded TOTP sub-config) - [ ] SecureNote - [ ] Identity - [ ] Card - [ ] Key - [ ] Document (add via `attach`; `edit` should print the "use `attach` / `extract`" message) - [ ] Standalone Totp ## Build / test gates - [ ] `cargo test` — all green. - [ ] `cargo test -p relicario-cli --test basic_flows` (and the other named integration tests) — green individually. - [ ] `cargo build -p relicario-wasm --target wasm32-unknown-unknown` — succeeds. - [ ] Extension Chrome build (`webpack`) — produces a loadable extension. - [ ] Extension Firefox build (`webpack.firefox.config.js`) — produces a loadable extension. - [ ] Load in Chrome, load in Firefox, smoke-unlock an existing vault. ## Architecture-docs sanity (commit `c66fd52`) - [ ] Spot-check three line-number citations from each ARCHITECTURE.md against live code (drift is the silent killer — line-numbered docs rot fastest). Suggested: - `service-worker/index.ts:20` (lazy WASM init) - `crypto.rs:59` (`VERSION_BYTE = 0x02`) - `helpers.rs:48-52` (hardened-`git` `-c` flags) ## Sign-off When every box above is checked, the audit pass is good to tag as v0.3.0. Anything that fails goes back into `Unreleased` as a fix commit before the tag.