"""품셈 md 잠금 — 상태 `확정` 파일은 확정지문이 맞고 기계검사가 「통과」 또는 「예외」 (규칙 6장). `확정` 뒤 파일이 바뀌면 빨강. 고치려면 상태를 `작성중` 으로 되돌리고 ①②③ 다시. """ import sys from pathlib import Path import pytest ROOT = Path(__file__).resolve().parents[2] sys.path.insert(0, str(ROOT / "resources/knowledge/original/_pipeline")) import pum_md_tool as tool # noqa: E402 LOCKED = [ path for book in tool.BOOKS.values() for path in sorted(book["out"].rglob("*.md")) if tool.read_head(path).get("상태") == "확정" ] @pytest.mark.parametrize("path", LOCKED, ids=lambda p: p.name) def test_locked_file_unchanged_and_clean(path): head = tool.read_head(path) assert head["확정지문"], "확정인데 지문이 없음 — check 를 돌려 적을 것" assert tool.fingerprint(path.read_text(encoding="utf-8")) == head["확정지문"], ( "확정 뒤 파일이 바뀜 — 상태를 작성중으로 되돌리고 ①②③ 다시" ) pytest.importorskip("pymupdf") _, line = tool.check_file(path) assert tool.passed(line), line # 「통과」 또는 「예외(되풀이 머리)」 def test_heads_are_well_formed(): """모든 새 md 머리 — 칸이 다 있고 상태가 넷 중 하나.""" for book in tool.BOOKS.values(): for path in book["out"].rglob("*.md"): head = tool.read_head(path) assert set(tool.HEAD_KEYS) <= set(head), path assert head["상태"] in tool.STATES, f"{path}: {head['상태']}"