Skip to content

v0.5.0 — witness ingest (records-in engine) + install/wire split

Choose a tag to compare

@IngTian IngTian released this 26 Jul 18:59
f799c1d

witness becomes a generic records-in distillation engine — it now ingests your own records (notes, articles, any text stream), not just Claude Code / OpenCode chats — and the install surface is split so witness can be set up as a standalone library without wiring an editor.

Highlights

  • witness ingest — feed witness a documented NDJSON record contract (one JSON object per line, via stdin or --file) and it distills those records exactly like a coding session: observations → bi-temporal facets → a narrative profile, per lens, served over MCP. witness owns the format + protocol; you bring clean records (it parses no files itself).
    {"text": "...", "id": "stable-dedup-key", "session": "optional-group", "ts": "2026-07-26", "role": "document"}
    Dedup keys on your id (same id + unchanged → skip; same id + changed → update; new id → append), so re-ingesting is idempotent and never deletes records you didn't mention. ts is the temporal axis; session optionally groups records mined together.
  • file platform adapter — an ingested source distills through the unchanged engine; file:-namespaced sessions never collide with editor sessions.
  • install ≠ wire (breaking rename): witness install [--path <dir>] now provisions an archive (no editor, no person-growth default lens — a blank engine you fill with your own lens); witness wire <claude|opencode> connects an editor (was install <target>); witness unwire (was uninstall). Run several install --path for isolated archives (one per data source).
  • Contract documented + versioned in prompts/SCHEMA.md — the public API a downstream tool builds against.

Breaking changes

  • witness install <claude|opencode>witness wire <claude|opencode>; witness uninstall <target>witness unwire <target>. witness install with no target now provisions an archive.
  • Already-wired editors keep working — the installed hook contract (capture/session-start/session-end) is unchanged; only the human-facing command names moved. Re-run witness wire <target> (or make install) if you want to re-wire.

Verification

Built via a fresh-subagent-per-task workflow with a final whole-branch review that caught + fixed a Critical incremental-append data-loss bug before release (dedup now uses true merge/append semantics). make fmt vet test + -race green; hook ABI byte-unchanged; zero distillation-engine changes; live end-to-end verified (a file: session mines observations under a domain lens on an isolated archive).