Skip to content

v0.9.10 — 티켓 완주 후 다음 티켓 진행 가능 (durable state checkpoint)

Choose a tag to compare

@sol5288 sol5288 released this 25 Jul 23:57
· 2389 commits to main since this release

티켓을 끝낸 뒤 다음 티켓을 시작할 수 있습니다 (REQ-2026-057~059). 실제 Nuxt 소비자 프로젝트에 설치 → REQ 워크플로 사용 → 제거까지 전 과정을 따라간 감사에서 나온 P1 2건 + 안내·진단 7건을 정리했습니다.

  • 작업 상태가 승인 증거와 함께 커밋됩니다 — durable state checkpoint (REQ-2026-057). 지금까지 req:commit의 evidence-finalize는 responses/만 커밋하고 소비된 상태는 커밋 뒤에 디스크에만 썼습니다. 그래서 티켓을 정상 완주해도 state.json이 dirty로 남아 다음 req:new의 clean-tree 게이트를 막았고(req:new의 스크래치 예외는 증거 변조를 막으려 state.json을 의도적으로 제외합니다), 계약·문서는 그 파일을 직접 커밋하지 말라고 하므로 남겨도 막히고 버려도 안 되는 상태였습니다. 실제로 버리면 커밋된 승인 증거가 있는데도 req:next설계 재리뷰를 지시했습니다(유료 Codex 호출). git checkout <다른 브랜치>도 같은 이유로 막혔습니다.

    이제 design 승인 직후phase 소비 직후에 해당 티켓의 state.json 한 경로만 담는 pathspec 커밋을 냅니다. 🔴 순서는 바꾸지 않았습니다 — 소비를 evidence 커밋 앞으로 옮기면 consumeStatepending_evidence_for·approval_evidence를 제거해 req:commit --finalize 복구가 근거를 잃습니다. 🔴 evidence 커밋의 "responses/ 외 staged 금지" 가드도 완화하지 않았습니다. 커밋 전에 디스크 내용이 도구가 방금 쓴 상태와 바이트 동일한지, state.id가 대상 티켓과 일치하는지 확인하고 아니면 fail-closed합니다. 변경이 없으면 커밋하지 않습니다(멱등). checkpoint 실패는 승인·커밋 판정을 바꾸지 않습니다.

    computeReviewSemanticIdentity에서 state.json을 제외했습니다 — checkpoint가 인덱스의 그 항목을 갱신하므로, 제외하지 않으면 방금 승인한 리뷰를 req:next G2가 stale로 오판합니다(responses/를 제외한 것과 같은 이유). 승인 바인딩(D9)은 그대로입니다.

  • 안내가 그대로 실행 가능해지고, 정상 상태가 실패처럼 보이지 않습니다 (REQ-2026-058).

    • req:next의 사람 승인(AWAIT_HUMAN) 경로가 내던 커밋 명령에 메시지 자리표시자가 빠져 있어, 그대로 실행하면 doctor 17개 체크를 모두 통과한 뒤에 커밋 메시지 필요로 죽었습니다(자동 커밋 경로에만 있었습니다). 두 경로가 같은 상수를 공유합니다.
    • HEAD에 증거가 아직 없는 정상 상태에서 git의 fatal: path … does not exist in 'HEAD'가 그대로 노출됐습니다. 부재가 정상인 조회 4곳에만 stderr를 버리는 runner를 씁니다 — 전역 억제가 아니라 그 조회 한정이라 진짜 오류의 진단은 그대로입니다.
    • commitgate uninstall이 도입 커밋 revert를 권하면서 그 커밋에 든 workflow/.gitignore가 함께 사라져 기존 티켓 scratch가 드러난다는 파급을 예고하지 않았습니다(증거 보존 지시와 서로 무효화). 보존할 증거가 있을 때만 경고와 선택지를 냅니다. 그 밖에 Stage B에 없는 scripts/를 잔여 후보에서 빼고, not-installed에서도 남은 티켓 증거를 고지하며, _npx 삭제가 사용자의 모든 npx 패키지 캐시를 지운다는 범위를 밝힙니다.
    • 설치 안내의 lockfile 인과를 Stage B 사실대로 고쳤습니다 — lockfile을 바꾸는 것은 init 이전npm i -D commitgate입니다.
  • 테스트 픽스처 정리 결정화 (REQ-2026-059). 새 near-e2e 픽스처의 임시 저장소 정리가 git의 detached auto 유지보수와 경합해 ENOTEMPTY로 간헐 실패했습니다(단언은 전부 통과, ubuntu·Node 20에서만 재현). 픽스처에서 gc.auto·maintenance.auto를 모두 끄고 정리에 짧은 재시도를 더했습니다. 단언은 변경하지 않았습니다.

전체 테스트 1709 → 1729. CI 9/9(ubuntu·windows·macos × node 18/20/22) green.