test_governance_gates.py python
68 lines 2.5 KB
Raw
sha256:a78e7e5a8740e03315f325d19edeb3aa1b306b3337d04abbaa9a9e0f3bbeb7a1 docs: MuseHub-first before ISR #74 — staging solidify NEXT Human 3 days ago
1 """Unit tests for governance gate reminders (§KH1.9)."""
2
3 from __future__ import annotations
4
5 from pathlib import Path
6
7 import pytest
8
9 from adapters.config import ConfigError, load_config
10 from tests.support import FIXTURES
11 from tools.governance_gates import scan_governance_gates
12 from tools.governance_gates.checklist import governance_gates_checklist_lines
13
14
15 def test_config_parses_governance_gates_defaults() -> None:
16 config = load_config(FIXTURES / "config-git-only.yaml")
17 assert config.governance_gates.remind is True
18 assert config.governance_gates.freeze_review_required is True
19 assert config.governance_gates.build_verification_required is True
20
21
22 def test_config_parses_governance_gates_explicit() -> None:
23 config = load_config(FIXTURES / "config-governance-gates.yaml")
24 assert config.governance_gates.remind is True
25 assert "status" in config.governance_gates.surfaces
26 assert "handover-paste" in config.governance_gates.surfaces
27
28
29 def test_config_rejects_unknown_governance_gates_key() -> None:
30 with pytest.raises(ConfigError):
31 load_config(FIXTURES / "config-governance-gates-bad.yaml")
32
33
34 def test_scan_detects_pending_freeze_review_and_build_verification(tmp_path: Path) -> None:
35 config = load_config(FIXTURES / "config-governance-gates.yaml")
36 docs = tmp_path / "docs"
37 docs.mkdir(parents=True)
38 (docs / "ROADMAP.md").write_text(
39 (FIXTURES / "governance-gates-roadmap.md").read_text(encoding="utf-8"),
40 encoding="utf-8",
41 )
42 (docs / "OVERSEER-HANDOVER.md").write_text(
43 (FIXTURES / "governance-gates-handover.md").read_text(encoding="utf-8"),
44 encoding="utf-8",
45 )
46 (docs / "PHASE-DEMO-THINKING.md").write_text(
47 (FIXTURES / "governance-gates-phase-thinking.md").read_text(encoding="utf-8"),
48 encoding="utf-8",
49 )
50
51 result = scan_governance_gates(config, tmp_path)
52 gate_ids = {gate.gate_id for gate in result.pending}
53 assert "freeze_review" in gate_ids
54 assert "build_verification" in gate_ids
55
56
57 def test_scan_suppressed_when_remind_false(tmp_path: Path) -> None:
58 config = load_config(FIXTURES / "config-governance-gates-suppressed.yaml")
59 result = scan_governance_gates(config, tmp_path)
60 assert result.suppressed is True
61 assert result.pending == ()
62
63
64 def test_checklist_lines_include_invoke_commands() -> None:
65 lines = governance_gates_checklist_lines()
66 joined = "\n".join(lines)
67 assert "freeze-review-loop" in joined
68 assert "build-verification-review" in joined
File History 2 commits
sha256:a78e7e5a8740e03315f325d19edeb3aa1b306b3337d04abbaa9a9e0f3bbeb7a1 docs: MuseHub-first before ISR #74 — staging solidify NEXT Human 3 days ago
sha256:4671b7f787ddbe63ced31c895b688c77ab495653b65a730b423329f26b3c1439 feat: K1-P1 complete — agent provenance, build-verification… Sonnet 4.6 patch 55 days ago