Repository navigation
Fourth tagged release. Ships the second adversarial audit pass — this one at the architecture level (v0.4 was line-level bugs; v0.5 is API design, data model, config precedence, error philosophy, release hygiene, tests strategy, DX).
Audit summary
- 175 review + verify agents across 10 architecture lenses (API, data-model, concurrency, config, error-handling, performance, security/privacy, docs/release, test strategy, DX).
- 55 raw findings → 34 confirmed after 3-skeptic adversarial verification (≥2 of 3 refute to drop).
- 18 fix-now landed in #32 (docs/release/DX) and #33 (correctness).
- 12 file-issue filed as #34–#45.
- 4 accept-and-document now explicit invariants in ARCHITECTURE.md.
Landed behavior changes
__version__is now dynamic viaimportlib.metadata— pyproject.toml is the single source of truth.- Entry-point loader failures observable via
warnings.warn(was: silent swallow). - Full env-var reference table in README + ARCHITECTURE.
resolve()prints a stderr warning when the Qdrant URL isn't a loopback host — local-first boundary now explicit.- CI MCP smoke test uses a name-set assertion (was: magic count of 7).
urgency.score()docstring/comment lie about clamping — fixed; new test pins the loosened contract.Record.from_dictwarns (deduped) on unknown fields — forward-compat visible.Store.upserttmp filenames PID+uuid-tagged — matches other write paths.- Consistent
Path.expanduser()at theStore.__init__choke point. Store.load_graph()shared defensive-read helper (CLI + MCP).- Test pins the MCP
ConfigError-per-tool invariant.
Test suite
133 pass, 0 failures, 1 opt-in Qdrant skip. ruff check clean. The pre-existing failing test that dogged v0.4 is finally fixed (finding #25 — split into keyword+embedding backend-forced tests).