# RetrieX accessory price follow-up precision fix

This patch hardens commerce follow-up handling for questions such as:

- "was kostet der indikator"
- "was kostet indikatortyp 300"

Problem fixed:

- Technical RAG correctly resolves `0,02 °dH -> Testomat 808 -> Indikatortyp 300`.
- The subsequent commerce follow-up generated the correct primary query (`indikatortyp 300 testomat 808`), but shop repair broadened the search again.
- Repair queries could add model-only searches or nearby products, causing device prices or unrelated reagents to appear in the final answer.

Changes:

- Requested accessory codes are extracted with a configurable regex that also matches `indikatortyp 300`.
- If a requested accessory/reagent code is present, shop repair is restricted to focused accessory-code queries.
- Prompt-anchored models are preferred over proximity-only models for requested accessory-code repair.
- Fallback accessory-code repair query templates are configurable.
- Prompt grounding rules now explicitly forbid answering accessory price follow-ups with device prices or unrelated reagent prices.

No changes:

- No retrieval/scoring/vector logic changed.
- No hard keyword list added to the retriever core.
- No PromptBuilder text removed; only more precise shop grounding rules were added.

After applying:

```bash
php bin/console cache:clear
php bin/console mto:agent:config:validate
php bin/console mto:agent:regression:test
```

Expected behavior:

If the shop does not contain a clear product for `Indikatortyp 300`, RetrieX should say that the price is not available in the provided shop data and must not add the price of `Testomat 808`, `Testomat 2000`, or unrelated reagents.
