From 9603f5d93bd626ab367a7264544f852f3f37600c Mon Sep 17 00:00:00 2001 From: root Date: Fri, 31 Jul 2026 17:56:24 -0500 Subject: [PATCH] fix: accept displayed reflect dimension names --- .../app/commands/plan/triage/stages/reflect.py | 17 +++++++++++++++-- ...tage_flow_observe_reflect_organize_direct.py | 16 ++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/desloppify/app/commands/plan/triage/stages/reflect.py b/desloppify/app/commands/plan/triage/stages/reflect.py index 0c76cb40..b0c7a846 100644 --- a/desloppify/app/commands/plan/triage/stages/reflect.py +++ b/desloppify/app/commands/plan/triage/stages/reflect.py @@ -5,11 +5,16 @@ import argparse from desloppify.base.output.terminal import colorize +from desloppify.base.subjective_dimension_catalog import DISPLAY_NAMES from desloppify.state_io import utc_now from ..display.dashboard import print_reflect_result -from ..stage_queue import cascade_clear_dispositions, cascade_clear_later_confirmations, has_triage_in_queue from ..services import TriageServices, default_triage_services +from ..stage_queue import ( + cascade_clear_dispositions, + cascade_clear_later_confirmations, + has_triage_in_queue, +) from ..validation.reflect_accounting import ( BacklogDecision, ReflectDisposition, @@ -33,7 +38,15 @@ def _validate_recurring_dimension_mentions( if not recurring_dims: return True report_lower = report.lower() - mentioned = [dim for dim in recurring_dims if dim.lower() in report_lower] + mentioned = [ + dim + for dim in recurring_dims + if any( + name.lower() in report_lower + for name in (dim, DISPLAY_NAMES.get(dim)) + if name + ) + ] if mentioned: return True print(colorize(" Recurring patterns detected but not addressed in report:", "red")) diff --git a/desloppify/tests/commands/plan/test_triage_stage_flow_observe_reflect_organize_direct.py b/desloppify/tests/commands/plan/test_triage_stage_flow_observe_reflect_organize_direct.py index 35b1f211..c3492dbf 100644 --- a/desloppify/tests/commands/plan/test_triage_stage_flow_observe_reflect_organize_direct.py +++ b/desloppify/tests/commands/plan/test_triage_stage_flow_observe_reflect_organize_direct.py @@ -249,3 +249,19 @@ def test_reflect_preserves_observe_auto_disposition_during_fresh_persist( ledger = plan["epic_triage_meta"]["triage_stages"]["reflect"]["disposition_ledger"] assert [entry["issue_id"] for entry in ledger] == ["review::complexity::aaaa1111"] assert saved + + +def test_reflect_recurring_dimension_accepts_catalog_display_label() -> None: + assert reflect_mod._validate_recurring_dimension_mentions( + report="The strategy directly addresses the High elegance rework pattern.", + recurring_dims=["high_level_elegance"], + recurring={"high_level_elegance": {"open": ["open"], "resolved": ["resolved"]}}, + ) + + +def test_reflect_recurring_dimension_accepts_canonical_snake_case() -> None: + assert reflect_mod._validate_recurring_dimension_mentions( + report="The strategy directly addresses the high_level_elegance rework pattern.", + recurring_dims=["high_level_elegance"], + recurring={"high_level_elegance": {"open": ["open"], "resolved": ["resolved"]}}, + )