vibeapp.win

What brokeUpdated 3 October 2026

Prompt examples the model copied word for word

Three times in a month, concrete example values in our prompts ended up in the output: 66 bottles with the same tasting note, a shopping list that cited dishes the user never logged, and a wine labelled as red Nebbiolo. The fix was placeholders, explicit rules, a deterministic echo-guard and testing against known bottles.

The short version

What went wrongConcrete example values in three prompts were copied into the model output. The results were 66 bottles with the same tasting note, a shopping list citing dishes never logged, and a wine saved as red Nebbiolo.

How we found itA user screenshot exposed the shopping list case. The 66 identical notes were diagnosed from the data. The Viña Sol case is not explained.

The rule nowUse placeholders, not examples, in prompt schemas. Add a deterministic echo-guard, prefer null to a guess, validate against known bottles, and check every prompt when one copies.

This post documents something Claude got wrong. The claim rests on a commit or a file, not on memory. All of Claude's mistakes

This post is about three of the prompts in our wine cellar app that use language models. One reads bottle labels from photos. One writes short tasting notes from web sources. One suggests what to buy based on the meals a user has logged. Between May and June 2026, all three made the same kind of mistake. Each prompt showed the output format with a concrete example, and the model copied the example into its answer.

First, who did what. The commit messages say the copying was done by the models running the app; one calls them “weak models”. Henning writes no code himself, so the original prompts, with their concrete examples, were Claude’s. The record shows how we found each case and what we changed.

Case 1: the shopping list (14 May 2026)

The first sign was a screenshot from a user. The shopping list explained one of its suggestions by citing “biff Bearnaise og entrecote” (steak béarnaise and entrecôte). The user had only logged chicken with sweet and sour sauce. According to the commit, the shopping-list model had “copy-pasted the prompt’s example rationale verbatim”.

The same commit rewrote the shopping prompt. It now uses abstract placeholders and an explicit rule to cite concrete dishes from the user’s list. It also scales the number of suggestions to the number of meals (one or two meals give one or two suggestions, not always three to eight) and lowers the temperature from 0.2 to 0.0.

The commit fixed that one prompt.

Case 2: 66 identical tasting notes (30–31 May 2026)

Two weeks later the same thing showed up somewhere else. The commit records that 66 bottles had the same web tasting note, about ripe cherries and liquorice. That describes a red wine, yet the working notes from the session say it also sat on white wines and one dessert wine.

The cause was the same as in May. The output schema in the web-notes prompt showed a real tasting note as its example, and in the commit’s words, “weak models parroted” it word for word.

The count shifts a little across the material. The commit message says 66. The code comment says “60+”. The cleanup note talks about 64 bottles to regenerate. We report 66 because that is the number in the commit. The cleanup notes describe the repair: about 51 of the 64 got real, wine-specific notes. Thirteen kept the template note because the local model broke down under concurrent load and returned only question marks. Those 13 needed a model reload and a sequential re-run. The same note adds that firing enrichment jobs four at a time maxed out the single GPU, so re-runs should go one at a time.

The cleanup also turned up one real misclassification: a Valpolicella Ripasso stored as white, corrected to red.

The fix has three parts:

  • The concrete example text in the prompt was replaced with placeholders in angle brackets.
  • A rule was added: do not copy the example or the placeholders, and the note must fit the wine type.
  • A deterministic echo-guard checks every answer after the model returns it. If the note contains the old example sentence, or still has angle-bracket placeholders in it, the answer is rejected. The app then falls back to an estimate based on grape and region. Five tests cover the guard.

The echo-guard is the part that does not depend on the model following instructions. A prompt rule asks the model to behave. The guard checks whether it did.

Case 3: a wine read as red Nebbiolo (13 June 2026)

The label reader had the same weakness. Its output schema used Nebbiolo, red and Piemonte as example values. The commit says the model copied them when it was unsure. As a result, Viña Sol was saved as a red Nebbiolo.

The fix adds an explicit warning to the prompt that the schema values are format only and must never be copied. It also adds two field rules:

  • Wine type is decided from the colour of the wine and the style of the label, not guessed from a grape or region. If unsure, return null.
  • Grape varieties are only the ones actually printed on the front or back label. If none are printed, return an empty list.

The commit records testing against known bottles. After the change, Viña Sol came back with no type and no grapes instead of red/Nebbiolo. A Barbera came back as red with Barbera, and a Chablis as white with Chardonnay. The commit reports no regression on these.

The material does not say exactly how the Viña Sol error was spotted.

What the three cases have in common

Each time, a prompt showed the output format with realistic values instead of empty slots, and the model copied the example instead of describing the actual wine or meal. A realistic example looks like a valid answer, so nothing failed loudly. A note about cherries and liquorice reads fine until you see it on a white wine.

The first case came to light through a user’s screenshot. The second was diagnosed as 66 bottles carrying the same note.

The rule

  • Use placeholders, not examples, in prompt schemas. Write the slot (for example, a placeholder for the tasting note), never a believable value. Say in the prompt that the schema shows format only.
  • Add a deterministic echo-guard. After the model answers, check the output in code for known example text and leftover placeholders. Treat a match as a miss and fall back to something safer. Do not rely on the prompt alone.
  • Prefer null to a guess. For fields like wine type and grape, an empty answer is better than a plausible wrong one.
  • Validate against known bottles. After changing a prompt, run it on bottles where the right answer is known, including one that used to fail, and check that the others did not regress.
  • Check every prompt when one copies. We fixed the shopping prompt in May and found the same flaw in two other prompts over the next month.

Corrections

  1. Attribution corrected: an earlier version said the material did not show who wrote the prompts and did not put the mistake on Claude. Henning writes no code himself; the prompts were written by Claude.