anthropics / anthropics/claude-code

[BUG] German output: the model coins compound nouns that do not exist and uses real words in meanings they do not have; corrections do not survive the turn, the session, or a written rule (Opus, Fable, Sonnet)

Open
#94,793 0 comments 0 reactions 0 assignees View on GitHub
area:model bug has repro platform:linux platform:vscode
Dominant language
Python
Stars
145k
Forks
23.1k
PR merge metrics
PR metrics pending

Description

### Preflight Checklist

- [x] I have searched [existing issues](https://github.com/anthropics/claude-code/issues?q=is%3Aissue%20state%3Aopen%20label%3Abug) and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code

### What's Wrong?

When Claude writes German, it produces words that do not exist in the language, and real German words used in meanings they do not have.

**This happens everywhere, not in one kind of text.** Technical explanations, non-technical prose, chat answers, commit messages, documentation, articles, letters, and the translation files that ship German strings to end users. It is not a localisation defect and not a translation defect: it is how the model writes German.

> **60 of the 338 incident notes I currently keep — 18% — are about German word choice. It is the single largest failure class of this product for me, and the real number is higher: I stopped reporting many of them.**

### 1. Invented compound nouns

German joins nouns freely, so an invented compound is grammatically perfect, transparent, and looks like a word that exists. None of these is a German word.

| Written by the model | Literally | What it should have been |
| --- | --- | --- |
| `Wartezeitgeber` | waiting-time-giver | `Timer` |
| `Wertbänder` | value bands | "der Prozentsatz hängt vom Preis ab, in fünf Stufen" |
| `Kalenderrisiko` | calendar risk | "das kann den Termin verschieben" |
| `Zustandsauszeichnung` | state marking | `data-state` |
| `Blockregel` | block rule | name the rule |
| `Einzugsweg` | collection path | "wie das Geld eingezogen wird" |
| `Zeichenverwaltung` | sign administration | `Token`-Verwaltung |
| `Zeichenschicht`, `Zeichenausstellung`, `Zugriffszeichen`, `Anmeldezeichen` | sign layer / sign issuing / access sign / login sign | `Token` |
| `Einwurffläche` | throw-in area | Upload-Bereich |
| `Merkmalsliste`, `Funktionsmerkmal` | characteristic list / function characteristic | `Feature` |
| `Rückmeldeschleife` | feedback loop | `Feedback` |
| `Zwischenschicht` | intermediate layer | `Layer` |
| `Venn-Karte` | Venn card | Venndiagramm |
| `Blasenbild` | bubble picture | Bubble Chart |
| `Baugraph`, `Aufgabengraph` | build graph / task graph | `Task-Graph` |
| `Eröffnungsband` | opening band | `Hero` |
| `Bauabbild`, `Maschinenabbild` | build copy / machine copy | `Image` |
| `Modellbehälter` | model container | der Container des Modells |
| `Gruppenmanifest` | group manifest | `Manifest` |
| `Prüfstrecke` | checking stretch | `Pipeline` |
| `Vorhabensliste` | intention list | `Backlog` |
| `Eindringtest` | intrusion test | `Penetrationstest` |
| `Rundum-Beurteilung` | all-round assessment | `360°-Feedback` |
| `Gutfall`, `Schlechtfall`, `Leerfall` | good case / bad case / empty case | positiver, negativer und leerer Testfall |
| `Oberflächenformen` | surface forms | — the sentence, not a noun |
| `Deckelung` | capping | die Begrenzung |
| `Vorlauf-Fehler` | lead-time error | the error in the setup step |
| `Betriebsingenieure` | operating engineers | `SRE` |
| `Sicherheitsrichtlinienwerk` | security guideline works | `Security Policies` |
| `Storage-State-Schutz` | storage state protection | — the sentence |
| `Standard-Karte`, `Basis-Element`, `Kastenmodell` | standard card / base element / box model | `Card`, `Component`, `Box-Model` |
| `Zurücklesen`, `Lesekontrolle` | reading-back / reading check | — a verb: "ich lese den Text noch einmal" |

Measured on 2026-08-31 and 2026-09-15: `hunspell` with the Swiss German dictionary accepted six of eight such inventions as correct German, while flagging the ordinary words `Arbeitszeit` and `Behandlung` as errors. The same construction in English produces "waiting-time-giver" and is audible at once. In German nothing warns.

### 2. English terms translated into German words nobody says

For these, the German technical language *is* the English word. The translation invents a second name for a thing that already has one.

| Written by the model | What German speakers say |
| --- | --- |
| `Abbild` | Image |
| `Stapel` | Stack |
| `Zeichen`, `Zeichensatz`, `Zeichenfeld` | Icon, Font |
| `die Marke` | Logo |
| `Bauteil`, `Baustein`, `Komponente` | Component |
| `Prüffall` | Test |
| `Rahmen` | Layout |
| `blaues Band`, `Bänder` | Hero |
| `Warteschlange` (for `queue` in the code) | Queue |
| `Kette`, `Kettenglied` | Chain, Link |
| `Taktschlag`, `Herzschlag`, `Puls` | Heartbeat |
| `Wache` | Watch |
| `Rückfallwert` | der Wert, der gilt, wenn nichts gesetzt ist |
| `strukturierte Nachbesprechungen nach Störungen` | Post-Mortems |
| `Ablaufdiagramm zur Vorfallsbehandlung` | Incident Management |
| `containerisierte Cloud-Infrastruktur` | Kubernetes auf AWS |

### 3. A correct German word existed, and the model used a wrong one instead

**This is the important group, because it shows the rule is not "never translate".** Some of these terms translate perfectly well into German and are understood. The model still picked a word nobody uses.

| Written by the model | The correct German word | Not |
| --- | --- | --- |
| `Einwerfen` ("to post into a letterbox") | **hochladen** | the button in the same product already said `Dokumente hochladen` |
| `Brutstätte für Fehler` | **Fehlerquelle** | a breeding site |
| `Wächter` for a checking program | **Überwachung** | a human night watchman |
| `Prozessor` for a payment company | **Zahlungsverarbeiter**, or `Payment-Prozessor` | a CPU |

What decides is not whether a German word exists but **whether that word is what people actually say for that thing, in that context.** That is a question about usage, and it cannot be answered by a table.

### 4. Real words used in meanings they do not have

| Written by the model | What the word actually means | What was meant |
| --- | --- | --- |
| `Topf` | a cooking pot | a directory |
| `tragen` | to carry a load | to include |
| `Register` | an alphabetical index at the back of a book | a list of files |
| `Instanz` | an authority, a court of appeal | the running deployment |
| `serviert` | serves food at a table | delivers a file |
| `schlägt alles` | beats everything | which rule is evaluated first |

No word list and no spell checker can catch these: the meaning is wrong, not the string.

### 5. Verbs that require a person, given to things

- "Die Regel **erreicht** mich" — the rule reaches me
- "Die Wache **sieht** den Heartbeat" — the guard sees the heartbeat
- "Das Abbild **trägt** die Korrektur" — the image carries the correction
- "Der Test **weiss**, dass …" — the test knows that

A script reads a file, writes a line, exits with a code. It does not see, watch, reach anybody, know or want.

### 6. Images instead of the names of things

In a report where every element has a name in the code and on the screen:

| Written by the model | The actual name |
| --- | --- |
| `der Weg hinein` | Login-Button |
| `der Weg hinaus` | Logout-Button |
| `die Maske` | Login-Dialog |
| `die Werkzeuge des Rahmens` | die Icons im Header |
| `ein geborgtes Bild` | — the sentence |

The reader was the owner of that software. He answered that he did not understand his own report.

### 7. The same failure in English

This is not a German problem. The model's English carries the same defects, and the user of this report has said so about texts written for third parties.

- Headings in an architecture document: *"The wallet is read from the money downwards"*, *"from the money to the address"*, *"The money lies still"* — the reader asked what they were supposed to mean.
- Filler words that survive an explicit ban: "honest", "honestly", repeatedly, over months.
- The negation-first construction *"It is not X. It is Y."* used to state a plain fact, so the sentence first denies something nobody claimed.
- Specialist vocabulary used where plain words exist. **This report is itself an example:** an earlier draft of it said *"This holds in every situation, for every audience and in every register."* — "register" there is linguistics jargon, and the reader rightly asked what it was supposed to mean. **The bug report about the bug contained the bug.**

#77136 and #77432 report the English side independently.

### 8. Also in German output: filler, gendered forms, and the negation-first construction

- `ehrlich` as a filler, returned three separate times over four months under an explicit ban.
- Gendered participle forms — `Studierende`, `Mitarbeitende`, `Lesende`, `Mitbewerbende`, `die bewerbende Person` — written into a CV and four other documents under an absolute ban on them.
- `nicht X, sondern Y` and its variants, including the form with six words of subordinate clause between the two halves.

### Why it happens

**The model writes what it can generate instead of what is spoken.** German allows any two nouns to be joined, so an invented compound carries enough probability to feel correct while occurring nowhere in real usage. A phrasing that was never in the training data does not exist as an expression; one that occurred only rarely is not in common use. The model treats its own ability to produce a phrase as evidence that the phrase exists. It is not.

**Missing context is the second half of the same defect.** `Prozessor` for a payment company is wrong; `Zahlungsverarbeiter` is right, and so is `Payment-Prozessor` — but only when the sentence has said which company and what it does. The generated text regularly compresses a statement to its verdict and leaves out what the reader needs to place it.

**A third source, measurable: loan translation from the model's own English context.** My rule file is written in English, because it addresses the model. It uses "carry" 46 times as a standing verb ("every sentence carries a fact") and calls an appendix "the post-mortem register". In the German sentence those became `tragen` and `Register`, which mean something else in German. The same path produced `serviert` from "to serve", `Instanz` from "instance", and `Zeichen` from an English source comment reading "the mark" — while the file's own identifier beside it said `logo`.

### Corrections do not persist

| Level at which the correction was made | What happened |
| --- | --- |
| Corrected in the turn | The same class returned two turns later with a different word |
| Written into `CLAUDE.md` as an absolute rule | Loaded into every context window, broken the same day |
| Written into a skill that loads on every German text, with a table naming the exact word | Broken two paragraphs below that table, **inside the skill's own prose** |
| Two independent sessions on 2026-09-16 | Different projects, different working directories, no shared context except the model and the rule files — both committed the same class of error on the same day |
| One single message | The model corrected `tragen` and misused `Register` in the same breath |
| The word `Zeichen` | Returned on 2026-09-07, on 2026-09-12 and again on 2026-09-14 |
| The word `Stapel` | Returned on 2026-09-12 with "for the thousandth time" |
| The word `Wächter` | Stood in fifteen separate incident notes before any rule named it |

### Measured, from the git history of my configuration repository

| | |
| --- | --- |
| Incident notes ever committed | **353** |
| Present today | 338 |
| Deleted again in a July cleanup | 15 |
| Written in July 2026 | 60 |
| Written in August 2026 | 117 |
| Written in September 2026, to the 16th | 176 |
| Of those present, about German word choice | **60 (18%)** |

**The real number is higher than 353.** These are only the incidents that were written down; many were corrected in conversation and never recorded. My rule file itself had to be cut from 792 lines to 413 on 2026-08-30 because the accumulated rules had grown too large for the context window.

By month, the share of incidents that are about German word choice:

| Month | Of this class | All | Share |
| --- | ---: | ---: | ---: |
| 2026-06 (record begins on the 17th) | 1 | 5 | — |
| 2026-07 | 2 | 40 | 5% |
| 2026-08 | 25 | 127 | **20%** |
| 2026-09 (to the 16th) | 32 | 166 | **19%** |

### What changed in August

The models in use on this machine, read out of the session transcripts:

| Date | Event |
| --- | --- |
| 2026-06-23 | `claude-opus-4-8` enters use |
| 2026-07 | class share: **5%** |
| **2026-08-22** | **`claude-opus-5` enters use** |
| **2026-08-24** | **`claude-fable-5` enters use** |
| **2026-08-28** | **`claude-sonnet-5` enters use** |
| 2026-08 | class share: **20%** |
| 2026-09 | class share: **19%** |

The break coincides with the arrival of the 5 generation, within one week, across all three families. I state this as a measured coincidence in time and not as a proven cause: July carried only 40 incidents in total, which is a small base.

#77136, opened 2026-07-13, points one step earlier and names Opus 4.8 as the version where the writing degraded, with Opus 4.5 as the last good one.

### The filter arms race, measured

I built a `Stop` hook that inspects every answer, pinned by 1037 test cases. Since 2026-08-22 that one file has **36 commits**, and almost every one of them adds a word that had just been rejected: `Bauteil`, `Wächter`, `Venn-Karte`, `Stapel`, `Zeichen`, `Band`, `Marke`, `Abbild`.

It does not work, and the failure is measured. On 2026-09-14, against the five sentences rejected that day, the pattern that had been built for that exact word two days earlier **let four of five through** — because it listed the forms seen yesterday. The set of possible wrong words is unbounded.

**This has to be fixed in the model.**

### What Should Happen?

> **Language is convention. The model must never write outside it.**

A word means what speakers have agreed it means. A word the model assembles itself stands outside that agreement, so nobody can look it up and nobody understands it — not the expert, who knows the real term, and not the layperson, who has no source to check. This holds for every kind of text and every reader: technical and non-technical, chat answers, documentation, articles, letters, and the German strings that ship to end users. **There is no situation in which inventing a word is acceptable.**

### The five absolute rules

#### 1. Never join words into a new compound

A compound may be used only when it exists as a finished entry in the dictionary **and** is spoken in everyday language: `Zahlungsplan`, `Rechnungsbetrag`, `Arbeitszeit`.

#### 2. Never use a word that is not in the dictionary

In case of doubt it is not one.

#### 3. Never use a word in a meaning it does not have

A dictionary word in the wrong meaning is exactly as wrong as an invented one — and worse, because a spell checker confirms it.

#### 4. Never write an image, a comparison or a metaphor

An image requires the reader to know the field it is taken from and to make the connection himself, and that connection exists only inside the model. `Brutstätte` for where errors arise, `schlägt alles` for which rule is evaluated first, `der Weg hinein` for a login button, "das Geld liegt still" in an architecture document — each sounds vivid and states nothing.

What belongs there is the mechanism: **who does what, in which order, with which result.**

#### 5. Never use a construction that was rare in the training data

This is the mechanism behind the four rules above and the single most important point in this report.

> **A phrasing that was never in the training data does not exist as an expression.**
> **A phrasing that occurred only rarely is not in common use.**

A rare construction carries enough probability for the model to feel right, and it is foreign to every reader. The model must prefer the form that occurs **most** frequently for that meaning, in that language, in that kind of text — and it must treat its own ability to produce a phrase as no evidence whatever that the phrase exists.

**Generability is not existence. Frequency is the criterion.**

### The rule is not "never translate" — it is "use what people say"

Some English terms have a perfectly good German word that everyone understands, and the model still picks a wrong one:

| The model wrote | The correct German word |
| --- | --- |
| `Einwerfen` | **hochladen** |
| `Brutstätte` | **Fehlerquelle** |
| `Wächter` | **Überwachung** |
| `Prozessor` (for a payment company) | **Zahlungsverarbeiter**, or `Payment-Prozessor` |

Other terms have no German equivalent that anyone says, and there the English word *is* the German technical language: `Image`, `Stack`, `Component`, `Icon`, `Logo`, `Token`, `Commit`, `Deployment`, `Queue`, `Guard`, `Bucket`, `Test`, `Layout`, `Hero`, `Heartbeat`, `Feature`, `Pipeline`, `Backlog`.

There is no rule that separates the two lists. Only **usage** does — which word people actually say for that thing, in that context. Sometimes the German translation is right and understood; sometimes it is absurd. `Stellvertreter` for `Deputy` is fine. `Bauteil` for `Component` is not. The difference is not derivable; it is learned.

### Context is part of the requirement

A word can be correct and the sentence still unusable, because the context that makes it readable is missing. `Payment-Prozessor` is a fine word once the sentence has said which company it is and what it does; on its own it reads as a CPU. Generated text regularly compresses a statement down to its verdict and leaves out the figure, the file, the date or the actor that the reader needs in order to place it.

**Every conclusion must name what it rests on.** What is obvious to the writer is invisible to the reader.

### Where a word comes from

Writing means copying from a source. Every noun that is not an everyday word must have one, and these are the only admissible answers to "where have I read this word?":

| What is being named | Where the word comes from |
| --- | --- |
| A thing in the software | the identifier in the code — `heartbeat.py` is a Heartbeat, `--watch` is a Watch |
| An action in the product | the label on the control, looked up in the translation files — the button says `Dokumente hochladen`, so the word is "hochladen" |
| A technical term | what practitioners of that field actually say |
| A component or project term | its own name, in its own language — `Layout` stays `Layout` inside a German sentence |
| A thing the model introduces itself | the identifier it just chose — `data-state`, `--state` |
| The model's own work | a verb in a sentence: "I read the file again" |
| Behaviour the model wrote | a sentence with subject and verb: what the code does |

**"It sounds right" is not on that list**, because in German every grammatically correct compound sounds right.

### Where the word is missing, write the sentence

Not a new noun, but who does what:

| Instead of | Write |
| --- | --- |
| `Brutstätte für Fehler` | in langen Sätzen entstehen die Fehler |
| `Wertbänder` | der Prozentsatz hängt vom Preis ab, in fünf Stufen |
| `Kalenderrisiko` | das kann den Termin verschieben |

A sentence with a subject and a verb cannot be invented unnoticed — it is immediately audible that nobody speaks that way. A noun can, because every German compound is grammatically correct.

### Seven rules that follow from the same principle

1. **A name is never translated.** A component keeps its own name, in its own language, inside a German sentence.
2. **The model must not translate its own English context into German.** The system prompt, the rule files and the code comments are English. Rendering their vocabulary word by word is the single most frequent source of the wrong word.
3. **Repetition of the same name is correct**, and the wish to avoid it is what causes the invention. A directory is a `Verzeichnis` every time, including the third time in the same paragraph.
4. **A verb that requires a person is never given to a thing.**
5. **The model's own work and the behaviour it just wrote have no technical name.** They are said as a verb in a sentence.
6. **A heading is where the invention appears first**, because a heading compresses a section into few words. So is any generalising sentence — and a generalising sentence is deleted, not repaired: the concrete sentences below it already said it.
7. **When one wrong word is found, the whole body of work is searched for the stem.** A word once used propagates itself so the text stays coherent, and that consistency hides it. Behind one reported word there were 24 more in five files; behind another, a hundred occurrences in one document.

### A correction must hold

When a word or a class is rejected in a session, **the class** stays out of the rest of that session — not merely that one string. An instruction written into `CLAUDE.md`, into a skill, or into the model's own memory must govern the behaviour it describes.

### Why a table, a dictionary or a filter cannot be the answer — and what can

**This cannot be solved mechanically. There is no general rule and no script that can check it.** Five approaches were tried here and every one failed, for reasons that are measured rather than assumed:

| Approach | Result |
| --- | --- |
| A word list or regex in a guard | Catches only strings already rejected once. That one file has 36 commits since 2026-08-22, almost all adding a word returned the day before. Measured on 2026-09-14 against five newly rejected sentences: four passed through. The set of possible wrong words is unbounded. |
| A spell checker | `hunspell` with the Swiss German dictionary accepted `Wartezeitgeber`, `Blockregel`, `Zustandsauszeichnung`, `Wertbänder`, `Kalenderrisiko` and `Einzugsweg` — six of eight inventions — while flagging the ordinary words `Arbeitszeit` and `Behandlung` as errors. |
| Reading the dictionary's own word list | Same result, same reason: it checks whether the parts exist, not whether the word is spoken. |
| A term table mapping wrong to right | Cannot be completed, and it is wrong in principle: `Stellvertreter` for `Deputy` is fine, `Bauteil` for `Component` is not, and no rule separates them. |
| Writing the rule into `CLAUDE.md` or into a skill | Written there, loaded into every context window, quoted back correctly by the model, and broken the same day — repeatedly, over four months. |

**And this is exactly what a language model is trained for.** Deciding which word is said for which thing in which context is a question about usage, and usage is what training on real text teaches. The question this report asks is therefore:

> **Why does the model not restrict itself to the words and constructions it actually saw in training? Then they would at least not be plainly wrong.**

The answer must come from training on real German text — and on real English text, because the same defect appears there. Dictionaries, tables, guards and rule files are workarounds, and they have all been tried and failed.

### Error Messages/Logs

```shell
Words rejected by the user, collected from the incident record.
Left: what the model wrote in German. Right: what it means, or what it should have been.

INVENTED COMPOUNDS (accepted by hunspell as correct German)
Wartezeitgeber "waiting-time-giver" -> Timer
Wertbaender "value bands" -> the specific figure
Kalenderrisiko "calendar risk" -> name the risk
Zustandsauszeichnung "state marking" -> data-state
Blockregel "block rule" -> the rule, named
Einzugsweg "collection path" -> how the money is collected
Pruefall "check case" -> Test
Rueckfallwert "fallback value" -> the value that applies if nothing is set
Zeichenverwaltung "sign administration" -> Token management
Einwurfflaeche "throw-in area" -> upload area

TECHNICAL TERMS TRANSLATED AWAY (German keeps the English term)
Abbild -> Image
Stapel -> Stack
Zeichen -> Icon
Bauteil -> Component
Stellvertreter -> Deputy
Rahmen -> Layout
Waechter -> Guard
Topf -> Bucket (and the thing was a directory, not a bucket)

REAL WORDS IN A MEANING THEY DO NOT HAVE
Topf a cooking pot -> Verzeichnis (directory)
tragen to carry a load -> einschliessen (to include)
Register an index at the back of a book-> Liste (list)
Prozessor a CPU -> the payment company
Brutstaette a breeding site -> where the errors arise
Einwerfen to post into a letterbox -> hochladen (to upload)
schlaegt alles "beats everything" -> which rule is evaluated first

VERBS GIVEN TO THINGS
"Die Regel erreicht mich" the rule reaches me
"Die Wache sieht den Heartbeat" the guard sees the heartbeat
"Das Abbild traegt die Korrektur" the image carries the correction

SPELL CHECKER MEASUREMENT (2026-08-31 and 2026-09-15)
hunspell, Swiss German dictionary
accepted as correct: Wartezeitgeber, Blockregel, Zustandsauszeichnung,
Wertbaender, Kalenderrisiko, Einzugsweg
6 of 8 invented words passed
flagged as errors: Arbeitszeit, Behandlung (both ordinary German words)

GUARD MEASUREMENT (2026-09-14)
Stop hook with a pattern built after the previous incident with the same word
measured against the 5 sentences rejected that day: 4 of 5 passed through
reason: the pattern covered the forms seen yesterday, not today's
```

### Steps to Reproduce

The failure is non-deterministic per sentence and reliable per session. It appears in **every** kind of German text, not only technical ones.

### Long-form reproduction

1. Configure `CLAUDE.md` so the conversation language is German, and add an explicit rule: no invented words, no compounds that are not in a dictionary, use the words German speakers actually use, no metaphors.
2. Work in German for two to three hours on anything: a code review, a written analysis, an article, a letter, a set of UI translation strings, a plain conversation.
3. Read every noun in every German answer and ask whether a German speaker says that word for that thing.
4. Correct each one explicitly and continue working.

**Observed:**

| | |
| --- | --- |
| First invented or misused word | within the first hour |
| After an explicit correction | the same class returns within a few turns, with a different word |
| After writing the rule into `CLAUDE.md` | no change in rate |
| Over four months | 60 written-up incidents of this class, and many more not written up |

### Three short reproductions that produced the examples above

**A.** Ask, in German, where Claude Code stores its sessions on disk.
→ The answer called those directories `Topf` — a cooking pot — three times.

**B.** Ask, in German, in which project a Docker build defect should be fixed.
→ The answer used `Abbild` four times for the Docker image, although the loaded skill lists `Abbild | Image` in its own term table.

**C.** Ask, in German, for the landing-page copy of a product where users upload documents.
→ The text said `Sie werfen Ihre Dokumente ein` — "you post them into a letterbox" — and the same invented word then spread into the onboarding text, the empty-state text, the feature list, the README, the architecture document, the code comments, the test names and a CSS class. The button in that product had said `Dokumente hochladen` from the first day.

A and B happened on 2026-09-16, in two independent sessions, in different projects, within the same hour.

### Claude Model

Opus

### Is this a regression?

Yes, this worked in a previous version

### Last Working Version

Model regression, not a CLI version. On this machine the break falls in August 2026, in the week the 5 generation entered use: claude-opus-5 on 2026-08-22, claude-fable-5 on 2026-08-24, claude-sonnet-5 on 2026-08-28. The class of incidents went from 5% of all incidents in July to 20% in August and has stayed there. Before that, claude-opus-4-8 had been in use since 2026-06-23. #77136 points one step earlier and names Opus 4.5 as the last good model.

### Claude Code Version

2.1.261

### Platform

Anthropic API

### Operating System

Ubuntu/Debian Linux

### Terminal/Shell

Other

### Additional Information

### Related reports in this repository

Several describe this exact behaviour and are closed as *not planned* or *stale* while it continues. **There is currently no open issue covering the model's German prose.**

#### Word choice and prose quality in the model's own output

| Issue | Language | What it reports | State |
| --- | --- | --- | --- |
| #85432 | German | `Gate` → `Zaun`, `Policy` → `Politik`, `Root` → `Wurzel`; the mistranslations enter memory, documentation and summaries and come back as project vocabulary | **Closed, not planned**, `stale`, 2026-08-10 |
| #94712 | French | Invented verb–preposition collocations, vocabulary drifting over 40+ occurrences, corrections that do not survive the session | Open, `area:model`, 2026-09-16 |
| #77136 | English | Invented jargon presented as fact, forced metaphors, negation-first construction. Opus 4.7, 4.8, 5.0 and Fable 5 | Open, `area:model`, 2026-07-13 |
| #77432 | English **and** German | A history professor reports documented rules confirmed and then not applied, in legal-history editing and teaching material; self-built checks validate the surface and miss the language. **States that ChatGPT 5.6 did significantly better on the same tasks.** Opus 4.8 / Fable 5 | **Closed, not planned**, `stale`, 2026-07-14 |
| #92213 | — | The model invents non-standard terms instead of the names the project defines, and changes them between messages | Open, `area:model`, 2026-09-04 |
| #94297 | English | Fable's use of language reported as unusable, with a cancelled subscription | Open, `area:model`, 2026-09-14 |
| #78879 | — | Invents grammar-point and vocabulary names instead of reading the catalogue that exists, then states it invented nothing | **Closed, not planned**, `stale`, 2026-07-18 |
| #23208 | German | Replaces correct German quotation marks („…") in files with ASCII or English ones. Has a repro | **Closed, not planned**, `stale`, 2026-02-04 |

#### The wrong language is emitted

| Issue | Languages | What it reports | State |
| --- | --- | --- | --- |
| #94365 | Chinese / Russian | A Russian word stem substituted for the Chinese word mid-sentence under an explicit "always respond in 简体中文" | Open |
| #87212 | German / Hindi | काम करता है ("it works") opens an assistant message in a German session; no Hindi anywhere in context | **Closed, not planned**, `stale`, 2026-08-16 |
| #57212 | Chinese → Korean/Japanese | Switches language under a system prompt demanding Traditional Chinese, most often after compaction | **Closed**, 2026-05-08 |
| #32181 | Japanese → English | Output drifts to English as the work gets denser, with no compaction involved | **Closed, not planned**, `stale`, 2026-03-08 |
| #23436 | Czech | Misspelled words, words from other languages and Cyrillic inserted into otherwise correct Czech | **Closed, not planned**, `stale`, 2026-02-05 |
| #68628 | English / Russian | A Russian word (близко) inside an English sentence | **Closed as duplicate**, 2026-06-15 |
| #30025 | Chinese → Korean | Whole answers returned in Korean, reproducibly | **Closed as duplicate**, 2026-03-02 |
| #27362 | Russian / Chinese | Chinese characters (其他) in Russian output | **Closed as duplicate**, 2026-02-21 |
| #17324 | German | Umlauts written as "fuer" and "ueber" in files | **Closed as duplicate** of PR #17326, 2026-01-10 |

#### Written rules do not govern the behaviour they describe

This is why none of the above can be answered with "put it in CLAUDE.md".

| Issue | What it reports | State |
| --- | --- | --- |
| #90542 | A 700-line `CLAUDE.md` with 30 numbered rules, loaded into every context window and quoted back by the model, governed nothing across a 4.5 hour session. Opus 5 | Open, 2026-08-29 |
| #92971 | "Answer only the question" stated in `CLAUDE.md`, in memory and in a skill; the model acknowledges each correction and appends unrequested explanations in about half the following replies. Fable 5.1 | **Closed, not planned**, 2026-09-09 |
| #93826 | Auto-generated session titles ignore the spelling rules of `CLAUDE.md`, and no hook fires after title generation to correct them | Open, 2026-09-12 |

**Adjacent, different cause:** #93282 and #94461 concern German strings in the product interface. That is UI localisation, not model output.

### The behaviour is not specific to one model

**Models I have used, read out of the session transcripts on this machine:**

| Model | First seen | Last seen | Transcript lines |
| --- | --- | --- | ---: |
| `claude-opus-5` | 2026-08-22 | 2026-09-16 | 186,488 |
| `claude-opus-4-8` | 2026-06-23 | 2026-09-06 | 26,289 |
| `claude-fable-5-1` | 2026-09-07 | 2026-09-16 | 6,736 |
| `claude-fable-5` | 2026-08-24 | 2026-09-16 | 5,301 |
| `claude-sonnet-5` | 2026-08-28 | 2026-09-16 | 2,647 |
| `claude-haiku-4-5-20251001` | 2026-06-24 | 2026-06-25 | 343 |

I have observed this failure on **Opus, Fable and Sonnet**.

**Models named in the other issues listed above:**

| Model | Issues |
| --- | --- |
| Opus 5 | #94712, #87212, #90542, #94365 |
| Opus 5.0, 4.8, 4.7 and Fable 5 | #77136 |
| Opus 4.8 and Fable 5 | #77432 |
| Opus 4.8 | #68628 |
| Fable 5.1 | #92971 |
| Opus, version unspecified | #85432, #23208, #32181 |
| Sonnet 4.6 | #30025 |
| Sonnet, version unspecified | #23436, #27362 |

All three current families are represented, in both lists.

### Environment

| | |
| --- | --- |
| Surface | **VS Code extension** (not offered in the Terminal/Shell list above) |
| OS | Ubuntu/Debian Linux |
| Shell | bash |
| Claude Code | 2.1.261 |
| Conversation language | German, enforced by `CLAUDE.md` and by a skill that loads on every German text |

### What this costs, in plain terms

I am a German-speaking user. I want to work with the AI in German. **It is extremely laborious, and much of what comes back is simply not understandable.**

- **The model cannot produce usable German articles, blog posts, documents or letters.** Every noun has to be read and checked before the text can leave the house.
- **German translation files are unusable.** An invented word in a translation file goes onto the customer's screen, and nobody proofreads it there.
- **For any text that goes to a third party I no longer use Claude. I use ChatGPT.** Claude has become close to unusable for writing in the German-speaking world.
- What is left is coding and code analysis — and even there it degrades, because wrong terms end up in the code and the documents that come with it are badly written.
- **This is not only German.** Missing or wrong context, strange and unreadable phrasing appear in English too. #77136 and #77432 report exactly that, and #77432 comes from a professional writer who also moved to ChatGPT for the same reason.
- **Including in this report.** An earlier draft of this very text used "in every register" where it meant "in every kind of text". The reader had to ask what it was supposed to mean.

This is not a niche. It is every non-English-speaking user of this product, plus everyone who uses it to write English prose — and the same failure is reported here in German, French, Czech, Japanese, Chinese and Russian.

Contributor guide

No contributing guide indexed for this repository

Research direction

The report names no Claude Code source file, test, or entry point; it references user-managed CLAUDE.md and skills plus incident notes. Start by identifying whether German generation and rule persistence are controlled in this repository. Done is undefined here: the report does not specify a reproducible test or an agreed implementation boundary.

Written by the indexing model from the issue text.

Assessment

Domain
ai
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
15/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.