Claude Code compacted your context. Here is what survived, and what did not.
A long session hits the context limit, Claude Code compacts it, and the conversation keeps going — but not quite the same conversation. The failure is quiet, which is what makes it expensive.
What compaction is
A session that outgrows the model's context window cannot simply continue. Claude Code summarises what came before and carries the summary forward instead of the transcript. That is the correct engineering trade: the alternative is refusing to continue at all.
The summary is good. It is also lossy, and it is lossy in a specific direction — it keeps conclusions and drops the reasoning that produced them.
How it shows up
It re-suggests something you rejected
The rejection was in the part that got summarised away. The reason it was rejected went with it, so the idea comes back looking new.
It forgets a constraint you stated once
"We cannot use that library, licence" survives as a fact for a while and then does not. Constraints stated early in a long session are the most likely casualty.
It loses the shape of a failed attempt
Six things you tried become "several approaches were attempted", which is not enough to stop it trying the seventh identically.
You cannot tell it happened
There is no marker in the answer. The assistant is not aware it forgot, so it answers with the same confidence either way.
What is actually still there
This is the part worth knowing: the full transcript is on your disk. Compaction changes what the model is holding in context; it does not delete the file. Every message, every tool call and every rejected approach is still in the JSONL under ~/.claude/projects/, exactly as written.
So the detail is not gone. It is merely out of reach of the thing that needs it.
Putting it back in reach
An index over those transcripts turns "gone" into "one search away", and — more usefully — lets the assistant do the searching itself rather than asking you to remember what to paste:
> what did we decide about the connection pooler earlier? recall_search finds the exchange in the pre-compact transcript and quotes the reasoning, not just the conclusion
The same applies across the boundary a compact creates. recall_smart_resume reads the whole session from disk, so it reports what was decided and what was left unfinished even when the model's own context no longer contains it.
The habit that helps most
Say decisions out loud, in the session. "We are going with the pooler because prepared statements break in transaction mode" is a sentence that survives being indexed and can be found later by either of you. The same decision left implicit in a diff is not recoverable by anything, before or after a compact.
This is a real limit rather than a marketing point: a classifier can only pick up reasoning that was written down. Nothing recovers what was only ever in your head.
What this does not fix
It does not stop compaction, and it should not. A session that never compacted would simply fail. It also does not make the model's context bigger — recall is a tool call, so the assistant fetches what it needs when it needs it, which is the point.