Skip to content

v4.7.1 — B12 was the wrong shape

Choose a tag to compare

@gitayg gitayg released this 29 Aug 19:18
· 92 commits to main since this release

B12 said "add a SessionStart hook". Two things were wrong with that.

The model it pointed at was the wrong one. That store serves its memory alphabetically because it keeps no timestamps — no ranking, no recency, no selection at all.

And the gap was misdiagnosed as retrieval. Not everything learned is a requirement: "the build breaks unless you run X first" is nobody's obligation, and forcing it into spec.md corrupts the one thing that file is for. There is nowhere for it to live. That is a storage gap.

So: a committed store in the repo, not a per-user memory — every objection to memory (per-user, uncommitted, dies on clone, disagrees silently) is an objection to it being outside the repo, and putting it inside removes all four.

What that then requires is the part worth writing down. A store that can contradict the spec without going through intake is a side channel into the spec. So it sits below the spec and cannot outrank it: a learning informs, never obligates; one that contradicts an active requirement is a finding routed through intake, the same road Stage 9 uses for code-versus-spec drift; and one that turns out to be a real obligation graduates to an R id and stops being a learning.

Two rules, both about not trusting yourself: unverified until independently corroborated — the same dispatch can never confirm its own learning — and dormancy that stops serving without deleting, with a missing timestamp never read as infinitely old.

One thing Productizer can do that a free-text store cannot: a learning may cite R14, and because ids are permanent, "this learning is about a requirement that has since been superseded" is mechanically detectable by the check drift-reverse.sh already runs over code.