test_gs_paste_governance_sync.py file-level

at main · View file ↗ · Intel ↗

History
1 files
1 commits
0 hotspots
0 🧊 dead
0 💥 blast risk
sha256:6 fix(ISR): default require_independent_second_reviewer to require Opera… · aaronrene · Sep 2, 2026
1 """Integration: governance-sync dry-run plans NEXT regen without Muse (§GSP.10)."""
2
3 from __future__ import annotations
4
5 import io
6 from contextlib import redirect_stdout
7 from pathlib import Path
8
9 from cli.kit_root import kit_root
10 from tests.support import FIXTURES, make_runner, ok, run_cli, write_config
11
12
13 def _seed(tmp_path: Path) -> None:
14 write_config(tmp_path, "config-git-only.yaml")
15 docs = tmp_path / "docs"
16 docs.mkdir(parents=True, exist_ok=True)
17 (docs / "OVERSEER-HANDOVER.md").write_text(
18 (FIXTURES / "gs-paste-handover.md").read_text(encoding="utf-8"),
19 encoding="utf-8",
20 )
21 (docs / "ROADMAP.md").write_text(
22 (FIXTURES / "gs-paste-roadmap-one-open.md").read_text(encoding="utf-8"),
23 encoding="utf-8",
24 )
25
26
27 def _runner() -> object:
28 return make_runner(
29 {
30 "git rev-parse --abbrev-ref HEAD": ok("main"),
31 "git status --porcelain": ok(""),
32 "git rev-parse origin/main": ok("cafebabe"),
33 "gh pr list --state merged --limit 5 --json number,title,mergeCommit,mergedAt": ok("[]"),
34 "git remote get-url origin": ok("[email protected]:owner/repo.git"),
35 }
36 )
37
38
39 def test_dry_run_plans_next_and_paste_without_writing_or_muse(tmp_path: Path) -> None:
40 _seed(tmp_path)
41 handover = tmp_path / "docs" / "OVERSEER-HANDOVER.md"
42 roadmap = tmp_path / "docs" / "ROADMAP.md"
43 before_h = handover.read_text(encoding="utf-8")
44 before_r = roadmap.read_text(encoding="utf-8")
45 runner = _runner()
46
47 buf = io.StringIO()
48 with redirect_stdout(buf):
49 code = run_cli(
50 ["governance-sync"],
51 cwd=tmp_path,
52 runner=runner,
53 kit=kit_root(),
54 )
55 out = buf.getvalue()
56 assert code == 0
57 assert "next-session" in out
58 assert "paste-ready-prompt" in out
59 assert "next_regen: regenerated" in out
60 assert handover.read_text(encoding="utf-8") == before_h
61 assert roadmap.read_text(encoding="utf-8") == before_r
62 assert not any("muse" in call[0].lower() for call in runner.calls)