From 8cb1dc110847fb172bbe04d10e3c75a2510ff7d4 Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Sat, 28 Mar 2026 09:09:16 +0100 Subject: [PATCH] Fix pass0b queries to skip deprecated/duplicate controls The NOT EXISTS check and Duplicate Guard now exclude deprecated and duplicate controls, enabling clean re-runs after invalidation. Co-Authored-By: Claude Opus 4.6 --- backend-compliance/compliance/services/decomposition_pass.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend-compliance/compliance/services/decomposition_pass.py b/backend-compliance/compliance/services/decomposition_pass.py index 7078fe2..9c2a594 100644 --- a/backend-compliance/compliance/services/decomposition_pass.py +++ b/backend-compliance/compliance/services/decomposition_pass.py @@ -2450,6 +2450,7 @@ class DecompositionPass: SELECT 1 FROM canonical_controls ac WHERE ac.parent_control_uuid = oc.parent_control_uuid AND ac.decomposition_method = 'pass0b' + AND ac.release_state NOT IN ('deprecated', 'duplicate') AND ac.title LIKE '%' || LEFT(oc.action, 20) || '%' ) """ @@ -3025,7 +3026,7 @@ class DecompositionPass: SELECT id::text FROM canonical_controls WHERE parent_control_uuid = CAST(:parent AS uuid) AND generation_metadata->>'merge_group_hint' = :hint - AND release_state != 'rejected' + AND release_state NOT IN ('rejected', 'deprecated', 'duplicate') LIMIT 1 """), {"parent": parent_uuid, "hint": merge_hint}, @@ -3291,6 +3292,7 @@ class DecompositionPass: SELECT 1 FROM canonical_controls ac WHERE ac.parent_control_uuid = oc.parent_control_uuid AND ac.decomposition_method = 'pass0b' + AND ac.release_state NOT IN ('deprecated', 'duplicate') AND ac.title LIKE '%' || LEFT(oc.action, 20) || '%' ) """