"""Verifies the Phase 17 except-Exception walk in step_runner.py."""
from __future__ import annotations

import re
from pathlib import Path

from recoil.pipeline._lib.sanctioned_fallbacks import list_sanctioned_fallbacks


class TestExceptionWalk:
    def test_no_bare_except_pass_remains(self):
        """No 'except Exception: pass' patterns survive the walk."""
        src = (Path(__file__).parent.parent / "step_runner.py").read_text()
        bad = re.findall(r"except Exception:\s*\n\s*pass\b", src)
        assert bad == [], (
            f"Found {len(bad)} bare except/pass patterns in step_runner.py"
        )

    def test_sanctioned_entries_registered(self):
        """The 5 step_runner_* entries are registered in the canonical registry."""
        names = {r.name for r in list_sanctioned_fallbacks()}
        for expected in (
            "step_runner_outer_failure_store_update_skip",
            "step_runner_batch_update_skip",
            "step_runner_nested_cleanup_skip",
            "step_runner_sidecar_best_effort_skip",
            "step_runner_post_step_finalize_skip",
        ):
            assert expected in names, f"Missing sanctioned-fallback: {expected}"
