# RetrieX Patch 19 - Typo-tolerant price follow-up intent

## Purpose

Patch 19 fixes the observed regression class where a short referential price follow-up with a typo does not trigger commerce/shop handling.

Observed conversation:

1. `Was ist der niedrigste Grenzwert für die Wasserhärte, welcher mit einem Testomaten überwacht werden kann?`
2. `mit welchem indikator wird der wert gemessen`
3. `was kpstet der indikator`

The third input should be treated like `was kostet der indikator` and must enter the shop/commerce path. Before this patch, `kpstet` was not recognized as a commerce signal, so RetrieX stayed in RAG-only mode and produced an unrelated RAG answer.

## Scope

YAML-only fix. No PHP runtime logic changed.

Changed files:

- `config/retriex/intent.yaml`
- `config/retriex/commerce.yaml`

## What changed

### `config/retriex/intent.yaml`

Added common typo variants for `kostet`:

- `kpstet`
- `ksotet`

The variants were added to:

- `strong_signals`
- `non_product_commerce_signals`
- `price_terms`
- `explicit_commerce_intent_patterns`

This lets typo variants trigger the existing commerce intent path without introducing hard-coded logic in PHP.

### `config/retriex/commerce.yaml`

Added the typo variants to:

- `filter_search_tokens`
- `search_token_corrections`

This prevents typo tokens from polluting the generated Store API search query. The parser normalizes:

- `kpstet` -> `kostet`
- `ksotet` -> `kostet`

Then the existing `kostet` filter removes the price-control word from the product query.

## Expected result

`was kpstet der indikator` should now be detected as commerce intent and proceed to shop search. In the known flow, the existing history/anchor logic should be able to keep the `Indikatortyp 300` context and resolve toward a query such as:

`indikatortyp 300 indikator`

## Why this is intentionally small

This patch does not change retrieval, scoring, Shopware matching, prompt building or evidence-state logic. It only extends the YAML-configured vocabulary/corrections for one observed typo class.

## Required checks after applying

Run the standard checks:

```bash
bin/console mto:agent:config:validate
bin/console mto:agent:regression:test
bin/console mto:agent:config:audit-source --details
bin/console mto:agent:config:audit-patterns --details
```

Then manually retest the conversation flow:

1. `Was ist der niedrigste Grenzwert für die Wasserhärte, welcher mit einem Testomaten überwacht werden kann?`
2. `mit welchem indikator wird der wert gemessen`
3. `was kpstet der indikator`

Expected: third turn should request/shop-search indicator products, not answer from RAG-only indicator documents.
