refactor: 문서 개선 중

This commit is contained in:
donghyeon-ka
2026-09-21 14:30:55 +09:00
parent c93cdea150
commit 805a18f486
1497 changed files with 525837 additions and 59152 deletions
+73
View File
@@ -3,6 +3,7 @@
이 검사기의 값은 「통과시키는 것」이 아니라 「안 지킨 것을 잡는 것」이라, 시험도 전부
위반을 넣어 걸리는지 보는 모양이다.
"""
import importlib.util
import json
import os
import subprocess
@@ -13,6 +14,9 @@ import unittest
ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
SCRIPT = os.path.join(ROOT, "scripts", "verify-pipeline-run.py")
LEDGER = os.path.join(ROOT, "runs", "keycloak", "2026-09-07-2215", "run.json")
_spec = importlib.util.spec_from_file_location("verify_pipeline_run", SCRIPT)
vpr = importlib.util.module_from_spec(_spec)
_spec.loader.exec_module(vpr)
def run(path, *args):
@@ -125,6 +129,75 @@ class LedgerRules(unittest.TestCase):
self.assertIn("곁증명의 스킬 영수증이 그 스킬의 문장이 아니다", out)
class EvidenceGateV5(unittest.TestCase):
def check(self, gate):
rep = vpr.Report("fixture")
run_ = {"schemaVersion": vpr.EVIDENCE_RECONCILIATION_SCHEMA, "project": "demo"}
found = vpr._evidence_gate_v5(rep, run_, "S3", [gate], "S3 fixture")
return rep, found
def test_repo_flag_is_required(self):
rep, _ = self.check({
"semanticId": "evidence-repo",
"cmd": "node check_evidence.mjs demo",
"exit": 0,
"status": "PASS",
})
self.assertTrue(rep.error_count)
self.assertIn("live source evidence gate에서 --repo가 빠졌다", rep.errors)
def test_unverifiable_preserves_exit_three_and_reason(self):
rep, gate = self.check({
"semanticId": "evidence-repo",
"cmd": "node check_evidence.mjs demo --repo",
"exit": 3,
"status": "UNVERIFIABLE",
"reason": "source repository unavailable on current machine",
"acceptedByProjectReview": True,
})
self.assertEqual(0, rep.error_count, rep.errors)
self.assertIsNotNone(gate)
self.assertEqual(["S3"], rep.facts["live source UNVERIFIABLE"])
def test_unverifiable_cannot_hide_an_arbitrary_exit(self):
rep, _ = self.check({
"semanticId": "evidence-repo",
"cmd": "node check_evidence.mjs demo --repo",
"exit": 1,
"status": "UNVERIFIABLE",
"reason": "something failed",
"acceptedByProjectReview": True,
})
self.assertIn("UNVERIFIABLE evidence gate는 실제 대조 불가 exit 3이어야 한다", rep.errors)
def test_unverifiable_needs_project_review_acceptance(self):
rep, _ = self.check({
"semanticId": "evidence-repo",
"cmd": "node check_evidence.mjs demo --repo",
"exit": 3,
"status": "UNVERIFIABLE",
"reason": "source repository unavailable on current machine",
})
self.assertIn("UNVERIFIABLE evidence gate가 프로젝트 리뷰에서 수용되지 않았다", rep.errors)
def test_pass_requires_real_repo_gate_and_zero_exit(self):
rep, _ = self.check({
"semanticId": "evidence-repo",
"cmd": "node check_evidence.mjs demo --repo",
"exit": 0,
"status": "PASS",
})
self.assertEqual(0, rep.error_count, rep.errors)
def test_semantic_gate_id_is_required(self):
rep = vpr.Report("fixture")
run_ = {"schemaVersion": vpr.EVIDENCE_RECONCILIATION_SCHEMA, "project": "demo"}
vpr._evidence_gate_v5(rep, run_, "S3", [{
"cmd": "node check_evidence.mjs demo --repo", "exit": 0, "status": "PASS"
}], "S3 fixture")
self.assertIn("필수 evidence semantic gate가 정확히 하나가 아니다", rep.errors)
class Init(unittest.TestCase):
def test_틀에서_런을_연다(self):
with tempfile.TemporaryDirectory() as d: