--- name: "confirm-design" description: "Approve a Design document and mark it as confirmed, ready for Implementation" argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/3_design.md" agent: "agent" --- SDLC Design 문서를 최종 승인 처리한다. 목표: - `3_design.md`의 상태를 `confirmed`로 변경한다. - `# 10. Design Freeze`의 `Handoff Decision`을 `승인`으로, `Ready for Implementation`을 `true`로 변경한다. - `마지막 갱신 시각(KST)`과 승인 시각(`CONFIRMED_AT_KST`)을 현재 시각으로 채운다. - 승인 불가 조건이 있으면 문서를 변경하지 않고 이유를 보고한다. --- ## 플레이스홀더 분류 기준 모든 `{{...}}` 플레이스홀더를 동일하게 차단 조건으로 취급하지 않는다. 아래 세 유형으로 먼저 분류한다. ### A. 승인 행위 자체로 채워지는 플레이스홀더 (자동 해소) 승인 명령 실행 시 자동으로 채우며, 이 값이 남아 있어도 차단하지 않는다. | 플레이스홀더 패턴 | 자동 채움 값 | |---|---| | `{{CONFIRMED_AT_KST...}}` | 현재 시각 (KST, `YYYY-MM-DD HH:MM:SS KST`) | | `{{CONFIRMED_BY...}}` | 섹션 10의 `Confirmed By:` 줄에서 읽은 값. 해당 줄이 없으면 차단하지 않고 플레이스홀더를 제거한 뒤 빈 값으로 처리 | ### B. 맥락상 해소된 플레이스홀더 (자동 정리) 섹션 7(체크리스트) 또는 섹션 9(사용자 결정 요약)에 있는 플레이스홀더는 **해당 결정의 실질 값이 섹션 10에 이미 기입되어 있으면** 해소된 것으로 간주한다. 승인 처리 시 해당 플레이스홀더를 실질 값으로 치환하거나 설명 텍스트로 대체한다. 차단하지 않는다. 예시: - 섹션 7의 `{{CONFIRM_CONFIRMEDBY}}` → 섹션 10의 `Confirmed By: Justin` 값이 있으면 → `Justin`으로 치환 또는 체크리스트 기준 텍스트에서 플레이스홀더 제거 - 섹션 9 CONFIRM 항목의 `{{CONFIRM_CONFIRMEDBY}}` → 동일하게 처리 ### C. 실질 미해소 플레이스홀더 (차단 대상) 섹션 1~6(본문 내용)에 남아 있는 `{{...}}` 플레이스홀더로서, 위 A·B 유형에 해당하지 않는 것. 이 플레이스홀더가 하나라도 있으면 승인을 보류한다. --- ## 실행 절차 ### 1. 입력 해석 - 사용자가 제공한 값이 CYCLE_ID(예: `sdlc-001`)이면 `docs/sdlc/` 아래에서 해당 패턴으로 시작하는 폴더를 찾아 `3_design.md` 경로를 확정한다. - 사용자가 파일 경로를 직접 제공했으면 해당 경로를 사용한다. - 파일이 존재하지 않으면 경로를 재확인하도록 사용자에게 피드백하고 중단한다. ### 2. 플레이스홀더 분류 및 사전 해소 문서 전체의 `{{...}}` 플레이스홀더를 스캔해 A·B·C 유형으로 분류한다. - **A 유형**: 목록만 기록한다. 4단계에서 자동으로 채운다. - **B 유형**: 섹션 10에서 실질 값을 읽어 치환 가능한지 확인한다. 가능하면 4단계에서 함께 처리한다. - **C 유형**: 목록을 보고하고 승인을 보류한다. ### 3. 승인 가능 여부 확인 (사전 게이트 검사) 아래 조건을 모두 충족해야 승인을 진행한다. | 항목 | 확인 기준 | |------|-----------| | 문서 상태 | `confirmed`가 아닌 상태(`draft` 또는 `review`)여야 한다. 이미 `confirmed`면 중단한다. | | 실질 미해소 플레이스홀더 (C 유형) | C 유형 플레이스홀더가 0개여야 한다. | | 오픈 질문 미해소 | `# 6` 오픈 질문 목록에 `상태: Open`인 항목이 없어야 한다. | | 필수 섹션 미완성 | `# 2`, `# 3`, `# 5`, `# 7`, `# 9`, `# 10` 섹션이 존재하고 내용이 채워져 있어야 한다. | | Ready for Implementation 사전 설정 | `Ready for Implementation: false`이거나 아직 갱신 전인 경우만 승인 처리 대상이다. 이미 `true`이면 이미 처리된 문서임을 알린다. | > **예외**: C 유형 플레이스홀더 또는 오픈 질문 미해소만 문제인 경우, 사용자가 명시적으로 `--force`를 표현했으면 해당 항목 목록을 보고하되 승인을 진행한다. ### 4. 문서 업데이트 (승인 가능 시에만 실행) 아래 항목을 변경한다. 이 목록 외 내용은 절대 수정하지 않는다. 1. `# 0. 문서 상태`의 `- 상태:` 줄 → `confirmed`로 변경 2. `# 0. 문서 상태`의 `- 마지막 갱신 시각(KST):` → 현재 시각으로 변경 3. `# 10. Design Freeze`의 `- Handoff Decision:` → `승인`으로 변경 4. `# 10. Design Freeze`의 `- Ready for Implementation:` → `true`로 변경 5. **A 유형 플레이스홀더** → 각 자동 채움 값으로 치환 6. **B 유형 플레이스홀더** → 섹션 10에서 읽은 실질 값으로 치환 (또는 플레이스홀더 제거) 7. `docs/sdlc//index.md`의 Design 행 `상태` 열 → `` `confirmed` ``로 변경. 행 형식: `| 3. Design | ... | ... |` ### 5. 결과 보고 응답에 아래 내용을 포함한다. - **처리 결과**: 승인 완료 또는 승인 불가 - **자동 처리된 플레이스홀더 목록** (A·B 유형, 승인 완료 시) - **변경된 필드 목록** (승인 완료 시) - **미충족 항목 목록** (승인 불가 시): 각 항목에 대한 조치 안내 포함 - **다음 단계 안내**: 승인 완료 시 Implementation 단계(`/draft-implementation `) 실행 안내 --- ## 중요 규칙 - 4단계에서 명시된 항목 외에는 문서 내용을 절대 변경하지 않는다. - C 유형 미해소 조건이 있으면 문서에 아무 변경도 가하지 않는다. - 이미 `confirmed` 상태인 문서에는 재처리하지 않는다. - 현재 시각은 시스템 또는 컨텍스트에서 제공된 날짜/시간을 사용한다.