v0.3.1 — install=mechanism · deletable auto-seeded default · unified backfill
CLI-surface cleanup (#102 / #103): the install and lens commands now follow a clean separation of concerns, and the built-in "default" lens is an ordinary, deletable lens rather than a special built-in.
Highlights
installis a pure mechanism. It wires the Claude Code hooks / OpenCode plugin + MCP server and binds the runner — and never prompts or seeds content. Safe to run as a hook subprocess and in CI.- The built-in "default" person-growth lens is auto-seeded once on the first time an archive is opened (a fresh personal install, or a pre-1a migration), and is fully deletable:
witness lens disable/deregister defaultsticks forever — it will not silently come back. Restore it any time withwitness lens load-default, or opt a fresh archive out entirely withWITNESS_NO_DEFAULT_LENS=1. installnow prints the enabled-lens set so you can see what will run (and cost an LLM call) on every session.lens rebuildis unified intolens backfill <name> [--fresh]. Backfill now always refreshes the lens's facets after re-mining (fixing a drift where facets could lag the re-mined observations).--fresh(the oldrebuild) drops the lens's observations + facets first, and is now guarded: it fails fast if a worker is running, asks for confirmation with exact counts (--yesto skip), and warns that in-session (hand-recorded) observations are not reproducible by a re-mine.- Docs/messages corrected for the "default is an ordinary lens" world (
profile/facetshelp + empty states).
Verification
make fmt vet test + -race green; npm checks 26/26; a full live end-to-end run (real LLM: capture → mine → observations → review → facets → profile) on an isolated archive; and an adversarial merge-gate review (correctness / best-practices / long-term-plan / UX) that came back GREEN with no blockers.
Upgrade is transparent for existing archives (the pre-1a default is migrated in automatically on first open).