test_gfg_d2_muse_id_space.py python
94 lines 3.2 KB
Raw
sha256:a78e7e5a8740e03315f325d19edeb3aa1b306b3337d04abbaa9a9e0f3bbeb7a1 docs: MuseHub-first before ISR #74 — staging solidify NEXT Human 22 hours ago
1 """Unit tests for GFG-D2-FIX Muse ID-space D2 rule (§D2F.9 unit)."""
2
3 from __future__ import annotations
4
5 from pathlib import Path
6
7 from adapters.base import read_bridge_git_sha, read_bridge_muse_commit_id
8 from tools.governance_hygiene.drift import detect_drift
9 from tools.governance_hygiene.types import VerifiedReads
10
11
12 def _reads(
13 *,
14 r2: str,
15 r3: str,
16 regime: str = "muse+git-mirror",
17 r1: str = "cafebabe00",
18 ) -> VerifiedReads:
19 return VerifiedReads(
20 regime=regime,
21 r1_github_main_sha=r1,
22 r1_command="git rev-parse origin/main",
23 r2_anchor_sha=r2.lower(),
24 r2_source=".muse/git-bridge.toml:last_export.muse_commit_id",
25 r3_canonical_main_sha=r3.lower(),
26 r3_command="muse rev-parse main",
27 r4_merged_prs=(),
28 r5_branch="main",
29 r5_dirty=False,
30 r5_regime=regime,
31 )
32
33
34 def test_d2_aligned_when_muse_commit_id_matches_sha256_tip() -> None:
35 """git_sha≠muse tip alone is not D2 drift when muse_commit_id matches (§D2F.3)."""
36 tip = "sha256:67001f71f4481906b1bad7a9f46ccf61f9113c44a6cf64473416c4c77a8b6116"
37 # R2 is muse_commit_id (after adapter fix); git_sha is never fed into D2.
38 drift = detect_drift(
39 _reads(r2=tip, r3=tip),
40 "| GitHub `main` | `cafebabe00` |",
41 "## Build queue\n",
42 )
43 assert drift.d2_anchor_vs_canonical == "aligned"
44 assert drift.d1_handover_vs_git == "aligned"
45
46
47 def test_d2_drifted_when_muse_commit_id_differs_from_tip() -> None:
48 tip = "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
49 other = "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
50 drift = detect_drift(
51 _reads(r2=other, r3=tip),
52 "| GitHub `main` | `cafebabe00` |",
53 "## Build queue\n",
54 )
55 assert drift.d2_anchor_vs_canonical == "drifted"
56 assert "sha256:" in drift.details.get("d2", "")
57
58
59 def test_read_bridge_muse_commit_id_parses_live_shape(tmp_path: Path) -> None:
60 muse = tmp_path / ".muse"
61 muse.mkdir()
62 (muse / "git-bridge.toml").write_text(
63 """[last_import]
64 git_sha = "350c781cbb85556374d6dab9d12e3cccbee382fe"
65 muse_commit_id = "sha256:oldimport"
66
67 [last_export]
68 muse_branch = "main"
69 muse_commit_id = "sha256:67001f71f4481906b1bad7a9f46ccf61f9113c44a6cf64473416c4c77a8b6116"
70 git_remote = "origin"
71 git_ref = "muse-mirror"
72 git_sha = "1e734a922a8de5dcac248007b8dfb706c4a0f84e"
73 exported_at = "2026-07-28T04:39:34.834238+00:00"
74 """,
75 encoding="utf-8",
76 )
77 muse_id = read_bridge_muse_commit_id(tmp_path, "last_export")
78 git_sha = read_bridge_git_sha(tmp_path, "last_export")
79 assert muse_id == (
80 "sha256:67001f71f4481906b1bad7a9f46ccf61f9113c44a6cf64473416c4c77a8b6116"
81 )
82 assert git_sha == "1e734a922a8de5dcac248007b8dfb706c4a0f84e"
83 assert muse_id != git_sha
84
85
86 def test_read_bridge_muse_commit_id_missing(tmp_path: Path) -> None:
87 muse = tmp_path / ".muse"
88 muse.mkdir()
89 (muse / "git-bridge.toml").write_text(
90 '[last_export]\ngit_sha = "' + ("a" * 40) + '"\n',
91 encoding="utf-8",
92 )
93 assert read_bridge_muse_commit_id(tmp_path, "last_export") is None
94 assert read_bridge_git_sha(tmp_path, "last_export") == "a" * 40
File History 1 commit
sha256:a78e7e5a8740e03315f325d19edeb3aa1b306b3337d04abbaa9a9e0f3bbeb7a1 docs: MuseHub-first before ISR #74 — staging solidify NEXT Human 22 hours ago