Source code for ralph.policy.explain.policy_explanation

"""Complete structured explanation of a PolicyBundle."""

from __future__ import annotations

from dataclasses import dataclass, field
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from .budget_counter_explanation import BudgetCounterExplanation
    from .lifecycle_explanation import LifecycleExplanation
    from .loop_counter_explanation import LoopCounterExplanation
    from .parallel_explanation import ParallelExplanation
    from .phase_explanation import PhaseExplanation
    from .post_commit_route_explanation import PostCommitRouteExplanation
    from .recovery_explanation import RecoveryExplanation
    from .terminal_outcome_explanation import TerminalOutcomeExplanation


[docs] @dataclass class PolicyExplanation: """Complete structured explanation of a PolicyBundle.""" entry_phase: str terminal_phase: str entry_block: str | None = None authored_blocks: list[str] = field(default_factory=list) lifecycle_explanations: list[LifecycleExplanation] = field(default_factory=list) phases: list[PhaseExplanation] = field(default_factory=list) loop_counters: list[LoopCounterExplanation] = field(default_factory=list) budget_counters: list[BudgetCounterExplanation] = field(default_factory=list) terminal_outcomes: list[TerminalOutcomeExplanation] = field(default_factory=list) parallel_execution: ParallelExplanation | None = None parallel_executions: list[ParallelExplanation] = field(default_factory=list) post_commit_routes: list[PostCommitRouteExplanation] = field(default_factory=list) recovery: RecoveryExplanation | None = None