Skip to content

MSG-611 chore: 스펙 완료 정의를 check-spec.py 검사로 못 박고 문서 스킬에 선례 표를 둔다 - #291

Merged
Ss0Mae merged 2 commits into
developfrom
feature/MSG-611-spec-done-check
Oct 2, 2026
Merged

Ss0Mae merged 2 commits into
developfrom
feature/MSG-611-spec-done-check

Conversation

@Ss0Mae

@Ss0Mae Ss0Mae commented Oct 2, 2026 •

Copy link
Copy Markdown
Member

🎫 관련 티켓

작업 내용

스펙 문서가 "다 썼다"로 끝나지 않게, 기계로 확인되는 완료 조건을 스크립트로 만들고 spec-writer 절차에 넣었습니다. 코드 변경은 없고 하네스 파일 4개입니다.

  • scripts/check-spec.py 신설. 스펙 한 건에 검사 10항목을 돌려 항목마다 PASS/FAIL/WARN/INFO와 증거(줄 번호, 실측값)를 찍고 FAIL이 있으면 exit 1. 표준 라이브러리만 쓰고 0.02초에 끝납니다.

    항목 내용 등급
    S1 파일명과 제목의 티켓 번호 일치 FAIL
    S2 **Owner**: 첫 토큰이 A / B / 공동 FAIL
    S3 언급된 PRD가 실존하고 헤더가 지목한 PRD는 검토됨/확정, 또는 PRD 면제 선언 FAIL
    S4 FR/NFR ID가 docs/srs.md 표에 실존 (폐기됨이면 WARN) FAIL
    S5 - AC-{티켓}-{NN}: 형식, 티켓 번호 일치, 순번 유일 FAIL
    S6 필수 절 8종 FAIL
    S7 본문(작업 로그 전, 코드블록 제외) 줄표 0건 FAIL
    S8 각주 참조와 정의 1:1 (3~7개 밖이면 WARN) FAIL
    S9 변경 파일 경로가 실존하거나 신설 표기 WARN
    S10 미종결 질문 INFO
  • spec-writer SKILL.md. 절차 5 "완료 정의 검사"(생성 직후, Codex 전)를 넣고 Codex 리뷰를 6번, 7번 "재검사 후 보고"로. ## 완료의 정의 절에서 기계 항목은 스크립트에 위임하고 사람 판단 항목 H1~H4(PRD 범위 일치, 판정 가능성, 계약 변경 노출, 용어)만 체크리스트로 남겼습니다. FAIL이 남은 채로는 보고하지 않고, 첫 실행에 FAIL이 2건 이상이면 원인을 한 줄 진단합니다.

  • spec-writer·prd-writer에 "본으로 삼을 선례" 표. 스펙은 검사 전 항목 PASS인 MSG-594(전용 PRD 기능), MSG-513(Owner 공동), MSG-583(PRD 면제). PRD는 검토됨·줄표 0·8절·각주 3개 이상인 MSG-594, MSG-513, event-submission(공유 PRD).

  • CLAUDE-changelog.md에 행 추가.

🤔 고민한 내용

계기는 외부 글이지만 글의 방식을 그대로 쓰지 않았습니다. 널포인터스튜디오 "AI 위임 루프 플레이북"이 프로세스·툴박스·증명 세 레이어를 권하는데, 우리 레포는 앞의 둘과 사고 기록(CLAUDE-changelog)은 이미 있고 문서 스킬에 "실패할 수 있는 검증 항목"만 없었습니다. 글은 "AI가 항목마다 증거와 함께 보고"하라고 하지만 그건 자가 보고1라 MSG-529에서 hook 로그로 대체한 것과 같은 문제가 있습니다. 그래서 기계로 확인되는 항목은 스크립트 출력을 증거로 쓰고, 사람 판단만 체크리스트로 갈랐습니다.

스크립트를 기존 스펙에 돌려 보니 자가 보고가 새고 있었습니다. 현행 규칙이 적용된 스펙 12건 중 줄표 0건 조항 위반 2건(MSG-608 본문 7줄, MSG-538 4줄), 각주 고아2 2건(MSG-432 3개, MSG-608 1개), 필수 절 누락 1건(MSG-600). 줄표는 작성 때는 지켜졌고 리뷰 반영과 결정 종결 메모에서 들어온 것이라, 검사를 리뷰 뒤에도 한 번 더 돌리게 했습니다. 소급 수정은 MSG-526 때와 같은 원칙으로 하지 않았습니다.

판정은 fail-closed3입니다. PRD 헤더에 상태가 없으면 미승인, PRD 언급도 면제 선언도 없으면 게이트 우회로 봅니다. 면제 선언은 헤더 영역(첫 ## 전)의 "PRD 면제", "PRD 게이트: 면제", "PRD: 면제"만 인정하고, 뒤에 부정·유보 표현이 붙은 문장은 선언이 아닙니다. 본문에만 적은 선언은 WARN입니다.

실행은 에이전트가 아니라 스킬(호출 측)이 합니다. agents/spec-writer.md에는 Bash가 없어서 오케스트레이터가 돌리고 FAIL 항목과 줄 번호를 SendMessage로 넘기는 구조입니다. 에이전트 정의는 손대지 않았습니다.

👀 리뷰 포인트

  • 전수 169건 중 FAIL 있는 스펙이 161건인데 대부분 AC 도입(MSG-526) 전·PRD 게이트 전 문서라 정상입니다. CI 게이트로 올리는 건 이번 범위 밖입니다(exit 코드는 내므로 가능).
  • S6 필수 절 8종(개요·배경·성공 기준·API 명세·도메인 로직·데이터 모델·계약 변경·테스트 시나리오)이 너무 엄격하면 WARN으로 내릴 수 있습니다. 해당 없는 절은 "없음"으로 적는 게 지금 계약 변경 관례입니다.
  • 선례 표의 3건씩은 제가 기준으로 고른 것이라 더 좋은 본이 있으면 교체하면 됩니다. 표에 선정 기준과 날짜를 적어 뒀습니다.
  • 스킬 description은 안 바꿨으므로 MSG-529 회귀 확인은 필요 없습니다.
  • 확인한 것: python3 scripts/check-spec.py docs/spec/MSG-594.md 10항목 PASS exit 0, docs/spec/MSG-608.md S7·S8 FAIL exit 1, --all 요약 표.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VzV5yGk9MqAR1kZH1ULrjU


Generated by Claude Code

Footnotes

  1. 자가 보고: 에이전트가 "줄표 없음을 확인했다"처럼 스스로 적는 확인. 컨텍스트가 깨지면 확인 자체가 사라질 수 있어, 응답 컨트랙트의 Applied skills를 hook 로그와 대조하게 한 MSG-529와 같은 문제입니다. ↩

  2. 각주 고아: 문서 하단에 [^n]: 정의는 있는데 본문에 [^n] 참조가 없는 상태. 본문을 고치면서 참조만 지워지면 생기고, 렌더링에서는 안 보이는 찌꺼기가 남습니다. ↩

  3. fail-closed: 판정 재료가 없거나 애매하면 통과가 아니라 실패로 처리하는 방식. 게이트가 "확인 못 함"을 "통과"로 읽어 형식만 남는 것을 막습니다. spec-driven-dev의 PRD 게이트가 쓰는 규칙과 같습니다. ↩

scripts/check-spec.py가 스펙 한 건에 기계 검사 10항목(번호 일치, Owner, 정본 PRD
실존·승인 또는 면제 선언, FR ID 실존, AC 형식, 필수 절, 본문 줄표, 각주 고아, 변경
파일 경로, 미종결 질문)을 돌려 항목마다 판정과 증거를 찍고 FAIL이면 exit 1.
spec-writer 절차 5(생성 직후)와 7(리뷰 반영 뒤)에 편입하고 FAIL 상태 보고를 금지한다.
사람 판단 항목 H1~H4는 보고에 근거 한 줄. spec-writer·prd-writer에 본으로 삼을
선례 표 추가.

기존 스펙 실측: 현행 규칙 적용분 12건 중 줄표 위반 2건(MSG-608, MSG-538), 각주 고아
2건(MSG-432, MSG-608), 필수 절 누락 1건(MSG-600). 소급 수정은 하지 않는다.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VzV5yGk9MqAR1kZH1ULrjU
@claude

claude Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

Claude finished @Ss0Mae's task in 38s —— View job


리뷰 결과

확인한 범위: scripts/check-spec.py 전체, spec-writer/SKILL.md의 절차 5~7 대목(HEAD 기준). 하네스 파일만 바뀐 PR이라 마이그레이션 번호, developCode 대역, Owner 계약 인터페이스 경합은 해당하지 않습니다. 스크립트는 직접 실행하지 않았고 코드 읽기로만 확인했습니다.

발견 목록 (상세는 인라인)

  • P2 · scripts/check-spec.py:174 · PRD 면제 판정이 부정문("PRD 면제 아님")까지 면제로 읽고 본문 전체를 훑어 fail-closed 주장과 어긋남
  • P3 · scripts/check-spec.py:2 · docstring과 S10 문구의 "절차 6"이 실제 절차 5와 불일치
  • P3 · scripts/check-spec.py:272 · 각주 참조 검사가 코드블록·인라인 코드를 구분하지 않음 (추정)
    · branch feature/MSG-611-spec-done-check

Comment thread scripts/check-spec.py Outdated
Comment thread scripts/check-spec.py Outdated
Comment thread scripts/check-spec.py Outdated
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown

테스트 커버리지

Overall Project 95.9% 🍏

There is no coverage information present for the Files changed

PR #291 리뷰 반영. 부정문(MSG-461·470·538 실측)이 면제로 읽히던 fail-open을 막고, 본문에만 있는 선언은 WARN으로 내린다. 절차 번호는 SKILL.md 기준으로 2행 5, 315행 7.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown

테스트 커버리지

Overall Project 95.9% 🍏

There is no coverage information present for the Files changed

@Ss0Mae
Ss0Mae merged commit e3ee472 into develop Oct 2, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant