- CLAUDE.md 를 .claude/rules/ 4파일로 분할 (project/stack/principles/workflow) - Plans.md 루트 인덱스 (스프린트 목차 + 참조만) - hooks/ pre/post-tool.sh 스켈레톤 (no-op, Sprint 002에서 구현) - .plans/OVERVIEW.md — 목표/범위/성공기준 8개 - .plans/failure-audit.md — F1~F6 실패 감사 (증거 기반) - .plans/design/ 6개 문서: * state-machine.md (XState v5 FSM 설계) * sprint-contract.md (Zod schema + validator) * skill-enforcement.md (4계층 방어) * handoff.md (상태 전이 기반 자매 통신) * retry-policy.md (backoff + escalation) * qa-template.md (체크리스트 runtime) - .plans/sprints/ 8개 스프린트 명세 (SPRINT-000~007) - .plans/migration/from-hanarang-harness.md (자산 매트릭스 + 단계별 가이드) 총 17개 문서, 약 2146 lines. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
66 lines
3.2 KiB
Markdown
66 lines
3.2 KiB
Markdown
# SPRINT-003 — Sprint Contract + DoD Validator
|
|
|
|
> **목표**: F2 (DoD 강제 실패), F6 (환경 검증 누락) 해결. contract 가 기계 판정 가능하고 불변이며 validator 가 pass/fail 을 확정한다.
|
|
|
|
## Type
|
|
`feature`
|
|
|
|
## Prerequisites
|
|
- Sprint 001 완료 (FSM + store)
|
|
- `.plans/design/sprint-contract.md` 확정
|
|
|
|
## Scope
|
|
|
|
- `src/contract/schema.ts` — Zod schema 전체 (SprintContract + 하위 타입)
|
|
- `src/contract/checks/` — check kind 별 구현 (file_exists, command_success, regex_in_file, http_status, db_query, process_listening, artifact_schema, manual)
|
|
- `src/contract/validator.ts` — 전체 검증 파이프라인 (prerequisites → runtime → dod → verdict)
|
|
- `src/contract/generator.ts` — 스프린트 md → contract 초안
|
|
- `src/contract/store.ts` — SQLite `contracts` 테이블 + frozen_at
|
|
- `rails contract <subcommand>` CLI 전 서브커맨드 구현 (generate / edit / freeze / validate / show / history)
|
|
- Fixture: SPRINT-001 contract 샘플
|
|
- 테스트: 각 check kind 단위 테스트 + validator integration 테스트
|
|
|
|
## Non-Goals
|
|
|
|
- manual check 의 LLM 판단 로직 (Sprint 006)
|
|
- contract 의 diff/merge 도구
|
|
- 시각화 UI
|
|
|
|
## Tasks
|
|
|
|
| # | 내용 | DoD | Status |
|
|
|---|---|---|---|
|
|
| 3.1 | Zod schema 전체 (`SprintContract`) | 타입체크 pass | cc:TODO |
|
|
| 3.2 | `src/contract/checks/file_exists.ts` | unit test pass | cc:TODO |
|
|
| 3.3 | `src/contract/checks/command_success.ts` (execa + timeout) | timeout 테스트 포함 | cc:TODO |
|
|
| 3.4 | `src/contract/checks/regex_in_file.ts` | unit test | cc:TODO |
|
|
| 3.5 | `src/contract/checks/http_status.ts` | mock server 테스트 | cc:TODO |
|
|
| 3.6 | `src/contract/checks/db_query.ts` | fixture SQLite 테스트 | cc:TODO |
|
|
| 3.7 | `src/contract/checks/process_listening.ts` | port open/close 테스트 | cc:TODO |
|
|
| 3.8 | `src/contract/checks/artifact_schema.ts` | Zod 검증 위임 | cc:TODO |
|
|
| 3.9 | `src/contract/checks/manual.ts` — placeholder (Sprint 006 에서 활성) | 현재는 SKIP | cc:TODO |
|
|
| 3.10 | `src/contract/validator.ts` — 전체 파이프라인 | integration test | cc:TODO |
|
|
| 3.11 | `src/contract/generator.ts` — md 파싱 → draft contract | SPRINT-001 으로 generate 테스트 | cc:TODO |
|
|
| 3.12 | `src/contract/store.ts` — frozen_at 불변성 | write 거부 테스트 | cc:TODO |
|
|
| 3.13 | `rails contract generate/edit/freeze/validate/show/history` | 전 서브커맨드 동작 | cc:TODO |
|
|
| 3.14 | Environment prerequisite 체크 (ABORT_PRECHECK) | pre-check fail 테스트 | cc:TODO |
|
|
| 3.15 | SPRINT-001 샘플 contract 생성 + validate | PASS 결과 확인 | cc:TODO |
|
|
|
|
## Definition of Done
|
|
|
|
### 자동
|
|
- `rails contract generate SPRINT-001` → JSON 생성
|
|
- `rails contract freeze <id>` → `frozen_at` 세팅 + ro 퍼미션
|
|
- `rails contract validate <id>` → PASS / FAIL / ABORT_PRECHECK 중 하나 명확 출력
|
|
- frozen contract 에 write 시도 시 에러
|
|
- env prerequisite 미달 → `ABORT_PRECHECK`
|
|
- 단일 check 종류별 테스트 8개 이상 pass
|
|
|
|
### 수동
|
|
- [ ] "build 통과 = 완료" 시나리오를 수동 테스트. FAIL 판정 확인
|
|
- [ ] contract JSON 이 사람이 읽기 좋은 포맷
|
|
|
|
## Exit Criteria
|
|
|
|
F2 / F6 재현 불가. 어떤 스프린트도 contract 없이 시작될 수 없고, build 만으로 PASS 받을 수 없다.
|