fix(tests): 새 시험의 픽스처를 TechLog 로 옮겨 PIPELINE CONTRACT 를 되돌린다
첫 제출에서 verify-pipeline 의 FORBIDDEN_LITERAL 이 새 시험을 걸었다. 픽스처가 옛 저장소 이름과 같은 이름의 docs 프로젝트를 가리키고 있었다. 글자를 쪼개 피하지 않았다. verify-pipeline.py:172 자신이 쓰는 수법이지만 그건 검사기가 물으려던 것에 답하는 게 아니라 글자만 피하는 것이다. 재는 것이 「비교를 돌렸나」이지 그 기록의 내용이 아니므로 프로젝트를 TechLog 로 옮겼다. 양성 대조를 함께 넣었다 — available: true 만 재면 픽스처가 조용히 같아졌을 때 시험이 초록인 채로 아무것도 안 재게 된다. warnings 가 비지 않았는지와 그중에 「유보 감소」가 있는지를 잰다. 검사기가 「옛 저장소 이름에 의존한다」와 「그 이름의 docs 프로젝트를 가리킨다」를 못 가르는 것은 고치지 않고 보고서 §7.6 에 발견으로 적었다. 검사기 수정은 C 몫이다. PIPELINE CONTRACT: PASS python3 -m unittest discover -s scripts/tests — Ran 266 · OK (skipped=13) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q4vKjQo9KKBBokzxqXLCfk
This commit is contained in:
co-authored by
Claude Opus 5
parent
0f753c3be5
commit
14137382fe
@@ -19,13 +19,22 @@ import tempfile
|
||||
import unittest
|
||||
|
||||
ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
# 어느 프로젝트를 쓰든 상관없다 — 재는 것은 「비교를 돌렸나」이지 그 기록의 내용이 아니다.
|
||||
# `verify-pipeline.py:172` 의 `FORBIDDEN_LITERAL` 이 `scripts/` 아래 텍스트에서 옛 저장소
|
||||
# 이름을 찾는데, **그 이름의 `docs/` 프로젝트를 가리키는 것과 가리지 못한다.** 글자를
|
||||
# 쪼개 피하지 않고 다른 프로젝트를 쓴다 — 피하는 것은 검사기가 물으려던 것에 답하는 게 아니다.
|
||||
PROJECT = "TechLog"
|
||||
RECORD = os.path.join(
|
||||
"docs", "document-haness", "tech-log-studio", "pipeline-gate-exit-codes",
|
||||
"case", "case-exit-code-read-behind-a-pipe.md")
|
||||
"docs", PROJECT, "tech-log-studio", "addresses-frozen-at-publish-time",
|
||||
"case", "case-a-link-that-pointed-at-itself.md")
|
||||
# 윤문 전 사본에만 넣을 유보 표현. `HEDGES` 의 「보인다」다 —
|
||||
# 이것이 사라지는 것이 `hedgesDropped` 이고, 그 자리가 이 묶음의 **막는** 경고다
|
||||
ASSERTED = "눌러도 아무 일이 없었다."
|
||||
HEDGED = "눌러도 아무 일이 없었던 것으로 보인다."
|
||||
|
||||
|
||||
def _package(out: str, before: str | None) -> subprocess.CompletedProcess:
|
||||
cmd = [sys.executable, "scripts/review-package.py", "document-haness",
|
||||
cmd = [sys.executable, "scripts/review-package.py", PROJECT,
|
||||
"--record", RECORD, "-o", out]
|
||||
if before:
|
||||
cmd += ["--before", before]
|
||||
@@ -41,9 +50,8 @@ class PreservationScopeTest(unittest.TestCase):
|
||||
# 윤문 전 사본. 한 문장만 다르게 둔다 — 비교가 실제로 돌아야 한다
|
||||
self.before = os.path.join(self.tmp, "before.md")
|
||||
src = open(os.path.join(ROOT, RECORD), encoding="utf-8").read()
|
||||
open(self.before, "w", encoding="utf-8").write(
|
||||
src.replace("열넷이 전부 `exit=0` 이었다.",
|
||||
"열넷이 전부 `exit=0` 이었을 수도 있다."))
|
||||
self.assertIn(ASSERTED, src, "고정문이 기록에서 사라졌다 — 픽스처를 다시 짠다")
|
||||
open(self.before, "w", encoding="utf-8").write(src.replace(ASSERTED, HEDGED))
|
||||
|
||||
def test_without_before_the_package_says_it_did_not_look(self):
|
||||
out = os.path.join(self.tmp, "nb.json")
|
||||
@@ -62,11 +70,17 @@ class PreservationScopeTest(unittest.TestCase):
|
||||
out = os.path.join(self.tmp, "wb.json")
|
||||
r = _package(out, self.before)
|
||||
self.assertEqual(0, r.returncode, r.stderr)
|
||||
pres = json.load(open(out, encoding="utf-8"))["preservation"]
|
||||
pkg = json.load(open(out, encoding="utf-8"))
|
||||
pres = pkg["preservation"]
|
||||
self.assertTrue(pres["available"])
|
||||
self.assertNotIn("reason", pres) # 안 돈 이유가 있을 리 없다
|
||||
self.assertTrue(pres["before"])
|
||||
self.assertEqual(64, len(pres["beforeSha256"]))
|
||||
# **`available: true` 만으로는 비교가 무언가를 봤다는 뜻이 아니다.** 픽스처가
|
||||
# 조용히 같아지면 이 시험은 초록인 채로 아무것도 안 재게 된다 — 양성 대조다
|
||||
self.assertTrue(pkg["warnings"], "유보가 사라진 것을 못 잡았다 — 픽스처를 다시 짠다")
|
||||
self.assertTrue(any(w["id"] == "유보 감소" for w in pkg["warnings"]),
|
||||
[w["id"] for w in pkg["warnings"]])
|
||||
|
||||
def test_the_two_packages_print_different_lines(self):
|
||||
"""**같은 문구가 나오면 고친 것이 아니다.**"""
|
||||
|
||||
Reference in New Issue
Block a user