Tracing Claude Code's "the cache breaks" back to primary sources — a Reddit bug report, an official postmortem, and two arXiv papers
Introduction
Use an AI coding assistant for long stretches and you may start to feel that “the longer the conversation, the more the quality drops”. The sensation itself is not unusual; search and you find the same complaint in quantity. “The cache breaks”, “the context collapses” — read only the headlines and it reads as a single phenomenon, but open them one at a time and you notice that who is saying it, and how far it has been corroborated, are nowhere near uniform.
This article is a record of a method for handling that non-uniformity without flattening it. Rather than rushing to a conclusion, grade the sources into four tiers and cross-check while keeping the grading intact. The subject is not the conclusion “was there a bug or not”, but how the sources are handled before you get there.
Grading sources into four tiers
Before beginning to corroborate anything, I fixed the weight of each kind of source.
| Grade | Content | How it is handled |
|---|---|---|
| Official primary | Anthropic’s own documentation and engineering blog | Weighted most heavily. But always confirm the generation in question (model, version) |
| Primary, but the vendor is not involved | GitHub issue bodies, practitioners’ comments | A genuine observation of something that happened, but not a fact Anthropic has confirmed. May be held in dispute |
| Academic | arXiv papers | Numbers carry weight, but first confirm that the target model, language, and task match the current situation before taking any figure |
| Tertiary | Personal technical blogs, second-hand explainers | Useful for the mechanism (an outline of how things work), but take no numbers from them |
There is a reason for fixing that table first. For the same sentence “the cache breaks”, a different grade means different handling. The second tier is the treacherous one: to the poster it is an unmistakably first-hand observation, yet on the single point that Anthropic has not confirmed it, its reliability is an entirely different thing from official primary. Blur that and rumour slips in wearing the face of fact.
The starting point — a highly-upvoted Reddit post
The investigation started from a Reddit post with more than 900 upvotes. The poster claimed to have disassembled the executable and pointed at two bugs. The technical claims themselves are not the subject here. What matters is how the post should be handled afterwards.
The post carried an addendum by the poster.
Issues linked in the description have been closed as resolved. Unfortunately I can’t verify those claims as I’m away from my PC.
The comments also quoted a denial from an Anthropic employee.
Confirming this post isn’t the problem.
The poster reserves judgement — “can’t verify” — and someone from Anthropic states “this isn’t the problem”. At that point I checked the actual state of the GitHub issues the post named. Both corresponding items had been closed as resolved (2026-04-04 and 2026-04-01).
Only with all three — the poster’s own reservation, Anthropic’s denial, and the issues’ measured state — can you decide not to adopt this post as fact. The figure of 900-plus upvotes was not used as evidence. A count of upvotes shows that many people suspect the same symptom; it does not show that the explanation of its cause is correct.
Reading directly a primary-source issue that the vendor has not touched
Separately from the Reddit post, I opened another GitHub issue directly. Reading the body and all the comments, the mechanism claimed was this:
Because many of CC’s own built-in reminders carry dynamic values … the smoosh produces different byte output turn-over-turn. The resulting byte drift in historical user messages breaks the prompt cache prefix …
This issue was CLOSED. But checking why it was closed gave an automatic comment:
Closing for now — inactive for too long.
That is not “CLOSED because it was fixed”. A bot simply closed it because there had been no activity for a while. The same word “CLOSED” means something entirely different from the two above (closed as resolved). Summarise without drawing that distinction — “the issues are resolved” — and you misread a claim that was merely left alone as one that has been dealt with.
On this issue the reporter had written, repeatedly:
Still zero @anthropic.com green-badge engagement.
The claim is specific and shaped so that it could hit our own operations directly. But the grade stays “primary, but the vendor is not involved”, and there is no confirmation from Anthropic itself. The conclusion was neither “rejected” nor “adopted” but held, in dispute.
Going to the official postmortem — but the generation differs
Next I read a postmortem published by Anthropic itself. On reports of quality degradation, the official text is explicit:
To state it plainly: We never reduce model quality due to demand, time of day, or server load. The problems our users reported were due to infrastructure bugs alone.
Three causes were explained concretely: a server-routing error, corrupted output, and a compiler bug. This is a genuine official primary source, and a precedent in itself for “quality degradation is real, and its cause was on the infrastructure side”.
Confirming the model generation in question, though, showed it predates the current one. Even the most highly graded source cannot be applied to the present as it stands when the generation differs. So here I deliberately separated the fact “there are real cases of quality degradation” from the inference “the cause applies to my environment too”.
From a tertiary source, take only the mechanism
Partway through corroboration I also read a personal technical article that diagrammed how the cache works. That article carried its own disclaimer at the end (the original is in Chinese).
数据来源说明:本文价格和机制数据来自多个 AI 的网络调研结果交叉验证,部分数据可能随时间变化,请以各家官方文档为准。
The gist: the pricing and mechanism data in the article come from cross-checking several AIs’ web research, and each vendor’s official documentation should be taken as authoritative. The author states outright that it is not a primary source.
From that article I took only the outline of the mechanism — that the cache is layered “tools → system → messages”, and a change upstream invalidates everything downstream with it. The price estimates and multipliers lined up alongside it I did not take. A tertiary source is useful as a map of how something works; it is not corroboration for a number.
Re-reading the official documentation overturned several premises
Once corroboration was broadly done, I re-read the official cache specification I had supposedly read before. Reading it again in the light of this particular suspicion, there was a sentence I had previously missed.
Skills, commands, agents, hooks, LSP servers, monitors, and themes never invalidate the cache: anything they add to the request is appended after the existing conversation, so the next request pays for the new content but still reads everything before it from the cache.
The very suspicion this investigation had started from — “maybe the more hooks there are, the more the cache is being broken” — was denied by an official primary source. Hooks and extensions are appended and do not break the cache. What breaks it, the text states explicitly, is only a fixed set of operations the documentation enumerates: switching models, changing MCP server connections, compacting the conversation.
Even documentation you have read once yields a sentence you failed to pick up when you re-read it holding a different suspicion. That was the largest course correction in this investigation. “Read it” and “read it well enough to cross-check against it” are two different things — confirmed the hard way.
Two academic papers — do not import numbers from a different generation, language, or task
Last I went to two arXiv papers. One measured a model of a generation close to the current one against real session data, and reported:
Opus 4.6 … recall drops from 99.7% when such an attack is inserted in a 100K transcript to 69% when the same attack is inserted in an 800K transcript.
Both the model and the dataset are close to current, so this figure can be brought in as a reference value. The other was about three years old, covering a group of models of a different generation, language, and task. It showed the same shape — that information sitting in the middle of a long context is harder to pick up — but its numbers (absolute accuracy figures) were not brought into the current generation. All I took was the fact that the shape it showed reproduces across two papers and several generations.
The route back through the sources
start: Reddit post ↑955 (primary but vendor not involved; the poster later added "can't verify")
│
├─▶ measure the state of the corresponding GitHub issues
│ └─ both CLOSED as "resolved" (2026-04-04 / 2026-04-01)
│ └─ an Anthropic employee's denial also confirmed
│ └─ ⇒ not adopted as fact (settled)
│
├─▶ read another GitHub issue directly, as a primary source
│ └─ check why it is CLOSED ── not a fix but an automatic close for "inactivity"
│ └─ ⚠️ neither rejected nor adopted; held in dispute
│
├─▶ go to the official postmortem (Anthropic itself, official primary)
│ └─ confirm the generation ── earlier than the current one
│ └─ ⇒ received as a precedent, but application to the present is held
│
├─▶ organise the mechanism only, from a tertiary source (a personal technical blog)
│ └─ confirm the source's own disclaimer (uncorroborated secondary research)
│ └─ ⇒ refer to the outline of the mechanism only; take no numbers
│
└─▶ "re-read" the official primary source ★ the premise is overturned here
└─ find the sentence "extensions never invalidate the cache"
└──(return edge)──▶ withdraw the starting suspicion itself
│
└─▶ corroborate numbers against two academic papers
├─ generation close to current ── take the numbers
└─ three years old ── take the shape only (no numbers)
The conclusion, with the grading intact
What was left in hand at the end was not “a solved mystery” but a list separating what had been settled from what remained in dispute.
| Claim | State |
|---|---|
| The two bugs the Reddit post named | Not adopted as fact (settled on three points: the poster’s reservation, the official denial, the measured issue state) |
| The dynamic-reminder entrainment claimed by another GitHub issue | Held in dispute (neither rejected nor adopted) |
| The suspicion that extensions (hooks and the like) break the cache | Denied by an official primary source (the very starting point of this investigation was withdrawn) |
| The “shape” whereby information in the middle of a long context is harder to pick up | Reproduction confirmed across two papers and several generations (numbers used per generation) |
Even what looks like a primary source needs checking each time: who published it, what point in time it describes, and whether you have settled for having read it once. What worked hardest this time was not adding new sources, but re-reading official documentation I had supposedly read already, holding a different suspicion.
By the end of the investigation, the starting suspicion itself had vanished. It was settled not as “I looked and found nothing” but as “the reason to look no longer exists” — not a loss, but the result of never letting go of the grading.