test_frv_integrity.py python
104 lines 3.7 KB
Raw
sha256:8461d44b77376fbf06fa7c3e085d309e3010fd8d5886d63c63e69ce118811ad4 docs: record AFF-b feature-tip SHAs after AFF-b-ISR commit. Human 4 days ago
1 """Data-integrity tests for FRV (§FRV.12)."""
2
3 from __future__ import annotations
4
5 from pathlib import Path
6
7 from cli.kit_root import kit_root
8 from tests.support import FIXTURES, git_status_runner, pass_provider_factory, run_cli, write_config
9 from tools.freeze_reviewer.artifact import artifact_digest, extract_existing_stamp, parse_artifact
10 from tools.freeze_reviewer.serializer import dump_freeze_mapping, round_trip_stable
11 from tools.freeze_reviewer.stamp import merge_stamp_mapping
12 from tools.freeze_reviewer.types import ReviewStamp, STAMP_KEY_ORDER
13
14
15 DIGEST = "sha256:" + ("e" * 64)
16
17
18 def test_digest_stable_across_stamp_rewrite(tmp_path: Path) -> None:
19 write_config(tmp_path, "config-git-only.yaml")
20 target = tmp_path / "docs" / "freeze.md"
21 target.parent.mkdir(parents=True)
22 original = (FIXTURES / "freeze-artifact.md").read_text(encoding="utf-8")
23 target.write_text(original, encoding="utf-8")
24 rel = "docs/freeze.md"
25 before = artifact_digest(parse_artifact(target, rel_path=rel))
26 run_cli(
27 ["review", "--freeze", rel],
28 cwd=tmp_path,
29 runner=git_status_runner(),
30 kit=kit_root(),
31 review_provider_factory=pass_provider_factory(),
32 )
33 after = artifact_digest(parse_artifact(target, rel_path=rel))
34 assert before == after
35
36
37 def test_unknown_keys_survive_restamp(tmp_path: Path) -> None:
38 write_config(tmp_path, "config-git-only.yaml")
39 target = tmp_path / "freeze.yaml"
40 target.write_text((FIXTURES / "freeze-artifact.yaml").read_text(encoding="utf-8"), encoding="utf-8")
41 run_cli(
42 ["review", "--freeze", "freeze.yaml"],
43 cwd=tmp_path,
44 runner=git_status_runner(),
45 kit=kit_root(),
46 review_provider_factory=pass_provider_factory(),
47 )
48 text = target.read_text(encoding="utf-8")
49 # inject unknown key inside stamp
50 text = text.replace("override_applied: false", "override_applied: false\n operator_note: keep-me")
51 target.write_text(text, encoding="utf-8")
52 run_cli(
53 ["review", "--freeze", "freeze.yaml"],
54 cwd=tmp_path,
55 runner=git_status_runner(),
56 kit=kit_root(),
57 review_provider_factory=pass_provider_factory(),
58 )
59 stamp = extract_existing_stamp(parse_artifact(target, rel_path="freeze.yaml"))
60 assert stamp.get("operator_note") == "keep-me"
61
62
63 def test_round_trip_fourteen_key() -> None:
64 mapping = {
65 "phase": "FRV",
66 "outputs": [{"id": "a", "path": "docs/a.md", "frozen": True}],
67 "review_stamp": {
68 "gate": "mechanical",
69 "reviewed_at": "2026-09-12T00:00:00Z",
70 "mechanical_verdict": "pass",
71 "produced_by": "checklist_engine",
72 "provider_kind": "rule_engine",
73 "reviewer_mode": "agent",
74 "reviewer_model": None,
75 "reviewer_provider": "local",
76 "checklist_ids": ["C1"],
77 "checklist_source": "builtin",
78 "findings_count": 0,
79 "override_applied": False,
80 "kit_version": "0.1.0",
81 "artifact_digest": DIGEST,
82 },
83 }
84 assert round_trip_stable(mapping)
85 dumped = dump_freeze_mapping(mapping)
86 assert "review_stamp:" in dumped
87 assert list(mapping["review_stamp"].keys()) == list(STAMP_KEY_ORDER)
88
89
90 def test_merge_drops_legacy_verdict() -> None:
91 merged = merge_stamp_mapping(
92 {"verdict": "pass", "keep": 1},
93 ReviewStamp(
94 reviewed_at="t",
95 mechanical_verdict="pass",
96 reviewer_mode="agent",
97 reviewer_model=None,
98 reviewer_provider="local",
99 kit_version="0.1.0",
100 artifact_digest=DIGEST,
101 ).to_mapping(),
102 )
103 assert "verdict" not in merged
104 assert merged["keep"] == 1
File History 1 commit
sha256:8461d44b77376fbf06fa7c3e085d309e3010fd8d5886d63c63e69ce118811ad4 docs: record AFF-b feature-tip SHAs after AFF-b-ISR commit. Human 4 days ago