"""Initiative snapshot signals — erklärbare Heuristiken ohne operating_phase (AP1.2).""" from __future__ import annotations def derive_initiative_signals( *, initiative_status: str, open_actions: int, blocked_actions: int, review_required_actions: int, open_blockers: int, backlog_new: int, planned_reviews_due: int, ) -> list[str]: """Regelbasierte Signale für Steuerungs-Snapshot — kein Lifecycle-Ersatz.""" if initiative_status in ("completed", "archived"): return ["initiative_terminal"] signals: list[str] = [] if open_actions == 0 and backlog_new > 0: signals.append("backlog_awaiting_commit") return signals if open_actions == 0 and backlog_new == 0: signals.append("no_open_work") return signals if blocked_actions > 0: signals.append("actions_blocked") if open_blockers > 0: signals.append("open_blockers") if blocked_actions > 0 or open_blockers > 0: return signals if review_required_actions > 0: signals.append("actions_need_review") if planned_reviews_due > 0: signals.append("reviews_due") if review_required_actions > 0 or planned_reviews_due > 0: return signals if open_actions > 0: signals.append("work_in_progress") return signals