# RetrieX Patch 5: CommerceQueryParser YAML-only

Basis: aktualisierte `rag-inprogress.zip` nach Patch 4.

## Ziel

`CommerceQueryParserConfig` darf keine fachlichen PHP-Defaults mehr enthalten. Alle Commerce-Query-Parser-Werte liegen jetzt in YAML unter:

```yaml
retriex.commerce_query.config
```

## Geaenderte Dateien

- `config/retriex/commerce.yaml`
- `config/retriex/vocabulary.yaml`
- `config/services.yaml`
- `src/Config/CommerceQueryParserConfig.php`
- `src/Config/RetriexEffectiveConfigProvider.php`

## Inhalt

Nach YAML verschoben wurden:

- bekannte Marken
- zu entfernende Commerce-Phrasen
- Filter-/Stop-Tokens fuer Shop-Suchtexte
- Suchtoken-Korrekturen
- Canonical Maps
- semantische Shop-Suchtokens
- Normalisierung fuer `€` -> ` euro `
- Trim-Zeichen fuer Query-Texte
- Limits fuer Tokenlaengen und Suchtextaufbau
- Regexe fuer History-Kontext, Preise, Modell-/Zubehoer-Erkennung, Messwerte
- Regex-Templates fuer exakte Token-Entfernung und Brand/Model-Erkennung

## Wichtig

- `CommerceQueryParserConfig` enthaelt keine `private const` Defaults mehr.
- Fehlende Pflichtwerte fallen nicht mehr still auf PHP zurueck, sondern erzeugen einen `InvalidArgumentException`.
- Die alten `commerce_query`-Vocabulary-Views/Maps wurden aus `vocabulary.yaml` entfernt, damit nicht zwei YAML-Stellen scheinbar denselben Parser steuern.
- `config/services.yaml` injiziert nur noch `%retriex.commerce_query.config%`; die alte Vocabulary-Abhaengigkeit im Parser-Config-Service ist entfernt.

## Nicht geaendert

- Retrieval-Scoring
- PromptBuilder
- AgentRunner
- Shop-Matching
- SSE/Job-Logik
- CommerceIntentConfig

## Lokale Pruefung nach Einspielen

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

Besonders pruefen:

- Testomat 808 / 0,02 Grad dH
- Folgefrage Indikatortyp 300
- Preisfrage zum Indikator
- `welcher pockettester ist fuer Redox messung gut` -> `suche im shop`
- `mit welchem testomat kann ich freies chlor messen`

## Hinweis

Im ZIP-Arbeitsverzeichnis konnte ich Symfony-Kommandos nicht ausfuehren, weil `vendor/` nicht enthalten ist. PHP-Syntax der geaenderten PHP-Dateien wurde mit `php -l` geprueft.
