What it is
Memory v1.5 (PR #196) shipped four numbers and one heuristic that no test can
judge, because what they control is how the radio feels over weeks rather than
anything assertable. The spec records them as starting guesses (§6, "Open
(build-time or by-ear; none blocking)"); this is the pass that keeps them or
retunes them.
The seams, so a future session does not have to hunt:
FACT_FADE_DAYS = 90 — src/memory.ts. A profile line unconfirmed this long
and not [stable] leaves the prompts for profile-faded.md.
COMPACT_EVERY_USER_TURNS = 8 — src/memory.ts. Admitted listener turns,
not turns: a session nobody typed in never folds at all, which is a much
slower cadence than the 100-turn one it replaces.
- The forget floor —
forgetMatches / FORGET_STOPWORDS in src/memory.ts.
Drop stop words, then a line must carry two of the remaining whole tokens —
unless only one survived, in which case that one is honoured on its own.
RECALL_LIMIT = 5 — src/director.ts. How many recalled lines the reply turn
is handed.
What is already covered elsewhere and is not this issue: whether the model
chooses to call recall_memory when it should is stochastic routing, and the
spec routes it to the eval track alongside #98. This issue is about how the
result sounds and how the constants land, not about tool selection.
Spec
specs/spec05/05-01-recall-and-forgetting.md §6 (Open) — the constants and the
forget floor. §3.3 (fade), §3.5 (forget floor), §2.5 (the constants table).
Done when
All four are judged by ear on real use, and each constant is either kept or
retuned in the spec's §2.5 table and in the code:
A "no" on any box becomes its own follow-up issue against the seam named above
— it does not reopen the v1.5 contract.
What it is
Memory v1.5 (PR #196) shipped four numbers and one heuristic that no test can
judge, because what they control is how the radio feels over weeks rather than
anything assertable. The spec records them as starting guesses (§6, "Open
(build-time or by-ear; none blocking)"); this is the pass that keeps them or
retunes them.
The seams, so a future session does not have to hunt:
FACT_FADE_DAYS = 90—src/memory.ts. A profile line unconfirmed this longand not
[stable]leaves the prompts forprofile-faded.md.COMPACT_EVERY_USER_TURNS = 8—src/memory.ts. Admitted listener turns,not turns: a session nobody typed in never folds at all, which is a much
slower cadence than the 100-turn one it replaces.
forgetMatches/FORGET_STOPWORDSinsrc/memory.ts.Drop stop words, then a line must carry two of the remaining whole tokens —
unless only one survived, in which case that one is honoured on its own.
RECALL_LIMIT = 5—src/director.ts. How many recalled lines the reply turnis handed.
What is already covered elsewhere and is not this issue: whether the model
chooses to call
recall_memorywhen it should is stochastic routing, and thespec routes it to the eval track alongside #98. This issue is about how the
result sounds and how the constants land, not about tool selection.
Spec
specs/spec05/05-01-recall-and-forgetting.md§6 (Open) — the constants and theforget floor. §3.3 (fade), §3.5 (forget floor), §2.5 (the constants table).
Done when
All four are judged by ear on real use, and each constant is either kept or
retuned in the spec's §2.5 table and in the code:
things at the right time? A fact that fades too eagerly reads as
inattention; one that never fades reads as a dossier. Check
profile-faded.mdagainstprofile.mdand say which side 90 days errs on.profile.mdimprove at a sensible rate now thatonly listener turns count towards it — or does it go stale because the
listener types rarely?
forget_memorytake what was meant and nothing else? Over-forgetting isthe dangerous direction (there is no undo, by design): report the request
you typed and the
memory.forget "..." -> N rows, M linesline from.dev/dev.log.land like remembering, or like a lookup being read out? Five hits may be
too many to be a memory.
A "no" on any box becomes its own follow-up issue against the seam named above
— it does not reopen the v1.5 contract.