p59b
This commit is contained in:
134
patch_history/RETRIEX_PATCH_44_RUNTIME_ANSWER_GUARD_README.md
Normal file
134
patch_history/RETRIEX_PATCH_44_RUNTIME_ANSWER_GUARD_README.md
Normal file
@@ -0,0 +1,134 @@
|
||||
# RetrieX Patch 44 - Runtime Answer Guard / Shop Follow-up Cleanup
|
||||
|
||||
## Ziel
|
||||
|
||||
Dieser Patch behandelt drei Fehler außerhalb der p43 YAML-/Listen-/Maps-Konsolidierung:
|
||||
|
||||
1. Sporadische endlos lange Produktlisten, bei denen ein letztes Shop-Produkt wiederholt wird.
|
||||
2. Falscher einleitender Satz bei direkten Zubehör-/Kabel-Shopfragen wie `zeige mir Anschlusskabel für pH/Redox`.
|
||||
3. Falsche Shop-Follow-up-Query `schaue` bei `schaue im shop` nach einer vorherigen fachlichen Frage.
|
||||
|
||||
## Änderungen
|
||||
|
||||
### 1. Runtime-Schutz gegen Endlosantworten
|
||||
|
||||
Dateien:
|
||||
|
||||
- `src/Agent/AgentRunner.php`
|
||||
- `src/Config/AgentRunnerConfig.php`
|
||||
- `config/retriex/agent.yaml`
|
||||
|
||||
Änderung:
|
||||
|
||||
- Neuer konfigurierbarer `final_answer_guard`.
|
||||
- Stoppt die finale LLM-Ausgabe, wenn eine Antwort zu lang wird oder dieselbe relevante Antwortzeile zu oft wiederholt wird.
|
||||
- Der Guard läuft im finalen Streaming-Pfad und ist generisch: keine Chlor-, Schwimmbad-, Testomat- oder Produkt-Sonderlogik.
|
||||
- Bei Abbruch wird ein kurzer Hinweis ausgegeben statt endlos weiterzustreamen.
|
||||
|
||||
### 2. Ollama Output-Cap
|
||||
|
||||
Dateien:
|
||||
|
||||
- `src/Infrastructure/OllamaClient.php`
|
||||
- `config/retriex/model.yaml`
|
||||
- `config/services.yaml`
|
||||
- `src/Config/RetriexEffectiveConfigProvider.php`
|
||||
|
||||
Änderung:
|
||||
|
||||
- Neuer Parameter `retriex.llm.num_predict: 2048`.
|
||||
- Wird als Ollama-Option `num_predict` gesendet.
|
||||
- Wichtig für Installationen mit blockierender Ollama-Generierung (`stream=false`), damit Runaway-Ausgaben bereits auf Modellseite begrenzt werden.
|
||||
|
||||
### 3. `schaue im shop` als Meta-Shop-Follow-up
|
||||
|
||||
Datei:
|
||||
|
||||
- `config/retriex/language.yaml`
|
||||
|
||||
Änderung:
|
||||
|
||||
- Ergänzt zentrale User-Instruction-Terme: `schaue`, `schau`, `schauen`, `nachschauen`.
|
||||
- Dadurch wird `schaue im shop` wie `suche im shop` als Meta-Shop-Follow-up behandelt und kann den vorherigen Kontext verwenden, statt die Suchquery `schaue` zu senden.
|
||||
|
||||
### 4. Zubehörantwort-Hardening
|
||||
|
||||
Datei:
|
||||
|
||||
- `config/retriex/prompt.yaml`
|
||||
|
||||
Änderung:
|
||||
|
||||
- Verstärkt Antwortregeln für direkte Zubehör-/Kabel-Shopfragen.
|
||||
- Bei passenden Shop-Treffern soll nicht mit einer fehlenden Hauptgerät-/Messgeräte-Aussage begonnen werden.
|
||||
- Das verhindert Sätze wie sinngemäß „kein sicher belegter Testomat für pH-Messung“, wenn der Nutzer Anschlusskabel für pH/Redox angefragt hat.
|
||||
|
||||
## Geänderte Dateien
|
||||
|
||||
- `config/retriex/agent.yaml`
|
||||
- `config/retriex/language.yaml`
|
||||
- `config/retriex/model.yaml`
|
||||
- `config/retriex/prompt.yaml`
|
||||
- `config/services.yaml`
|
||||
- `src/Agent/AgentRunner.php`
|
||||
- `src/Config/AgentRunnerConfig.php`
|
||||
- `src/Config/RetriexEffectiveConfigProvider.php`
|
||||
- `src/Infrastructure/OllamaClient.php`
|
||||
|
||||
## Lokale Prüfungen
|
||||
|
||||
Ausgeführt:
|
||||
|
||||
```bash
|
||||
php -l src/Agent/AgentRunner.php
|
||||
php -l src/Config/AgentRunnerConfig.php
|
||||
php -l src/Infrastructure/OllamaClient.php
|
||||
php -l src/Config/RetriexEffectiveConfigProvider.php
|
||||
python3 -c 'YAML parse check for changed YAML files'
|
||||
```
|
||||
|
||||
Ergebnis:
|
||||
|
||||
- PHP-Syntax der geänderten PHP-Dateien: grün.
|
||||
- YAML-Parsing der geänderten YAML-Dateien: grün.
|
||||
- Konfigurations-Sanity für `schaue/schau` und `shop`: grün.
|
||||
|
||||
Nicht vollständig lokal ausführbar:
|
||||
|
||||
```bash
|
||||
php bin/console mto:agent:config:validate
|
||||
```
|
||||
|
||||
Grund: Im entpackten ZIP ist kein `vendor/` enthalten; `bin/console` bricht mit `Dependencies are missing. Try running "composer install".` ab.
|
||||
|
||||
## Nach dem Einspielen bitte prüfen
|
||||
|
||||
```bash
|
||||
bin/console cache:clear
|
||||
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
|
||||
```
|
||||
|
||||
## Manuelle Regressionen
|
||||
|
||||
1. `ich würde gern chlor im schwinnbad messen`
|
||||
- Erwartung: keine endlose Wiederholung des letzten Produkts.
|
||||
- Falls das Modell trotzdem wiederholt, muss die Antwort durch den Guard abbrechen.
|
||||
|
||||
2. `zeige mir Anschlusskabel für pH/Redox`
|
||||
- Erwartung: Zubehör-/Kabeltreffer direkt listen.
|
||||
- Kein einleitender Satz über fehlenden Testomat oder fehlendes pH-Messgerät.
|
||||
|
||||
3. Dialog:
|
||||
- `welche indikatoren gibt es für die messung von freiem chlor`
|
||||
- danach: `schaue im shop`
|
||||
- Erwartung: Shop-Follow-up nutzt den vorherigen Kontext, nicht die Query `schaue`.
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Keine Retrieval-, Ranking- oder Produktmatching-Logik wurde geändert.
|
||||
- Keine neuen fachlichen Token-/Produktlisten im PHP-Core.
|
||||
- Neue fachliche/sprachliche Begriffe liegen in YAML.
|
||||
- Der Runtime-Guard ist bewusst generisch und konfigurierbar.
|
||||
@@ -0,0 +1,81 @@
|
||||
# RetrieX Patch p53 - Config Layout Cleanup / Shop Runtime Grouping
|
||||
|
||||
## Ziel
|
||||
|
||||
Dieser Patch gruppiert bestehende Shop-Runtime-Konfiguration in `config/retriex/agent.yaml` unter `shop_runtime`, ohne fachliche Logik zu ändern.
|
||||
|
||||
Der Patch ist rein mechanisch:
|
||||
|
||||
- keine neue Profil-/Layer-Architektur
|
||||
- keine neuen Defaults
|
||||
- keine neuen Token-/Stringlisten
|
||||
- keine Ranking-, Retrieval- oder Shopware-Kriterienänderung
|
||||
- keine LLM-Verhaltensänderung
|
||||
|
||||
## Geänderte Dateien
|
||||
|
||||
- `config/retriex/agent.yaml`
|
||||
- `config/retriex/vocabulary.yaml`
|
||||
- `src/Config/AgentRunnerConfig.php`
|
||||
- `src/Config/RetriexEffectiveConfigProvider.php`
|
||||
|
||||
## Neue Gruppierung
|
||||
|
||||
Die bisherigen Runtime-Blöcke wurden wie folgt verschoben:
|
||||
|
||||
| Alter Pfad | Neuer Pfad |
|
||||
| --- | --- |
|
||||
| `direct_shop_result_answer` | `shop_runtime.direct_answer` |
|
||||
| `shop_prompt.current_input_preservation` | `shop_runtime.query_cleanup.current_input_preservation` |
|
||||
| `shop_prompt.query_stopword_cleanup` | `shop_runtime.query_cleanup.stopword_cleanup` |
|
||||
| `shop_prompt.product_attribute_query_cleanup` | `shop_runtime.attribute_cleanup` |
|
||||
| `shop_prompt.context_usage` | `shop_runtime.context_resolution.context_usage` |
|
||||
| `shop_prompt.context_anchor_enrichment` | `shop_runtime.context_resolution.history_anchor_enrichment` |
|
||||
| `shop_prompt.meta_query_guard` | `shop_runtime.context_resolution.meta_query_guard` |
|
||||
| `shop_prompt.rag_anchor_enrichment` | `shop_runtime.context_resolution.rag_anchor_enrichment` |
|
||||
| `shop_prompt.direct_result_guard` | `shop_runtime.result_identity` |
|
||||
| `shop_prompt.length_sort` | `shop_runtime.answer_constraints.length_sort` |
|
||||
| `shop_prompt.length_filter` | `shop_runtime.answer_constraints.length_filter` |
|
||||
|
||||
`final_answer_guard` bleibt bewusst außerhalb von `shop_runtime`, weil er allgemeiner Runtime-/LLM-Ausgabeschutz ist.
|
||||
|
||||
`shop_prompt` enthält nach dem Cleanup nur noch den eigentlichen Shop-Query-Optimizer-Prompt und dessen Sprach-/Prompt-Regeln.
|
||||
|
||||
## Vocabulary Views
|
||||
|
||||
Die Vocabulary-View-Pfade wurden passend zur neuen Layout-Struktur umbenannt, ohne die zugrunde liegenden Listen zu verändern:
|
||||
|
||||
- `agent.shop_prompt.current_input_preservation_terms` -> `agent.shop_runtime.query_cleanup.current_input_preservation_terms`
|
||||
- `agent.shop_prompt.context_anchor_enrichment.trigger_terms` -> `agent.shop_runtime.context_resolution.history_anchor_enrichment.trigger_terms`
|
||||
|
||||
Die referenzierten Term-Gruppen bleiben unverändert.
|
||||
|
||||
## Lokale Prüfungen
|
||||
|
||||
Ausgeführt im entpackten Patch-Arbeitsstand:
|
||||
|
||||
```bash
|
||||
php -l src/Config/AgentRunnerConfig.php
|
||||
php -l src/Config/RetriexEffectiveConfigProvider.php
|
||||
python3 - <<'PY'
|
||||
import yaml
|
||||
for f in ['config/retriex/agent.yaml', 'config/retriex/vocabulary.yaml']:
|
||||
yaml.safe_load(open(f, encoding='utf-8'))
|
||||
PY
|
||||
```
|
||||
|
||||
Zusätzlich wurde per YAML-Strukturvergleich geprüft, dass die verschobenen Runtime-Blöcke ihre bisherigen Werte behalten. Nur die zwei Vocabulary-View-Pfadnamen wurden mechanisch an das neue Layout angepasst.
|
||||
|
||||
## Nicht lokal ausführbar
|
||||
|
||||
Die Symfony-Console-Checks konnten in dieser Umgebung nicht vollständig ausgeführt werden, weil der ZIP-Stand kein `vendor/` enthält.
|
||||
|
||||
## Empfohlene Projektchecks nach Einspielen
|
||||
|
||||
```bash
|
||||
bin/console cache:clear
|
||||
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
|
||||
```
|
||||
@@ -0,0 +1,140 @@
|
||||
# RetrieX Patch p54 - Single-Genre Configuration Surface
|
||||
|
||||
## Ziel
|
||||
|
||||
Dieser Patch macht die Konfiguration **genre-faehig fuer eine Installation mit genau einem Genre**.
|
||||
|
||||
Er baut **keine** Multi-Genre-, Multi-Tenant- oder SaaS-Umschaltung. Es gibt keinen Request-/Host-/API-Key-Resolver und keine Laufzeit-Auswahl zwischen mehreren Genres.
|
||||
|
||||
Stattdessen fuehrt der Patch eine zentrale Konfigurationsflaeche ein, die alle fuer eine spaetere Umwidmung relevanten Parametergruppen sichtbar macht:
|
||||
|
||||
- Produktrollen
|
||||
- Produktattribute und Constraints
|
||||
- Marken und kanonische Begriffe
|
||||
- Intent-/Routing-Signale
|
||||
- Follow-up-/Kontextanker
|
||||
- Shopquery-Runtime
|
||||
- Ergebnisidentitaet und Antwortregeln
|
||||
- Search Repair
|
||||
- Retrieval-/Language-Begriffe
|
||||
- Shopdaten-Mapping
|
||||
- Governance-/Regression-Guardrails
|
||||
|
||||
Damit ist klar dokumentiert, welche Parameter fuer ein anderes Genre wie Fashion, Moebel, Ersatzteile oder Elektronik geprueft und angepasst werden muessen.
|
||||
|
||||
## Bewusste Nicht-Ziele
|
||||
|
||||
- Keine Multi-Domain-/Multi-Genre-Architektur
|
||||
- Keine Tenant-Logik
|
||||
- Keine Runtime-Umschaltung pro Request
|
||||
- Keine neuen fachlichen Defaults
|
||||
- Keine neuen Tokenlisten im PHP-Core
|
||||
- Keine Ranking-, Retrieval- oder Shopware-Kriterienaenderung
|
||||
- Keine LLM-Verhaltensaenderung
|
||||
- Keine Umbenennung bestehender Rollen wie `device`/`accessory`
|
||||
|
||||
## Geaenderte Dateien
|
||||
|
||||
```text
|
||||
config/retriex/genre.yaml
|
||||
config/services.yaml
|
||||
src/Config/GenreConfig.php
|
||||
src/Config/RetriexEffectiveConfigProvider.php
|
||||
src/Config/ConfigSourceAuditProvider.php
|
||||
```
|
||||
|
||||
## Neue Datei `config/retriex/genre.yaml`
|
||||
|
||||
Die neue Datei enthaelt:
|
||||
|
||||
```yaml
|
||||
retriex.genre.config:
|
||||
id: water_analysis
|
||||
label: 'Water analysis / measurement devices'
|
||||
mode: single_installation_single_genre
|
||||
adaptation_surface:
|
||||
...
|
||||
```
|
||||
|
||||
`adaptation_surface` ist ein nach Umwidmungsbereichen gruppiertes Inventar. Die dort genannten `paths` zeigen auf bestehende effektive oder rohe Config-Pfade.
|
||||
|
||||
Wichtig: Die Eintraege verschieben noch keine fachlichen Werte physisch in `genre.yaml`. Der Patch ist absichtlich ein sicherer Oberflaechen-/Guardrail-Schritt. Bestehende Configs bleiben weiterhin die Quelle der Runtime-Werte.
|
||||
|
||||
## Neue Klasse `GenreConfig`
|
||||
|
||||
`src/Config/GenreConfig.php` kapselt die neue Genre-Konfiguration:
|
||||
|
||||
- `getId()`
|
||||
- `getLabel()`
|
||||
- `getMode()`
|
||||
- `getDescription()`
|
||||
- `getAdaptationSurface()`
|
||||
- `toArray()`
|
||||
|
||||
Die Klasse enthaelt keine PHP-only Fachlisten.
|
||||
|
||||
## Effective Config / Validation
|
||||
|
||||
`RetriexEffectiveConfigProvider` gibt nun zusaetzlich den Bereich `genre` aus und validiert:
|
||||
|
||||
- `genre.id` ist gesetzt
|
||||
- `genre.mode` ist gesetzt
|
||||
- `genre.adaptation_surface` ist eine nicht-leere Map
|
||||
- jede Gruppe enthaelt eine nicht-leere `paths`-Liste
|
||||
- referenzierte Pfade werden gegen effektive Config und rohe Symfony-Parameterpfade geprueft
|
||||
|
||||
Unbekannte Pfade erzeugen Warnungen, keine Runtime-Fehler. So werden veraltete Surface-Eintraege sichtbar, ohne die Installation hart zu blockieren.
|
||||
|
||||
## Config Source Audit
|
||||
|
||||
`ConfigSourceAuditProvider` kennt nun auch:
|
||||
|
||||
```text
|
||||
GenreConfig => retriex.genre.config
|
||||
```
|
||||
|
||||
Damit wird die neue Config-Klasse im Audit sauber einem YAML-Parameter zugeordnet.
|
||||
|
||||
## Lokale Pruefungen
|
||||
|
||||
Ausgefuehrt im entpackten Patch-Arbeitsstand:
|
||||
|
||||
```bash
|
||||
php -l src/Config/GenreConfig.php
|
||||
php -l src/Config/RetriexEffectiveConfigProvider.php
|
||||
php -l src/Config/ConfigSourceAuditProvider.php
|
||||
```
|
||||
|
||||
Ergebnis: alle PHP-Lints gruen.
|
||||
|
||||
Zusaetzlich wurden alle YAML-Dateien unter `config/retriex/*.yaml` per Python/YAML-Parser geprueft.
|
||||
|
||||
Ergebnis: YAML-Parsing gruen.
|
||||
|
||||
Die `genre.adaptation_surface.paths` wurden statisch gegen die vorhandenen Config-Pfade geprueft.
|
||||
|
||||
Ergebnis: keine fehlenden Pfadreferenzen.
|
||||
|
||||
## Nicht lokal ausfuehrbar
|
||||
|
||||
`bin/console` konnte lokal nicht ausgefuehrt werden, weil im ZIP kein `vendor/` enthalten ist:
|
||||
|
||||
```text
|
||||
Dependencies are missing. Try running "composer install".
|
||||
```
|
||||
|
||||
## Empfohlene Projektchecks nach dem Einspielen
|
||||
|
||||
```bash
|
||||
bin/console cache:clear
|
||||
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
|
||||
```
|
||||
|
||||
## Naechster moeglicher Schritt
|
||||
|
||||
Wenn p54 gruen ist, koennte ein spaeterer Patch einzelne besonders genreabhaengige Werte schrittweise physisch in diese Surface ueberfuehren oder von dort referenzieren.
|
||||
|
||||
Das sollte separat und klein passieren, z. B. zuerst nur Produktrollen/Vocabulary-Views, ohne Runtime-Logik zu aendern.
|
||||
@@ -0,0 +1,89 @@
|
||||
# RetrieX Patch p55b - Genre Config Values Validation Hotfix
|
||||
|
||||
## Purpose
|
||||
|
||||
Small follow-up hotfix for p55 Single-Genre Config Values.
|
||||
|
||||
p55 correctly added `configuration_values` to `config/retriex/genre.yaml`, but the effective config output used by `mto:agent:config:validate` did not expose this block. As a result, validation reported:
|
||||
|
||||
```text
|
||||
Config validation failed: genre.configuration_values must be a non-empty map.
|
||||
```
|
||||
|
||||
The patch also corrects two stale `adaptation_surface.product_roles` path references for the `no_llm_fallback` product role vocabulary-view indirection.
|
||||
|
||||
## Scope
|
||||
|
||||
Changed files:
|
||||
|
||||
- `config/retriex/genre.yaml`
|
||||
- `src/Config/RetriexEffectiveConfigProvider.php`
|
||||
|
||||
## Changes
|
||||
|
||||
### Effective config exposure
|
||||
|
||||
`RetriexEffectiveConfigProvider::genreConfig()` now includes:
|
||||
|
||||
```php
|
||||
'configuration_values' => $this->genreConfig->getConfigurationValues(),
|
||||
```
|
||||
|
||||
This makes the p55 value surface visible to the existing config validation path.
|
||||
|
||||
### Path reference cleanup
|
||||
|
||||
The stale paths:
|
||||
|
||||
```text
|
||||
agent.no_llm_fallback.product_roles.main_device_request_keywords
|
||||
agent.no_llm_fallback.product_roles.accessory_product_keywords
|
||||
```
|
||||
|
||||
were replaced with the current vocabulary-view config paths:
|
||||
|
||||
```text
|
||||
agent.no_llm_fallback.product_roles.vocabulary_views.main_device_request_keywords
|
||||
agent.no_llm_fallback.product_roles.vocabulary_views.accessory_product_keywords
|
||||
```
|
||||
|
||||
The same path spelling was corrected in the corresponding `configuration_values.product_roles.no_llm_fallback_terms.source_paths` metadata.
|
||||
|
||||
## Non-goals
|
||||
|
||||
This patch does not:
|
||||
|
||||
- wire runtime behavior to `genre.yaml`
|
||||
- introduce multi-genre or tenant logic
|
||||
- add new product terms
|
||||
- add new defaults
|
||||
- change ranking, retrieval, Shopware criteria or LLM behavior
|
||||
- move legacy values out of their existing files
|
||||
|
||||
## Local checks
|
||||
|
||||
Performed locally in the extracted project without `vendor/`:
|
||||
|
||||
```bash
|
||||
php -l src/Config/GenreConfig.php
|
||||
php -l src/Config/RetriexEffectiveConfigProvider.php
|
||||
php -l src/Config/ConfigSourceAuditProvider.php
|
||||
```
|
||||
|
||||
YAML parsing was also checked for all files under `config/retriex/*.yaml`.
|
||||
|
||||
A lightweight path check verified that the two corrected `no_llm_fallback` paths now point to existing raw config locations.
|
||||
|
||||
Full Symfony console checks could not be executed locally because the ZIP does not contain `vendor/`.
|
||||
|
||||
## Recommended project checks
|
||||
|
||||
After applying the patch in the full project, run:
|
||||
|
||||
```bash
|
||||
bin/console cache:clear
|
||||
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
|
||||
```
|
||||
@@ -0,0 +1,148 @@
|
||||
# RetrieX Patch p55 - Single-Genre Config Values
|
||||
|
||||
## Ziel
|
||||
|
||||
Dieser Patch ist der erste Schritt nach p54, um RetrieX fuer eine **eine Installation = ein Genre**-Konfiguration vorzubereiten.
|
||||
|
||||
p54 war die Landkarte (`adaptation_surface`). p55 fuegt nun in `config/retriex/genre.yaml` eine erste zentrale Werteflaeche hinzu:
|
||||
|
||||
```yaml
|
||||
retriex.genre.config:
|
||||
configuration_values:
|
||||
product_roles:
|
||||
product_attributes:
|
||||
brands_and_canonical_terms:
|
||||
intent_and_routing:
|
||||
context_resolution:
|
||||
shop_query_runtime:
|
||||
result_identity_and_answer_policy:
|
||||
search_repair:
|
||||
retrieval_and_language:
|
||||
shop_data_mapping:
|
||||
governance_and_regression:
|
||||
```
|
||||
|
||||
Die Werte sind aus dem aktuellen stabilen Wasseranalyse-/Messgeraete-Genre uebernommen. Dadurch ist erstmals an einer zentralen Stelle sichtbar, welche konkreten fachlichen Werte bei einer spaeteren Umwidmung, z. B. auf Fashion, Moebel, Ersatzteile oder Elektronik, ersetzt werden muessten.
|
||||
|
||||
## Bewusste Nicht-Ziele
|
||||
|
||||
- Keine Multi-Genre-Loesung
|
||||
- Keine Tenant-Logik
|
||||
- Keine Runtime-Umschaltung pro Request
|
||||
- Keine SaaS-/Host-/API-Key-Auswahl
|
||||
- Keine fachliche Logikaenderung
|
||||
- Keine neuen fachlichen Tokenlisten im PHP-Core
|
||||
- Keine Ranking-, Retrieval- oder Shopware-Kriterienaenderung
|
||||
- Keine LLM-Verhaltensaenderung
|
||||
- Keine Entfernung alter Config-Pfade
|
||||
- Kein p56-Wiring
|
||||
|
||||
Die Runtime liest nach diesem Patch weiterhin die bisherigen Config-Dateien und Pfade. `configuration_values` ist die neue zentrale Pflege-/Migrationsflaeche, aber noch nicht die fuehrende Runtime-Quelle.
|
||||
|
||||
## Geaenderte Dateien
|
||||
|
||||
```text
|
||||
config/retriex/genre.yaml
|
||||
src/Config/GenreConfig.php
|
||||
src/Config/RetriexEffectiveConfigProvider.php
|
||||
RETRIEX_PATCH_55_SINGLE_GENRE_CONFIG_VALUES_README.md
|
||||
```
|
||||
|
||||
## Wichtigste Aenderungen
|
||||
|
||||
### `config/retriex/genre.yaml`
|
||||
|
||||
Neu ist der Block:
|
||||
|
||||
```yaml
|
||||
configuration_values:
|
||||
...
|
||||
```
|
||||
|
||||
Er enthaelt die aktuellen genreabhaengigen Werte gruppiert nach denselben Bereichen wie `adaptation_surface`:
|
||||
|
||||
- Produktrollen und Shop-/Prompt-Views
|
||||
- Produktattribute und numerische Constraints
|
||||
- Marken, Canonical Terms und Query-Enrichment
|
||||
- Intent- und Routing-Signale
|
||||
- Follow-up-/Kontextanker
|
||||
- Shopquery-Runtime
|
||||
- Result-Identity und Antwort-/Grounding-Regeln
|
||||
- Search Repair
|
||||
- Retrieval-/Language-Begriffe
|
||||
- Shopdaten-Mapping
|
||||
- Governance-/Regression-Guardrails
|
||||
|
||||
Jeder Unterbereich enthaelt `source_paths`, damit nachvollziehbar bleibt, aus welchen bestehenden Runtime-Pfaden die Werte stammen.
|
||||
|
||||
### `GenreConfig`
|
||||
|
||||
Neue Zugriffsmethoden:
|
||||
|
||||
```php
|
||||
getConfigurationValues(): array
|
||||
getConfigurationValueGroup(string $group): array
|
||||
```
|
||||
|
||||
Diese Methoden stellen die neue Werteflaeche bereit, ohne die Runtime bereits darauf umzustellen.
|
||||
|
||||
### `RetriexEffectiveConfigProvider`
|
||||
|
||||
Die Config-Validierung prueft nun zusaetzlich:
|
||||
|
||||
- `genre.configuration_values` ist eine nicht-leere Map
|
||||
- jede Werte-Gruppe ist eine nicht-leere Map
|
||||
- fuer jede `adaptation_surface`-Gruppe existiert eine passende `configuration_values`-Gruppe
|
||||
|
||||
Fehlende Value-Gruppen wuerden als Warnung sichtbar; strukturell falsche Value-Gruppen als Fehler.
|
||||
|
||||
## Warum p55 noch kein Wiring macht
|
||||
|
||||
p55 soll bewusst risikoarm bleiben. Die alten Pfade bleiben fuehrend, damit bestehende Regressionen und Shop-/RAG-Verhalten unveraendert bleiben.
|
||||
|
||||
Der naechste Schritt waere ein separater Patch:
|
||||
|
||||
```text
|
||||
p56 Single-Genre Config Wiring
|
||||
```
|
||||
|
||||
Dort koennen ausgewaehlte Getter oder ein zentraler Effective-Provider bevorzugt aus `genre.configuration_values` lesen und bei fehlenden Werten auf die alten Pfade zurueckfallen.
|
||||
|
||||
## Lokale Pruefungen
|
||||
|
||||
Ausgefuehrt im entpackten Patch-Arbeitsstand:
|
||||
|
||||
```bash
|
||||
php -l src/Config/GenreConfig.php
|
||||
php -l src/Config/RetriexEffectiveConfigProvider.php
|
||||
```
|
||||
|
||||
Ergebnis: beide PHP-Lints gruen.
|
||||
|
||||
Zusaetzlich wurden alle YAML-Dateien unter `config/retriex/*.yaml` per Python/YAML-Parser geprueft.
|
||||
|
||||
Ergebnis: YAML-Parsing gruen.
|
||||
|
||||
Zusaetzlich wurde geprueft:
|
||||
|
||||
- `adaptation_surface` hat 11 Gruppen
|
||||
- `configuration_values` hat dieselben 11 Gruppen
|
||||
- keine `adaptation_surface`-Gruppe ohne entsprechende Werte-Gruppe
|
||||
|
||||
## Nicht lokal ausfuehrbar
|
||||
|
||||
`bin/console` konnte lokal nicht ausgefuehrt werden, weil im ZIP kein `vendor/` enthalten ist:
|
||||
|
||||
```text
|
||||
Dependencies are missing. Try running "composer install".
|
||||
```
|
||||
|
||||
## Empfohlene Projektchecks nach dem Einspielen
|
||||
|
||||
```bash
|
||||
bin/console cache:clear
|
||||
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
|
||||
```
|
||||
@@ -0,0 +1,62 @@
|
||||
# RetrieX Patch p56 - Single-Genre Config Wiring
|
||||
|
||||
## Ziel
|
||||
|
||||
Dieser Patch macht die in p55 eingefuehrte `config/retriex/genre.yaml` fuer eine erste, risikoarme Auswahl fachlicher Runtime-Parameter zur bevorzugten Quelle.
|
||||
|
||||
Es bleibt strikt bei: eine Installation = ein Genre. Es gibt keine Multi-Genre-Umschaltung, keinen Tenant-Kontext und keinen Request-/Host-Resolver.
|
||||
|
||||
## Was geaendert wurde
|
||||
|
||||
- `GenreConfig` erhaelt typisierte Value-Getter fuer Listen, Maps, Strings, Booleans und Integer unter `configuration_values`.
|
||||
- `DomainVocabularyConfig` liest bevorzugt passende Genre-Werte fuer zentrale Produktrollen, Shop-/Prompt-Views, Search-Repair-Views und relevante Vocabulary-Maps.
|
||||
- `CommerceQueryParserConfig` liest bevorzugt Genre-Werte fuer `known_brands` und `search_token_canonical_map`.
|
||||
- `QueryEnricherConfig` liest bevorzugt Genre-Werte fuer Query-Enrichment-Regeln.
|
||||
- `CommerceIntentConfig` liest bevorzugt Genre-Werte fuer Commerce-Signale, Advisory-Patterns, Farben und Groessen.
|
||||
- `AgentRunnerConfig` liest bevorzugt Genre-Werte fuer ausgewaehlte Shop-Runtime-Listen, Kontextanker, Direct-Answer-Texte und Laengen-Constraint-Patterns.
|
||||
- `config/services.yaml` verdrahtet `GenreConfig` in diese Config-Fassaden.
|
||||
|
||||
## Nicht geaendert
|
||||
|
||||
- Keine neue Profil-/Layer-Architektur.
|
||||
- Keine Multi-Domain-/Tenant-Loesung.
|
||||
- Keine neuen fachlichen Listen.
|
||||
- Keine Shopware-Kriterien-, Ranking-, Retrieval- oder LLM-Verhaltensaenderung.
|
||||
- Legacy-YAML-Pfade bleiben als Fallback erhalten.
|
||||
|
||||
## Erwartetes Verhalten
|
||||
|
||||
Da p55 die aktuellen Werte bereits identisch gespiegelt hat, sollte sich das Laufzeitverhalten nicht aendern. Der Unterschied ist nur die bevorzugte Pflegequelle fuer die verdrahteten Parameter.
|
||||
|
||||
## Geaenderte Dateien
|
||||
|
||||
- `config/services.yaml`
|
||||
- `src/Config/AgentRunnerConfig.php`
|
||||
- `src/Config/CommerceIntentConfig.php`
|
||||
- `src/Config/CommerceQueryParserConfig.php`
|
||||
- `src/Config/DomainVocabularyConfig.php`
|
||||
- `src/Config/GenreConfig.php`
|
||||
- `src/Config/QueryEnricherConfig.php`
|
||||
|
||||
## Lokale Checks
|
||||
|
||||
```bash
|
||||
php -l src/Config/AgentRunnerConfig.php
|
||||
php -l src/Config/CommerceIntentConfig.php
|
||||
php -l src/Config/CommerceQueryParserConfig.php
|
||||
php -l src/Config/DomainVocabularyConfig.php
|
||||
php -l src/Config/GenreConfig.php
|
||||
php -l src/Config/QueryEnricherConfig.php
|
||||
```
|
||||
|
||||
YAML-Parsing fuer alle Dateien unter `config/retriex/*.yaml`.
|
||||
|
||||
Projektchecks nach dem Einspielen:
|
||||
|
||||
```bash
|
||||
bin/console cache:clear
|
||||
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
|
||||
```
|
||||
@@ -0,0 +1,64 @@
|
||||
# RetrieX Patch p57 - Single-Genre Source Audit / Legacy Cleanup Guard
|
||||
|
||||
## Ziel
|
||||
|
||||
Dieser Patch ist der naechste kleine Schritt nach p56. Er loescht noch keine Legacy-YAML-Werte, sondern haertet die zentrale Single-Genre-Pflegeflaeche fuer den spaeteren Cleanup.
|
||||
|
||||
Es bleibt strikt bei: eine Installation = ein Genre. Es gibt keine Multi-Genre-Umschaltung, keinen Tenant-Kontext und keinen Request-/Host-Resolver.
|
||||
|
||||
## Warum dieser Schritt
|
||||
|
||||
Nach p55/p56 sind viele fachliche Werte bevorzugt in `config/retriex/genre.yaml` gepflegt, waehrend die alten Pfade als Fallback bestehen bleiben. Damit diese Uebergangsphase kontrollierbar bleibt, muessen die in `genre.configuration_values.*.source_paths` dokumentierten Legacy-/Effective-Pfade selbst validierbar und auditierbar sein.
|
||||
|
||||
p57 macht diese Source-Path-Metadaten maschinenlesbar und sichtbar.
|
||||
|
||||
## Was geaendert wurde
|
||||
|
||||
- `GenreConfig` erhaelt `getConfigurationValueSourcePaths()`.
|
||||
- `RetriexEffectiveConfigProvider` validiert nun auch die `source_paths` unter `genre.configuration_values` gegen bekannte effektive bzw. Legacy-Config-Pfade.
|
||||
- `ConfigSourceAuditProvider` sammelt die Single-Genre-Source-Path-Metadaten fuer `mto:agent:config:audit-source --json`.
|
||||
- `ConfigSourceAuditCommand --details` zeigt zusaetzlich eine Tabelle der Single-Genre-Source-Pfade.
|
||||
|
||||
## Nicht geaendert
|
||||
|
||||
- Keine Fachlogik-Aenderung.
|
||||
- Keine neuen fachlichen Listen.
|
||||
- Keine neuen Defaults.
|
||||
- Keine Entfernung von Legacy-Fallback-Werten.
|
||||
- Keine Shopware-Kriterien-, Ranking-, Retrieval- oder LLM-Verhaltensaenderung.
|
||||
- Keine Multi-Genre-/Tenant-Loesung.
|
||||
|
||||
## Erwartetes Verhalten
|
||||
|
||||
Das Antwortverhalten bleibt unveraendert. Der Unterschied ist nur, dass die zentrale Genre-Konfiguration besser validiert und auditierbar ist.
|
||||
|
||||
Wenn spaeter ein falscher oder veralteter `source_paths`-Eintrag in `genre.yaml` entsteht, meldet `mto:agent:config:validate` eine Warnung statt den Fehler unbemerkt zu lassen.
|
||||
|
||||
## Geaenderte Dateien
|
||||
|
||||
- `src/Config/GenreConfig.php`
|
||||
- `src/Config/RetriexEffectiveConfigProvider.php`
|
||||
- `src/Config/ConfigSourceAuditProvider.php`
|
||||
- `src/Command/ConfigSourceAuditCommand.php`
|
||||
- `RETRIEX_PATCH_57_SINGLE_GENRE_SOURCE_AUDIT_README.md`
|
||||
|
||||
## Lokale Checks
|
||||
|
||||
```bash
|
||||
php -l src/Config/GenreConfig.php
|
||||
php -l src/Config/RetriexEffectiveConfigProvider.php
|
||||
php -l src/Config/ConfigSourceAuditProvider.php
|
||||
php -l src/Command/ConfigSourceAuditCommand.php
|
||||
```
|
||||
|
||||
YAML-Parsing fuer alle Dateien unter `config/retriex/*.yaml`.
|
||||
|
||||
Projektchecks nach dem Einspielen:
|
||||
|
||||
```bash
|
||||
bin/console cache:clear
|
||||
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
|
||||
```
|
||||
@@ -0,0 +1,81 @@
|
||||
# RetrieX Patch p58 - Single-Genre Legacy Value Reduction
|
||||
|
||||
## Ziel
|
||||
|
||||
Dieser Patch ist der erste kontrollierte Legacy-Cleanup nach p56/p57.
|
||||
|
||||
Es bleibt strikt bei: eine Installation = ein Genre. Es gibt keine Multi-Genre-Umschaltung, keinen Tenant-Kontext und keinen Request-/Host-Resolver.
|
||||
|
||||
## Warum dieser Schritt
|
||||
|
||||
p55 hat die aktuellen fachlichen Wasseranalyse-/Messgeraete-Werte in `config/retriex/genre.yaml` gespiegelt. p56 hat eine erste sichere Auswahl dieser Werte als bevorzugte Runtime-Quelle verdrahtet. p57 hat die `source_paths` dieser zentralen Genre-Werte validierbar und auditierbar gemacht.
|
||||
|
||||
p58 reduziert nun die erste Welle doppelter Legacy-Wertpflege: Werte, die p56 bereits bevorzugt aus `genre.yaml` liest, werden an ihren alten Pfaden zu leeren Platzhaltern reduziert. Die Pfade bleiben vorhanden, damit Validierung, Audit und Source-Path-Dokumentation weiterhin stabil bleiben.
|
||||
|
||||
## Was geaendert wurde
|
||||
|
||||
Reduziert wurden ausschliesslich bereits verdrahtete Legacy-Werte in:
|
||||
|
||||
- `config/retriex/agent.yaml`
|
||||
- Shopquery-Stopword-Cleanup-Terms
|
||||
- direkte Attribut-/Vergleichs-Patterns
|
||||
- referenzielle Kontextterme
|
||||
- History-Anchor-Patterns und Template
|
||||
- Meta-Query-Guard-Terms
|
||||
- RAG-Anchor-Enrichment-Patterns/-Terms
|
||||
- Result-Identity-Listen
|
||||
- Laengenfilter-/Sortierpatterns
|
||||
- Direct-Shop-Answer-Texte
|
||||
- `config/retriex/commerce.yaml`
|
||||
- `commerce_query.known_brands`
|
||||
- `commerce_query.search_token_canonical_map`
|
||||
- `config/retriex/intent.yaml`
|
||||
- Commerce-Strong-Signals
|
||||
- Advisory-Signals und Advisory-Patterns
|
||||
- Size-/Color-Terms
|
||||
- Explicit-Commerce-Intent-Patterns
|
||||
- `config/retriex/query_enrichment.yaml`
|
||||
- Query-Enrichment-Regeln
|
||||
|
||||
## Nicht geaendert
|
||||
|
||||
- Keine Fachlogik-Aenderung.
|
||||
- Keine neuen fachlichen Listen.
|
||||
- Keine neuen Defaults.
|
||||
- Keine Shopware-Kriterien-, Ranking-, Retrieval- oder LLM-Verhaltensaenderung.
|
||||
- Keine Multi-Genre-/Tenant-Loesung.
|
||||
- Keine Entfernung von Legacy-Pfaden.
|
||||
- Keine Reduktion der noch nicht voll entkoppelten `vocabulary.yaml`-Include-Ketten.
|
||||
|
||||
## Erwartetes Verhalten
|
||||
|
||||
Das Antwortverhalten soll unveraendert bleiben. Die reduzierten Legacy-Werte sind identisch in `genre.configuration_values` vorhanden und werden durch p56 bevorzugt gelesen. Die alten Pfade bleiben als leere Fallback-/Audit-Platzhalter erhalten.
|
||||
|
||||
Damit wird die zentrale Single-Genre-Pflegeflaeche staerker: Fuer eine spaetere Umwidmung auf ein anderes Genre sollen diese Werte in `genre.yaml` gepflegt werden, nicht mehr parallel in den alten Runtime-Dateien.
|
||||
|
||||
## Lokale Pruefung
|
||||
|
||||
Durchgefuehrt:
|
||||
|
||||
```bash
|
||||
python3 - <<'PY'
|
||||
# YAML-Parsing fuer alle Dateien unter config/retriex/*.yaml und config/services.yaml
|
||||
PY
|
||||
```
|
||||
|
||||
Zusaetzlich wurde statisch geprueft:
|
||||
|
||||
- 32 reduzierte Legacy-Pfade hatten vor der Reduktion identische Werte in `genre.configuration_values`.
|
||||
- dieselben 32 Legacy-Pfade sind nach der Reduktion leer, aber weiterhin vorhanden.
|
||||
|
||||
`bin/console` konnte lokal nicht ausgefuehrt werden, weil im ZIP kein `vendor/` enthalten ist.
|
||||
|
||||
## Projektchecks nach dem Einspielen
|
||||
|
||||
```bash
|
||||
bin/console cache:clear
|
||||
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
|
||||
```
|
||||
@@ -0,0 +1,75 @@
|
||||
# RetrieX Patch p59B - Genre Adaptation Surface Cleanup
|
||||
|
||||
## Ziel
|
||||
|
||||
p59A hat leere Legacy-`source_paths` aus `genre.configuration_values` entfernt und native Genre-Werte mit `origin: genre_native` markiert. p59B räumt nun die darüber liegende `genre.adaptation_surface` auf.
|
||||
|
||||
Die `adaptation_surface` soll nicht mehr als Sammelliste alter YAML-Pfade verstanden werden. Sie ist jetzt eine Review-/Orientierungsfläche mit zwei klar getrennten Kategorien:
|
||||
|
||||
- `value_paths`: native Pflegepunkte innerhalb von `genre.configuration_values`
|
||||
- `review_paths`: noch bewusst sichtbare nicht-leere technische, frozen oder runtime-nahe Pfade außerhalb von `genre.configuration_values`
|
||||
|
||||
## Änderungen
|
||||
|
||||
### `config/retriex/genre.yaml`
|
||||
|
||||
- Entfernt das alte generische Feld `adaptation_surface.*.paths` vollständig.
|
||||
- Entfernt 82 leere Legacy-Inventarpfade aus der `adaptation_surface`.
|
||||
- Entfernt 20 nicht mehr auflösbare/stale Legacy-Inventarpfade aus der `adaptation_surface`.
|
||||
- Fügt 47 native `value_paths` hinzu, die direkt auf `configuration_values.*` zeigen.
|
||||
- Behält 32 nicht-leere technische/frozen/runtime-nahe Pfade als `review_paths`.
|
||||
|
||||
### `src/Config/RetriexEffectiveConfigProvider.php`
|
||||
|
||||
- `validateGenre()` akzeptiert jetzt die neue `adaptation_surface`-Struktur.
|
||||
- `value_paths` werden gegen `genre.configuration_values` validiert.
|
||||
- `review_paths` werden gegen die effektive Konfiguration validiert.
|
||||
- Das alte Feld `paths` bleibt bewusst kompatibel validierbar, ist aber in `genre.yaml` nicht mehr im Einsatz.
|
||||
|
||||
## Nicht geändert
|
||||
|
||||
- Keine Runtime-Logik geändert.
|
||||
- Keine Retrieval-/Prompt-/Shop-/Scoring-Logik geändert.
|
||||
- Keine Genre-Werte geändert.
|
||||
- Keine frozen Source-Path-Hashes geändert.
|
||||
- Keine `configuration_values.*.source_paths` geändert.
|
||||
|
||||
## Ergebnis der lokalen Prüfungen
|
||||
|
||||
Lokale Prüfungen ohne Projekt-Dependencies:
|
||||
|
||||
- `genre.yaml` ist parsebar.
|
||||
- PHP-Lint grün für die geänderte Config-Klasse.
|
||||
- Adaptation-Surface-Simulation:
|
||||
- 11 Surface-Gruppen
|
||||
- 47 `value_paths`
|
||||
- 32 `review_paths`
|
||||
- 0 alte `paths`-Felder
|
||||
- 0 unbekannte `value_paths`
|
||||
- 0 unbekannte `review_paths`
|
||||
- Source-of-Truth-Simulation weiterhin grün:
|
||||
- 17 Value-Nodes mit `source_paths`
|
||||
- 39 deklarierte Source-Pfade
|
||||
- 37 frozen non-empty Legacy-Pfade
|
||||
- 2 runtime-resolved Pfade
|
||||
- 0 Fehler
|
||||
|
||||
Symfony-Checks konnten lokal nicht ausgeführt werden, weil die ZIP kein `vendor/` enthält.
|
||||
|
||||
## Empfohlene Projektchecks nach Einspielen
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
## Folgepatch-Idee
|
||||
|
||||
p59C kann die 32 verbliebenen `review_paths` klassifizieren:
|
||||
|
||||
- echte technische Config, die nicht nach `genre.yaml` gehört
|
||||
- frozen Fallbacks, die nach weiterem Rewiring entfernt werden können
|
||||
- runtime-resolved Werte, die bewusst außerhalb der Genre-Pflege bleiben
|
||||
|
||||
134
patch_history/RETRIEX_PATCH_59_COMPLETE_GENRE_WIRING_README.md
Normal file
134
patch_history/RETRIEX_PATCH_59_COMPLETE_GENRE_WIRING_README.md
Normal file
@@ -0,0 +1,134 @@
|
||||
# RetrieX Patch p59 - Complete Genre Wiring
|
||||
|
||||
## Ziel
|
||||
|
||||
Dieser Patch schliesst die Genre-Verdrahtung weiter ab: noch nicht oder nur indirekt verdrahtete fachliche Parameter lesen nun bevorzugt aus `config/retriex/genre.yaml`.
|
||||
|
||||
Wichtig: p59 loescht keine Werte aus Legacy-YAMLs. Die alten Pfade bleiben als Fallback aktiv. Damit ist der Patch bewusst ein reiner Wiring-Schritt und bereitet p60 vor.
|
||||
|
||||
## Warum dieser Schritt
|
||||
|
||||
p55 bis p58 haben die zentrale Single-Genre-Pflegeflaeche aufgebaut, erste Runtime-Flows an `genre.yaml` angeschlossen und bereits verdrahtete Legacy-Werte kontrolliert reduziert.
|
||||
|
||||
p59 erweitert diese bevorzugte Genre-Leselogik auf die verbliebenen fachlichen Oberflaechen, insbesondere:
|
||||
|
||||
- `vocabulary.yaml` Include-/View-/Map-Ketten
|
||||
- `prompt.yaml` fachliche Antwort-, Format- und Grounding-Regeln
|
||||
- `search_repair.yaml` fachliche Suchreparatur-Patterns und Candidate-Terms
|
||||
- `retrieval.yaml` Exact-Selection- und fachliche Retrieval-Begriffe
|
||||
- `language.yaml` `protected_terms`
|
||||
- `governance.yaml` fachliche Regression-/Guardrail-Erwartungen
|
||||
- fachliche Intent-/Routing-Restwerte fuer Commerce/Sales
|
||||
- Commercial-Table-Follow-up-Anker in `agent.yaml`
|
||||
|
||||
## Was geaendert wurde
|
||||
|
||||
### Genre-Konfiguration
|
||||
|
||||
`config/retriex/genre.yaml` wurde um fehlende, bereits bestehende fachliche Werte ergaenzt. Die Werte wurden aus den bisherigen Legacy-Pfaden uebernommen, nicht neu erfunden.
|
||||
|
||||
Ergaenzt wurden insbesondere:
|
||||
|
||||
- Shop-Semantic-Search-Tokens aus `vocabulary.views.shop.semantic_search_tokens`
|
||||
- technische Prompt-Keywords aus `vocabulary.views.prompt.technical_product_keywords`
|
||||
- Measurement-Evidence-Maps aus `vocabulary.maps.prompt.measurement_evidence_guard`
|
||||
- Safety-Doc-/Safety-Word-Retrieval-Views aus `vocabulary.views.retrieval.*`
|
||||
|
||||
### Runtime-/Config-Facades
|
||||
|
||||
Folgende Config-Klassen lesen neue fachliche Werte bevorzugt aus `GenreConfig` und fallen sonst auf die bestehenden Legacy-Pfade zurueck:
|
||||
|
||||
- `DomainVocabularyConfig`
|
||||
- `PromptBuilderConfig`
|
||||
- `SearchRepairConfig`
|
||||
- `NdjsonHybridRetrieverConfig`
|
||||
- `LanguageCleanupConfig`
|
||||
- `GovernanceConfig`
|
||||
- `SalesIntentConfig`
|
||||
- `CommerceIntentConfig`
|
||||
- `AgentRunnerConfig`
|
||||
|
||||
### Dependency Injection
|
||||
|
||||
`config/services.yaml` injiziert `GenreConfig` nun auch in die neu verdrahteten Config-Facades.
|
||||
|
||||
## Nicht geaendert
|
||||
|
||||
- Keine Legacy-Wertloeschung.
|
||||
- Keine Reduktion von `vocabulary.yaml`, `prompt.yaml`, `search_repair.yaml`, `retrieval.yaml`, `language.yaml` oder `governance.yaml`.
|
||||
- Keine neuen fachlichen Defaults im PHP-Core.
|
||||
- Keine neuen harten Token-/Stringlisten im PHP-Core.
|
||||
- Keine Multi-Genre-/Tenant-Umschaltung.
|
||||
- Keine Aenderung an `model.yaml`, `vector.yaml`, `index.yaml`, `runtime.yaml`, Cache-/Pfad-Konfiguration, LLM-Timeouts, Embedding-Modellen, Chunk-Groessen, technischen Stream Guards oder allgemeinem `final_answer_guard`.
|
||||
- Keine Shopware-Kriterien-, Ranking-, Retrieval-Scoring- oder LLM-Logik-Aenderung.
|
||||
|
||||
## Erwartetes Verhalten
|
||||
|
||||
Das fachliche Antwortverhalten soll unveraendert bleiben. Fuer die verdrahteten Werte gilt nun:
|
||||
|
||||
1. `genre.yaml` ist bevorzugte Quelle.
|
||||
2. Die bisherigen Legacy-Pfade bleiben Fallback.
|
||||
3. p60 kann danach die verbleibenden doppelten Legacy-Werte sicher reduzieren.
|
||||
|
||||
Damit bleibt das Zielbild sauber getrennt:
|
||||
|
||||
- `genre.yaml` sagt, was fachlich relevant ist.
|
||||
- Agent/Commerce/Prompt/Retrieval/Search-Repair/Language/Governance sagen, wie diese Werte verarbeitet, validiert oder auditiert werden.
|
||||
|
||||
## Lokale Pruefung
|
||||
|
||||
Durchgefuehrt:
|
||||
|
||||
```bash
|
||||
php -l src/Config/DomainVocabularyConfig.php
|
||||
php -l src/Config/PromptBuilderConfig.php
|
||||
php -l src/Config/SearchRepairConfig.php
|
||||
php -l src/Config/NdjsonHybridRetrieverConfig.php
|
||||
php -l src/Config/LanguageCleanupConfig.php
|
||||
php -l src/Config/GovernanceConfig.php
|
||||
php -l src/Config/SalesIntentConfig.php
|
||||
php -l src/Config/CommerceIntentConfig.php
|
||||
php -l src/Config/AgentRunnerConfig.php
|
||||
```
|
||||
|
||||
Alle PHP-Syntaxchecks waren gruen.
|
||||
|
||||
```bash
|
||||
python3 - <<'PY'
|
||||
# YAML-Parsing fuer alle Dateien unter config/retriex/*.yaml
|
||||
PY
|
||||
```
|
||||
|
||||
Alle `config/retriex/*.yaml` Dateien konnten geparst werden.
|
||||
|
||||
Zusaetzlich wurde skriptbasiert geprueft, dass die neu verdrahteten Genre-Werte den bisherigen Legacy-Werten entsprechen. Geprueft wurden unter anderem:
|
||||
|
||||
- Vocabulary-Views und Vocabulary-Maps
|
||||
- Prompt-Regeln und technische Keywords
|
||||
- Search-Repair-Patterns und Candidate-Terms
|
||||
- Retrieval-Safety-Views und Language-Protected-Terms
|
||||
- Governance-/Regression-Guardrail-Werte
|
||||
- Sales-/Commerce-Intent-Restwerte
|
||||
- Commercial-Table-Follow-up-Anker
|
||||
|
||||
Ergebnis: `RESULT PASS`.
|
||||
|
||||
`bin/console` konnte lokal nicht ausgefuehrt werden, weil im ZIP kein `vendor/` enthalten ist:
|
||||
|
||||
```text
|
||||
Dependencies are missing. Try running "composer install".
|
||||
```
|
||||
|
||||
## Projektchecks nach dem Einspielen
|
||||
|
||||
```bash
|
||||
bin/console cache:clear
|
||||
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
|
||||
```
|
||||
|
||||
## Naechster Schritt
|
||||
|
||||
Wenn p59 gruen ist, kann p60 folgen: `Legacy Value Reduction Final`. Erst dort werden die verbleibenden doppelten fachlichen Werte aus den Legacy-YAMLs entfernt oder auf leere Fallback-Platzhalter reduziert.
|
||||
@@ -0,0 +1,92 @@
|
||||
# RetrieX Patch p60b - Prompt Measurement Vocabulary View Hotfix
|
||||
|
||||
## Ziel
|
||||
|
||||
p60b behebt den nach p60 beobachteten Fehler:
|
||||
|
||||
```text
|
||||
RetrieX prompt vocabulary view "prompt.measurement_evidence_guard.generic_positive_context_terms" resolved to an empty list.
|
||||
```
|
||||
|
||||
## Ursache
|
||||
|
||||
p60 hat die Legacy-Werte in `config/retriex/vocabulary.yaml` korrekt auf leere Fallback-Strukturen reduziert. Dabei wurde sichtbar, dass die Prompt-Measurement-Evidence-Views zwar bereits in `genre.yaml` gepflegt werden, aber noch nicht unter den vom Prompt verwendeten View-Pfaden verdrahtet waren.
|
||||
|
||||
Die vorhandene Genre-Verdrahtung deckte bereits die Agent-Pfade ab:
|
||||
|
||||
```text
|
||||
agent.rag_evidence_guard.*
|
||||
```
|
||||
|
||||
Der Prompt nutzt jedoch diese Pfade:
|
||||
|
||||
```text
|
||||
prompt.measurement_evidence_guard.*
|
||||
```
|
||||
|
||||
Dadurch fiel der Prompt nach p60 auf die nun leere Legacy-View zurück und brach korrekt mit einer Empty-List-Validierung ab.
|
||||
|
||||
## Umsetzung
|
||||
|
||||
`src/Config/DomainVocabularyConfig.php` erhält zusätzliche View-Mappings für die Prompt-Measurement-Evidence-Views:
|
||||
|
||||
```text
|
||||
prompt.measurement_evidence_guard.accessory_lookup_guard_terms
|
||||
prompt.measurement_evidence_guard.accessory_lookup_passthrough_terms
|
||||
prompt.measurement_evidence_guard.generic_positive_context_terms
|
||||
prompt.measurement_evidence_guard.generic_negative_context_terms
|
||||
```
|
||||
|
||||
Alle vier lesen nun bevorzugt dieselben genrezentralen Werte wie die bereits vorhandenen Agent-RAG-Evidence-Views:
|
||||
|
||||
```text
|
||||
result_identity_and_answer_policy.measurement_evidence_guard_terms.*
|
||||
```
|
||||
|
||||
## Wichtig
|
||||
|
||||
- Keine YAML-Werte wurden wiederhergestellt.
|
||||
- Keine neuen fachlichen Werte wurden im PHP-Core eingefügt.
|
||||
- Keine Runtime-Logik wurde fachlich geändert.
|
||||
- Der Patch ist ein reiner Genre-Wiring-Hotfix für einen von p60 sichtbar gemachten fehlenden View-Alias.
|
||||
- Die p60-Legacy-Reduktion bleibt erhalten.
|
||||
|
||||
## Lokale Checks
|
||||
|
||||
Ausgeführt:
|
||||
|
||||
```bash
|
||||
php -l src/Config/DomainVocabularyConfig.php
|
||||
```
|
||||
|
||||
Ergebnis: OK.
|
||||
|
||||
Zusätzlich wurde skriptbasiert geprüft, dass alle vier Prompt-Measurement-Evidence-Views nach p60b über `genre.yaml` nicht-leer auflösbar sind:
|
||||
|
||||
```text
|
||||
accessory_lookup_guard_terms: 7 Werte
|
||||
accessory_lookup_passthrough_terms: 9 Werte
|
||||
generic_positive_context_terms: 19 Werte
|
||||
generic_negative_context_terms: 5 Werte
|
||||
```
|
||||
|
||||
YAML-Parsing aller `config/retriex/*.yaml`: OK.
|
||||
|
||||
Nicht lokal ausführbar wegen fehlendem `vendor/`:
|
||||
|
||||
```bash
|
||||
php bin/console mto:agent:config:validate
|
||||
php bin/console mto:agent:regression:test
|
||||
php bin/console mto:agent:config:audit-source --details
|
||||
php bin/console mto:agent:config:audit-patterns --details
|
||||
```
|
||||
|
||||
## Empfohlene Checks nach Einspielen
|
||||
|
||||
```bash
|
||||
bin/console cache:clear
|
||||
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
|
||||
```
|
||||
@@ -0,0 +1,133 @@
|
||||
# RetrieX Patch p60 - Legacy Value Reduction Final
|
||||
|
||||
## Ziel
|
||||
|
||||
p60 reduziert die nach p59 noch doppelt gepflegten fachlichen Legacy-Werte in den verbleibenden YAML-Dateien.
|
||||
|
||||
Die fachlichen Werte bleiben in `config/retriex/genre.yaml` erhalten und werden durch p59 bereits bevorzugt gelesen. Die alten Legacy-Pfade bleiben als Fallback-Struktur bestehen, enthalten aber nur noch leere Platzhalter oder neutrale No-Match-Regex-Platzhalter.
|
||||
|
||||
## Wichtig
|
||||
|
||||
- Keine PHP-Runtime-Logik geändert.
|
||||
- Keine neuen harten Token-/Stringlisten im PHP-Core.
|
||||
- `genre.yaml` bleibt unverändert und enthält weiterhin die fachlichen Werte.
|
||||
- Technische Verarbeitungsschichten bleiben bestehen.
|
||||
- Technische Konfigurationen wie Runtime, Model, Vector, Index, Cache, Chunking, Stream Guards und allgemeine Final-Answer-Guards wurden nicht verschoben.
|
||||
|
||||
## Geänderte Dateien
|
||||
|
||||
- `config/retriex/vocabulary.yaml`
|
||||
- `config/retriex/search_repair.yaml`
|
||||
- `config/retriex/retrieval.yaml`
|
||||
- `config/retriex/language.yaml`
|
||||
- `config/retriex/prompt.yaml`
|
||||
- `config/retriex/governance.yaml`
|
||||
|
||||
## Reduzierte Bereiche
|
||||
|
||||
### vocabulary.yaml
|
||||
|
||||
Die durch `DomainVocabularyConfig` bereits aus `genre.yaml` gelesenen Klassen, Views und Maps wurden auf leere Fallbacks reduziert, unter anderem:
|
||||
|
||||
- Produktrollen: Device-/Accessory-/Requested-Accessory-Code-Klassen
|
||||
- Shop-Views: Device-/Accessory-Query, Product, Focus und Semantic-Search-Tokens
|
||||
- Prompt-Views: Main-Device-/Accessory-/Technical-Product-Keywords
|
||||
- Search-Repair-Views: Direct-Attribute-, Candidate-, Accessory- und Specificity-Listen
|
||||
- Retrieval-Views: Generic Product Tokens, Short Model Tokens, Reagent/Safety/Device/Document Looks-Like-Listen
|
||||
- Measurement-Evidence-Maps und Accessory-Focus-Maps
|
||||
|
||||
### prompt.yaml
|
||||
|
||||
Die fachlichen Antwortregeln, die seit p59 aus `genre.yaml` gelesen werden, wurden reduziert:
|
||||
|
||||
- `output_priority.technical_rules`
|
||||
- `response_format.technical_rules`
|
||||
- `response_format.accessory_rules`
|
||||
- `fact_grounding.technical_rules`
|
||||
- `fact_grounding.with_shop_rules`
|
||||
|
||||
Allgemeine Prompt-Struktur, Labels, Budgets, Shop-Record-Regeln und technische Renderregeln bleiben unverändert.
|
||||
|
||||
### search_repair.yaml
|
||||
|
||||
Die fachlichen Search-Repair-Listen und Muster wurden reduziert:
|
||||
|
||||
- `direct_product_attribute_lookup`
|
||||
- `specific_model_candidate_patterns`
|
||||
- genreabhängige Candidate-/Accessory-/Requested-Code-Patterns
|
||||
|
||||
Für skalare Regex-Fallbacks werden neutrale gültige No-Match-Platzhalter `/(?!)/u` verwendet, damit YAML-/Regex-Validierung nicht durch leere Strings fehlschlägt.
|
||||
|
||||
### retrieval.yaml
|
||||
|
||||
Die Exact-Selection-Fachbegriffe wurden reduziert:
|
||||
|
||||
- `exact_selection_token_variant_prefixes`
|
||||
- Indicator-Frage-/Phrase-/Tabellenmuster
|
||||
- Required-Primary-/Context-Terme
|
||||
|
||||
Technische Retrieval-Parameter und nicht genrebezogene Retrieval-Einstellungen bleiben unverändert.
|
||||
|
||||
### language.yaml
|
||||
|
||||
Die Legacy-`protected_terms` wurden auf einen leeren Fallback reduziert.
|
||||
|
||||
Generische Stopword-Gruppen, Cleanup-Profile, Normalisierung, ASCII-Transliteration, Separatoren und Dash-Äquivalente bleiben bewusst in `language.yaml`, weil sie Sprach-/Verarbeitungsschicht und nicht reine Genre-Pflegefläche sind.
|
||||
|
||||
### governance.yaml
|
||||
|
||||
Die fachlichen Regression-/Guardrail-Erwartungen wurden reduziert:
|
||||
|
||||
- `regression_baseline.*` fachliche Token, Werte, Keyword- und Shop-Query-Erwartungen
|
||||
- `language.protected_stopword_terms`
|
||||
- `core_pattern_audit.domain_marker_terms`
|
||||
|
||||
Technische Audit-Regeln wie Source Roots, excluded paths, suspicious calls, allowed literal patterns und Snippet-Limits bleiben in `governance.yaml`.
|
||||
|
||||
## Lokale Validierung
|
||||
|
||||
Ausgeführt:
|
||||
|
||||
```bash
|
||||
python3 - <<'PY'
|
||||
# YAML parse for config/retriex/*.yaml
|
||||
PY
|
||||
```
|
||||
|
||||
Ergebnis: YAML parse OK.
|
||||
|
||||
Zusatzcheck:
|
||||
|
||||
- 83 reduzierte Legacy-Pfade geprüft.
|
||||
- Alle reduzierten Pfade enthalten leere Platzhalter bzw. gültige No-Match-Regex-Fallbacks.
|
||||
- `genre.yaml` wurde nicht verändert.
|
||||
|
||||
Nicht ausführbar in diesem ZIP:
|
||||
|
||||
```bash
|
||||
php bin/console mto:agent:config:validate
|
||||
```
|
||||
|
||||
Grund:
|
||||
|
||||
```text
|
||||
Dependencies are missing. Try running "composer install".
|
||||
```
|
||||
|
||||
## Empfohlene Checks nach Einspielen
|
||||
|
||||
```bash
|
||||
bin/console cache:clear
|
||||
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
|
||||
```
|
||||
|
||||
## Nächster Patch
|
||||
|
||||
Nach grünem p60:
|
||||
|
||||
- p61 Genre Source-of-Truth Guard
|
||||
|
||||
p61 sollte dann erzwingen, dass neue fachliche Listen nicht wieder außerhalb von `genre.yaml` landen und dass Legacy-Pfade leer/Fallback bleiben.
|
||||
@@ -0,0 +1,141 @@
|
||||
# RetrieX Patch p61 - Genre Source-of-Truth Guard
|
||||
|
||||
## Ziel
|
||||
|
||||
p61 schliesst die Genre-Source-of-Truth-Arbeit nach p59/p60/p60b ab.
|
||||
|
||||
Der Patch verschiebt keine fachlichen Werte mehr. Stattdessen erzwingt er per Validate/Audit, dass `genre.yaml` die zentrale Pflegequelle fuer genreabhaengige Werte bleibt und Legacy-Pfade nur noch als leere oder explizit eingefrorene Fallbacks dienen.
|
||||
|
||||
## Umfang
|
||||
|
||||
Geaendert bzw. ergaenzt:
|
||||
|
||||
- `config/retriex/governance.yaml`
|
||||
- `src/Config/GenreSourceOfTruthGuard.php`
|
||||
- `src/Config/RetriexEffectiveConfigProvider.php`
|
||||
- `src/Config/ConfigSourceAuditProvider.php`
|
||||
- `src/Command/ConfigSourceAuditCommand.php`
|
||||
|
||||
## Was der Guard prueft
|
||||
|
||||
### 1. Vollstaendige Genre-Werte
|
||||
|
||||
`genre.configuration_values` muss eine nicht-leere Map sein.
|
||||
|
||||
Fuer jede Gruppe in `genre.adaptation_surface` muss eine entsprechende Gruppe in `genre.configuration_values` existieren.
|
||||
|
||||
### 2. Source-Path-Abdeckung
|
||||
|
||||
Genre-Wertknoten mit direkter Payload muessen selbst `source_paths` deklarieren oder von einem Parent-Knoten mit `source_paths` abgedeckt sein.
|
||||
|
||||
`source_paths` muessen nicht-leere Strings sein und duerfen innerhalb eines Wertknotens nicht doppelt vorkommen.
|
||||
|
||||
### 3. Gueltige Source-Pfade
|
||||
|
||||
Alle `source_paths` werden gegen die effektive bzw. roh geladene RetrieX-Konfiguration validiert.
|
||||
|
||||
Unbekannte Source-Pfade erzeugen jetzt einen Validate-Fehler.
|
||||
|
||||
### 4. Legacy-Fallbacks sind leer oder eingefroren
|
||||
|
||||
Fuer jeden deklarierten Source-Pfad gilt:
|
||||
|
||||
- leerer Legacy-Wert: OK, Status `legacy_fallback_empty`
|
||||
- runtime-/env-aufgeloester Pfad: OK, Status `legacy_runtime_resolved_allowed`
|
||||
- nicht-leerer Legacy-Wert mit passendem Hash: OK, Status `legacy_frozen_non_empty`
|
||||
- nicht-leerer Legacy-Wert ohne registrierten Hash: Fehler
|
||||
- nicht-leerer Legacy-Wert mit abweichendem Hash: Fehler
|
||||
|
||||
Damit brechen Validate/Audit, wenn neue fachliche Listen wieder ausserhalb von `genre.yaml` landen oder eingefrorene Legacy-Werte veraendert werden.
|
||||
|
||||
## Warum eingefrorene Fallback-Hashes?
|
||||
|
||||
Einige Legacy-Pfade enthalten weiterhin technische Fallback-/Wiring-Werte oder noch nicht entfernte Legacy-Defaults, die im aktuellen gruenen Stand nicht geloescht werden sollten. p61 friert diese Werte per SHA-256-Hash ein.
|
||||
|
||||
Dadurch bleibt der aktuelle Stand kompatibel, aber kuenftige Aenderungen an diesen Legacy-Pfaden muessen bewusst ueber `genre.yaml` erfolgen.
|
||||
|
||||
## Audit-Ausgabe
|
||||
|
||||
`mto:agent:config:audit-source --details` zeigt zusaetzlich:
|
||||
|
||||
- `genre_source_of_truth_violations`
|
||||
- `genre_source_of_truth_fallback_empty`
|
||||
- `genre_source_of_truth_frozen_non_empty`
|
||||
- Detailtabelle `Genre source-of-truth guard`
|
||||
|
||||
Die Detailtabelle zeigt pro Genre-Wert:
|
||||
|
||||
- Genre value path
|
||||
- Legacy/effective source path
|
||||
- State
|
||||
- Hash
|
||||
|
||||
## Validate-/Audit-Verhalten
|
||||
|
||||
`mto:agent:config:validate` fuehrt den Guard aus und gibt Fehler aus, wenn die Source-of-Truth-Regeln verletzt sind.
|
||||
|
||||
`mto:agent:config:audit-source` gibt bei Source-of-Truth-Fehlern jetzt `Command::FAILURE` zurueck.
|
||||
|
||||
## Lokale Checks
|
||||
|
||||
Ausgefuehrt:
|
||||
|
||||
```bash
|
||||
php -l src/Config/GenreSourceOfTruthGuard.php
|
||||
php -l src/Config/RetriexEffectiveConfigProvider.php
|
||||
php -l src/Config/ConfigSourceAuditProvider.php
|
||||
php -l src/Command/ConfigSourceAuditCommand.php
|
||||
```
|
||||
|
||||
Alle PHP-Lints: OK.
|
||||
|
||||
```bash
|
||||
python3 - <<'PY'
|
||||
# YAML parse config/retriex/*.yaml
|
||||
PY
|
||||
```
|
||||
|
||||
YAML parse: OK.
|
||||
|
||||
Zusatzcheck:
|
||||
|
||||
- Source-of-Truth-Guard-Simulation gegen den aktuellen Stand: 0 Fehler
|
||||
- Ergebnisstatus der Simulation: leer/frozen/runtime erlaubt
|
||||
|
||||
Nicht lokal ausfuehrbar:
|
||||
|
||||
```bash
|
||||
php bin/console mto:agent:config:validate
|
||||
php bin/console mto:agent:regression:test
|
||||
php bin/console mto:agent:config:audit-source --details
|
||||
php bin/console mto:agent:config:audit-patterns --details
|
||||
```
|
||||
|
||||
Grund:
|
||||
|
||||
Das ZIP enthaelt kein `vendor/`.
|
||||
|
||||
Fehler:
|
||||
|
||||
```text
|
||||
Dependencies are missing. Try running "composer install".
|
||||
```
|
||||
|
||||
## Empfohlene Checks nach Einspielen
|
||||
|
||||
```bash
|
||||
bin/console cache:clear
|
||||
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
|
||||
```
|
||||
|
||||
## Abschlussbild
|
||||
|
||||
Nach p61 gilt:
|
||||
|
||||
- `genre.yaml` ist die zentrale fachliche Source of Truth.
|
||||
- Legacy-YAMLs sind technische Verarbeitungsschichten bzw. leere/eingefrorene Fallbacks.
|
||||
- Neue fachliche Listen ausserhalb von `genre.yaml` werden durch Validate/Audit verhindert.
|
||||
- Technische Runtime-/Model-/Vector-/Index-Konfiguration bleibt weiterhin ausserhalb von `genre.yaml`.
|
||||
Reference in New Issue
Block a user