From 077161460936fef33409cd8581ebc2e5508d0cbc Mon Sep 17 00:00:00 2001 From: team 1 Date: Tue, 5 May 2026 20:10:00 +0200 Subject: [PATCH] p43N --- config/retriex/vocabulary.yaml | 128 ++++++++---------- ...H_43M_VOCABULARY_MAP_ALIAS_DEDUP_README.md | 64 +++++++++ src/Config/DomainVocabularyConfig.php | 32 +++-- 3 files changed, 140 insertions(+), 84 deletions(-) create mode 100644 patch_history/RETRIEX_PATCH_43M_VOCABULARY_MAP_ALIAS_DEDUP_README.md diff --git a/config/retriex/vocabulary.yaml b/config/retriex/vocabulary.yaml index d37c635..de89a4b 100644 --- a/config/retriex/vocabulary.yaml +++ b/config/retriex/vocabulary.yaml @@ -741,78 +741,60 @@ parameters: agent: rag_evidence_guard: synonyms: - salinität: - - salinität - - salinitaet - - salinity - - salzgehalt - - tds - - leitfähigkeit - - leitfaehigkeit - salinitaet: - - salinität - - salinitaet - - salinity - - salzgehalt - - tds - - leitfähigkeit - - leitfaehigkeit - salinity: - - salinität - - salinitaet - - salinity - - salzgehalt - - tds - - leitfähigkeit - - leitfaehigkeit - redox: - - redox - - orp - - oxidations-reduktionspotential - - oxidations reduktionspotential - orp: - - redox - - orp - - oxidations-reduktionspotential - - oxidations reduktionspotential - ph: - - ph - - ph-wert - - ph wert - chlor: - - chlor - - freies chlor - - gesamtchlor - - chlorine + values: + salinity_terms: + - salinität + - salinitaet + - salinity + - salzgehalt + - tds + - leitfähigkeit + - leitfaehigkeit + redox_terms: + - redox + - orp + - oxidations-reduktionspotential + - oxidations reduktionspotential + ph_terms: + - ph + - ph-wert + - ph wert + chlorine_terms: + - chlor + - freies chlor + - gesamtchlor + - chlorine + aliases: + salinität: salinity_terms + salinitaet: salinity_terms + salinity: salinity_terms + redox: redox_terms + orp: redox_terms + ph: ph_terms + chlor: chlorine_terms shop: accessory_focus_variants: - indikator: - - indikator - - indikatoren - indikatoren: - - indikator - - indikatoren - reagenz: - - reagenz - - reagenzien - reagenzien: - - reagenz - - reagenzien - ersatzteil: - - ersatzteil - - ersatzteile - ersatzteile: - - ersatzteil - - ersatzteile - service set: - - service set - - serviceset - - service-set - serviceset: - - service set - - serviceset - - service-set - service-set: - - service set - - serviceset - - service-set + values: + indicator_terms: + - indikator + - indikatoren + reagent_terms: + - reagenz + - reagenzien + spare_part_terms: + - ersatzteil + - ersatzteile + service_set_terms: + - service set + - serviceset + - service-set + aliases: + indikator: indicator_terms + indikatoren: indicator_terms + reagenz: reagent_terms + reagenzien: reagent_terms + ersatzteil: spare_part_terms + ersatzteile: spare_part_terms + service set: service_set_terms + serviceset: service_set_terms + service-set: service_set_terms diff --git a/patch_history/RETRIEX_PATCH_43M_VOCABULARY_MAP_ALIAS_DEDUP_README.md b/patch_history/RETRIEX_PATCH_43M_VOCABULARY_MAP_ALIAS_DEDUP_README.md new file mode 100644 index 0000000..d61fd10 --- /dev/null +++ b/patch_history/RETRIEX_PATCH_43M_VOCABULARY_MAP_ALIAS_DEDUP_README.md @@ -0,0 +1,64 @@ +# RetrieX Patch p43M – Vocabulary Map Alias Dedup + +## Ziel + +Weitere Reduktion doppelter YAML-Maps/Listen ohne fachliche Runtime-Änderung. Der Patch bündelt mehrfach identische Vocabulary-Map-Werte über Alias-Definitionen. + +## Änderungen + +- `DomainVocabularyConfig::map()` unterstützt zusätzlich zum bestehenden einfachen `key: [values]`-Format ein kompaktes Alias-Format: + - `values`: benannte Wertelisten + - `aliases`: Ausgabe-Schlüssel auf benannte Wertelisten +- Bestehendes einfaches Map-Format bleibt vollständig kompatibel. +- `vocabulary.yaml` nutzt das Alias-Format für: + - `maps.agent.rag_evidence_guard.synonyms` + - `maps.shop.accessory_focus_variants` +- Doppelte Listen für Salinität-, Redox-, Indikator-, Reagenz-, Ersatzteil- und Service-Set-Aliase wurden entfernt. + +## Nicht geändert + +- Keine neue Fachlogik +- Keine Scoringänderung +- Keine Prompt-Regeländerung +- Keine Retrievaländerung +- Keine Admin-UI +- Keine neuen fachlichen Listen im PHP-Core + +## Kompatibilität + +Lokale oder bestehende einfache Vocabulary-Maps funktionieren weiterhin. Das Alias-Format wird nur verwendet, wenn sowohl `values` als auch `aliases` vorhanden sind. Andernfalls fällt `DomainVocabularyConfig` auf das bisherige einfache String-List-Map-Format zurück. + +## Lokale Prüfungen + +Ausgeführt: + +```bash +php -l src/Config/DomainVocabularyConfig.php +php -l src/Config/AgentRunnerConfig.php +php -l src/Config/ShopServiceConfig.php +php -l src/Config/SearchRepairConfig.php +php -l src/Config/PromptBuilderConfig.php +php -l src/Config/GovernanceConfig.php +python3 YAML parse check for config/retriex/*.yaml +python3 effective p43L-vs-p43M vocabulary map comparison +``` + +Ergebnis der lokalen Prüfungen: grün. + +Die effektiven Maps blieben gegenüber p43L identisch: + +- `agent.rag_evidence_guard.synonyms`: 7 Schlüssel +- `shop.accessory_focus_variants`: 9 Schlüssel + +Zusätzlich geprüft: `DomainVocabularyConfig::map()` löst beide neuen Alias-Maps in PHP korrekt auf. + +## Hinweis zu Symfony-Checks + +Die `bin/console`-Checks konnten in der lokalen Patch-Erstellungsumgebung nicht ausgeführt werden, weil der ZIP-Stand kein `vendor/` enthält und `bin/console` mit fehlenden Dependencies abbricht. Bitte im Projekt mit installierten Composer-Abhängigkeiten prüfen: + +```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 +``` diff --git a/src/Config/DomainVocabularyConfig.php b/src/Config/DomainVocabularyConfig.php index 2b9b4f8..2f8e6cd 100644 --- a/src/Config/DomainVocabularyConfig.php +++ b/src/Config/DomainVocabularyConfig.php @@ -46,21 +46,31 @@ final class DomainVocabularyConfig return $this->uniqueStringListMap($fallback); } - $out = []; - foreach ($value as $key => $items) { - if (!is_scalar($key)) { - continue; - } - $cleanKey = trim((string) $key); - $cleanItems = $this->stringListFromValue($items); - if ($cleanKey !== '' && $cleanItems !== []) { - $out[$cleanKey] = $cleanItems; - } - } + $out = $this->stringListMapWithAliases($value); return $out !== [] ? $out : $this->uniqueStringListMap($fallback); } + /** @return array */ + private function stringListMapWithAliases(array $value): array + { + $values = $this->uniqueStringListMap(is_array($value['values'] ?? null) ? $value['values'] : []); + $aliases = $this->uniqueStringMap(is_array($value['aliases'] ?? null) ? $value['aliases'] : []); + + if ($values !== [] && $aliases !== []) { + $out = []; + foreach ($aliases as $alias => $valueKey) { + if (isset($values[$valueKey])) { + $out[$alias] = $values[$valueKey]; + } + } + + return $out; + } + + return $this->uniqueStringListMap($value); + } + /** @return array */ public function stringMap(string $path, array $fallback = []): array {