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

1"""Small, explicit policy evaluation primitives for automation workflows.""" 

2 

3from __future__ import annotations 

4 

5from dataclasses import dataclass 

6 

7from secchi.models import DerivedPackageData, PackageInfo 

8 

9 

10@dataclass(frozen=True) 

11class PolicyResult: 

12 name: str 

13 passed: bool 

14 detail: str 

15 

16 

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