Skip to content

v0.0.8 — memories describe the change, not the tool

Choose a tag to compare

@saiyam1814 saiyam1814 released this 24 Aug 17:44
· 22 commits to main since this release
765f3c3

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:

  1. 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.
  2. Raw JSON leaked back into facts through error-line extraction.
  3. The OS username leaked into concepts from /Users/<name>/… on every memory — personal data, zero retrieval value.
  4. Escape sequences fused into identifiers (\tisPremiumtisPremium).
  5. 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 up

761 tests · firewall eval 8/8 · published with SLSA provenance.