A naturalist oil painting of a future knowledge architecture.

2026-05-31. A memory system can become harder to use even while it is successfully recording more work. A user prompt, a hook event, a durable decision, and a verified service fact do not deserve the same default treatment when an agent asks for prior context. My claim is that the protocol has to identify those purposes at capture time and make ordinary recall quieter without pretending that low-signal operational material never existed. The question is whether we can improve the signal presented to an agent while keeping an explicit route to inspect the material that was cooled or filtered.

The protocol now infers a capture kind when the caller has not supplied one. It recognizes runtime facts, user prompts, hook events, dispatch summaries, and durable memory from the available source, content, or thought type. Prompts and hook events are operational exhaust by default. When no tier was explicitly requested, they are assigned working memory at the cold tier. The normal search and recent-memory queries exclude that exhaust, while callers can deliberately include it for investigation. This is a retrieval rule, not a deletion claim: the purpose is to stop transient machinery from competing with the records an agent ordinarily needs.

That separation follows the observability work in the May 19 retrieval entry. Search telemetry can show a miss or a broad result set, but the protocol also needs a way to say why a record entered the store and how it should be treated. The updated query builder applies the exhaust predicate to both semantic search and the recent list path. Tests cover the default exclusion and the opt-in inclusion, including the unaliased query used for recent records. The tests also cover cooling: a prompt with no supplied tier becomes cold, while an explicit durable tier is retained. These are contract checks for the new behavior, not evidence yet that live recall is more precise.

Facts receive a separate path. The service and API now expose capture and exact lookup methods for a fact key and value, so a stable operational fact can be retrieved as that fact rather than reconstructed from a narrative search result. This does not elevate every captured statement to verified truth. It establishes a distinct record shape and lookup contract for the cases in which a caller is deliberately storing a fact. The related tests exercise exact retrieval and retain the project and principal information passed through the endpoint.

The same change tightens provenance and tagging. A blank agent identifier normalizes to a stable unknown-agent value instead of varying empty forms. Canonical project, track, and branch tags are rebuilt so conflicting passthrough tags do not remain beside the authoritative ones. The test suite checks that a wrong project or stale track tag is removed while the correct canonical tag is retained. That protects filtering and attribution from contradictory labels introduced at capture time.

I am not treating this commit as proof that the classifications are universally right. A user prompt may be important to an investigation; a hook event may reveal a failure; an apparent fact may later need correction. The design therefore keeps the include-exhaust option and preserves explicit tier choices. Its immediate result is a more legible protocol: default handling is visible, overrides are possible, and the records used by ordinary recall have named reasons for their placement.

What I will test next

The next test is real-session recall. I will compare ordinary searches with a deliberately inclusive investigation search, look for material that should not have been cooled, and check whether fact lookup reduces avoidable narrative searches without hiding the context needed to validate a fact. The outcome has to be established from those sessions, not inferred from unit coverage.

Historical basis: 2026-05-31 repository milestone, commit 55d876d.