Skip to content

v0.9.8 — 소비자 P0/P1 수정 (커밋 차단 · design 감사 증거)

Choose a tag to compare

@sol5288 sol5288 released this 22 Jul 13:01
· 2551 commits to main since this release
ad78ca9

소비자 저장소에서 발견된 P0/P1 결함 2건을 수정한 릴리스입니다. 0.9.7은 발행되지 않았으므로 그 변경도 이 릴리스에 함께 포함됩니다(npm은 0.9.60.9.8).

P0 — review-call 로그가 소비자의 모든 커밋을 막던 결함 (REQ-2026-047)

req:review-codex가 소비 저장소 루트에 남기는 측정 로그 workflow/.review-calls.jsonl의 무시 규칙이 배포 템플릿에 누락돼 있었습니다(개발 저장소 자신의 루트 .gitignore에만 있었고, npm은 .gitignore 이름을 tarball에서 제외합니다). 그 결과 commitgate init한 저장소에서 리뷰를 한 번이라도 돌리면 로그가 untracked로 남아 req:doctor D10이 FAIL하고 req:commit모든 커밋을 차단했습니다.

  • templates/workflow.gitignore에 앵커형 /.review-calls.jsonl 추가 → 신규 설치는 즉시 해소
  • 기존 설치본 백필: commitgate sync --gitignore --apply (누락 규칙 행만 멱등 append, 사용자 정책 미변경)
  • req:doctor D22 WARN — 다음 review 뒤 D10이 막힐 상황을 미리 알림 (FAIL 아님)
  • 회귀는 문자열 비교가 아니라 packed tarball → 실제 initgit check-ignore -v(매칭 출처까지 단언) 로 고정

이미 로그를 커밋해 tracked가 된 경우는 ignore 규칙만으로 빠지지 않습니다 — git rm --cached workflow/.review-calls.jsonl이 필요합니다(문제 해결 참조).

P1 — design 승인 감사 증거가 커밋 이력에서 사라지던 갭 (REQ-2026-048/049)

state.json은 설계상 커밋되지 않으므로 저장소의 감사 정본은 approvals.jsonl과 커밋된 아카이브뿐인데, phase 증거는 자동 커밋되는 반면 design 증거는 수동 --finalize-design에만 의존했고 그마저 승인본 1건만 담았습니다. 그 단계는 어떤 도구 출력에서도 안내되지 않았고, 커밋된 매니페스트를 확인하는 게이트도 없었습니다. 결과적으로 REQ가 전 phase 커밋·병합에 도달해도 설계 승인 증거가 전혀 남지 않을 수 있었습니다(소비자 저장소에서 실측).

  • 성공한 req:review-codex --kind design --run승인 아카이브·needs-fix 라운드·매니페스트를 자동 커밋
  • 매니페스트 design 행에 archive_inventory(경로 + SHA-256)를 두어 그 승인에 이르는 모든 라운드를 영속화
  • --finalize-design멱등 복구 경로로 유지(같은 구현 공유) — 커밋 실패는 승인 판정을 뒤집지 않고 복구 명령을 안내
  • req:next가 완료 선언 직전 HEAD의 Git blob에서 매니페스트·아카이브·SHA를 fail-closed로 검증 → 미완이면 DONE 대신 BLOCKED + 복구 명령

게이트가 검사하지 않는 것 (명시)

phase 행의 phase_id 멤버십은 검사하지 않습니다. state.json이 스캐폴드 이후 재커밋되지 않아 HEADphases가 항상 비어 있기 때문이며, 그 바인딩은 커밋 시점에 evidence preflight가 강제합니다.

하위호환

  • 0.9.8 이전에 만들어진 티켓은 새 DONE 게이트의 대상이 아닙니다(기존 동작 유지).
  • sync기본 동작은 불변--gitignore를 명시할 때만 workflow/.gitignore를 손대며, 그때도 덮어쓰지 않고 누락 행만 추가합니다.
  • req:doctor·일반 req:commitFAIL 게이트를 추가하지 않았습니다(기존 저장소의 커밋을 막지 않기 위한 의도적 경계).

검증

main CI 9/9 성공(macOS·ubuntu·windows × node 18/20/22) · fresh clone에서 재검증(npm ci · typecheck 0 · 1363 테스트 · packed smoke · docs 링크 검증).