test_frv_integrity.py
python
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