v0.0.8 — memories describe the change, not the tool
One fix, and it is the one that decides whether any of the rest matters.
The defect (closes #3)
Inspecting a real six-week 0.0.7 install found 379 stored memories shaped like this:
title: Write
body : {"file_path":"/Users/…/email-to-preet.txt","content":"Subject: Re: …
facts: [] concepts: []
Every title was one of six tool names, so nothing was rankable. Every body was raw tool-input JSON, so nothing was readable. facts and concepts were hardcoded empty, so hybrid search had almost no real terms to match on.
Provenance and hashing worked perfectly — they were verifying junk.
The fix
Rule-based extraction, still zero-LLM and still no token spend:
| Before | After |
|---|---|
Write |
auth.ts: ROTATE_MS = 900_000 → ROTATE_MS = 3_600_000 |
Bash |
npm test -- --coverage |
Grep |
Searched "authentication" |
{"file_path":…} as body |
prose; raw tool input never stored as content |
facts: [] |
changed: X → Y, ran: …, error: … |
concepts: [] |
api, triggers, MAX_RETRIES |
A bare read with nothing extractable now sinks below the retention floor, so the sweep ages it out instead of distilling it into a permanent row.
Five more defects, found by inspecting live captures rather than fixtures
Each is pinned by a test:
- Loose error matching fired on any file whose content mentioned an error, and on
{"success":true}envelopes — marking every capture importance 6 and destroying ranking. - Raw JSON leaked back into facts through error-line extraction.
- The OS username leaked into concepts from
/Users/<name>/…on every memory — personal data, zero retrieval value. - Escape sequences fused into identifiers (
\tisPremium→tisPremium). - Shouty English (
THE,GATE,PASS) matched CONSTANT_CASE and buried real identifiers.
The uncomfortable part
Three pre-existing tests were asserting the old broken behavior (expect(title).toBe("Grep")). The suite was green because it was protecting the defect — which is why this survived six weeks of use. There is now a regression gate that fails if any title is a bare tool name or any body parses as JSON carrying a file_path.
Existing installs
Memories captured before this release keep their old shape. They age out through normal retention, or memwarden doctor . --fix-stale clears the stale ones now. New captures are correct immediately after upgrading.
npm install -g memwarden@0.0.8
memwarden down && memwarden up761 tests · firewall eval 8/8 · published with SLSA provenance.