Coverage for src/secchi/policy.py: 100%
13 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-08-04 22:15 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-08-04 22:15 +0000
1"""Small, explicit policy evaluation primitives for automation workflows."""
3from __future__ import annotations
5from dataclasses import dataclass
7from secchi.models import DerivedPackageData, PackageInfo
10@dataclass(frozen=True)
11class PolicyResult:
12 name: str
13 passed: bool
14 detail: str
17def evaluate_default_policy(
18 info: PackageInfo,
19 derived: DerivedPackageData,
20 *,
21 min_health: int = 70,
22 require_ci: bool = False,
23) -> list[PolicyResult]:
24 results = [
25 PolicyResult(
26 "minimum health score",
27 derived.health_score.total >= min_health,
28 f"{derived.health_score.total} / 100 (minimum {min_health})",
29 )
30 ]
31 if require_ci:
32 results.append(
33 PolicyResult(
34 "continuous integration",
35 info.github_stats.has_ci,
36 "GitHub workflow detected"
37 if info.github_stats.has_ci
38 else "No GitHub workflow detected",
39 )
40 )
41 return results