The three tiers
Recent, salient, fading — one item, moving between them on its own.
Memory isn't one store with a size limit. It is three tiers with different physics. Where a fact sits decides whether the presence will still know it next week.
Recent — the working window
The latest turns, verbatim, inside the 128k session window. Nothing here is summarised or scored — it is simply present. Recency is unconditional: even a throwaway line is fully known for as long as it is recent. As the window fills, the oldest raw turns leave it — but they don't vanish, they pass to the compactor.
Salient — pinned for good
Anything mentioned more than once becomes a keyword and is pinned to the 100k long-term store. Pinned memory does not decay. It is recalled into the working window whenever an incoming message's keywords match it — so it costs nothing when irrelevant and is simply there when it matters. It leaves only two ways: you forget it by hand, or something contradicts it.
Fading — on a timer
Said exactly once, a fact enters the fading tier with a ~7-day timer. Each day not reinforced, it weighs less in recall; at expiry it is dropped. This is the default fate of most of what is said — and that is correct. The cure for losing something is simple: mention it again before the timer runs out.
How an item moves
| Event | From → To | Trigger |
|---|---|---|
| first mention | — → fading | A new keyword with a 7-day timer. |
| second mention | fading → salient | Repetition is the pin signal. Timer removed. |
| timer expires | fading → gone | No reinforcement within ~7 days. Dropped by the compactor. |
| contradiction | salient → updated | New value replaces old; the keyword stays, its content changes. |
| manual pin | any → salient | You pin it directly — same as repetition, without the wait. |
| manual forget | any → gone | You remove the keyword explicitly. Immediate. |
Recall, not retention
A subtle but central point: pinned memory is not always in the window. It is recalledwhen an incoming message's keywords reach it. So a presence with years of salient memory still reasons over a small, relevant working set — the 100k store is the library, the 128k window is the desk.
This is why route changes are free (see Choosing & switching): memory lives in the tiers, not in the model. The model only ever sees what recall placed on the desk.
keys = keywords(incoming_message)
desk = recent_turns + salient.match(keys) + fading.match(keys)
# desk ≤ 128k; library may be far larger