From 80862e707303a046b6660510f3ba43cecb3900ec Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Thu, 25 Jun 2026 08:13:14 +0200 Subject: [PATCH] fix(ai-sdk): supersede foreign-framed stored-energy duplicate for warewashing HP013 (stored electrical energy) fires for dishwashers via the broad stored_energy tag but its zone is framed for Batteriefaecher/USV-Anlagen, which a dishwasher does not have. The precise residual-voltage pattern HP144 (Frequenzumrichter/Zwischenkreis, Priority 90) already fires and covers the same hazard. Add HP013 to the warewashing-scoped supersession set so the duplicate is dropped only when dom_warewashing is present. Warewashing recall stays 100% (25/25), precision 92.6% -> 96.2%. Kistenhub/Bremse keep HP013 (no dom_warewashing); 26 Bremse pins + benchmark unaffected. Co-Authored-By: Claude Opus 4.7 --- ai-compliance-sdk/internal/iace/pattern_enclosure.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ai-compliance-sdk/internal/iace/pattern_enclosure.go b/ai-compliance-sdk/internal/iace/pattern_enclosure.go index 343db431..b9c3e675 100644 --- a/ai-compliance-sdk/internal/iace/pattern_enclosure.go +++ b/ai-compliance-sdk/internal/iace/pattern_enclosure.go @@ -51,11 +51,16 @@ func guardedLifecycles(p HazardPattern, tagSet map[string]bool) []string { // generic duplicate is dropped. Scoped to the domain tag, so machines outside // the domain keep the generic pattern — regression-safe by construction. // -// HP016 (generic hot surfaces) -> HP2201 (Boiler/Tank/Spuelkammer) -// HP018 (actuator burn) -> HP2201 (same contact-burn hazard) +// HP016 (generic hot surfaces) -> HP2201 (Boiler/Tank/Spuelkammer) +// HP018 (actuator burn) -> HP2201 (same contact-burn hazard) +// HP013 (stored electrical NRG) -> HP144 (residual voltage; HP013's zone is +// framed for Batteriefaecher/USV-Anlagen a +// dishwasher does not have, HP144 is the +// Frequenzumrichter/Zwischenkreis variant) var genericSupersededByWarewashing = map[string]bool{ "HP016": true, "HP018": true, + "HP013": true, } // supersededByDomainSpecific reports whether a generic pattern is replaced by a