[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)

Status Open
Reported on v2.1.261
Maintainer reply None cached
Activity 5 comments · opened Sep 16, 2026

Preflight Checklist

  • [x] I have searched existing issues 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

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.

View original on GitHub ↗

3 Comments

mwaeckerlin · 24 days ago

Could this be the text watermark?

A question, not a claim — but the timing and the mechanism line up closely enough that it seems worth ruling out.

Timing. Watermarking is mandatory for Claude models launched on or after 2026-08-02. The models I use entered service on this machine on 2026-08-22 (claude-opus-5), 2026-08-24 (claude-fable-5) and 2026-08-28 (claude-sonnet-5) — all after that date, so all watermarked from their first token. My incident record shows the share of incidents that are about German word choice going from 5% in July (2 of 40) to 20% in August (25 of 127) and 18% since (33 of 185). The break falls in the month the mandate starts.

Mechanism. From Anthropic's own description of how it works:

Instead of using an arbitrary random number generator to pick the next word, watermarking uses the key and a few words that come before to settle what word the model should pick.

It steers the choice among options the sampler treats as near-equivalent. In German that is exactly where this bug lives.

German forms compounds productively out of subword tokens. A high-entropy token position there often decides not which of two existing words is used, but whether the resulting word exists at all. Warte|zeit|geber and Timer can sit close together in token probability while one of them is not a German word. In English the same position usually chooses between two real words. The same perturbation therefore costs far more in German than in English — and that asymmetry is what this issue reports.

It would also explain a detail I could not otherwise account for: the wrong word stays consistent through a whole document, but two sessions working on different material on the same day produce two different wrong words. Key plus preceding context is exactly that behaviour.

What argues against it. #77136, opened 2026-07-13, describes the same class in English before the mandate, on Opus 4.8. So the tendency is not created by watermarking. The question is whether watermarking amplifies it, and in which languages.

On "watermarking does not impact the quality of Claude's output". I do not doubt the testing behind that sentence. But it measures average rated quality, on rated tasks, and presumably predominantly in English. The defect in this issue is a rare, categorical word-formation error in one language: every few hundred tokens, a word that does not exist. That would not move an average quality score, and no rater would be asked about it. The two statements are not in conflict — they measure different things.

What would settle it. Two measurements, an hour of work:

  1. Temperature. The watermark operates on the sampling randomness; at temperature 0 there is nothing for it to steer. Run the same set of German technical prompts at the default temperature and at temperature 0, and count non-existent compounds and misused words. A sharp drop at temperature 0 points at the sampler. No change, and watermarking is ruled out and this question is answered.
  2. Language. The same prompts in German and in English at the same temperature. The mechanism above predicts that German degrades and English does not, or much less.

I can run the first myself against the Messages API — Claude Code does not expose temperature. What I cannot do, and what actually decides it, is run the same prompts against a watermarked and an unwatermarked build of the same model. That comparison is yours to make.

mwaeckerlin · 24 days ago

I tried the temperature measurement I proposed. It cannot be run.

That is itself the finding, so here it is with what I measured.

What I tried. A harness against the public Messages API: 20 ordinary technical questions, the same ones in German and English, each asked at the default temperature and at temperature 0, counting invented compounds and misused words per condition. The watermark operates on the randomness of the draw, so at temperature 0 there is nothing for it to steer — a defect from the sampler must weaken there, one from training must not.

What the API answered. The first call came back:

400 invalid_request_error
`temperature` is deprecated for this model.

So I probed which values are accepted at all. One short call per model and value, public API, header anthropic-version: 2023-06-01, 2026-09-20:

| model | 0.0 | 0.1 | 0.3 | 0.5 | 0.7 | 0.9 | 0.99 | 1.0 | field omitted |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| claude-opus-5 | refused | refused | refused | refused | refused | refused | refused | ok | ok |
| claude-sonnet-5 | refused | | | | | | | ok | ok |
| claude-fable-5-1 | refused | | | | | | | ok | ok |
| claude-fable-5 | refused | | | | | | | ok | ok |
| claude-opus-4-8 | refused | | | | | | | ok | ok |
| claude-haiku-4-5-20251001 | ok | ok | ok | ok | ok | ok | ok | ok | ok |

Every refusal carries the same sentence: ` temperature is deprecated for this model. `

What that means. temperature is not ignored on these models and it is not removed — it is pinned to exactly 1.0, and every other value is a 400, including 0.99. claude-haiku-4-5, the oldest model I tested, still accepts the whole range.

So the measurement that would separate «the sampler does this» from «the training does this» is not available to any user on any current model. I am not claiming that is why it was done; I am reporting that I set out to test a hypothesis about sampling and found that sampling is the one thing a user cannot vary.

It is worth stating plainly what this leaves standing: a keyed watermark needs sampling entropy to carry its signal. At temperature 0 there is none. The single setting that would make watermarking impossible is the single setting that is refused.

What I could still run, and am running:

  1. claude-haiku-4-5 at temperature 0.0 against 1.0, German and English — the only model where the comparison is possible at all. It is on Anthropic's own list of watermarked models.
  2. claude-opus-5, claude-sonnet-5 and claude-fable-5-1 at 1.0, German against English — the language asymmetry, which needs no temperature control.

I will post those numbers when they are in.

What only Anthropic can run, and what actually decides the question: the same prompts against a watermarked and an unwatermarked build of the same model, counting German word-formation errors in each. That is one afternoon internally and it either clears watermarking entirely or identifies it.

Two caveats on my own measurement. I tested with anthropic-version: 2023-06-01 and did not try other version headers, so I cannot say whether another API version behaves differently. And I did not test the Mythos models, which I have no access to.

The harness is a few files of standard-library Python; I am happy to post it if that helps anyone reproduce the probe.

mwaeckerlin · 24 days ago

I ran the measurement I proposed. Three findings, and the third is against my own hypothesis.

720 calls against the Messages API, four models, 20 ordinary technical questions asked in German and in English, 200,217 output tokens. Everything below is measured.

1. The temperature comparison cannot be run on any current model

The first call came back 400 invalid_request_error: temperature is deprecated for this model. So I probed which values are accepted. One short call per model and value, public API, anthropic-version: 2023-06-01, 2026-09-20:

| model | 0.0 | 0.1 | 0.3 | 0.5 | 0.7 | 0.9 | 0.99 | 1.0 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| claude-opus-5 | refused | refused | refused | refused | refused | refused | refused | ok |
| claude-sonnet-5 | refused | | | | | | | ok |
| claude-fable-5-1 | refused | | | | | | | ok |
| claude-fable-5 | refused | | | | | | | ok |
| claude-opus-4-8 | refused | | | | | | | ok |
| claude-haiku-4-5-20251001 | ok | ok | ok | ok | ok | ok | ok | ok |

temperature is pinned to exactly 1.0 on every current model. Only claude-haiku-4-5 still accepts the range.

2. And temperature 0 is not deterministic anyway

On claude-haiku-4-5 at temperature: 0.0, only 5 of 20 questions returned word-for-word identical answers across repetitions. Distinct words across the repeats of one question, divided by the words of a single answer — 1.00 would mean every repeat identical:

| condition | spread |
| --- | ---: |
| haiku, German, t=0.0 | 1.20 |
| haiku, German, t=1.0 | 2.26 |
| haiku, English, t=0.0 | 1.18 |
| haiku, English, t=1.0 | 1.92 |

Temperature 0 damps the draw; it does not remove it. So even the one model where the comparison is possible would not have given a clean answer.

3. The defect did not reproduce in this setting — and that is the useful part

I expected to count invented compounds. Across 32,500 German words from four models, the words from my incident record appear four times, and both cases are defensible German (Rahmen in «im Rahmen des Handshakes», Baustein in its ordinary sense). Abbild for a Docker image: zero occurrences. What the models wrote instead, consistently: Docker-Image, Container, Registry, Layer, Dockerfile, Instanz, Dateisystem — the English terms kept inside German sentences, exactly as the original report asks for.

I read the answers, not only the counts. The German is good.

So the original report needs a correction, and here it is: the failure is not in explaining a well-known concept. It is in naming something that has no established name — a thing in a specific codebase, a state, a process, the directory a particular tool creates. Explaining Docker has thousands of German examples in the training corpus and the model copies them correctly. Naming the place where a tool keeps its sessions has none, the noun slot stands open, and that is where Topf (a cooking pot, for a directory) and Wartezeitgeber (a «waiting-time-giver», for a timer) come from.

That sharpens the report rather than weakening it, and it is where a fix has to be aimed.

On the watermark question I raised in my previous comment: I withdraw the emphasis. An independent check published in late August found that Sonnet 5 and Opus 4.8 most likely did not watermark text at that time, and my own incident data breaks in August. The retrofit came later. There is also no unwatermarked model available to compare against — the help centre marks all thirteen models with a check in the «Text watermarks in Claude output» column. The pinned temperature remains a measured fact and I cannot connect it to anything.

4. What did show up: German costs more and gets cut off

Same question, same instruction («three to five sentences»), same ceiling of 400 output tokens:

| model | German answers hitting the ceiling | English answers hitting the ceiling |
| --- | ---: | ---: |
| claude-opus-5 | 94% (75 of 80) | 25% (20 of 80) |
| claude-sonnet-5 | 54% (43 of 80) | 0% (0 of 80) |
| claude-fable-5-1 | 39% (31 of 80) | 5% (4 of 80) |
| claude-haiku-4-5 | 2% (3 of 120) | 1% (1 of 120) |

On Opus 5, where the sample is large enough to say anything, a German word costs about 1.29× the output tokens of an English one. German users pay more for the same answer and are truncated far more often.

5. A note on detection, measured on this corpus

I built a spell-checker screen and calibrated it before using it. Of seven words known to be invented, hunspell with the Swiss German dictionary rejected one — and that one only because of an ASCII transliteration. It flagged 5% of all German words, essentially the ordinary technical vocabulary it does not carry. The English dictionary was absent and returned zero findings on 10,000 words without saying so.

This is the fourth independent demonstration in this thread that the defect cannot be detected mechanically. It has to be fixed in the model.

Showing cached comments. Read the full discussion on GitHub ↗