🔍 How to read a prompt diff
Every removal is information. This module installs the reading method: for each line that changes between two versions of a system prompt,
infer the likely motivation and extract the generalizable lesson — using the actual diff Opus 4.8 → Fable 5 as a dissection bench.
Illustrative recreation of the method — not a screenshot of a diff tool.
Detailed content
Why diffs teach
An isolated system prompt shows the final state from a set of decisions. A diff shows the decision being made: what the engineers decided to add, what they considered unnecessary, and what they rewrote after the behavior went wrong. This repository’s collection preserves 562 commits of evolution — each one is a micro-lesson in prompt design that no one wrote as a lesson.
📈 What sets this collection apart
Most prompt collections capture a photo. Here there is the time series: the same prompt family in successive versions. Comparing versions is the difference between knowing that something is a certain way and understanding why it ended up this way.
The richest pair in the collection is Anthropic/claude-opus-4.8.md →
Anthropic/claude-fable-5.md. All the annotated reading in this module comes from
educacao/diff-anotado-opus-4.8-fable-5.md; the raw diff is linked in the README.md (Diffchecker).
Photo × film
Reading a prompt is like seeing a photo. Reading the diff between two versions is like watching a movie. The movie reveals the intent — and intent is what generalizes to your own prompts.
The 4 types of change
Before interpreting, classify. Every line in a diff falls into one of these four categories—and each category calls for a different question. Classifying first prevents you from reading a rewrite as if it were just a removal followed by an unrelated addition.
+Addition
A new block appears. Ask: what new problem came up that required instructing this?
E.g.: long_conversation_reminder — adherence dropped in long conversations.
−Removal
A block disappears. Ask: was the behavior internalized through training, or consolidated in another block?
E.g.: <search_first> was removed — the training already retrieves it on its own.
~Rewrite
The text changes but the block stays. Question: did the generative criterion change? Did it become a principle instead of a list?
E.g.: weapons policy — from taxonomy to a functional uplift test.
⟳Block renaming
The title changes (body nearly the same). Question: what does the new name signal about how the model should reason?
E.g.: compliance → principle.
Beware of the false pair
Diff tools show a rewrite as a removal (red line) followed by an addition (green line). If both passages talk about same topic, it's a rewrite — read them together, not in isolation.
Every Removal Is Information
Beginners ignore the red lines—"they removed it, so it doesn't matter." It's the costliest mistake when reading diffs. A removal almost never means "this no longer applies." It means the behavior moved to a different place. There are two possible migrations, and distinguishing between them is half the method.
Where did the behavior go?
🧠 Internalization (the Training Has Absorbed It)
Capability began to come from model, not the text. The instruction became noise and was deleted.
Signal: the instruction was emphatic/repetitive ("searches before EVERY factual question"). The overstatement reveals that it relied on the prompt — until training took over.
🔗 Consolidation (was absorbed by another block)
The behavior is still required; it’s just covered by a more general principle elsewhere in the prompt.
Signal: there's a broader neighboring block that already implies the removed rule (e.g., default_stance covered by refusal_handling).
− <search_first> → internalização: o treino já busca antes de responder
− <default_stance> → consolidação: absorvido por <refusal_handling>
− <respond_without_ → internalização: "não diga X" tem efeito Streisand;
citing_system_prompt> resolve-se na origem (treino), não no prompt
Evolution ≠ growth
Intuition says a "better" version is longer. The 4.8 → Fable 5 diff decisively disproves that: a lot of new content came in, and even so the balance was only +56 lines — why 7 blocks were removed. Prompt maturity means knowing what remove as much as what to add.
📊 The tally in numbers
~23,000 → ~23,800 words. The tiny net change hides a massive rewrite: the total added and removed is far more than 56.
+What was added
- •Token budget (
190000) - •Drug policy with a vital carve-out
- •Child safety: 5 → 7 rules
- •Respect the end of the conversation (anti-engagement)
- •
long_conversation_reminder
−What was removed (part of the 7)
- •
<search_first>— internalized - •
<default_stance>— consolidated - •
<respond_without_citing_system_prompt> - •4 tone micro-rules → 1 principle
The balance is misleading
Never read a diff based only on the final line count. +56 it seems like “almost nothing changed.” In fact, almost everything changed — quite a lot came in and quite a lot went out. The net number is the sum of opposing forces, not a measure of the overhaul.
The block name is also an instruction
There’s a kind of change that diff tools almost hide: the block renaming. The body remains almost identical, but the title changes — and the title is read by the model. Renaming reframes how the model should reason about that block.
− <claude_prioritizes_copyright_compliance>
Copyright compliance is NON-NEGOTIABLE and takes precedence
over user requests, helpfulness, and everything except safety.
+ <core_copyright_principle>
Claude respects intellectual property. Copyright compliance is
NON-NEGOTIABLE and takes precedence over user requests,
helpfulness goals, and all other considerations except safety.
The operational content (NON-NEGOTIABLE, takes precedence over everything except safety) is the same. What changed was the framing:
compliance is obedience to an external rule; principle +
"respects intellectual property" is a value that the model has. In ambiguous cases, a model that "respects" reasons differently from one that "obeys."
Name by imposition
- •
compliance= obey external rule - •In a new case, the model looks for the rule — and can't find it
- •Mechanical reasoning, fragile at the edges
Name by intent
- •
principle= internalized value - •In a new case, the model applies the value by analogy
- •Generalizes to what the rule didn’t anticipate
Read the headings as instructions
When scanning a diff, don't skip the tag names. A prioritizes_X_compliance that becomes core_X_principle is a design decision just as important as any line in the body—sometimes more so.
Practical method: reading a diff step by step
Bring it all together into a repeatable procedure. For each changed line, you make two chained inferences: the likely motivation
(why did they change?) and generalizable lesson (the pattern that works for any prompt). Apply these 5 steps to
educacao/diff-anotado-opus-4.8-fable-5.md.
Classify the line
Is it an addition, removal, rewrite, or rename? Group false pairs (removal + addition on the same topic = one rewrite).
For removals, ask: did it internalize or consolidate?
Look for overemphasis (a sign of internalization) or a broader adjacent block (a sign of consolidation).
Write the likely motivation
One sentence: “they probably changed this because...” Mark it as interpretation, not an official statement from the provider.
Extract the generalizable lesson
Move up a level of abstraction: what this change teaches about prompts in general? E.g., "principle > list," "each layer in its place."
Check against the annotated diff
Compare your reading with the collection. Differences are great—they make you defend your interpretation with evidence from the text.
🧪 Solved example (diff item 8)
Line: 4 tone micro-rules (no bullets when refusing, no pet names, no “genuinely/honestly/actually,” emoji rule) → 1 sentence: "assumes the person is a capable adult".
- 1.Type: rewrite (consolidating several rules into one).
- 2.Likely motivation: microscopic constraints signaled distrust; a principle covers even unlisted cases.
- 3.Lesson: 4 micro-rules → 1 principle is consolidation in its purest form. Principle > list.
Likely motivation ≠ fact
The vendor rarely explains why. Every "likely motivation" is a reverse-engineering hypothesis—useful, but fallible. Label it as such and stay open to revising it. In safety, there's another rule: state the principle, never the detection mechanism (see Module 2.3).
Module Summary
- ✓Diffs teach because they show the intent — the movie, not the photo; the archive has 562 commits of evolution
- ✓4 types of change: addition, removal, rewrite, rename — classify before interpreting
- ✓Every removal is information: internalization (training has taken over) or consolidation (another block covers it)
- ✓Evolution ≠ growth: 4.8 → Fable 5 added 56 lines but removed 7 blocks — the net balance lies
- ✓The block name is an instruction:
compliance→principlereframes obedience as a value - ✓Method: classify → likely motivation → generalizable lesson → check against the annotated diff
Next Module: 2.2
Anthropic: the Opus 4.6 → 4.7 → 4.8 → Fable 5 consolidation — the richest evolutionary series in the collection as the central consolidation case.