Kairo-Jinkendo/backend/steering/signals/snapshot_signals.py

48 lines
1.3 KiB
Python
Raw Normal View History

"""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