Source code for sw_metadata_bot.incremental

"""Decision engine for incremental issue lifecycle handling."""

from dataclasses import dataclass


[docs] @dataclass(frozen=True) class Decision: """Decision outcome for a repository in incremental mode.""" action: str reason: str
[docs] def evaluate( *, previous_exists: bool, unsubscribed: bool, repo_updated: bool, has_findings: bool, identical_findings: bool, previous_issue_open: bool, ) -> Decision: """Evaluate the configured decision tree and return action + reason.""" if not previous_exists: return Decision(action="create", reason="no_previous_analysis") if unsubscribed: return Decision(action="stop", reason="unsubscribe") if not repo_updated: return Decision(action="stop", reason="repo_not_updated") if not has_findings: if previous_issue_open: return Decision(action="close", reason="no_findings_close_open_issue") return Decision(action="stop", reason="no_findings") if identical_findings: if previous_issue_open: return Decision(action="stop", reason="identical_and_issue_open") return Decision(action="create", reason="identical_but_issue_closed") if previous_issue_open: return Decision(action="comment", reason="changed_and_issue_open") return Decision(action="create", reason="changed_and_issue_closed")