Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 15 additions & 2 deletions desloppify/app/commands/plan/triage/stages/reflect.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"]}},
)