fix: 고친 자리에 같은 버그를 다시 넣었고, 게이트가 관측 창을 덮었다
한글 수사의 뒤 경계가 세는 말 다음의 조사를 낱말의 일부로 봤다. 「다섯 개다」·「다섯 건을」· 「여섯 장이」가 전부 안 걸린다. 아라비아 숫자 쪽에서 같은 이유로 「500행」·「5개다」를 놓쳤던 것을 고쳤는데, 그 고침을 한글로 옮기면서 다시 넣었다. 회귀가 초록이었던 건 시험 문구가 전부 조사 없이 끝나서다. 뒤 경계를 풀었더니 채택된 편집 둘이 새로 막혔다. 「여덟 자리 → 여덟 곳」이다. 숫자가 안 바뀌었고 세는 말이 바뀌었다 — spatial-metaphor 를 고치는 정상 편집이다. 그래서 잡는 것을 수사로 좁히고 세는 말은 문맥으로만 본다. 대안도 긴 것부터로 정렬했다. 대조군을 주변이 바뀌는 쌍으로 다시 짰다. 같은 문자열은 어떤 검사기든 조용해서 대조가 되지 않는다. 그 대조군이 없었으면 위 오탐을 못 봤다. 그리고 저장 게이트가 그림 붙은 기록을 전부 막고 있었다. 저장소의 그림에 종류 표시가 하나도 없어서 그림이 붙으면 무조건 경고가 하나 붙는다. 게이트가 틀린 게 아니라 그 경고가 어느 기록에 대한 정보도 아니다 — 모든 기록에 걸리는 경고는 어느 기록에 대해서도 아무 말을 하지 않는다. 저장소 전체의 미비는 세고 보고하되 저장을 막지 않는다. 조용히 빼지도 않는다. 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
20c8535169
commit
16cbe141a0
@@ -381,6 +381,43 @@ class ReviewGateTest(unittest.TestCase):
|
||||
with self.assertRaises(ss.Refused):
|
||||
ss._review_gate(self.WARN, self.book, self.pkg)
|
||||
|
||||
def test_a_repository_wide_gap_does_not_block(self):
|
||||
"""모든 기록에 걸리는 경고는 어느 기록에 대해서도 아무 말을 하지 않는다.
|
||||
|
||||
저장소의 그림 어느 것에도 종류 표시가 없어서 그림 붙은 기록이면 무조건 걸린다.
|
||||
그것으로 막으면 게이트의 첫 실사용에서 그림 붙은 기록이 전부 막히고, 그러면 사람이
|
||||
게이트를 우회하기 시작한다. **막을 수 없는 게이트보다 나쁜 건 우회당하는 게이트다.**
|
||||
"""
|
||||
only_repo = [{"id": "그림 종류가 표시돼 있지 않다", "scope": "repository",
|
||||
"detail": "…", "key": "cccc3333"}]
|
||||
self.assertEqual([], ss._review_gate(only_repo, None, self.pkg))
|
||||
|
||||
def test_a_finding_about_this_record_still_blocks(self):
|
||||
"""저장소 미비가 섞여 있어도 이 기록에 대한 발견 하나면 막힌다."""
|
||||
mixed = [{"id": "그림 종류가 표시돼 있지 않다", "scope": "repository",
|
||||
"detail": "…", "key": "cccc3333"},
|
||||
{"id": "그림이 검토 뒤에 바뀌었다", "detail": "fd5f → 3ba4", "key": "dddd4444"}]
|
||||
with self.assertRaises(ss.Refused) as e:
|
||||
ss._review_gate(mixed, None, self.pkg)
|
||||
self.assertIn("dddd4444", str(e.exception))
|
||||
self.assertNotIn("cccc3333", str(e.exception),
|
||||
"세는 경고를 막는 목록에 넣지 않는다")
|
||||
|
||||
def test_a_verdict_is_not_needed_for_a_counted_warning(self):
|
||||
"""세는 경고에는 판정을 요구하지 않는다 — 요구하면 그게 막는 것이다."""
|
||||
mixed = [{"id": "그림 종류가 표시돼 있지 않다", "scope": "repository",
|
||||
"detail": "…", "key": "cccc3333"},
|
||||
{"id": "유보 감소", "detail": "가능성 2회 → 1회", "key": "aaaa1111"}]
|
||||
self._write(["PASS"], keys=["aaaa1111"])
|
||||
cleared = ss._review_gate(mixed, self.book, self.pkg)
|
||||
self.assertEqual(["aaaa1111"], [c["key"] for c in cleared])
|
||||
|
||||
def test_the_repository_gap_is_counted_not_hidden(self):
|
||||
"""조용히 빼면 그게 또 「본 것만 같다」다."""
|
||||
total, unmarked = ss._figure_kind_coverage()
|
||||
self.assertGreater(total, 100, "그림을 못 찾았다 — 이 셈이 무의미해진다")
|
||||
self.assertGreaterEqual(total, unmarked)
|
||||
|
||||
def test_the_key_changes_when_the_warning_changes(self):
|
||||
"""판정이 다른 경고에 옛 판정으로 붙지 않아야 한다."""
|
||||
import hashlib
|
||||
|
||||
Reference in New Issue
Block a user