Skip to content

Releases

v0.5.0 — architect audit fixes

Choose a tag to compare

@punitmishra punitmishra released this 05 Jul 12:07
b5761d2

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 via importlib.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_dict warns (deduped) on unknown fields — forward-compat visible.
  • Store.upsert tmp filenames PID+uuid-tagged — matches other write paths.
  • Consistent Path.expanduser() at the Store.__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).

v0.4.0 — adversarial layer audit

Choose a tag to compare

@punitmishra punitmishra released this 05 Jul 10:51
71a6f5f

Third tagged release. Ships the adversarial layer audit: 35 confirmed findings across seven layers, each landed as its own reviewed PR.

Audit summary

  • 142 review + verify agents ran a per-layer find → adversarial-verify workflow (3 skeptic lenses per finding, ≥2-of-3 refute to drop).
  • 45 raw findings → 35 confirmed after verification.
  • All 35 landed across 7 layer-scoped PRs and merged in order.

Layer PRs

  • L1 Store — #24: crash on non-string ts, tmp-file race, atomic save_graph, exception log, float32 vectors + concurrent-search test.
  • L2 Pipeline+Config+CLI — #25: empty list = opt-out end-to-end, single store.all read, Settings.from_dict passthrough tests.
  • L3 Records+Loaders — #26: reject non-positive limit, IMAP socket timeout, webscrape is_file() detection, JSONL mid-file diagnostics + numeric-ts survival.
  • L4 WorkGraph — #27: word-boundary project matching, PR ticket dedup, case-insensitive person identity with display_name, live channel/ticket mentions.
  • L5 Urgency — #28: FYI word-boundary, empty cfg.you guard, empty-set opt-out, weight-value & unknown-key diagnostics.
  • L6 Persona — #29: opener/closer dedup for single-line, contraction filter, empty-corpus sentinel, extended emoji range, MCP name plumbing + new persona test file.
  • L7 MCP server — #30: torn-graph read defense, graph_summary hardening, refresh error messages, case-insensitive who_is, coverage for 5 previously-untested tools.

Test suite

129 pass, 1 pre-existing unrelated failure, 1 opt-in Qdrant skip. ruff check clean.