This commit is contained in:
team 1
2026-05-11 13:44:32 +02:00
parent 0bce89cd8b
commit c4890183f8
8 changed files with 209 additions and 20 deletions

View File

@@ -0,0 +1,66 @@
# RetrieX Patch 90 - Chat Header Icon Preservation
## Ziel
Die Icons im Chat-Header bleiben sichtbar, waehrend die Button-Texte weiterhin ueber `config/retriex/chat-messages.yaml` gepflegt werden.
Betroffen sind:
- `Diesen Chat loeschen`
- `Abmelden`
## Ursache
Die Frontend-Konfiguration schreibt Elemente mit `data-chat-message-text` per `textContent`. Wenn dieses Attribut direkt auf einem Button oder Link liegt, wird dessen kompletter Inhalt ersetzt. Dadurch verschwinden vorhandene SVG-Icons.
## Aenderungen
### `templates/chat/index.html.twig`
- `data-chat-message-text` liegt nicht mehr direkt auf dem Clear-Button oder Logout-Link.
- Die konfigurierbaren Texte liegen nun in separaten `<span>`-Elementen innerhalb der Buttons.
- Die SVG-Icons bleiben dadurch Bestandteil des Buttons/Links.
- Fuer die Buttons wird zusaetzlich `data-chat-message-aria-label` gesetzt.
- Die SVGs erhalten `aria-hidden="true"` und `focusable="false"`, damit Screenreader den Button-Text verwenden.
## Bewusst nicht geaendert
- Keine Aenderung an Chat-Security, Admin-Security oder Userverwaltung.
- Keine Aenderung an RAG, Retrieval, Scoring, Ranking, Shop-Matching, SSE oder History-Logik.
- Keine Aenderung an `public/assets/js/base.js`; das bestehende Message-System bleibt unveraendert.
- Keine Aenderung an `config/retriex/chat-messages.yaml`.
## Erwartetes Verhalten
- Der Button `Diesen Chat loeschen` zeigt weiterhin das Papierkorb-Icon plus Text.
- Der Link `Abmelden` zeigt weiterhin das Power-Icon plus Text.
- Beide Texte koennen weiterhin zentral ueber `chat-messages.yaml` angepasst werden.
- Beim Laden der Chat-Messages werden nur die Text-Spans ersetzt, nicht die Icons.
## Lokale Checks
Ausgefuehrt:
```bash
python3 - <<'PY'
from pathlib import Path
s = Path('templates/chat/index.html.twig').read_text()
assert '<button id="clear" class="btn btn-trans" data-chat-message-aria-label="ui.buttons.clear">' in s
assert '<span data-chat-message-text="ui.buttons.clear">Diesen Chat löschen</span>' in s
assert 'id="chat-logout"' in s
assert '<span data-chat-message-text="ui.buttons.logout">Abmelden</span>' in s
assert 'class="bi bi-trash-fill"' in s
assert 'class="bi bi-power"' in s
assert 'id="clear" class="btn btn-trans" data-chat-message-text=' not in s
assert 'id="chat-logout" href="{{ path(\'chat_logout\') }}" class="btn btn-trans"\n data-chat-message-text=' not in s
print('p90 icon preservation checks OK')
PY
```
Ergebnis:
- Template-Strukturcheck OK
- Clear-/Logout-Icons bleiben im DOM
- Konfigurierbare Texte liegen auf separaten Spans
Symfony-Console-Checks muessen in der Zielumgebung mit installiertem `vendor/` ausgefuehrt werden.

View File

@@ -0,0 +1,85 @@
# RetrieX Patch p91 - Shop Query Stopword Profile Fix
## Ziel
Shop-Suchqueries sollen vor dem Store-API-Call konsequenter von reinen Sprach-, Satz- und Relationswoertern bereinigt werden. Der konkrete Regressionsfall war:
- Verlauf: `Testomat 808` / `Indikatortyp 300`
- Preis-Follow-up: `was kostet der indikator`
- Fehlerhafte Shopquery: `testomat 808 erreicht 300 indikator`
- Erwartete Shopquery: `testomat 808 300 indikator`
Das Wort `erreicht` blockierte in der Shop-API Treffer, obwohl die gleiche Query ohne dieses Wort passende Produkte liefert.
## Ursache
Es gab bereits zwei Cleanup-Stufen:
1. `stopword_cleanup`
2. `positive_token_filter`
`erreicht` war jedoch weder in der Shop-Stopword-Liste noch in den blockierten Positive-Filter-Tokens. Danach konnte es ueber das generische `adjacent_variant_patterns`-Pattern als angeblich moegliches Modell-/Variantentoken durchrutschen, weil es zwischen den numerischen Kontexttokens `808` und `300` stand.
## Aenderungen
### `src/Agent/AgentRunner.php`
- Die Shop-Stopword-Bereinigung nutzt jetzt zusaetzlich das zentrale Language-Cleanup-Profil `commerce_query`.
- Der Positive-Token-Filter verwendet dieselben Cleanup-Tokens ebenfalls als Blocklist.
- Dadurch koennen zuvor bereinigte Sprach-/Relationswoerter nicht spaeter durch die Variantenerkennung wieder in die finale Shopquery gelangen.
### `config/retriex/language.yaml`
- Neues Stopword-Group-Set `shop_relation_noise` fuer Shopquery-Sprachrauschen, z. B.:
- `erreicht`
- `gemessen`
- `konzipiert`
- `speziell`
- `wert`
- Das Profil `commerce_query` referenziert diese Gruppe.
### `config/retriex/genre.yaml`
- Die Source-of-Truth-Profilstruktur wurde entsprechend gespiegelt.
### `config/retriex/governance.yaml`
- Der Frozen-Legacy-Hash fuer `language.cleanup_profiles.commerce_query` wurde aktualisiert.
## Erwartetes Verhalten
- `testomat 808 erreicht 300 indikator` wird zu `testomat 808 300 indikator` bereinigt.
- Produkt-/Fachanker bleiben erhalten, z. B.:
- `testomat lab cl`
- `testomat 2000 thcl 100276`
- `chlor select sensor`
## Lokale Checks
Im Patch-Arbeitsbaum ausgefuehrt:
```bash
php -l src/Agent/AgentRunner.php
python3 - <<'PY'
from pathlib import Path
import yaml
for p in ['config/retriex/language.yaml','config/retriex/genre.yaml','config/retriex/governance.yaml']:
yaml.safe_load(Path(p).read_text())
PY
```
Zusatzsimulation:
- `testomat 808 erreicht 300 indikator` => `testomat 808 300 indikator`
- `testomat lab cl` bleibt erhalten
- `testomat 2000 thcl 100276` bleibt erhalten
- `chlor select sensor` bleibt erhalten
## Noch in Nutzerumgebung pruefen
```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
```