Plan 3A: backup & restore — drives the feature branch landing in the next commit (merge of feature/backup-restore). Pre-v0.3.0 audit checklist: manual smoke-test list for the v0.2.x audit-pass commits (TOTP edit, history, detach, status, generator defaults, vault-tab parity, sync button) — to walk through before the v0.3.0 tag.
125 lines
5.4 KiB
Markdown
125 lines
5.4 KiB
Markdown
# 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 <query>` — masked by default (passwords show as
|
|
`••••`).
|
|
- [ ] `relicario history <query> --show` — values revealed in the clear.
|
|
- [ ] `relicario history <query> --field login_password` — filter works.
|
|
Also try the raw form (`--field core:login_password`) — both
|
|
should match.
|
|
- [ ] `relicario history <query>` on an item with no captured history —
|
|
prints "no history captured".
|
|
- [ ] `relicario detach <query> <aid>` — removes the attachment ref,
|
|
deletes the encrypted blob on disk, commits `detach: …`.
|
|
- [ ] `relicario detach <doc-item> <primary-aid>` — refuses with "use
|
|
`purge` instead".
|
|
- [ ] `relicario edit <totp-item>` — 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.
|