Design(설계)
Gate: 사용자가 명세를 승인할 때까지 코드 없음.
무엇을 만들어야 할지 알 때까지 한 번에 하나씩 질문한다. 2~3가지 접근 방식과 트레이드오프를 제안하고 하나를 추천한다. 그런 다음 명세를 작성한다.
명세 = 결정 목록
명세는 이 변경에 대한 미해결 질문에 답한다. 일반적인 것들:
- 계약 / 인터페이스?
- 데이터 형태?
- 실패 모드?
- 범위 외?
- 무엇으로 테스트할 것인가?
- 아키텍처?
관용적으로 명세를 작성한다.
질문 없음 → 섹션 없음. Risks / Non-goals가 비어있으면 채우지 않는다.
선언을 사용하고, 서술은 사용하지 않는다:
contract: <인터페이스>
invariant: <무엇이 성립해야 하는가>
test: <어떻게 알 것인가>
deferred: <지금은 결정 안 함>코드는 경로로 참조하고, 절대 붙여넣지 않는다.
인계 전에 구현에 영향을 미치는 결정만 닫는다: 계약, 데이터, 실패, 테스트. 미해결된 Working notes는 결정, deferred, 또는 질문이 된다.
2계층, 1파일: docs/staging/specs/YYYY-MM-DD-<topic>.md
- 상단: 결정, 계약, 불변 조건 (영구적).
## Working notes: 초안, 미해결 질문 (ship시 삭제).
Roadmap (범위가 ≥3 마일스톤에 걸치는 경우)
한 번에 전부 계획하기엔 너무 클 때 명세에 ## Roadmap 추가:
## Roadmap
- [ ] M1: <한 줄 목표> ← 지금 상세 계획
- [ ] M2: <한 줄 목표> ← stub
- [ ] M3: <한 줄 목표> ← stub마커는 필수다. 현재 마일스톤에 ← 지금 상세 계획, 나머지는 모두 ← stub. 스텁은 의도이지 약속이 아니다. 전개 전에 업데이트한다.
Gate
docs/staging/specs/YYYY-MM-DD-<topic>.md가 디스크에 존재하고 사용자가 확인한 후 plan에 인계한다.
두 가지 출구 중 하나:
- → design: 방향이 해결해야 할 문제 →
plan으로 상세 작업. - → archive: 방향이 지식 산출물 (역공학 발견, 프로토콜 명세), 직접 아카이브.