anthropics / anthropics/claude-code

[Bug] Opus 5 produces hollow, non-factual French prose despite in-session corrections

Open
#94,712 0 comments 0 reactions 0 assignees View on GitHub
area:model bug
Dominant language
Python
Stars
145k
Forks
23.1k
PR merge metrics
PR metrics pending

Description

**Bug Description**
# Bug report — recurring French prose formulation failures (Opus 5, Claude Code)

## Summary

During a single long session spent drafting technical specifications in French, the user had to reject the model's phrasing **six separate times**, plus four vocabulary drifts. The corrections did not stick: the model re-offended after being corrected, after being asked to forbid the pattern, and after writing the rule into its own persistent memory.

The failure is not vocabulary or grammar. It is that the model **comments on a fact instead of stating it**, and **invents collocations that do not exist in French**.

## Environment

- Model: Opus 5 (1M context), Claude Code CLI.
- Task: writing and iterating on ~8 ClickUp tickets in French, technical specifications for a Laravel codebase.
- User language: French throughout. Project has documented French vocabulary conventions.

## Reproduction — rejected phrasings and what the user accepted

**1. Gloss instead of fact**

> Rejected: « Le montage est le seul chemin où le serveur n'est pas libre. »
> User: « WTF — encore incompréhensible »
> Accepted: « Le montage ne laisse pas le choix du serveur : c'est celui qui héberge le Cloud PC. S'il ne désigne pas le stockage où l'ISO réside, il n'a pas accès au fichier. »

Same length. The rejected version characterises the fact ("is the only path where X is not free") and leaves the reader to reconstruct it. The accepted version names the actor and the consequence.

**2. Reflexive passive with no actor**

> Rejected: « Le stockage visé se passe à Proxmox. »
> User: « sérieusement ? Qu'est-ce que je t'avais dit pour les formulations creuses ? »
> Accepted: « Quand la destination diffère de l'origine, l'appel y ajoute le stockage où écrire le disque ; sans cette option, Proxmox choisit lui-même où l'écrire. »

Note this rejection came **after** the user had already corrected the same class of error and asked the model to forbid it, and after the model had written a memory note about it.

**3. Invented collocation**

> Rejected: « un serveur ne peut le désigner que dans un usage déclaré »
> User: « la formulation n'est pas claire »

« Désigner quelque chose *dans* un usage » is not French. The model coined a verb-preposition pair to fit a data model.

**4. Second attempt, also rejected**

> Rejected: « un serveur ne peut choisir un stockage que pour un usage que ce stockage accepte »
> User: « Cette formulation est horrible aussi, c'est ton gros point faible la formulation »
> Accepted: « Sur la fiche d'un serveur, le champ *stockage des modèles* ne propose que les disques qui acceptent les modèles. »

The accepted version describes what the user sees on screen instead of restating the rule abstractly. The model needed two corrections to get there.

**5 and 6. Section titles**

> Rejected: « La capacité et la consommation se mesurent par volume »
> User: « Le titre c'est Kamoulox, à revoir »
> Accepted: « Mesurer l'espace disque sur le stockage et non plus sur le serveur »

> Rejected: « Surveiller chaque stockage une fois et refuser l'action selon l'usage saturé »
> User: « Titre encore Kamoulox »
> Accepted: « Surveiller la saturation sur le stockage et non plus sur le serveur »

Both rejected titles use abstract nouns as subjects and glue two propositions with "et". Both accepted titles lead with a verb and state the before/after.

## Vocabulary drift (secondary, same session)

The model introduced terms absent from the project and from the user's own writing, and had to be corrected on each:

- « volume » for an entity the project calls « stockage » — the model used it ~40 times across 3 tickets before correction.
- « image » alone where the project says « image ISO » or « ISO ».
- « client » where the application and the user say « organisation ».
- « disque à ISO », « disque à modèles » — invented, corrected to « disque de stockage d'ISO ».

In each case the correct term was already present in the codebase, in the user's original draft, or in user-facing strings the model had read during the same session.

## Why this matters

Each rejection costs a full re-read of a long document by the user, and a full rewrite. In this session the rewrites consumed a large share of the exchange. More importantly, the user stated the consequence directly: **« c'est ton gros point faible la formulation »** — it erodes confidence in specifications the model produces autonomously, because the user cannot assume a passage is readable without checking it.

## Notable: within-session correction did not hold

The sequence was:

1. User rejects a hollow…
**Note:** Content was truncated.

Contributor guide

No contributing guide indexed for this repository

Research direction

No repository file, test, or entry point is identified in the report. Reproduce the French drafting session in Claude Code against the Laravel specifications, then determine how to measure whether corrections persist, vocabulary stays consistent, and generated prose states facts clearly.

Written by the indexing model from the issue text.

Assessment

Tech stack
laravel
Domain
ai, cli
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.