목록으로

죽여도 안 붉어진 검사 2개와 기대 문자열

1 조회
개발 도구 신뢰성
#Claude Code#릴리스#문서 검증

웹소설 집필 도구를 만들고 있다. 지난 판에서 이런 문장을 릴리스 노트에 적었다.

붉어지지 않는 검사는 없는 검사다.

이번 판에서 그런 검사를 새로 두 개 만들었다.

매번 뜨는 경고를 없애려던 모드

이번에 미뤄 뒀던 요청 여덟 개를 반영했다. 그중 하나가 "고친 뒤에 도는 모드"다.

설정 감사는 결함을 찾아 준다. 그런데 그 결함을 고친 수정 자체는 아무도 다시 안 본다. 실제 사용에서 감사를 여섯 번 돌리는 동안 같은 일이 반복됐다. 한 군데를 고치니 다른 데가 터지고, 용어만 바꿔 놓고 해결했다고 착각하고, 해소안이 "명시한다"로 끝나 내용이 안 정해진 채 남았다.

그래서 --recheck 라는 별도 모드를 만들었다. 기존 감사 항목에 얹지 않은 이유가 있다. 고친 것이 없는 첫 감사에서도 항목이 뜨면, 그게 바로 지난 판에서 없앤 "매번 뜨는 경고"가 된다.

그 모드가 매번 뜨는 경고를 만들었다.

동사로 가른 것이 틀렸다

"정하겠다는 말"을 찾는 규칙을 이렇게 짰다.

UNRESOLVED_TAIL = re.compile(
    r'(명시|정의|규정|보완|조정|검토|확정|정리|반영)(하기로|한다|할 것|예정|필요)')

독립 검토가 임시 설정 파일로 돌려 보고 짚어 왔다.

정하겠다고만 적힌 줄 3건
  1~5등급으로 규정한다
  사건 순서는 03-world.md 에 반영한다
  필기 없이 실전 3판으로 확정한다

셋 다 내용이 다 적힌 결정이다. 한국어에서 정해진 결정을 적는 가장 흔한 어미가 규정한다·확정한다·반영한다인데, 그걸 전부 미해결로 잡았다. 반대로 "5단계로 정하기로" 같은 진짜 미결은 안 잡혔다.

가르는 것은 동사가 아니었다. 유예 표지다. 진짜 미해결에는 예외 없이 "추후·나중·별도·미정"이 붙고, 정해진 결정에는 안 붙는다. 같은 저장소의 다른 스크립트가 이미 그 형태로 짜여 있었는데, 그걸 안 보고 새로 짰다.

고친 규칙은 유예 표지와 결정 동사가 둘 다 있을 때만 잡는다. 하나만으로는 한쪽이 정해진 결정을 먹고 다른 쪽이 무관한 서술을 먹는다. "추후 등장"처럼 표지만 있고 결정 동사가 없는 줄은 이제 안 잡힌다.

개명 전용 파서에 값 변경 줄이 들어왔을 때

두 번째 지적은 더 조용한 것이었다.

--recheck 의 첫 절은 "고친 결정을 딛고 선 줄"을 찾는다. 변경 기록에서 바뀐 항목을 읽어, 그것을 참조하는 줄을 표로 낸다. 그런데 변경 기록을 읽는 함수가 개명 전용이었다.

이 도구가 작가에게 시키는 기록 형식은 이렇다.

- [변경] 항목 이름 / 이전 → 이후 / 사유

개명에도 쓰고 값 변경에도 쓴다. 값 변경 줄이 들어오면 화살표 양쪽이 항목 이름이 아니라 값 조각이 된다.

- [변경] 마력 체계 / 대기 중 흡수 → 폐로 흡수 / 묘사 명확화

| 바뀐 결정 | 함께 봐야 할 줄 |
|---|---|
| 폐로 흡수 | _없음_ |

폐로 흡수 는 결정 이름이 아니니 참조하는 줄이 있을 리 없다. 정작 봐야 할 각성 조건 은 표에 안 나온다. 그러면서 명령은 "바뀐 결정 1건"이라고 찍는다. 이 모드가 존재하는 이유가 그 자리에서 초록이 됐다.

검사를 넣고 죽여 봤는데

세 번째가 이번에 가장 오래 걸린 것이다.

새로 만든 두 명령이 통합 점검에 한 번도 안 돈다는 지적을 받았다. 맞는 말이었다. 두 명령이 통째로 깨져도 점검은 초록을 낸다. 케이스를 넣고 규약대로 게이트를 죽여 봤다.

| ✅ | 개정판 재검증 (--recheck) |  |
| ✅ | 독자 지식 추적 budget |  |
**통과 60 / 실패 0**

파서를 원래대로 되돌려 놓고 돌렸는데 그대로 통과했다.

두 케이스 다 기대 문자열이 판별력이 없었다. --recheck 쪽은 시험용 변경 기록이 개명 줄뿐이라 옛 파서와 새 파서가 같은 답을 냈다. budget 쪽은 기대 문자열로 잡은 사슬 N 이 표 위 설명 문장에도 들어 있어서 열 제목을 지워도 통과했다.

시험 입력에 값 변경 줄을 넣어 두 파서가 갈리게 하고 파일 내용을 보는 기대 항목을 실행기에 새로 넣었다. 그러고 나서야 붉어졌다.

❌ 개정판 재검증 (--recheck) | recheck-report.md 에 없음: '| 계약 형식 |'
❌ 독자 지식 추적 budget | 출력에 없음: '| 화 | 압축 없음 |'

파일이 생겼는지만 보는 기대는 내용이 통째로 틀려도 통과한다. 게이트를 죽여 보는 것만으로는 모자라고 무엇을 죽였을 때 붉어져야 하는지를 먼저 정해야 한다.

무엇이 달라졌나

미해결 판단은 케이스 13개로 재 보면 오탐 5건이 0건이 됐고 놓치던 정탐 2건이 잡힌다. 변경 기록 파싱은 값 변경 줄에서 항목 이름을 읽어 내고 못 읽은 줄은 버리지 않고 "어느 항목인지 못 읽었다"로 센다.

노출 밀도 명령은 원장이 원고보다 뒤처졌을 때 경고와 종료 코드 4를 낸다. 같은 값을 세는 옆 명령은 그걸 하고 있었는데 새 명령만 안 하고 있었다.

통합 점검은 58개에서 60개가 됐다. 실행기에 기대 항목이 하나 늘었고 이제 보고서 파일의 내용을 본다.

이번 판에서 반영한 여덟 건 중 문서만 고친 것이 다섯, 명령이 붙은 것이 셋이다. 독립 검토가 24건을 짚었고 그중 18건이 반박을 통과해 전부 회수했다. 여섯 건은 반박 담당이 죽였다.

남은 것

떡밥 층에 넣은 scope 값을 읽는 조회 명령이 아직 없다. 색인에 적을 수는 있는데 집계는 손으로 해야 한다. 그 사실을 스키마 문서에 적어 두는 것으로 이번엔 끝냈다.

설명 글자수 비율은 안 넣었다. 구간을 작가가 원고에 표시해야 잴 수 있는데, 이 도구는 색인과 원장을 전부 원고 바깥에 두고 있다. 원고 파일에 도구 전용 표시를 넣는 것이 맞는지는 아직 안 정했다.

절차를 실행 가능한 형태로 만들자는 요청은 조건이 충족됐는데도 열지 않았다. 지난 판의 검토가 5회를 돌아 "3회를 넘은 사례 1건"이라는 조건을 채웠다. 다만 그 조건을 채운 것이 이 저장소 자신의 작업이라 스스로 실측해서 스스로 여는 모양이 된다. 네 번째 판까지 미뤘고 이번엔 "조건 미충족"이 아니라 "충족됐으나 판단 대기"로 적어 뒀다.


댓글

댓글 작성