diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..ffb529d --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,43 @@ +# Copilot Instructions + +이 파일은 호스트 프로젝트 고유 규칙과 StagePilot 규칙을 함께 담는다. + +## Host Project Rules + +호스트 프로젝트 전용 규칙은 이 섹션에 작성한다. + +## StagePilot + +# SDLC Governance Instructions + +이 워크스페이스의 AI 에이전트는 Agile 중심 반복형 SDLC를 따른다. +모든 작업은 단계 기반으로 수행하며, 단계 스킵은 허용되지 않는다(긴급 핫픽스 예외는 별도 규칙 적용). + +## Lifecycle Stages + +1. Discovery +2. Planning +3. Design +4. Implementation +5. Verification +6. Release +7. Operations + +## Global Rules + +1. 증거 기반: 요구사항, 가정, 리스크, 결정 근거를 문서에 남긴다. +2. 게이트 준수: 각 단계의 DoR(진입 조건)과 DoD(완료 조건)을 충족해야 다음 단계로 이동한다. +3. 테스트 우선 검증: 구현 결과는 테스트 또는 검증 근거 없이 완료로 간주하지 않는다. +4. 변경 영향도 기록: 코드/문서/운영 영향 범위를 명시한다. +5. 불확실성 우선 해소: 차단 이슈가 있으면 임의 추정 대신 질문 또는 추가 탐색을 수행한다. +6. 운영 환류: 운영 단계 인사이트는 다음 Discovery의 입력으로 반드시 반영한다. + +## Hotfix Exception Path + +긴급 핫픽스는 Discovery/Planning/Design을 경량화할 수 있다. 단, 아래는 필수다. + +1. 최소 요구사항 정의(증상, 영향, 성공 조건) +2. 최소 검증(재현 테스트 또는 핵심 시나리오 확인) +3. 배포 전 롤백 계획 +4. 배포 후 Postmortem 작성 및 다음 스프린트 환류 + diff --git a/.github/instructions/placeholder-guide.md b/.github/instructions/placeholder-guide.md new file mode 100644 index 0000000..3332bf5 --- /dev/null +++ b/.github/instructions/placeholder-guide.md @@ -0,0 +1,243 @@ +# 플레이스홀더 가이드 + +이 파일은 `.github/templates/` 및 `.github/prompts/`에서 사용하는 `{{...}}` 플레이스홀더의 문법, 처리 주체, 전체 목록을 정의한다. +템플릿을 수정하거나 새 프롬프트를 작성할 때 이 파일을 기준으로 한다. + +--- + +## 1. 문법 규칙 + +| 형식 | 의미 | 예시 | +|---|---|---| +| `{{KEY}}` | 단순 치환 대상. 힌트 없음. | `{{CYCLE_ID}}` | +| `{{KEY:hint}}` | 힌트 포함. 치환 시 힌트 텍스트도 함께 제거. | `{{CREATED_AT_KST:TBD}}` | +| `{{KEY:opt1\|opt2\|opt3}}` | 열거형. 나열된 값 중 하나를 선택. | `{{DOC_STATUS:draft\|review\|confirmed}}` | +| `{{KEY_N_DECISION:hint}}` | AI agent가 섹션 본문에 임시로 삽입하는 판단 대기 마커. `review-discovery` 등 검토 단계에서 실제 문장으로 치환하거나 `#10`으로 이동. | `{{TARGET_STATE_2_DECISION:...}}` | + +> **규칙**: 플레이스홀더를 채울 때는 `{{...}}` 전체를 값으로 교체한다. 힌트나 파이프(`|`) 열거는 최종 문서에 남기지 않는다. + +--- + +## 2. 처리 주체 분류 + +플레이스홀더는 **누가 채워야 하는가**에 따라 세 가지로 나뉜다. + +### A. 자동 치환 (Auto — 프롬프트 실행 시 agent가 즉시 채움) + +| 키 | 치환 값 | 사용 위치 | +|---|---|---| +| `{{DOC_STATUS}}` / `{{DOC_STATUS:draft\|review\|confirmed}}` | `draft` | 모든 SDLC 문서 `#0` | +| `{{CYCLE_ID}}` / `{{CYCLE_ID:sdlc-<3자리>__}}` | 계산된 주기 ID | 모든 SDLC 문서 `#0`, index, summary | +| `{{ISSUE_NAME}}` / `{{ISSUE_NAME:...}}` | 사용자 입력 원문 | 모든 SDLC 문서 `#0`, summary | +| `{{CREATED_AT_KST}}` / `{{CREATED_AT_KST:TBD}}` | 현재 시각 (KST) | 모든 SDLC 문서 `#0`, summary | +| `{{UPDATED_AT_KST}}` / `{{UPDATED_AT_KST:TBD}}` | 현재 시각 (KST) | 모든 SDLC 문서 `#0`, summary | +| `{{OUTPUT_PATH}}` | 생성 파일 경로 | `1_discovery.md` `#9` | +| `{{FILE_RESULT}}` / `{{FILE_RESULT:생성\|갱신\|미생성}}` | `생성` (신규) 또는 `갱신` | `1_discovery.md` `#9` | +| `{{SUMMARY_STATUS}}` / `{{SUMMARY_STATUS:draft\|review\|confirmed}}` | `draft` | `summary.md` | + +--- + +### B. AI 추론 치환 (Infer — agent가 입력 요청과 저장소 맥락을 바탕으로 초안을 채움) + +> 입력만으로 합리적 추론이 가능한 항목은 플레이스홀더로 남기지 않고 자연어 문장으로 채운다. +> 추론이 불확실한 경우에는 `_DECISION` 접미사 형태로 남기고 `review-discovery` 단계에서 처리한다. + +| 키 | 설명 | 위치 | +|---|---|---| +| `{{PLANNING_SCORE_FILE}}` | Planning 점수 파일 경로 또는 `미생성` | `#1` | +| `{{TODO_FILE}}` | 관련 TODO/메모 경로 또는 `없음` | `#1` | +| `{{SUMMARY_LINE_1}}`, `{{SUMMARY_LINE_2}}` | 현재 검토 배경 및 이번 Discovery 핵심 요약 | `#1` | +| `{{REQUIREMENT_CLASSIFICATION}}` | `신규` / `유사` / `완전 중복` | `#2` | +| `{{CLASSIFICATION_REASON_1}}`, `{{CLASSIFICATION_REASON_2}}` | 판정 근거 2줄 | `#2` | +| `{{CURRENT_STATE_1}}`, `{{CURRENT_STATE_2}}` | 현재 문제 상태 | `#3` | +| `{{TARGET_STATE_1}}`, `{{TARGET_STATE_2}}` | 기대 상태 | `#3` | +| `{{STAKEHOLDER_1~3}}` | 이해관계자 | `#3` | +| `{{CONSTRAINT_1}}`, `{{CONSTRAINT_2}}` | 제약사항 | `#3` | +| `{{USER_SCENARIO_1~3}}` | 주요 사용자 시나리오 | `#3` | +| `{{CHANGE_ITEM_1~3}}` | 핵심 변경 항목 | `#4` | +| `{{CODE_IMPACT_1~2}}`, `{{DOC_IMPACT_1~2}}`, `{{OPS_IMPACT_1~2}}` | 영향 범위 | `#4` | +| `{{FR_1~4}}` | 기능 요구사항 (최소 2개) | `#5` | +| `{{NFR_1~3}}` | 비기능 요구사항 (최소 1개) | `#5` | +| `{{IN_SCOPE_1~2}}`, `{{OUT_OF_SCOPE_1~2}}` | 범위 경계 | `#5` | +| `{{RISK_LEVEL_1~3}}`, `{{RISK_1~3}}`, `{{MITIGATION_1~3}}` | 리스크 항목 (최소 2개) | `#6` | +| `{{ASSUMPTION_1~3}}` | 가정 (최소 2개) | `#6` | +| `{{OPEN_QUESTION_1~3}}`, `{{OPEN_QUESTION_STATUS_1~3}}` | 오픈 질문 | `#6` | +| `{{OPEN_QUESTION_ACTION_1~3}}`, `{{OPEN_QUESTION_EXIT_1~3}}` | 오픈 질문 처리 방안/종료 조건 | `#6` | +| `{{SUCCESS_METRIC_1~3}}` | 성공 기준 (최소 2개) | `#7` | +| `{{MEASURE_METHOD_1~3}}`, `{{MEASURE_SOURCE_1~3}}` | 측정 방식 및 데이터 출처 | `#7` | +| `{{CHECK_SCOPE_CRITERIA}}` | 범위 확정 기준 | `#8` | +| `{{CHECK_METRICS_CRITERIA}}` | 성공 지표 확정 기준 | `#8` | +| `{{CHECK_RISK_OWNER_CRITERIA}}` | 리스크 책임자 지정 기준 | `#8` | +| `{{CHECK_CONFIRMEDBY_CRITERIA}}` | Freeze 담당자 지정 기준 | `#8` | +| `{{REFERENCE_1~3}}` | 참조 문서 목록 | `#9` | +| `{{SUMMARY_POINT_1~2}}` | summary.md 핵심 요약 | `summary.md` | + +--- + +### C. 사용자 결정 필요 (Decide — 자동 추론 불가, 사용자/승인자가 직접 채워야 함) + +> 이 항목들은 `#10 사용자 결정 필요 항목 요약`에 모아서 관리한다. +> 섹션 본문에는 최소 플레이스홀더만 남기거나 맥락 설명 문장으로 대체한다. + +| 키 | 설명 | 위치 | +|---|---|---| +| `{{DECIDE_ITEM_1~2}}` | 정책/구조 결정이 필요한 항목 | `#10 > DECIDE` | +| `{{CONFIRM_ITEM_1~2}}` | 범위나 책임자 확인이 필요한 항목 | `#10 > CONFIRM` | +| `{{DATA_ITEM_1~2}}` | 외부 데이터나 환경 정보가 필요한 항목 | `#10 > DATA` | +| `{{FREEZE_HANDOFF_DECISION}}` | Planning 진행 가능 여부 (`Planning 진행 가능` / `보류`) | `#11` | +| `{{FREEZE_HANDOFF_RATIONALE}}` | Handoff Decision 판단 근거 | `#11` | +| `{{READY_FOR_PLANNING}}` | `true` / `false` | `#11` | +| `{{CONFIRMED_BY}}` | Freeze 확정 담당자 이름 | `#11` | +| `{{CONFIRMED_AT_KST}}` | Freeze 확정 시각 (KST) | `#11` | + +--- + +## 3. `_DECISION` 접미사 패턴 + +섹션 본문에 판단이 필요한 항목이 생겼을 때 AI agent가 임시로 삽입하는 마커이다. + +- **형식**: `{{원래키_N_DECISION:판단 내용 또는 질문}}` +- **예시**: `{{TARGET_STATE_2_DECISION:README 확장으로 할지, 별도 파일로 분리할지 결정 필요}}` +- **처리 규칙**: + - `review-discovery` 프롬프트 실행 시 각 항목을 검토하여 아래 중 하나로 처리한다. + - 추론 가능 → 자연어 문장으로 치환 + - 사용자 결정 필요 → `#10`으로 이동하고 본문은 맥락 설명 문장으로 대체 + +--- + +--- + +## Planning 전용 플레이스홀더 (`2_planning.md`) + +### A. 자동 치환 (Auto) + +| 키 | 치환 값 | 사용 위치 | +|---|---|---| +| `{{DISCOVERY_PATH}}` | `docs/sdlc//1_discovery.md` | `#0`, `#9` | + +### B. AI 추론 치환 (Infer) + +| 키 | 설명 | 위치 | +|---|---|---| +| `{{PLANNING_ISSUE_PURPOSE}}` | Discovery 이슈명과 핵심 목적 요약 | `#1` | +| `{{PLANNING_IN_SCOPE_1~2}}` | Discovery `#5`에서 이식한 In Scope | `#1` | +| `{{PLANNING_OUT_OF_SCOPE_1~2}}` | Discovery `#5`에서 이식한 Out of Scope | `#1` | +| `{{PLANNING_FR_1~4}}` | Discovery `#5` FR 요약 | `#1` | +| `{{PLANNING_NFR_1~2}}` | Discovery `#5` NFR 요약 | `#1` | +| `{{DEFERRED_ITEM_1~2}}` | Discovery `#6`에서 Deferred 처리된 오픈 질문 | `#1` | +| `{{TASK_TITLE_N}}` | FR/NFR 기반 태스크 제목 | `#2` | +| `{{TASK_TYPE_N}}` | 태스크 유형 (`개발\|문서\|검토\|설계\|운영`) | `#2` | +| `{{TASK_REF_N}}` | 참조 요구사항 ID (예: `FR-1`) | `#2` | +| `{{TASK_DEP_N}}` | 의존 태스크 ID 또는 `-` | `#2` | +| `{{TASK_DOD_N}}` | 태스크 완료 조건 | `#2` | +| `{{EFFORT_N}}` | 추정 공수 (숫자 또는 범위) | `#3` | +| `{{EFFORT_UNIT}}` | 공수 단위 (`SP\|시간\|일`) | `#3` | +| `{{EFFORT_NOTE_N}}` | 공수 추정 비고 | `#3` | +| `{{TOTAL_EFFORT}}` | 총 추정 공수 | `#3` | +| `{{EFFORT_CONFIDENCE}}` | 추정 신뢰도 (`High\|Medium\|Low`) | `#3` | +| `{{EFFORT_BASIS}}` | 추정 근거 | `#3` | +| `{{MILESTONE_N_NAME}}` | 마일스톤 이름 | `#4` | +| `{{MILESTONE_N_TASKS}}` | 마일스톤 포함 태스크 목록 | `#4` | +| `{{MILESTONE_N_DONE}}` | 마일스톤 완료 조건 | `#4` | +| `{{ITERATION_UNIT}}` | 이터레이션 단위 | `#4` | +| `{{ITERATION_N_TASKS}}` | 이터레이션 N 포함 태스크 | `#4` | +| `{{TASK_DEPENDENCY_N}}` | 태스크 간 의존 관계 설명 | `#5` | +| `{{EXTERNAL_DEP_N}}` | 외부 의존성 항목 | `#5` | +| `{{TECH_CONSTRAINT_N}}` | 기술/환경 제약 | `#5` | +| `{{VERIFY_CRITERIA_N}}` | 검증 대상 성공 기준 (Discovery S-N 요약) | `#6` | +| `{{VERIFY_METHOD_N}}` | 검증 방법 초안 | `#6` | +| `{{PLAN_RISK_LEVEL_N}}` | Planning 리스크 등급 | `#7` | +| `{{PLAN_RISK_N}}` | Planning 리스크 내용 | `#7` | +| `{{PLAN_MITIGATION_N}}` | 리스크 완화 방안 | `#7` | +| `{{PLAN_ASSUMPTION_N}}` | Planning 단계 가정 | `#7` | +| `{{PLAN_OPEN_QUESTION_N}}` | Planning 오픈 질문 | `#7` | +| `{{PLAN_OQ_STATUS_N}}` | 오픈 질문 상태 | `#7` | +| `{{PLAN_OQ_ACTION_N}}` | 오픈 질문 처리 방안 | `#7` | +| `{{PLAN_OQ_EXIT_N}}` | 오픈 질문 종료 조건 | `#7` | +| `{{CHECK_TASKS_CRITERIA}}` | 태스크 확정 기준 | `#8` | +| `{{CHECK_EFFORT_CRITERIA}}` | 공수 추정 확정 기준 | `#8` | +| `{{CHECK_SCHEDULE_CRITERIA}}` | 일정 확정 기준 | `#8` | +| `{{CHECK_DEP_CRITERIA}}` | 외부 의존성 해소 기준 | `#8` | + +### C. 사용자 결정 필요 (Decide) + +| 키 | 설명 | 위치 | +|---|---|---| +| `{{TASK_OWNER_N}}` | 태스크 담당자 | `#2` | +| `{{MILESTONE_N_DATE}}` | 마일스톤 목표 날짜 | `#4` | +| `{{ITERATION_N_PERIOD}}` | 이터레이션 날짜 범위 | `#4` | +| `{{VERIFY_OWNER_N}}` | 검증 담당자 | `#6` | +| `{{FREEZE_HANDOFF_DECISION}}` | Design 진행 가능 여부 | `#11` | +| `{{FREEZE_HANDOFF_RATIONALE}}` | Handoff Decision 판단 근거 | `#11` | +| `{{READY_FOR_DESIGN}}` | `true` / `false` | `#11` | +| `{{CONFIRMED_BY}}` | Freeze 확정 담당자 이름 | `#11` | +| `{{CONFIRMED_AT_KST}}` | Freeze 확정 시각 (KST) | `#11` | + +--- + +## Design 전용 플레이스홀더 (`3_design.md`) + +### A. 자동 치환 (Auto) + +| 키 | 치환 값 | 사용 위치 | +|---|---|---| +| `{{PLANNING_PATH}}` | `docs/sdlc//2_planning.md` | `#0`, `#8` | + +### B. AI 추론 치환 (Infer) + +| 키 | 설명 | 위치 | +|---|---|---| +| `{{DESIGN_ISSUE_PURPOSE}}` | Planning 이슈명과 핵심 목적 요약 | `#1` | +| `{{DESIGN_TASK_TITLE_N}}` | Planning `#2`에서 이식한 태스크 제목 | `#1` | +| `{{DESIGN_TASK_REF_N}}` | Planning `#2`에서 이식한 참조 요구사항 | `#1` | +| `{{DESIGN_DEFERRED_ITEM_N}}` | Planning `#7`에서 Deferred 처리된 오픈 질문 | `#1` | +| `{{ARCH_OVERVIEW}}` | 전체 아키텍처/구조 개요 | `#2` | +| `{{COMPONENT_N_NAME}}` | 주요 컴포넌트 이름 | `#2` | +| `{{COMPONENT_N_ROLE}}` | 컴포넌트 역할 | `#2` | +| `{{COMPONENT_N_SCOPE}}` | 컴포넌트 영향 범위 | `#2` | +| `{{DATA_FLOW_N}}` | 데이터 흐름 단계 | `#2` | +| `{{DESIGN_DETAIL_N}}` | 태스크별 설계 방향 | `#3` | +| `{{DESIGN_TARGET_N}}` | 변경 대상 파일/함수/설정 | `#3` | +| `{{DESIGN_IO_N}}` | 입력/출력 또는 사이드이펙트 | `#3` | +| `{{DESIGN_EDGE_N}}` | 예외/엣지 케이스 | `#3` | +| `{{INTERFACE_N}}` | API/함수 시그니처 | `#4` | +| `{{SCHEMA_N}}` | 데이터 스키마/포맷 | `#4` | +| `{{EVENT_N}}` | 이벤트/메시지 | `#4` | +| `{{SEC_INJECTION}}` ~ `{{SEC_OTHER}}` | 보안 항목 해당 여부 | `#5` | +| `{{SEC_INJECTION_ACTION}}` ~ `{{SEC_OTHER_ACTION}}` | 보안 대응 방안 | `#5` | +| `{{DESIGN_RISK_LEVEL_N}}` | Design 리스크 등급 | `#6` | +| `{{DESIGN_RISK_N}}` | Design 리스크 내용 | `#6` | +| `{{DESIGN_MITIGATION_N}}` | 리스크 완화 방안 | `#6` | +| `{{DESIGN_ASSUMPTION_N}}` | Design 단계 가정 | `#6` | +| `{{DESIGN_OPEN_QUESTION_N}}` | Design 오픈 질문 | `#6` | +| `{{DESIGN_OQ_STATUS_N}}` | 오픈 질문 상태 | `#6` | +| `{{DESIGN_OQ_ACTION_N}}` | 오픈 질문 처리 방안 | `#6` | +| `{{DESIGN_OQ_EXIT_N}}` | 오픈 질문 종료 조건 | `#6` | +| `{{CHECK_DESIGN_COMPLETE}}` | 설계 완성 기준 | `#7` | +| `{{CHECK_INTERFACE}}` | 인터페이스 확정 기준 | `#7` | +| `{{CHECK_SECURITY}}` | 보안 점검 완료 기준 | `#7` | + +### C. 사용자 결정 필요 (Decide) + +| 키 | 설명 | 위치 | +|---|---|---| +| `{{DESIGN_TASK_OWNER_N}}` | 태스크 담당자 | `#1` | +| `{{FREEZE_HANDOFF_DECISION}}` | Implementation 진행 가능 여부 | `#10` | +| `{{FREEZE_HANDOFF_RATIONALE}}` | Handoff Decision 판단 근거 | `#10` | +| `{{READY_FOR_IMPLEMENTATION}}` | `true` / `false` | `#10` | +| `{{CONFIRMED_BY}}` | Freeze 확정 담당자 이름 | `#10` | +| `{{CONFIRMED_AT_KST}}` | Freeze 확정 시각 (KST) | `#10` | + +--- + +## 4. 참조 위치 요약 + +| 파일 | 역할 | 관련 플레이스홀더 | +|---|---|---| +| `.github/prompts/new-sdlc.prompt.md` | 주기 생성, 자동/추론 치환 실행 | A, B 전체 | +| `.github/prompts/review-discovery.prompt.md` | 검토, `_DECISION` 처리, 사용자 결정 항목 정리 | B (`_DECISION`), C | +| `.github/prompts/draft-planning.prompt.md` | Planning 초안 생성, Discovery 내용 이식 | A, B 전체 (Planning) | +| `.github/prompts/draft-design.prompt.md` | Design 초안 생성, Planning 내용 이식 | A, B 전체 (Design) | +| `.github/templates/sdlc/1_discovery.md` | Discovery 원본 템플릿 | A, B, C 전체 | +| `.github/templates/sdlc/2_planning.md` | Planning 원본 템플릿 | A, B, C 전체 (Planning) | +| `.github/templates/sdlc/3_design.md` | Design 원본 템플릿 | A, B, C 전체 (Design) | diff --git a/.github/prompts/confirm-design.prompt.md b/.github/prompts/confirm-design.prompt.md new file mode 100644 index 0000000..1ac2d0f --- /dev/null +++ b/.github/prompts/confirm-design.prompt.md @@ -0,0 +1,103 @@ +--- +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` 상태인 문서에는 재처리하지 않는다. +- 현재 시각은 시스템 또는 컨텍스트에서 제공된 날짜/시간을 사용한다. diff --git a/.github/prompts/confirm-discovery.prompt.md b/.github/prompts/confirm-discovery.prompt.md new file mode 100644 index 0000000..0435919 --- /dev/null +++ b/.github/prompts/confirm-discovery.prompt.md @@ -0,0 +1,103 @@ +--- +name: "confirm-discovery" +description: "Approve a Discovery document and mark it as confirmed, ready for Planning" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/1_discovery.md" +agent: "agent" +--- +SDLC Discovery 문서를 최종 승인 처리한다. + +목표: +- `1_discovery.md`의 상태를 `confirmed`로 변경한다. +- `# 11. Discovery Freeze`의 `Handoff Decision`을 `승인`으로, `Ready for Planning`을 `true`로 변경한다. +- `마지막 갱신 시각(KST)`과 승인 시각(`CONFIRMED_AT_KST`)을 현재 시각으로 채운다. +- 승인 불가 조건이 있으면 문서를 변경하지 않고 이유를 보고한다. + +--- + +## 플레이스홀더 분류 기준 + +모든 `{{...}}` 플레이스홀더를 동일하게 차단 조건으로 취급하지 않는다. 아래 세 유형으로 먼저 분류한다. + +### A. 승인 행위 자체로 채워지는 플레이스홀더 (자동 해소) + +승인 명령 실행 시 자동으로 채우며, 이 값이 남아 있어도 차단하지 않는다. + +| 플레이스홀더 패턴 | 자동 채움 값 | +|---|---| +| `{{CONFIRMED_AT_KST...}}` | 현재 시각 (KST, `YYYY-MM-DD HH:MM:SS KST`) | +| `{{CONFIRMED_BY...}}` | 섹션 11의 `Confirmed By:` 줄에서 읽은 값. 해당 줄이 없으면 차단하지 않고 플레이스홀더를 제거한 뒤 빈 값으로 처리 | + +### B. 맥락상 해소된 플레이스홀더 (자동 정리) + +섹션 8(체크리스트) 또는 섹션 10(사용자 결정 요약)에 있는 플레이스홀더는 **해당 결정의 실질 값이 섹션 11에 이미 기입되어 있으면** 해소된 것으로 간주한다. 승인 처리 시 해당 플레이스홀더를 실질 값으로 치환하거나 설명 텍스트로 대체한다. 차단하지 않는다. + +예시: +- 섹션 8의 `{{CONFIRM_CONFIRMEDBY}}` → 섹션 11의 `Confirmed By: Justin` 값이 있으면 → `Justin`으로 치환 또는 체크리스트 기준 텍스트에서 플레이스홀더 제거 +- 섹션 10 CONFIRM 항목의 `{{CONFIRM_CONFIRMEDBY}}` → 동일하게 처리 + +### C. 실질 미해소 플레이스홀더 (차단 대상) + +섹션 1~7(본문 내용)에 남아 있는 `{{...}}` 플레이스홀더로서, 위 A·B 유형에 해당하지 않는 것. 이 플레이스홀더가 하나라도 있으면 승인을 보류한다. + +--- + +## 실행 절차 + +### 1. 입력 해석 + +- 사용자가 제공한 값이 CYCLE_ID(예: `sdlc-001`)이면 `docs/sdlc/` 아래에서 해당 패턴으로 시작하는 폴더를 찾아 `1_discovery.md` 경로를 확정한다. +- 사용자가 파일 경로를 직접 제공했으면 해당 경로를 사용한다. +- 파일이 존재하지 않으면 경로를 재확인하도록 사용자에게 피드백하고 중단한다. + +### 2. 플레이스홀더 분류 및 사전 해소 + +문서 전체의 `{{...}}` 플레이스홀더를 스캔해 A·B·C 유형으로 분류한다. + +- **A 유형**: 목록만 기록한다. 3단계에서 자동으로 채운다. +- **B 유형**: 섹션 11에서 실질 값을 읽어 치환 가능한지 확인한다. 가능하면 3단계에서 함께 처리한다. +- **C 유형**: 목록을 보고하고 승인을 보류한다. + +### 3. 승인 가능 여부 확인 (사전 게이트 검사) + +아래 조건을 모두 충족해야 승인을 진행한다. + +| 항목 | 확인 기준 | +|------|-----------| +| 문서 상태 | `confirmed`가 아닌 상태(`draft` 또는 `review`)여야 한다. 이미 `confirmed`면 중단한다. | +| 실질 미해소 플레이스홀더 (C 유형) | C 유형 플레이스홀더가 0개여야 한다. | +| 오픈 질문 미해소 | `# 6` 오픈 질문 목록에 `상태: Open`인 항목이 없어야 한다. | +| 필수 섹션 미완성 | `# 5`, `# 7`, `# 8`, `# 10`, `# 11` 섹션이 존재하고 내용이 채워져 있어야 한다. | +| Ready for Planning 사전 설정 | `Ready for Planning: false`이거나 아직 갱신 전인 경우만 승인 처리 대상이다. 이미 `true`이면 이미 처리된 문서임을 알린다. | + +> **예외**: C 유형 플레이스홀더 또는 오픈 질문 미해소만 문제인 경우, 사용자가 명시적으로 `--force`를 표현했으면 해당 항목 목록을 보고하되 승인을 진행한다. + +### 4. 문서 업데이트 (승인 가능 시에만 실행) + +아래 항목을 변경한다. 이 목록 외 내용은 절대 수정하지 않는다. + +1. `# 0. 문서 상태`의 `- 상태:` 줄 → `confirmed`로 변경 +2. `# 0. 문서 상태`의 `- 마지막 갱신 시각(KST):` → 현재 시각으로 변경 +3. `# 11. Discovery Freeze`의 `- Handoff Decision:` → `승인`으로 변경 +4. `# 11. Discovery Freeze`의 `- Ready for Planning:` → `true`로 변경 +5. **A 유형 플레이스홀더** → 각 자동 채움 값으로 치환 +6. **B 유형 플레이스홀더** → 섹션 11에서 읽은 실질 값으로 치환 (또는 플레이스홀더 제거) +7. `docs/sdlc//index.md`의 Discovery 행 `상태` 열 → `` `confirmed` ``로 변경. 행 형식: `| 1. Discovery | ... | ... |` + +### 5. 결과 보고 + +응답에 아래 내용을 포함한다. + +- **처리 결과**: 승인 완료 또는 승인 불가 +- **자동 처리된 플레이스홀더 목록** (A·B 유형, 승인 완료 시) +- **변경된 필드 목록** (승인 완료 시) +- **미충족 항목 목록** (승인 불가 시): 각 항목에 대한 조치 안내 포함 +- **다음 단계 안내**: 승인 완료 시 Planning 단계(`/planning-draft `) 실행 안내 + +--- + +## 중요 규칙 + +- 4단계에서 명시된 항목 외에는 문서 내용을 절대 변경하지 않는다. +- C 유형 미해소 조건이 있으면 문서에 아무 변경도 가하지 않는다. +- 이미 `confirmed` 상태인 문서에는 재처리하지 않는다. +- 현재 시각은 시스템 또는 컨텍스트에서 제공된 날짜/시간을 사용한다. diff --git a/.github/prompts/confirm-implementation.prompt.md b/.github/prompts/confirm-implementation.prompt.md new file mode 100644 index 0000000..a28624c --- /dev/null +++ b/.github/prompts/confirm-implementation.prompt.md @@ -0,0 +1,99 @@ +--- +name: "confirm-implementation" +description: "Approve an Implementation document and mark it as confirmed, ready for Verification" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/4_implementation.md" +agent: "agent" +--- +SDLC Implementation 문서를 최종 승인 처리한다. + +목표: +- `4_implementation.md`의 상태를 `confirmed`로 변경한다. +- `# 8. Implementation Freeze`의 `Handoff Decision`을 `승인`으로, `Ready for Verification`을 `true`로 변경한다. +- `마지막 갱신 시각(KST)`과 승인 시각(`CONFIRMED_AT_KST`)을 현재 시각으로 채운다. +- 승인 불가 조건이 있으면 문서를 변경하지 않고 이유를 보고한다. + +--- + +## 플레이스홀더 분류 기준 + +모든 `{{...}}` 플레이스홀더를 동일하게 차단 조건으로 취급하지 않는다. 아래 세 유형으로 먼저 분류한다. + +### A. 승인 행위 자체로 채워지는 플레이스홀더 (자동 해소) + +승인 명령 실행 시 자동으로 채우며, 이 값이 남아 있어도 차단하지 않는다. + +| 플레이스홀더 패턴 | 자동 채움 값 | +|---|---| +| `{{CONFIRMED_AT_KST...}}` | 현재 시각 (KST, `YYYY-MM-DD HH:MM:SS KST`) | +| `{{CONFIRMED_BY...}}` | 섹션 8의 `Confirmed By:` 줄에서 읽은 값. 해당 줄이 없으면 차단하지 않고 플레이스홀더를 제거한 뒤 빈 값으로 처리 | + +### B. 맥락상 해소된 플레이스홀더 (자동 정리) + +섹션 5(체크리스트) 또는 섹션 7(사용자 결정 요약)에 있는 플레이스홀더는 **해당 결정의 실질 값이 섹션 8에 이미 기입되어 있으면** 해소된 것으로 간주한다. 승인 처리 시 해당 플레이스홀더를 실질 값으로 치환하거나 설명 텍스트로 대체한다. 차단하지 않는다. + +### C. 실질 미해소 플레이스홀더 (차단 대상) + +섹션 1~4(본문 내용)에 남아 있는 `{{...}}` 플레이스홀더로서, 위 A·B 유형에 해당하지 않는 것. 이 플레이스홀더가 하나라도 있으면 승인을 보류한다. + +--- + +## 실행 절차 + +### 1. 입력 해석 + +- 사용자가 제공한 값이 CYCLE_ID(예: `sdlc-001`)이면 `docs/sdlc/` 아래에서 해당 패턴으로 시작하는 폴더를 찾아 `4_implementation.md` 경로를 확정한다. +- 사용자가 파일 경로를 직접 제공했으면 해당 경로를 사용한다. +- 파일이 존재하지 않으면 경로를 재확인하도록 사용자에게 피드백하고 중단한다. + +### 2. 플레이스홀더 분류 및 사전 해소 + +문서 전체의 `{{...}}` 플레이스홀더를 스캔해 A·B·C 유형으로 분류한다. + +- **A 유형**: 목록만 기록한다. 4단계에서 자동으로 채운다. +- **B 유형**: 섹션 8에서 실질 값을 읽어 치환 가능한지 확인한다. 가능하면 4단계에서 함께 처리한다. +- **C 유형**: 목록을 보고하고 승인을 보류한다. + +### 3. 승인 가능 여부 확인 (사전 게이트 검사) + +아래 조건을 모두 충족해야 승인을 진행한다. + +| 항목 | 확인 기준 | +|------|-----------| +| 문서 상태 | `confirmed`가 아닌 상태(`draft` 또는 `review`)여야 한다. 이미 `confirmed`면 중단한다. | +| 실질 미해소 플레이스홀더 (C 유형) | C 유형 플레이스홀더가 0개여야 한다. | +| 오픈 질문 미해소 | `# 4` 오픈 질문 목록에 `상태: Open`인 항목이 없어야 한다. | +| 필수 섹션 미완성 | `# 2`, `# 3`, `# 5`, `# 7`, `# 8` 섹션이 존재하고 내용이 채워져 있어야 한다. | +| Ready for Verification 사전 설정 | `Ready for Verification: false`이거나 아직 갱신 전인 경우만 승인 처리 대상이다. 이미 `true`이면 이미 처리된 문서임을 알린다. | + +> **예외**: C 유형 플레이스홀더 또는 오픈 질문 미해소만 문제인 경우, 사용자가 명시적으로 `--force`를 표현했으면 해당 항목 목록을 보고하되 승인을 진행한다. + +### 4. 문서 업데이트 (승인 가능 시에만 실행) + +아래 항목을 변경한다. 이 목록 외 내용은 절대 수정하지 않는다. + +1. `# 0. 문서 상태`의 `- 상태:` 줄 → `confirmed`로 변경 +2. `# 0. 문서 상태`의 `- 마지막 갱신 시각(KST):` → 현재 시각으로 변경 +3. `# 8. Implementation Freeze`의 `- Handoff Decision:` → `승인`으로 변경 +4. `# 8. Implementation Freeze`의 `- Ready for Verification:` → `true`로 변경 +5. **A 유형 플레이스홀더** → 각 자동 채움 값으로 치환 +6. **B 유형 플레이스홀더** → 섹션 8에서 읽은 실질 값으로 치환 (또는 플레이스홀더 제거) +7. `docs/sdlc//index.md`의 Implementation 행 `상태` 열 → `` `confirmed` ``로 변경. 행 형식: `| 4. Implementation | ... | ... |` + +### 5. 결과 보고 + +응답에 아래 내용을 포함한다. + +- **처리 결과**: 승인 완료 또는 승인 불가 +- **자동 처리된 플레이스홀더 목록** (A·B 유형, 승인 완료 시) +- **변경된 필드 목록** (승인 완료 시) +- **미충족 항목 목록** (승인 불가 시): 각 항목에 대한 조치 안내 포함 +- **다음 단계 안내**: 승인 완료 시 Verification 단계(`/draft-verification `) 실행 안내 + +--- + +## 중요 규칙 + +- 4단계에서 명시된 항목 외에는 문서 내용을 절대 변경하지 않는다. +- C 유형 미해소 조건이 있으면 문서에 아무 변경도 가하지 않는다. +- 이미 `confirmed` 상태인 문서에는 재처리하지 않는다. +- 현재 시각은 시스템 또는 컨텍스트에서 제공된 날짜/시간을 사용한다. diff --git a/.github/prompts/confirm-operation.prompt.md b/.github/prompts/confirm-operation.prompt.md new file mode 100644 index 0000000..9e30e7f --- /dev/null +++ b/.github/prompts/confirm-operation.prompt.md @@ -0,0 +1,97 @@ +--- +name: "confirm-operation" +description: "Approve an Operations document and mark the SDLC cycle as complete" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/7_operation.md" +agent: "agent" +--- +SDLC Operations 문서를 최종 승인 처리하고 SDLC 주기를 완료한다. + +목표: +- `7_operation.md`의 상태를 `confirmed`로 변경한다. +- `# 10. Operations Freeze`의 `Handoff Decision`을 `승인`으로, `SDLC 주기 완료`를 `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에 이미 기입되어 있으면** 해소된 것으로 간주한다. 차단하지 않는다. + +### C. 실질 미해소 플레이스홀더 (차단 대상) + +섹션 1~6(본문 내용)에 남아 있는 `{{...}}` 플레이스홀더로서, 위 A·B 유형에 해당하지 않는 것. 이 플레이스홀더가 하나라도 있으면 승인을 보류한다. + +--- + +## 실행 절차 + +### 1. 입력 해석 + +- 사용자가 제공한 값이 CYCLE_ID(예: `sdlc-001`)이면 `docs/sdlc/` 아래에서 해당 패턴으로 시작하는 폴더를 찾아 `7_operation.md` 경로를 확정한다. +- 사용자가 파일 경로를 직접 제공했으면 해당 경로를 사용한다. +- 파일이 존재하지 않으면 경로를 재확인하도록 사용자에게 피드백하고 중단한다. + +### 2. 플레이스홀더 분류 및 사전 해소 + +문서 전체의 `{{...}}` 플레이스홀더를 스캔해 A·B·C 유형으로 분류한다. + +- **A 유형**: 목록만 기록한다. 4단계에서 자동으로 채운다. +- **B 유형**: 섹션 10에서 실질 값을 읽어 치환 가능한지 확인한다. 가능하면 4단계에서 함께 처리한다. +- **C 유형**: 목록을 보고하고 승인을 보류한다. + +### 3. 승인 가능 여부 확인 (사전 게이트 검사) + +아래 조건을 모두 충족해야 승인을 진행한다. + +| 항목 | 확인 기준 | +|------|-----------| +| 문서 상태 | `confirmed`가 아닌 상태(`draft` 또는 `review`)여야 한다. 이미 `confirmed`면 중단한다. | +| 실질 미해소 플레이스홀더 (C 유형) | C 유형 플레이스홀더가 0개여야 한다. | +| 오픈 질문 미해소 | `# 5` 오픈 질문 목록에 `상태: Open`인 항목이 없어야 한다. | +| 필수 섹션 미완성 | `# 2`, `# 3`, `# 7`, `# 9`, `# 10` 섹션이 존재하고 내용이 채워져 있어야 한다. | +| SDLC 주기 완료 사전 설정 | `SDLC 주기 완료: false`이거나 아직 갱신 전인 경우만 승인 처리 대상이다. 이미 `true`이면 이미 처리된 문서임을 알린다. | + +> **예외**: C 유형 플레이스홀더 또는 오픈 질문 미해소만 문제인 경우, 사용자가 명시적으로 `--force`를 표현했으면 해당 항목 목록을 보고하되 승인을 진행한다. + +### 4. 문서 업데이트 (승인 가능 시에만 실행) + +아래 항목을 변경한다. 이 목록 외 내용은 절대 수정하지 않는다. + +1. `# 0. 문서 상태`의 `- 상태:` 줄 → `confirmed`로 변경 +2. `# 0. 문서 상태`의 `- 마지막 갱신 시각(KST):` → 현재 시각으로 변경 +3. `# 10. Operations Freeze`의 `- Handoff Decision:` → `승인`으로 변경 +4. `# 10. Operations Freeze`의 `- SDLC 주기 완료:` → `true`로 변경 +5. **A 유형 플레이스홀더** → 각 자동 채움 값으로 치환 +6. **B 유형 플레이스홀더** → 섹션 10에서 읽은 실질 값으로 치환 (또는 플레이스홀더 제거) +7. `docs/sdlc//index.md`의 Operations 행 `상태` 열 → `` `confirmed` ``로 변경. 행 형식: `| 7. Operations | ... | ... |` + +### 5. 결과 보고 + +응답에 아래 내용을 포함한다. + +- **처리 결과**: 승인 완료 또는 승인 불가 +- **자동 처리된 플레이스홀더 목록** (A·B 유형, 승인 완료 시) +- **변경된 필드 목록** (승인 완료 시) +- **미충족 항목 목록** (승인 불가 시): 각 항목에 대한 조치 안내 포함 +- **SDLC 주기 완료 안내**: 승인 완료 시 이 주기의 `# 6` 다음 Discovery 환류 항목이 다음 SDLC 주기의 입력이 됨을 안내한다. + +--- + +## 중요 규칙 + +- 4단계에서 명시된 항목 외에는 문서 내용을 절대 변경하지 않는다. +- C 유형 미해소 조건이 있으면 문서에 아무 변경도 가하지 않는다. +- 이미 `confirmed` 상태인 문서에는 재처리하지 않는다. +- 현재 시각은 시스템 또는 컨텍스트에서 제공된 날짜/시간을 사용한다. diff --git a/.github/prompts/confirm-planning.prompt.md b/.github/prompts/confirm-planning.prompt.md new file mode 100644 index 0000000..f3c3f99 --- /dev/null +++ b/.github/prompts/confirm-planning.prompt.md @@ -0,0 +1,103 @@ +--- +name: "confirm-planning" +description: "Approve a Planning document and mark it as confirmed, ready for Design" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/2_planning.md" +agent: "agent" +--- +SDLC Planning 문서를 최종 승인 처리한다. + +목표: +- `2_planning.md`의 상태를 `confirmed`로 변경한다. +- `# 11. Planning Freeze`의 `Handoff Decision`을 `승인`으로, `Ready for Design`을 `true`로 변경한다. +- `마지막 갱신 시각(KST)`과 승인 시각(`CONFIRMED_AT_KST`)을 현재 시각으로 채운다. +- 승인 불가 조건이 있으면 문서를 변경하지 않고 이유를 보고한다. + +--- + +## 플레이스홀더 분류 기준 + +모든 `{{...}}` 플레이스홀더를 동일하게 차단 조건으로 취급하지 않는다. 아래 세 유형으로 먼저 분류한다. + +### A. 승인 행위 자체로 채워지는 플레이스홀더 (자동 해소) + +승인 명령 실행 시 자동으로 채우며, 이 값이 남아 있어도 차단하지 않는다. + +| 플레이스홀더 패턴 | 자동 채움 값 | +|---|---| +| `{{CONFIRMED_AT_KST...}}` | 현재 시각 (KST, `YYYY-MM-DD HH:MM:SS KST`) | +| `{{CONFIRMED_BY...}}` | 섹션 11의 `Confirmed By:` 줄에서 읽은 값. 해당 줄이 없으면 차단하지 않고 플레이스홀더를 제거한 뒤 빈 값으로 처리 | + +### B. 맥락상 해소된 플레이스홀더 (자동 정리) + +섹션 8(체크리스트) 또는 섹션 10(사용자 결정 요약)에 있는 플레이스홀더는 **해당 결정의 실질 값이 섹션 11에 이미 기입되어 있으면** 해소된 것으로 간주한다. 승인 처리 시 해당 플레이스홀더를 실질 값으로 치환하거나 설명 텍스트로 대체한다. 차단하지 않는다. + +예시: +- 섹션 8의 `{{CONFIRM_CONFIRMEDBY}}` → 섹션 11의 `Confirmed By: Justin` 값이 있으면 → `Justin`으로 치환 또는 체크리스트 기준 텍스트에서 플레이스홀더 제거 +- 섹션 10 CONFIRM 항목의 `{{CONFIRM_CONFIRMEDBY}}` → 동일하게 처리 + +### C. 실질 미해소 플레이스홀더 (차단 대상) + +섹션 1~7(본문 내용)에 남아 있는 `{{...}}` 플레이스홀더로서, 위 A·B 유형에 해당하지 않는 것. 이 플레이스홀더가 하나라도 있으면 승인을 보류한다. + +--- + +## 실행 절차 + +### 1. 입력 해석 + +- 사용자가 제공한 값이 CYCLE_ID(예: `sdlc-001`)이면 `docs/sdlc/` 아래에서 해당 패턴으로 시작하는 폴더를 찾아 `2_planning.md` 경로를 확정한다. +- 사용자가 파일 경로를 직접 제공했으면 해당 경로를 사용한다. +- 파일이 존재하지 않으면 경로를 재확인하도록 사용자에게 피드백하고 중단한다. + +### 2. 플레이스홀더 분류 및 사전 해소 + +문서 전체의 `{{...}}` 플레이스홀더를 스캔해 A·B·C 유형으로 분류한다. + +- **A 유형**: 목록만 기록한다. 4단계에서 자동으로 채운다. +- **B 유형**: 섹션 11에서 실질 값을 읽어 치환 가능한지 확인한다. 가능하면 4단계에서 함께 처리한다. +- **C 유형**: 목록을 보고하고 승인을 보류한다. + +### 3. 승인 가능 여부 확인 (사전 게이트 검사) + +아래 조건을 모두 충족해야 승인을 진행한다. + +| 항목 | 확인 기준 | +|------|-----------| +| 문서 상태 | `confirmed`가 아닌 상태(`draft` 또는 `review`)여야 한다. 이미 `confirmed`면 중단한다. | +| 실질 미해소 플레이스홀더 (C 유형) | C 유형 플레이스홀더가 0개여야 한다. | +| 오픈 질문 미해소 | `# 7` 오픈 질문 목록에 `상태: Open`인 항목이 없어야 한다. | +| 필수 섹션 미완성 | `# 2`, `# 3`, `# 6`, `# 8`, `# 10`, `# 11` 섹션이 존재하고 내용이 채워져 있어야 한다. | +| Ready for Design 사전 설정 | `Ready for Design: false`이거나 아직 갱신 전인 경우만 승인 처리 대상이다. 이미 `true`이면 이미 처리된 문서임을 알린다. | + +> **예외**: C 유형 플레이스홀더 또는 오픈 질문 미해소만 문제인 경우, 사용자가 명시적으로 `--force`를 표현했으면 해당 항목 목록을 보고하되 승인을 진행한다. + +### 4. 문서 업데이트 (승인 가능 시에만 실행) + +아래 항목을 변경한다. 이 목록 외 내용은 절대 수정하지 않는다. + +1. `# 0. 문서 상태`의 `- 상태:` 줄 → `confirmed`로 변경 +2. `# 0. 문서 상태`의 `- 마지막 갱신 시각(KST):` → 현재 시각으로 변경 +3. `# 11. Planning Freeze`의 `- Handoff Decision:` → `승인`으로 변경 +4. `# 11. Planning Freeze`의 `- Ready for Design:` → `true`로 변경 +5. **A 유형 플레이스홀더** → 각 자동 채움 값으로 치환 +6. **B 유형 플레이스홀더** → 섹션 11에서 읽은 실질 값으로 치환 (또는 플레이스홀더 제거) +7. `docs/sdlc//index.md`의 Planning 행 `상태` 열 → `` `confirmed` ``로 변경. 행 형식: `| 2. Planning | ... | ... |` + +### 5. 결과 보고 + +응답에 아래 내용을 포함한다. + +- **처리 결과**: 승인 완료 또는 승인 불가 +- **자동 처리된 플레이스홀더 목록** (A·B 유형, 승인 완료 시) +- **변경된 필드 목록** (승인 완료 시) +- **미충족 항목 목록** (승인 불가 시): 각 항목에 대한 조치 안내 포함 +- **다음 단계 안내**: 승인 완료 시 Design 단계(`/draft-design `) 실행 안내 + +--- + +## 중요 규칙 + +- 4단계에서 명시된 항목 외에는 문서 내용을 절대 변경하지 않는다. +- C 유형 미해소 조건이 있으면 문서에 아무 변경도 가하지 않는다. +- 이미 `confirmed` 상태인 문서에는 재처리하지 않는다. +- 현재 시각은 시스템 또는 컨텍스트에서 제공된 날짜/시간을 사용한다. diff --git a/.github/prompts/confirm-release.prompt.md b/.github/prompts/confirm-release.prompt.md new file mode 100644 index 0000000..c661757 --- /dev/null +++ b/.github/prompts/confirm-release.prompt.md @@ -0,0 +1,97 @@ +--- +name: "confirm-release" +description: "Approve a Release document and mark it as confirmed, ready for Operations" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/6_release.md" +agent: "agent" +--- +SDLC Release 문서를 최종 승인 처리한다. + +목표: +- `6_release.md`의 상태를 `confirmed`로 변경한다. +- `# 9. Release Freeze`의 `Handoff Decision`을 `승인`으로, `Ready for Operations`를 `true`로 변경한다. +- `마지막 갱신 시각(KST)`과 승인 시각(`CONFIRMED_AT_KST`)을 현재 시각으로 채운다. +- 승인 불가 조건이 있으면 문서를 변경하지 않고 이유를 보고한다. + +--- + +## 플레이스홀더 분류 기준 + +모든 `{{...}}` 플레이스홀더를 동일하게 차단 조건으로 취급하지 않는다. 아래 세 유형으로 먼저 분류한다. + +### A. 승인 행위 자체로 채워지는 플레이스홀더 (자동 해소) + +| 플레이스홀더 패턴 | 자동 채움 값 | +|---|---| +| `{{CONFIRMED_AT_KST...}}` | 현재 시각 (KST, `YYYY-MM-DD HH:MM:SS KST`) | +| `{{CONFIRMED_BY...}}` | 섹션 9의 `Confirmed By:` 줄에서 읽은 값. 해당 줄이 없으면 차단하지 않고 플레이스홀더를 제거한 뒤 빈 값으로 처리 | + +### B. 맥락상 해소된 플레이스홀더 (자동 정리) + +섹션 6(체크리스트) 또는 섹션 8(사용자 결정 요약)에 있는 플레이스홀더는 **해당 결정의 실질 값이 섹션 9에 이미 기입되어 있으면** 해소된 것으로 간주한다. 차단하지 않는다. + +### C. 실질 미해소 플레이스홀더 (차단 대상) + +섹션 1~5(본문 내용)에 남아 있는 `{{...}}` 플레이스홀더로서, 위 A·B 유형에 해당하지 않는 것. 이 플레이스홀더가 하나라도 있으면 승인을 보류한다. + +--- + +## 실행 절차 + +### 1. 입력 해석 + +- 사용자가 제공한 값이 CYCLE_ID(예: `sdlc-001`)이면 `docs/sdlc/` 아래에서 해당 패턴으로 시작하는 폴더를 찾아 `6_release.md` 경로를 확정한다. +- 사용자가 파일 경로를 직접 제공했으면 해당 경로를 사용한다. +- 파일이 존재하지 않으면 경로를 재확인하도록 사용자에게 피드백하고 중단한다. + +### 2. 플레이스홀더 분류 및 사전 해소 + +문서 전체의 `{{...}}` 플레이스홀더를 스캔해 A·B·C 유형으로 분류한다. + +- **A 유형**: 목록만 기록한다. 4단계에서 자동으로 채운다. +- **B 유형**: 섹션 9에서 실질 값을 읽어 치환 가능한지 확인한다. 가능하면 4단계에서 함께 처리한다. +- **C 유형**: 목록을 보고하고 승인을 보류한다. + +### 3. 승인 가능 여부 확인 (사전 게이트 검사) + +아래 조건을 모두 충족해야 승인을 진행한다. + +| 항목 | 확인 기준 | +|------|-----------| +| 문서 상태 | `confirmed`가 아닌 상태(`draft` 또는 `review`)여야 한다. 이미 `confirmed`면 중단한다. | +| 실질 미해소 플레이스홀더 (C 유형) | C 유형 플레이스홀더가 0개여야 한다. | +| 오픈 질문 미해소 | `# 5` 오픈 질문 목록에 `상태: Open`인 항목이 없어야 한다. | +| 필수 섹션 미완성 | `# 2`, `# 3`, `# 4`, `# 6`, `# 8`, `# 9` 섹션이 존재하고 내용이 채워져 있어야 한다. | +| Ready for Operations 사전 설정 | `Ready for Operations: false`이거나 아직 갱신 전인 경우만 승인 처리 대상이다. 이미 `true`이면 이미 처리된 문서임을 알린다. | + +> **예외**: C 유형 플레이스홀더 또는 오픈 질문 미해소만 문제인 경우, 사용자가 명시적으로 `--force`를 표현했으면 해당 항목 목록을 보고하되 승인을 진행한다. + +### 4. 문서 업데이트 (승인 가능 시에만 실행) + +아래 항목을 변경한다. 이 목록 외 내용은 절대 수정하지 않는다. + +1. `# 0. 문서 상태`의 `- 상태:` 줄 → `confirmed`로 변경 +2. `# 0. 문서 상태`의 `- 마지막 갱신 시각(KST):` → 현재 시각으로 변경 +3. `# 9. Release Freeze`의 `- Handoff Decision:` → `승인`으로 변경 +4. `# 9. Release Freeze`의 `- Ready for Operations:` → `true`로 변경 +5. **A 유형 플레이스홀더** → 각 자동 채움 값으로 치환 +6. **B 유형 플레이스홀더** → 섹션 9에서 읽은 실질 값으로 치환 (또는 플레이스홀더 제거) +7. `docs/sdlc//index.md`의 Release 행 `상태` 열 → `` `confirmed` ``로 변경. 행 형식: `| 6. Release | ... | ... |` + +### 5. 결과 보고 + +응답에 아래 내용을 포함한다. + +- **처리 결과**: 승인 완료 또는 승인 불가 +- **자동 처리된 플레이스홀더 목록** (A·B 유형, 승인 완료 시) +- **변경된 필드 목록** (승인 완료 시) +- **미충족 항목 목록** (승인 불가 시): 각 항목에 대한 조치 안내 포함 +- **다음 단계 안내**: 승인 완료 시 Operations 단계(`/draft-operation `) 실행 안내 + +--- + +## 중요 규칙 + +- 4단계에서 명시된 항목 외에는 문서 내용을 절대 변경하지 않는다. +- C 유형 미해소 조건이 있으면 문서에 아무 변경도 가하지 않는다. +- 이미 `confirmed` 상태인 문서에는 재처리하지 않는다. +- 현재 시각은 시스템 또는 컨텍스트에서 제공된 날짜/시간을 사용한다. diff --git a/.github/prompts/confirm-verification.prompt.md b/.github/prompts/confirm-verification.prompt.md new file mode 100644 index 0000000..8668323 --- /dev/null +++ b/.github/prompts/confirm-verification.prompt.md @@ -0,0 +1,99 @@ +--- +name: "confirm-verification" +description: "Approve a Verification document and mark it as confirmed, ready for Release" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/5_verification.md" +agent: "agent" +--- +SDLC Verification 문서를 최종 승인 처리한다. + +목표: +- `5_verification.md`의 상태를 `confirmed`로 변경한다. +- `# 9. Verification Freeze`의 `Handoff Decision`을 `승인`으로, `Ready for Release`를 `true`로 변경한다. +- `마지막 갱신 시각(KST)`과 승인 시각(`CONFIRMED_AT_KST`)을 현재 시각으로 채운다. +- 승인 불가 조건이 있으면 문서를 변경하지 않고 이유를 보고한다. + +--- + +## 플레이스홀더 분류 기준 + +모든 `{{...}}` 플레이스홀더를 동일하게 차단 조건으로 취급하지 않는다. 아래 세 유형으로 먼저 분류한다. + +### A. 승인 행위 자체로 채워지는 플레이스홀더 (자동 해소) + +| 플레이스홀더 패턴 | 자동 채움 값 | +|---|---| +| `{{CONFIRMED_AT_KST...}}` | 현재 시각 (KST, `YYYY-MM-DD HH:MM:SS KST`) | +| `{{CONFIRMED_BY...}}` | 섹션 9의 `Confirmed By:` 줄에서 읽은 값. 해당 줄이 없으면 차단하지 않고 플레이스홀더를 제거한 뒤 빈 값으로 처리 | + +### B. 맥락상 해소된 플레이스홀더 (자동 정리) + +섹션 6(체크리스트) 또는 섹션 8(사용자 결정 요약)에 있는 플레이스홀더는 **해당 결정의 실질 값이 섹션 9에 이미 기입되어 있으면** 해소된 것으로 간주한다. 차단하지 않는다. + +### C. 실질 미해소 플레이스홀더 (차단 대상) + +섹션 1~5(본문 내용)에 남아 있는 `{{...}}` 플레이스홀더로서, 위 A·B 유형에 해당하지 않는 것. 이 플레이스홀더가 하나라도 있으면 승인을 보류한다. + +--- + +## 실행 절차 + +### 1. 입력 해석 + +- 사용자가 제공한 값이 CYCLE_ID(예: `sdlc-001`)이면 `docs/sdlc/` 아래에서 해당 패턴으로 시작하는 폴더를 찾아 `5_verification.md` 경로를 확정한다. +- 사용자가 파일 경로를 직접 제공했으면 해당 경로를 사용한다. +- 파일이 존재하지 않으면 경로를 재확인하도록 사용자에게 피드백하고 중단한다. + +### 2. 플레이스홀더 분류 및 사전 해소 + +문서 전체의 `{{...}}` 플레이스홀더를 스캔해 A·B·C 유형으로 분류한다. + +- **A 유형**: 목록만 기록한다. 4단계에서 자동으로 채운다. +- **B 유형**: 섹션 9에서 실질 값을 읽어 치환 가능한지 확인한다. 가능하면 4단계에서 함께 처리한다. +- **C 유형**: 목록을 보고하고 승인을 보류한다. + +### 3. 승인 가능 여부 확인 (사전 게이트 검사) + +아래 조건을 모두 충족해야 승인을 진행한다. + +| 항목 | 확인 기준 | +|------|-----------| +| 문서 상태 | `confirmed`가 아닌 상태(`draft` 또는 `review`)여야 한다. 이미 `confirmed`면 중단한다. | +| 실질 미해소 플레이스홀더 (C 유형) | C 유형 플레이스홀더가 0개여야 한다. | +| 검증 항목 미통과 | `# 3` 검증 결과에 `실패` 또는 `블로킹` 상태 항목이 없어야 한다. | +| 결함(BUG) Open 상태 | `# 4` BUG 목록에 `Open` 상태 항목이 없어야 한다. | +| 오픈 질문 미해소 | `# 5` 오픈 질문 목록에 `상태: Open`인 항목이 없어야 한다. | +| 필수 섹션 미완성 | `# 2`, `# 3`, `# 6`, `# 8`, `# 9` 섹션이 존재하고 내용이 채워져 있어야 한다. | +| Ready for Release 사전 설정 | `Ready for Release: false`이거나 아직 갱신 전인 경우만 승인 처리 대상이다. 이미 `true`이면 이미 처리된 문서임을 알린다. | + +> **예외**: C 유형 플레이스홀더 또는 오픈 질문 미해소만 문제인 경우, 사용자가 명시적으로 `--force`를 표현했으면 해당 항목 목록을 보고하되 승인을 진행한다. 단, 검증 실패/블로킹 항목이나 BUG `Open` 항목이 있으면 `--force`로도 승인하지 않는다. + +### 4. 문서 업데이트 (승인 가능 시에만 실행) + +아래 항목을 변경한다. 이 목록 외 내용은 절대 수정하지 않는다. + +1. `# 0. 문서 상태`의 `- 상태:` 줄 → `confirmed`로 변경 +2. `# 0. 문서 상태`의 `- 마지막 갱신 시각(KST):` → 현재 시각으로 변경 +3. `# 9. Verification Freeze`의 `- Handoff Decision:` → `승인`으로 변경 +4. `# 9. Verification Freeze`의 `- Ready for Release:` → `true`로 변경 +5. **A 유형 플레이스홀더** → 각 자동 채움 값으로 치환 +6. **B 유형 플레이스홀더** → 섹션 9에서 읽은 실질 값으로 치환 (또는 플레이스홀더 제거) +7. `docs/sdlc//index.md`의 Verification 행 `상태` 열 → `` `confirmed` ``로 변경. 행 형식: `| 5. Verification | ... | ... |` + +### 5. 결과 보고 + +응답에 아래 내용을 포함한다. + +- **처리 결과**: 승인 완료 또는 승인 불가 +- **자동 처리된 플레이스홀더 목록** (A·B 유형, 승인 완료 시) +- **변경된 필드 목록** (승인 완료 시) +- **미충족 항목 목록** (승인 불가 시): 각 항목에 대한 조치 안내 포함 +- **다음 단계 안내**: 승인 완료 시 Release 단계(`/draft-release `) 실행 안내 + +--- + +## 중요 규칙 + +- 4단계에서 명시된 항목 외에는 문서 내용을 절대 변경하지 않는다. +- C 유형 미해소 조건이 있으면 문서에 아무 변경도 가하지 않는다. +- 이미 `confirmed` 상태인 문서에는 재처리하지 않는다. +- 현재 시각은 시스템 또는 컨텍스트에서 제공된 날짜/시간을 사용한다. diff --git a/.github/prompts/draft-design.prompt.md b/.github/prompts/draft-design.prompt.md new file mode 100644 index 0000000..b10ed56 --- /dev/null +++ b/.github/prompts/draft-design.prompt.md @@ -0,0 +1,95 @@ +--- +name: "draft-design" +description: "Create a 3_design.md draft from a confirmed Planning document" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/2_planning.md" +agent: "agent" +--- +확정된 Planning 문서를 기반으로 Design 초안(`3_design.md`)을 생성한다. + +목표: +- `docs/sdlc//3_design.md`를 생성한다. +- `2_planning.md`의 확정 내용(태스크, 요구사항, 검증 계획, 리스크)을 Design 초안의 입력으로 사용한다. +- 추론 가능한 항목은 초안 문장으로 채우고, 사용자 결정이 필요한 항목만 플레이스홀더로 남긴다. + +--- + +## 실행 절차 + +### 1. 입력 해석 + +- 사용자가 CYCLE_ID(예: `sdlc-001`)를 제공했으면 `docs/sdlc/` 아래에서 해당 패턴으로 시작하는 폴더를 찾아 `2_planning.md` 경로를 확정한다. +- 사용자가 파일 경로를 직접 제공했으면 해당 경로의 상위 폴더에서 `2_planning.md`를 찾는다. +- 파일이 없으면 사용자에게 피드백하고 중단한다. + +### 2. Planning 인계 조건 확인 + +`2_planning.md`에서 아래 조건을 확인한다. 미충족 시 중단하고 이유를 보고한다. + +| 항목 | 기준 | +|------|------| +| 문서 상태 | `confirmed`여야 한다 | +| Ready for Design | `true`여야 한다 | +| 3_design.md 존재 여부 | 이미 존재하면 덮어쓰기 의사를 확인하고, 의사 표현이 없으면 중단한다 | + +### 3. Planning 내용 추출 + +`2_planning.md`와 `1_discovery.md`에서 아래 항목을 읽어 Design 초안 작성에 사용한다. + +- 이슈명 (`# 0`의 `이슈명:`) +- 문서 ID / CYCLE_ID +- 태스크 전체 목록 및 담당자 (`# 2`) +- 태스크별 DoD (`# 2`) +- FR/NFR 목록 (`# 1`) +- 검증 계획 개요 (`# 6`) +- 리스크 및 완화 방안 (`# 7`) +- Deferred 처리된 오픈 질문 (`# 7`) +- 외부 의존성 및 기술/환경 제약 (`# 5`) + +### 4. Design 초안 작성 원칙 + +- Planning 태스크 구조와 FR/NFR을 바탕으로 각 태스크의 설계 방향, 변경 대상, 입출력을 초안으로 채운다. +- 저장소 구조, 파일 경로, 기존 코드 패턴을 실제로 확인해 변경 대상(`DESIGN_TARGET_N`)을 구체적으로 명시한다. +- 아래 항목은 추론 불가 또는 사용자 확인 필요이므로 플레이스홀더로 남긴다. + - 외부 시스템 계약이 미확정인 인터페이스 + - Freeze 확정 담당자 (`{{CONFIRMED_BY:TBD}}`) +- 보안 고려사항(`# 5`)은 변경 내용을 기준으로 OWASP Top 10 항목을 점검해 해당/비해당과 근거를 채운다. + +### 5. 자동으로 채워야 하는 항목 + +| 항목 | 채움 방법 | +|------|---------| +| `# 0` 메타데이터 | 현재 시각, CYCLE_ID, 이슈명, Planning 경로를 자동 입력 | +| `# 1` Planning 인계 요약 | Planning `# 2` 태스크 목록 이식, `# 7`의 Deferred 항목 이식 | +| `# 2` 아키텍처/구조 개요 | FR/NFR과 저장소 구조를 기반으로 변경 영향 범위 초안 작성 | +| `# 2` 주요 컴포넌트 | 실제 파일/모듈/디렉터리 구조를 확인해 영향 컴포넌트 나열 | +| `# 3` 상세 설계 | 각 T-N 태스크별 설계 방향, 변경 대상, 입출력 초안 작성 | +| `# 4` 인터페이스 정의 | FR/NFR 기반으로 필요한 API, 함수 시그니처, 스키마 초안 작성 | +| `# 5` 보안 고려사항 | 변경 내용 기준 OWASP 항목 점검, 해당/비해당 및 대응 방안 채움 | +| `# 6` 리스크 | Planning 이월 리스크 중 Design 관련 항목 포함 및 신규 Design 리스크 추가 | +| `# 8` 파일 처리 결과 | 생성 결과와 참조 문서 경로 채움 | +| `# 9` 사용자 결정 필요 | 미확정 인터페이스, 외부 시스템 계약 등 사용자 결정 필요 항목 정리 | +| `# 10` Freeze 플래그 | `Handoff Decision: 보류`, `Ready for Implementation: false` 초기값 입력 | + +### 6. 파일 생성 + +- 경로: `docs/sdlc//3_design.md` +- 기반: `.github/templates/sdlc/3_design.md`를 구조 기준으로 사용하되, 위 작성 원칙에 따라 채운 초안을 생성한다. + +### 7. 결과 보고 + +응답에 아래 내용을 포함한다. + +- **생성 결과**: 파일 경로 +- **채워진 항목 요약**: 자동 추론으로 채운 주요 내용 목록 +- **사용자 결정 필요 항목**: `# 9`에 정리된 항목 요약 +- **다음 단계 안내**: Design 검토 후 `/confirm-design ` 실행 안내 + +--- + +## 중요 규칙 + +- Planning이 `confirmed` 상태가 아니면 초안을 생성하지 않는다. +- 이미 `3_design.md`가 존재하는 경우 사용자 명시 없이 덮어쓰지 않는다. +- 변경 대상 경로/파일명은 저장소를 직접 확인해 실제 존재하는 경로를 사용한다. 추측으로 채우지 않는다. +- 보안 고려사항은 "비해당"이라도 근거를 한 줄 이상 남긴다. +- 현재 시각은 시스템 또는 컨텍스트에서 제공된 날짜/시간을 사용한다. diff --git a/.github/prompts/draft-implementation.prompt.md b/.github/prompts/draft-implementation.prompt.md new file mode 100644 index 0000000..2c2e87f --- /dev/null +++ b/.github/prompts/draft-implementation.prompt.md @@ -0,0 +1,82 @@ +--- +name: "draft-implementation" +description: "Create a 4_implementation.md draft from a confirmed Design document" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/3_design.md" +agent: "agent" +--- +확정된 Design 문서를 기반으로 Implementation 초안(`4_implementation.md`)을 생성한다. + +목표: +- `docs/sdlc//4_implementation.md`를 생성한다. +- `3_design.md`의 확정 내용(태스크, 변경 대상, 인터페이스, 보안)을 Implementation 초안의 입력으로 사용한다. +- 추론 가능한 항목은 초안 문장으로 채우고, 사용자 결정이 필요한 항목만 플레이스홀더로 남긴다. + +--- + +## 실행 절차 + +### 1. 입력 해석 + +- 사용자가 CYCLE_ID(예: `sdlc-001`)를 제공했으면 `docs/sdlc/` 아래에서 해당 패턴으로 시작하는 폴더를 찾아 `3_design.md` 경로를 확정한다. +- 사용자가 파일 경로를 직접 제공했으면 해당 경로의 상위 폴더에서 `3_design.md`를 찾는다. +- 파일이 없으면 사용자에게 피드백하고 중단한다. + +### 2. Design 인계 조건 확인 + +`3_design.md`에서 아래 조건을 확인한다. 미충족 시 중단하고 이유를 보고한다. + +| 항목 | 기준 | +|------|------| +| 문서 상태 | `confirmed`여야 한다 | +| Ready for Implementation | `true`여야 한다 | +| 4_implementation.md 존재 여부 | 이미 존재하면 덮어쓰기 의사를 확인하고, 의사 표현이 없으면 중단한다 | + +### 3. Design 내용 추출 + +`3_design.md`와 `2_planning.md`에서 아래 항목을 읽어 Implementation 초안 작성에 사용한다. + +- 이슈명 (`# 0`의 `이슈명:`) +- 문서 ID / CYCLE_ID +- 태스크 전체 목록 및 담당자 (`# 1`) +- 태스크별 변경 대상 파일/함수 (`# 3`) +- 태스크별 입출력 및 엣지 케이스 (`# 3`) +- 인터페이스 정의 (`# 4`) +- 보안 고려사항 (`# 5`) +- 리스크 및 완화 방안 (`# 6`) +- Deferred 처리된 오픈 질문 (`# 6`) + +### 4. Implementation 초안 작성 원칙 + +- Design에서 확정된 태스크 구조와 변경 대상을 기반으로 각 태스크의 구현 방법, 변경 파일, 완료 조건을 초안으로 채운다. +- 저장소 구조, 파일 경로, 기존 코드 패턴을 실제로 확인해 변경 파일 목록(`IMP_FILE_N`)을 구체적으로 명시한다. +- 아래 항목은 추론 불가 또는 사용자 확인 필요이므로 플레이스홀더로 남긴다. + - 태스크 담당자 (`{{IMP_TASK_OWNER_N:TBD}}`) + - Freeze 확정 담당자 (`{{CONFIRMED_BY:TBD}}`) + +### 5. 자동으로 채워야 하는 항목 + +| 항목 | 채움 방법 | +|------|---------| +| `# 0` 메타데이터 | 현재 시각, CYCLE_ID, 이슈명, Design 경로를 자동 입력 | +| `# 1` Design 인계 요약 | Design `# 1` 태스크 목록 및 변경 대상 이식, `# 6`의 Deferred 항목 이식 | +| `# 2` 구현 순서 | 태스크 의존 관계를 기반으로 구현 순서 초안 작성 | +| `# 2` 태스크별 구현 방법 | Design `# 3` 상세 설계 내용을 기반으로 구현 접근 방법 초안 작성 | +| `# 3` 변경 파일 목록 | Design `# 3`의 변경 대상 파일/함수를 기반으로 실제 경로 확인 후 목록 작성 | +| `# 4` 리스크 | Design 이월 리스크 중 Implementation 관련 항목 포함 및 신규 리스크 추가 | +| `# 6` 파일 처리 결과 | 생성 결과와 참조 문서 경로 채움 | +| `# 7` 사용자 결정 필요 | 미확정 태스크 담당자, 외부 시스템 호출 확인 필요 항목 정리 | +| `# 8` Freeze 플래그 | `Handoff Decision: 보류`, `Ready for Verification: false` 초기값 입력 | + +### 6. 파일 생성 + +- 경로: `docs/sdlc//4_implementation.md` +- 기반: `.github/templates/sdlc/4_implementation.md`를 구조 기준으로 사용하되, 위 작성 원칙에 따라 채운 초안을 생성한다. + +### 7. 결과 보고 + +응답에 아래 내용을 포함한다. + +- **생성된 파일 경로** +- **자동 채워진 항목 목록** (어떤 값으로 채웠는지) +- **플레이스홀더로 남긴 항목 목록** (사용자 결정 필요 이유 포함) +- **다음 단계 안내**: `/review-implementation ` 실행 안내 diff --git a/.github/prompts/draft-operation.prompt.md b/.github/prompts/draft-operation.prompt.md new file mode 100644 index 0000000..cbd8466 --- /dev/null +++ b/.github/prompts/draft-operation.prompt.md @@ -0,0 +1,83 @@ +--- +name: "draft-operation" +description: "Create a 7_operation.md draft from a confirmed Release document" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/6_release.md" +agent: "agent" +--- +확정된 Release 문서를 기반으로 Operations 초안(`7_operation.md`)을 생성한다. + +목표: +- `docs/sdlc//7_operation.md`를 생성한다. +- `6_release.md`의 배포 결과와 모니터링 정보를 Operations 초안의 입력으로 사용한다. +- 추론 가능한 운영 항목은 초안으로 채우고, 사용자 결정이 필요한 항목만 플레이스홀더로 남긴다. + +--- + +## 실행 절차 + +### 1. 입력 해석 + +- 사용자가 CYCLE_ID(예: `sdlc-001`)를 제공했으면 `docs/sdlc/` 아래에서 해당 패턴으로 시작하는 폴더를 찾아 `6_release.md` 경로를 확정한다. +- 사용자가 파일 경로를 직접 제공했으면 해당 경로의 상위 폴더에서 `6_release.md`를 찾는다. +- 파일이 없으면 사용자에게 피드백하고 중단한다. + +### 2. Release 인계 조건 확인 + +`6_release.md`에서 아래 조건을 확인한다. 미충족 시 중단하고 이유를 보고한다. + +| 항목 | 기준 | +|------|------| +| 문서 상태 | `confirmed`여야 한다 | +| Ready for Operations | `true`여야 한다 | +| 7_operation.md 존재 여부 | 이미 존재하면 덮어쓰기 의사를 확인하고, 의사 표현이 없으면 중단한다 | + +### 3. 내용 추출 + +`6_release.md`, `5_verification.md`, `1_discovery.md`에서 아래 항목을 읽어 Operations 초안 작성에 사용한다. + +- 이슈명 (`# 0`의 `이슈명:`) +- 문서 ID / CYCLE_ID +- 배포 환경 및 배포 방식 (`6_release.md` `# 2`) +- 스모크 테스트 항목 (`6_release.md` `# 4`) +- Release 모니터링 확인 항목 (`6_release.md` `# 4`) +- Deferred 처리된 오픈 질문 (`6_release.md` `# 5`) +- 성공 기준(S-N) (`1_discovery.md` `# 7`) + +### 4. Operations 초안 작성 원칙 + +- Release의 스모크 테스트/모니터링 항목을 확장해 지속적인 운영 모니터링 항목을 도출한다. +- 저장소 구조와 배포 방식을 참고해 장애 대응 절차를 구체적으로 초안으로 작성한다. +- `# 6` 다음 Discovery 환류 항목은 초안 생성 시 빈 상태(`없음`)로 두고, 운영 중 갱신하도록 안내한다. +- 아래 항목은 추론 불가 또는 사용자 확인 필요이므로 플레이스홀더로 남긴다. + - 모니터링 담당자 (`{{OPS_MONITOR_OWNER:TBD}}`) + - 에스컬레이션 연락처 (`{{OPS_ESCALATION_1:TBD}}`) + - Freeze 확정 담당자 (`{{CONFIRMED_BY:TBD}}`) + +### 5. 자동으로 채워야 하는 항목 + +| 항목 | 채움 방법 | +|------|---------| +| `# 0` 메타데이터 | 현재 시각, CYCLE_ID, 이슈명, Release 경로를 자동 입력 | +| `# 1` Release 인계 요약 | Release 배포 결과 요약, Deferred 항목 이식 | +| `# 2` 모니터링 항목 | Release 스모크 테스트/모니터링 항목을 기반으로 지속 모니터링 항목 도출, 임계값 초안 작성 | +| `# 3` 런북 — 정상 운영 절차 | Release 배포 방식 기반으로 주기적 확인 절차 초안 작성 | +| `# 3` 런북 — 장애 대응 절차 | 롤백 계획 및 배포 방식 기반으로 장애 초기 대응 절차 초안 작성 | +| `# 5` 리스크 | Release 이월 리스크 중 Operations 관련 항목 포함 | +| `# 6` 다음 Discovery 환류 | `없음`으로 초기화 (운영 중 갱신 안내) | +| `# 8` 파일 처리 결과 | 생성 결과와 참조 문서 경로 채움 | +| `# 9` 사용자 결정 필요 | 모니터링 담당자, 에스컬레이션 담당자 미지정 항목 정리 | +| `# 10` Freeze 플래그 | `Handoff Decision: 보류`, `SDLC 주기 완료: false` 초기값 입력 | + +### 6. 파일 생성 + +- 경로: `docs/sdlc//7_operation.md` +- 기반: `.github/templates/sdlc/7_operation.md`를 구조 기준으로 사용하되, 위 작성 원칙에 따라 채운 초안을 생성한다. + +### 7. 결과 보고 + +응답에 아래 내용을 포함한다. + +- **생성된 파일 경로** +- **자동 채워진 항목 목록** (어떤 값으로 채웠는지) +- **플레이스홀더로 남긴 항목 목록** (사용자 결정 필요 이유 포함) +- **다음 단계 안내**: `/review-operation ` 실행 안내 diff --git a/.github/prompts/draft-planning.prompt.md b/.github/prompts/draft-planning.prompt.md new file mode 100644 index 0000000..40e9096 --- /dev/null +++ b/.github/prompts/draft-planning.prompt.md @@ -0,0 +1,99 @@ +--- +name: "draft-planning" +description: "Create a 2_planning.md draft from a confirmed Discovery document" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/1_discovery.md" +agent: "agent" +--- +확정된 Discovery 문서를 기반으로 Planning 초안(`2_planning.md`)을 생성한다. + +목표: +- `docs/sdlc//2_planning.md`를 생성한다. +- `1_discovery.md`의 확정 내용(FR/NFR, 범위, 성공 기준, 리스크)을 Planning 초안의 입력으로 사용한다. +- 추론 가능한 항목은 초안 문장으로 채우고, 사용자 결정이 필요한 항목만 플레이스홀더로 남긴다. + +--- + +## 실행 절차 + +### 1. 입력 해석 + +- 사용자가 CYCLE_ID(예: `sdlc-001`)를 제공했으면 `docs/sdlc/` 아래에서 해당 패턴으로 시작하는 폴더를 찾아 `1_discovery.md` 경로를 확정한다. +- 사용자가 파일 경로를 직접 제공했으면 해당 경로의 상위 폴더에서 `1_discovery.md`를 찾는다. +- 파일이 없으면 사용자에게 피드백하고 중단한다. + +### 2. Discovery 인계 조건 확인 + +`1_discovery.md`에서 아래 조건을 확인한다. 미충족 시 중단하고 이유를 보고한다. + +| 항목 | 기준 | +|------|------| +| 문서 상태 | `confirmed`여야 한다 | +| Ready for Planning | `true`여야 한다 | +| 2_planning.md 존재 여부 | 이미 존재하면 덮어쓰기 의사를 확인하고, 의사 표현이 없으면 중단한다 | + +### 3. Discovery 내용 추출 + +`1_discovery.md`에서 아래 항목을 읽어 Planning 초안 작성에 사용한다. + +- 이슈명 (`# 0`의 `이슈명:`) +- 문서 ID / CYCLE_ID +- In Scope / Out of Scope (`# 5`) +- FR 전체 목록 (`# 5`) +- NFR 전체 목록 (`# 5`) +- 성공 기준 S-1~S-N (`# 7`) +- 리스크 R-1~R-N 및 완화 방안 (`# 6`) +- Deferred 처리된 오픈 질문 (`# 6`) +- 가정 A-1~A-N (`# 6`) + +### 4. Planning 초안 작성 원칙 + +- 입력 요청과 Discovery 내용을 바탕으로 합리적으로 추론 가능한 항목은 자연어 문장으로 채운다. +- 아래 항목은 추론 불가 또는 사용자 확인 필요이므로 플레이스홀더로 남긴다. + - 태스크 담당자 (`{{TASK_OWNER_N:TBD}}`) + - 마일스톤 목표 날짜 (`{{MILESTONE_N_DATE:TBD}}`) + - 이터레이션 기간 (`{{ITERATION_N_PERIOD:TBD}}`) + - Freeze 확정 담당자 (`{{CONFIRMED_BY:TBD}}`) +- 공수 추정은 유사 작업 기준 또는 태스크 복잡도 기반으로 초안 값을 제안한다. 불확실하면 범위(예: `2-4 SP`)로 표기한다. +- 태스크는 각 FR 1개당 최소 1개를 생성하되, 구현/검토/문서화를 묶거나 분리하는 것이 합리적이면 그렇게 한다. + +### 5. 자동으로 채워야 하는 항목 + +| 항목 | 채움 방법 | +|------|---------| +| `# 0` 메타데이터 | 현재 시각, CYCLE_ID, 이슈명, Discovery 경로를 자동 입력 | +| `# 1` Discovery 인계 요약 | Discovery `# 5` 범위/FR/NFR 내용 요약 이식 | +| `# 1` 이월 오픈 질문 | Discovery `# 6`의 `Deferred` 항목 이식 | +| `# 2` 태스크 분해 | FR/NFR 기반으로 최소 2개 이상의 태스크 생성 | +| `# 2` 태스크 DoD | 각 태스크의 완료 조건을 FR 내용 기반으로 초안 작성 | +| `# 3` 공수 추정 | 각 태스크에 초안 공수값 또는 범위 제안 | +| `# 4` 마일스톤 | 태스크 그룹 기반으로 최소 1개 이상 초안 작성 | +| `# 5` 의존성 | 태스크 간 의존 관계를 분석해 초안 작성 | +| `# 6` 검증 계획 | Discovery 성공 기준(S-N)과 연결해 검증 방법 초안 작성 | +| `# 7` 리스크 | Discovery 이월 리스크 중 Planning 관련 항목 포함 및 신규 Planning 리스크 추가 | +| `# 9` 파일 처리 결과 | 생성 결과와 참조 문서 경로 채움 | +| `# 10` 사용자 결정 필요 | 담당자 지정, 일정 확정, 예산/환경 제약 등 사용자 결정 필요 항목 정리 | +| `# 11` Freeze 플래그 | `Handoff Decision: 보류`, `Ready for Design: false` 초기값 입력 | + +### 6. 파일 생성 + +- 경로: `docs/sdlc//2_planning.md` +- 기반: `.github/templates/sdlc/2_planning.md`를 구조 기준으로 사용하되, 위 작성 원칙에 따라 채운 초안을 생성한다. + +### 7. 결과 보고 + +응답에 아래 내용을 포함한다. + +- **생성 결과**: 파일 경로 +- **채워진 항목 요약**: 자동 추론으로 채운 주요 내용 목록 +- **사용자 결정 필요 항목**: `# 10`에 정리된 항목 요약 +- **다음 단계 안내**: Planning 검토 후 `/confirm-planning ` 실행 안내 + +--- + +## 중요 규칙 + +- Discovery가 `confirmed` 상태가 아니면 초안을 생성하지 않는다. +- 이미 `2_planning.md`가 존재하는 경우 사용자 명시 없이 덮어쓰지 않는다. +- 추론 불가 항목은 `TBD` 대신 의미 있는 플레이스홀더(`{{TASK_OWNER_1:TBD}}` 등)로 남긴다. +- 공수 추정 초안은 반드시 근거(유사 사례, 복잡도 판단 등)와 함께 `# 3`에 명시한다. +- 현재 시각은 시스템 또는 컨텍스트에서 제공된 날짜/시간을 사용한다. diff --git a/.github/prompts/draft-release.prompt.md b/.github/prompts/draft-release.prompt.md new file mode 100644 index 0000000..51aa19d --- /dev/null +++ b/.github/prompts/draft-release.prompt.md @@ -0,0 +1,81 @@ +--- +name: "draft-release" +description: "Create a 6_release.md draft from a confirmed Verification document" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/5_verification.md" +agent: "agent" +--- +확정된 Verification 문서를 기반으로 Release 초안(`6_release.md`)을 생성한다. + +목표: +- `docs/sdlc//6_release.md`를 생성한다. +- `5_verification.md`의 검증 결과와 `4_implementation.md`의 변경 파일 목록을 Release 초안의 입력으로 사용한다. +- 추론 가능한 배포 계획 항목은 초안으로 채우고, 사용자 결정이 필요한 항목만 플레이스홀더로 남긴다. + +--- + +## 실행 절차 + +### 1. 입력 해석 + +- 사용자가 CYCLE_ID(예: `sdlc-001`)를 제공했으면 `docs/sdlc/` 아래에서 해당 패턴으로 시작하는 폴더를 찾아 `5_verification.md` 경로를 확정한다. +- 사용자가 파일 경로를 직접 제공했으면 해당 경로의 상위 폴더에서 `5_verification.md`를 찾는다. +- 파일이 없으면 사용자에게 피드백하고 중단한다. + +### 2. Verification 인계 조건 확인 + +`5_verification.md`에서 아래 조건을 확인한다. 미충족 시 중단하고 이유를 보고한다. + +| 항목 | 기준 | +|------|------| +| 문서 상태 | `confirmed`여야 한다 | +| Ready for Release | `true`여야 한다 | +| 6_release.md 존재 여부 | 이미 존재하면 덮어쓰기 의사를 확인하고, 의사 표현이 없으면 중단한다 | + +### 3. 내용 추출 + +`5_verification.md`, `4_implementation.md`, `1_discovery.md`에서 아래 항목을 읽어 Release 초안 작성에 사용한다. + +- 이슈명 (`# 0`의 `이슈명:`) +- 문서 ID / CYCLE_ID +- 검증 결과 요약 (`5_verification.md` `# 3`) +- Deferred 처리된 오픈 질문 (`5_verification.md` `# 5`) +- 변경 파일 목록 (`4_implementation.md` `# 3`) +- 저장소 구조 및 배포 관련 설정 파일 + +### 4. Release 초안 작성 원칙 + +- 저장소 구조와 배포 관련 파일(`.github/workflows`, `Makefile`, `bootstrap/` 등)을 실제로 확인해 배포 방식과 도구를 구체적으로 초안으로 채운다. +- 롤백 계획은 변경 파일 목록을 기반으로 현실적인 롤백 절차를 초안으로 작성한다. +- 스모크 테스트 항목은 핵심 기능 FR을 기반으로 도출한다. +- 아래 항목은 추론 불가 또는 사용자 확인 필요이므로 플레이스홀더로 남긴다. + - 롤백 담당자 (`{{REL_ROLLBACK_OWNER:TBD}}`) + - Freeze 확정 담당자 (`{{CONFIRMED_BY:TBD}}`) + +### 5. 자동으로 채워야 하는 항목 + +| 항목 | 채움 방법 | +|------|---------| +| `# 0` 메타데이터 | 현재 시각, CYCLE_ID, 이슈명, Verification 경로를 자동 입력 | +| `# 1` Verification 인계 요약 | Verification 검증 결과 요약, Deferred 항목 이식 | +| `# 2` 배포 환경/방식/도구 | 저장소 구조 기반으로 배포 방식 초안 작성 | +| `# 2` 배포 순서 | 변경 파일 목록 기반으로 의존 관계를 고려한 배포 순서 초안 작성 | +| `# 3` 롤백 계획 | 변경 내용에 대한 현실적인 롤백 조건 및 절차 초안 작성 | +| `# 4` 스모크 테스트 | FR 기반으로 핵심 시나리오 도출 및 확인 방법 초안 작성 | +| `# 5` 리스크 | Verification 이월 리스크 중 Release 관련 항목 포함 | +| `# 7` 파일 처리 결과 | 생성 결과와 참조 문서 경로 채움 | +| `# 8` 사용자 결정 필요 | 배포 담당자, 롤백 담당자 미지정 항목 정리 | +| `# 9` Freeze 플래그 | `Handoff Decision: 보류`, `Ready for Operations: false` 초기값 입력 | + +### 6. 파일 생성 + +- 경로: `docs/sdlc//6_release.md` +- 기반: `.github/templates/sdlc/6_release.md`를 구조 기준으로 사용하되, 위 작성 원칙에 따라 채운 초안을 생성한다. + +### 7. 결과 보고 + +응답에 아래 내용을 포함한다. + +- **생성된 파일 경로** +- **자동 채워진 항목 목록** (어떤 값으로 채웠는지) +- **플레이스홀더로 남긴 항목 목록** (사용자 결정 필요 이유 포함) +- **다음 단계 안내**: `/review-release ` 실행 안내 diff --git a/.github/prompts/draft-verification.prompt.md b/.github/prompts/draft-verification.prompt.md new file mode 100644 index 0000000..3560dec --- /dev/null +++ b/.github/prompts/draft-verification.prompt.md @@ -0,0 +1,82 @@ +--- +name: "draft-verification" +description: "Create a 5_verification.md draft from a confirmed Implementation document" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/4_implementation.md" +agent: "agent" +--- +확정된 Implementation 문서를 기반으로 Verification 초안(`5_verification.md`)을 생성한다. + +목표: +- `docs/sdlc//5_verification.md`를 생성한다. +- `4_implementation.md`의 완료 태스크와 `1_discovery.md`의 성공 기준(S-N)을 Verification 초안의 입력으로 사용한다. +- 추론 가능한 검증 항목은 초안으로 채우고, 사용자 결정이 필요한 항목만 플레이스홀더로 남긴다. + +--- + +## 실행 절차 + +### 1. 입력 해석 + +- 사용자가 CYCLE_ID(예: `sdlc-001`)를 제공했으면 `docs/sdlc/` 아래에서 해당 패턴으로 시작하는 폴더를 찾아 `4_implementation.md` 경로를 확정한다. +- 사용자가 파일 경로를 직접 제공했으면 해당 경로의 상위 폴더에서 `4_implementation.md`를 찾는다. +- 파일이 없으면 사용자에게 피드백하고 중단한다. + +### 2. Implementation 인계 조건 확인 + +`4_implementation.md`에서 아래 조건을 확인한다. 미충족 시 중단하고 이유를 보고한다. + +| 항목 | 기준 | +|------|------| +| 문서 상태 | `confirmed`여야 한다 | +| Ready for Verification | `true`여야 한다 | +| 5_verification.md 존재 여부 | 이미 존재하면 덮어쓰기 의사를 확인하고, 의사 표현이 없으면 중단한다 | + +### 3. 내용 추출 + +`4_implementation.md`, `3_design.md`, `1_discovery.md`에서 아래 항목을 읽어 Verification 초안 작성에 사용한다. + +- 이슈명 (`# 0`의 `이슈명:`) +- 문서 ID / CYCLE_ID +- 구현 완료 태스크 목록 및 변경 파일 (`# 1`, `# 3`) +- 태스크별 완료 조건(DoD) (`# 2`) +- Deferred 처리된 오픈 질문 (`# 4`) +- 성공 기준(S-N) (`1_discovery.md` `# 7`) +- 기능 요구사항(FR) 목록 (`1_discovery.md` `# 5`) +- 검증 계획 개요 (`2_planning.md` `# 6`) + +### 4. Verification 초안 작성 원칙 + +- Discovery 성공 기준(S-N)과 FR 목록을 기반으로 검증 항목(VC-N)을 도출한다. +- 각 VC 항목에 검증 방법(수동/자동/혼합)과 측정 가능한 성공 기준을 초안으로 채운다. +- 검증 결과(`# 3`) 테이블은 모두 `미완료`로 초기화한다. +- 아래 항목은 추론 불가 또는 사용자 확인 필요이므로 플레이스홀더로 남긴다. + - 검증 담당자 (`{{VER_OWNER_N:TBD}}`) + - Freeze 확정 담당자 (`{{CONFIRMED_BY:TBD}}`) + +### 5. 자동으로 채워야 하는 항목 + +| 항목 | 채움 방법 | +|------|---------| +| `# 0` 메타데이터 | 현재 시각, CYCLE_ID, 이슈명, Implementation 경로를 자동 입력 | +| `# 1` Implementation 인계 요약 | Implementation `# 1`/`# 2` 태스크 목록 및 DoD 이식, `# 4`의 Deferred 항목 이식 | +| `# 2` 검증 항목 | Discovery S-N 기준과 FR/NFR을 기반으로 VC-N 항목 도출 및 검증 방법/성공 기준 초안 작성 | +| `# 2` 성공 기준 연결 | S-N과 VC-N의 연결 관계 명시 | +| `# 3` 검증 결과 | 모든 항목 `미완료`로 초기화, 통과/실패 집계 0으로 초기화 | +| `# 5` 리스크 | Implementation 이월 리스크 중 Verification 관련 항목 포함 | +| `# 7` 파일 처리 결과 | 생성 결과와 참조 문서 경로 채움 | +| `# 8` 사용자 결정 필요 | 검증 담당자 미지정 항목 정리 | +| `# 9` Freeze 플래그 | `Handoff Decision: 보류`, `Ready for Release: false` 초기값 입력 | + +### 6. 파일 생성 + +- 경로: `docs/sdlc//5_verification.md` +- 기반: `.github/templates/sdlc/5_verification.md`를 구조 기준으로 사용하되, 위 작성 원칙에 따라 채운 초안을 생성한다. + +### 7. 결과 보고 + +응답에 아래 내용을 포함한다. + +- **생성된 파일 경로** +- **자동 채워진 항목 목록** (어떤 값으로 채웠는지) +- **플레이스홀더로 남긴 항목 목록** (사용자 결정 필요 이유 포함) +- **다음 단계 안내**: `/review-verification ` 실행 안내 diff --git a/.github/prompts/new-sdlc.prompt.md b/.github/prompts/new-sdlc.prompt.md new file mode 100644 index 0000000..e63c1c8 --- /dev/null +++ b/.github/prompts/new-sdlc.prompt.md @@ -0,0 +1,173 @@ +--- +name: "new-sdlc" +description: "Create next SDLC cycle folder and draft 1_discovery.md from slash-command arguments" +argument-hint: "예: 사용자 로그인 기능 추가 - OAuth2 소셜 로그인, 세션 관리, 로그아웃 처리" +agent: "agent" +--- +/new-sdlc 로 들어온 인자를 기반으로 새 SDLC 주기를 생성한다. + +목표: +- `docs/sdlc/sdlc-__/` 폴더를 생성한다. +- 위 폴더에 `1_discovery.md` draft 문서를 생성한다. +- 위 폴더에 `index.md`, `summary.md` draft 문서를 함께 생성한다. +- `1_discovery.md`는 `.github/templates/sdlc/1_discovery.md`를 기반으로, 입력 문장과 현재 구현 상태를 바탕으로 기본 내용을 가능한 한 채운 초안이어야 한다. + +입력 해석: +- 사용자가 `/new-sdlc ...` 뒤에 입력한 전체 텍스트를 이슈 원문으로 사용한다. +- 이슈명은 원문과 현재 구현 상태를 확인하여 한 문장으로 요약한다. +- `topic-slug`는 이슈 원문을 소문자 kebab-case로 변환해 만든다. +- slug 규칙: + - 영문/숫자 외 문자는 `-`로 치환 + - 연속 `-`는 하나로 축약 + - 시작/끝 `-` 제거 + - 결과가 비면 `untitled` 사용 + +Discovery 초안 작성 원칙: +- 입력 문장이 짧더라도 기능 목적, 예상 사용자, 산출물, 성공 조건을 합리적으로 추론해 초안을 작성한다. +- 이미 입력만으로 추론 가능한 내용은 플레이스홀더로 남기지 말고 자연어 문장으로 채운다. +- 사용자 승인, 외부 데이터, 정책 결정, 확정 범위 경계처럼 추론만으로 확정하면 안 되는 항목만 플레이스홀더로 남긴다. +- 사용자 결정이 필요한 항목은 `결정 필요` 같은 일반 문장으로만 쓰지 말고, 반드시 `{{...}}` 플레이스홀더 형태로 남긴다. +- 모르면 공란으로 두지 말고 아래 둘 중 하나로 처리한다. + - 합리적 기본안 제시 가능: 초안 문장으로 채운다. + - 사용자 확인이 반드시 필요: `# 10. 사용자 결정 필요 항목 요약`에 넣고 관련 본문에는 최소 플레이스홀더를 남긴다. + +자동으로 채워야 하는 Discovery 섹션: +- `# 1. 계획 상태 요약` + - `해석` 2줄은 입력 요청을 바탕으로 직접 작성한다. +- `# 2. 요구사항 판정 결과` + - 기본값은 `신규`로 두되, 입력만으로 명백한 중복/유사라고 판단 가능한 경우에만 다르게 쓴다. + - 근거도 2줄 작성한다. +- `# 3. 문제점의 요약` + - 현재 상태, 기대 상태, 이해관계자, 주요 사용자 시나리오를 입력 기반으로 채운다. +- `# 4. 이번에 정의할 변경` + - 핵심 변경 항목 1~3개를 직접 작성한다. + - `영향 범위`의 코드/문서/운영 영향도 추론해 채운다. +- `# 5. 요구사항 목록` + - FR 2개 이상, NFR 1개 이상을 직접 작성한다. + - In Scope/Out of Scope는 초안 수준으로 제안하되, 사용자 승인 없이는 확정할 수 없는 경계는 플레이스홀더로 남긴다. +- `# 6. 리스크/가정 목록` + - 리스크 2개 이상, 가정 2개 이상을 직접 작성한다. + - 오픈 질문은 정말 결정이 필요한 경우에만 남긴다. +- `# 7. 초기 성공 기준` + - 성공 기준 2개 이상과 측정 방식/데이터 출처 초안을 작성한다. +- `# 9. 파일 처리 결과` + - 생성 결과와 최소 참조 문서를 채운다. 참조 문서가 없으면 `없음`이라고 쓴다. +- `# 10. 사용자 결정 필요 항목 요약` + - 자동 추론으로 확정할 수 없는 항목만 `DECIDE`, `CONFIRM`, `DATA`에 넣는다. + - 이 섹션의 항목은 설명문이 아니라 플레이스홀더 형식으로 남긴다. +- `# 11. Discovery Freeze` + - `Handoff Decision`은 기본 `보류`로 둔다. + - `Handoff Rationale`에는 "초기 Discovery 초안 생성 완료, Planning 인계 전 사용자 확인 필요"와 같이 현재 상태를 적는다. + +플레이스홀더를 유지해도 되는 대표 항목: +- 승인/확정 책임자 +- 외부 문서 경로, 아직 없는 후속 산출물 경로 +- 사용자 확인이 필요한 범위 경계 +- 데이터 출처가 실제로 정해지지 않은 성공 지표 측정값 +- 오픈 질문의 최종 답변 + +플레이스홀더 유지 규칙: +- 사용자 승인 전 확정되면 안 되는 정책/범위/산출물 위치/대상 독자 결정은 본문에도 플레이스홀더를 남긴다. +- `# 10. 사용자 결정 필요 항목 요약`에 들어가는 항목은 반드시 `{{DECIDE_*}}`, `{{CONFIRM_*}}`, `{{DATA_*}}` 형태를 사용한다. +- `TBD` 같은 일반 문자열보다 의미가 드러나는 플레이스홀더를 우선 사용한다. + +실행 절차: +1. `docs/sdlc/` 아래의 기존 폴더 중 `sdlc-<3자리>_` 패턴을 스캔해 최대 번호를 찾는다. +2. 다음 번호를 3자리 zero-pad로 계산한다. 예: `001`, `002`, ... +3. 오늘 날짜를 `YYYYMMDD`로 구한다. +4. `CYCLE_ID = sdlc-__`를 만든다. +5. 저장소 현황 탐색 — `# 3 문제점 요약`의 "현재 상태" 기술 근거를 수집한다. + - 이슈 원문에서 핵심 키워드(기능명, 모듈명, 동사)를 추출한다. + - 키워드를 기반으로 저장소에서 관련 파일·디렉터리·함수를 탐색한다. + - 탐색 범위: 소스 파일(`.ts`, `.js`, `.py`, `.go`, `.java` 등), 설정 파일, 기존 문서(`docs/`). 테스트 파일과 의존성 잠금 파일(`package-lock.json`, `.lock`)은 제외한다. + - 탐색 결과에서 아래 항목을 추출한다. + - 관련 파일 경로 목록 (최대 10개, 관련성 높은 순) + - 현재 구현 방식 요약 (함수명·클래스명·주요 로직 1~3줄) + - 현재 상태에서 이슈 원문이 지적하는 문제가 실제로 존재하는지 여부 + - 관련 파일을 찾지 못한 경우: "관련 파일 없음 — 신규 기능으로 추정"으로 기록하고 계속 진행한다. + - 탐색 결과는 `1_discovery.md` 작성 시 `#3` 현재 상태 기술에만 반영한다. 다른 섹션에는 사용하지 않는다. +6. `docs/sdlc//` 폴더를 생성한다. +7. `.github/templates/sdlc/1_discovery.md`를 기반으로 `docs/sdlc//1_discovery.md`를 생성한다. +7. [`.github/templates/sdlc/index.md`](../../.github/templates/sdlc/index.md)를 기반으로 `docs/sdlc//index.md`를 생성한다. + +8. `.github/templates/sdlc/summary.md`가 있으면 이를 기반으로 `docs/sdlc//summary.md`를 생성한다. 템플릿이 없으면 아래 기본 골격으로 생성한다. + + ```md + # Summary - {{CYCLE_ID}} + + - 이슈명: {{ISSUE_NAME}} + - 상태: {{SUMMARY_STATUS:draft|review|confirmed}} + - 작성 시각(KST): {{CREATED_AT_KST}} + - 마지막 갱신 시각(KST): {{UPDATED_AT_KST}} + + ## 핵심 요약 + - {{SUMMARY_POINT_1}} + - {{SUMMARY_POINT_2:필요 없으면 삭제}} + + ## 단계별 문서 + - [Discovery](./1_discovery.md) + - [Index](./index.md) + ``` + +11. 생성 파일들에서 아래 플레이스홀더를 우선 치환한다. + - `{{DOC_STATUS:draft|review|confirmed}}` -> `draft` + - `{{CYCLE_ID:sdlc-<3자리>__}}` -> 계산한 `CYCLE_ID` + - `{{CYCLE_ID}}` -> 계산한 `CYCLE_ID` + - `{{ISSUE_NAME:짧은 한글 또는 영문 이슈명}}` -> 사용자 입력 원문 + - `{{ISSUE_NAME}}` -> 사용자 입력 원문 + - `{{CREATED_AT_KST:TBD}}` -> 현재 시각(KST) + - `{{CREATED_AT_KST}}` -> 현재 시각(KST) + - `{{UPDATED_AT_KST:TBD}}` -> 현재 시각(KST) + - `{{UPDATED_AT_KST}}` -> 현재 시각(KST) + - `{{OUTPUT_PATH}}` -> 생성 파일 경로 + - `{{FILE_RESULT:생성|갱신|미생성}}` -> `생성` + - `{{SUMMARY_STATUS:draft|review|confirmed}}` -> `draft` +12. `1_discovery.md`에서는 위 규칙에 따라 추론 가능한 플레이스홀더를 적극적으로 실제 내용으로 치환한다. 이때 5단계에서 수집한 저장소 현황 탐색 결과를 `# 3 문제점 요약`의 현재 상태 기술에 반영한다. +13. 추론 불가능하거나 사용자 확인이 필요한 항목만 플레이스홀더로 남긴다. +14. `docs/sdlc/index.md` 전역 인덱스를 갱신한다. + - 파일이 없으면 아래 초기 골격으로 신규 생성한다. + + ```md + # SDLC 전체 주기 인덱스 + + + + ## 주기 목록 + + | ID | 날짜 | 이슈명 | Discovery | 상태 | + |---|---|---|---|---| + + ## 단계별 횡단 조회 + + | 단계 | 문서 목록 | + |---|---| + | Discovery | | + | Planning | | + | Design | | + | Implementation | | + | Verification | | + | Release | | + | Operations | | + ``` + + - 파일이 이미 있으면 다음 규칙으로 갱신한다. + - `## 주기 목록` 테이블에 새 행을 추가한다. 형식: + `| | | | [Discovery](.//1_discovery.md) | draft |` + - `## 단계별 횡단 조회` 테이블에서 `Discovery` 행의 `문서 목록` 셀에 `[](.//1_discovery.md)` 링크를 추가한다. + - 나머지 단계 행은 해당 단계 파일이 실제로 존재할 때만 링크를 추가한다(지금은 Discovery만 추가). + - 테이블 구조 자체는 변경하지 않는다. 행/셀 추가만 한다. + +응답 형식: +- 생성된 `CYCLE_ID` +- 생성한 폴더 경로 +- 생성한 파일 경로 목록 (`1_discovery.md`, `index.md`, `summary.md`) +- `docs/sdlc/index.md` 갱신 결과 (신규 생성 또는 갱신된 행 내용) +- **저장소 현황 탐색 결과**: 발견된 관련 파일 목록과 현재 상태 요약 (또는 "관련 파일 없음 — 신규 기능으로 추정") +- 자동으로 채운 Discovery 핵심 섹션 요약 +- 사용자 확인이 필요해 플레이스홀더로 남긴 항목 요약 + +중요 규칙: +- 질문 없이 바로 생성을 시도한다. (입력이 비어 있어 slug를 만들 수 없는 경우에만 짧게 확인) +- 기존 동일 경로가 있으면 덮어쓰지 말고, 다음 ID를 재계산해 새 주기로 생성한다. +- `docs/sdlc/index.md`에 이미 같은 `CYCLE_ID` 행이 있으면 중복 추가하지 않는다. +- 불필요한 파일은 만들지 않는다. diff --git a/.github/prompts/review-design.prompt.md b/.github/prompts/review-design.prompt.md new file mode 100644 index 0000000..612a573 --- /dev/null +++ b/.github/prompts/review-design.prompt.md @@ -0,0 +1,148 @@ +--- +name: "review-design" +description: "Review and validate SDLC Design document for consistency, completeness, and readiness for approval" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/3_design.md" +agent: "agent" +--- +SDLC Design 문서를 체계적으로 검토하고, 승인 가능한 상태인지 판단한다. + +목표: +- `3_design.md` 파일의 일관성 확인 (태스크/아키텍처/인터페이스/보안 간 중복 및 충돌) +- 기술적 오류, 잘못된 표현, 명확하지 않은 문구 식별 +- AI agent에게 할당된 플레이스홀더(`{{...}}`) 중 판단/결정 가능한 항목 처리 +- 플레이스홀더 중 사용자 결정이 정말 필요한 항목만 남겼는지 확인 +- 최종 승인 가능 상태 판단 + +--- + +## 검토 절차 + +### 1. 입력 해석 + +- 사용자가 제공한 문서 경로 또는 CYCLE_ID에서 `3_design.md` 파일 위치를 확정한다. +- 파일이 없으면 입력값을 다시 확인하도록 사용자에게 피드백하고 중단한다. +- `2_planning.md`도 함께 읽어 인계 내용의 정합성 확인에 사용한다. + +### 2. Planning 인계 정합성 검토 + +`# 1. Planning 인계 요약`이 `2_planning.md`의 확정 내용과 일치하는지 확인한다. + +- 태스크 목록(T-N 제목, 참조 요구사항)이 Planning `# 2`와 내용/수량이 일치하는가 +- 이월된 오픈 질문이 Planning `# 7`의 `Deferred` 항목과 대응하는가 +- `# 3` 상세 설계의 T-N 항목이 `# 1` 태스크 목록과 누락 없이 1:1 대응하는가 + +### 3. 저장소 현황 대조 + +`3_design.md`에 기술된 "현재 상태(개선 전)"가 실제 저장소와 일치하는지 확인한다. + +#### 3-1. 변경 대상 파일 존재 여부 + +`# 3 상세 설계`의 각 T-N 섹션에서 "변경 대상" 파일/함수 경로를 추출하고 실제 저장소에서 확인한다. + +| 확인 항목 | 기준 | +|-----------|------| +| 수정 대상으로 명시된 파일 | 실제 저장소에 존재해야 한다. 없으면 경고 — 경로 오류 또는 신규 생성 여부를 명시하도록 요구 | +| 삭제 대상으로 명시된 파일 | 실제 저장소에 존재해야 한다. 없으면 경고 | +| 신규 생성 대상으로 명시된 파일 | 실제 저장소에 **없어야** 한다. 이미 존재하면 경고 — 수정 대상으로 재분류 필요 | + +#### 3-2. "현재 상태" 기술 정확성 + +`# 3 상세 설계` 및 `# 4 인터페이스 정의`에서 "현재 X 방식으로 동작한다", "현재 Y 함수가 Z를 반환한다" 등 현황을 기술한 문장을 찾아 실제 코드와 대조한다. + +- 일치: 별도 표시 없이 통과 +- 불일치: 해당 문장과 실제 코드를 나란히 제시하고 설계 문서 수정을 요구한다. **불일치 항목이 하나라도 있으면 최종 판단을 "보류(Hold)"로 설정한다.** +- 확인 불가(파일이 너무 크거나 탐색 범위 초과): "확인 불가 — 수동 검토 권장" 으로 표시한다. + +#### 3-3. 인터페이스 시그니처 대조 + +`# 4 인터페이스 정의`에 "현재 시그니처"가 명시된 항목에 대해 실제 코드의 함수/메서드 시그니처와 대조한다. + +- 파라미터 이름·타입·반환 타입이 일치하는지 확인한다. +- 불일치 시 실제 시그니처를 제시하고 설계 문서 수정을 요구한다. + +### 5. 일관성 검토 (모든 섹션 대상) + +- **태스크 번호 연속성**: `# 1`, `# 2` 컴포넌트 영향 범위, `# 3` 상세 설계의 T-N 번호가 누락 없이 연속이고 일치하는가 +- **인터페이스 정합성**: `# 3` 상세 설계에서 언급된 API/함수가 `# 4` 인터페이스 정의에 실제로 명시되었는가 +- **보안 연결성**: `# 3`에서 입출력이 정의된 경우 `# 5` 보안 점검의 "입력값 검증(Injection)" 항목이 적절히 점검되었는가 +- **숫자 연속성**: R-N, DA-N, OQ-N 번호가 누락 없이 연속인지 확인 + +### 4. 표현 검토 (모든 텍스트) + +- **문법**: 문장 구조, 주술 호응, 시제 일관성 +- **명확성**: "적절히", "대략", "가능하면" 같은 모호한 표현 식별 +- **작성 수준**: 기술 문서 기준의 형식적 톤 유지. 비공식 표현 제거 +- **오타**: 한글 띄어쓰기, 숫자 오류, 테이블 형식 검증 + +### 6. 플레이스홀더 처리 + +모든 `{{...}}` 플레이스홀더를 나열하고 각 항목의 의도를 파악한다. + +AI agent가 채울 수 있는 항목: +- `{{..._DECISION:...}}` 형태 — 문서 내 다른 섹션이나 Planning/저장소 정보로 추론 가능한지 확인 +- 컴포넌트 역할(`COMPONENT_N_ROLE`), 데이터 흐름(`DATA_FLOW_N`), 엣지 케이스(`DESIGN_EDGE_N`) 등 구조적으로 추론 가능한 항목 + +사용자 결정이 필요한 항목 (플레이스홀더 유지): +- 태스크 담당자(`DESIGN_TASK_OWNER_N`) +- 외부 시스템 계약이 미확정인 인터페이스(`INTERFACE_N`, `SCHEMA_N`) +- Freeze 확정 담당자(`CONFIRMED_BY`) + +각 항목에 대해 아래 중 하나를 판단한다: +- **채울 수 있음**: 문서 내 맥락, Planning 내용, 저장소 구조로 합리적 추론 가능 → 실제 내용으로 치환 +- **판단 불가능**: 사용자/승인자 결정, 외부 시스템 계약, 책임자 지정 필요 → 플레이스홀더 유지하되 명확성 강화 + +처리 결과를 별도 목록으로 보고한다. + +### 7. 섹션별 최소 검수 기준 + +| 섹션 | 최소 기준 | +|------|---------| +| `# 0 문서 상태` | 메타데이터 완성도 확인 (CREATED_AT_KST, PLANNING_PATH 채워졌는가) | +| `# 1 Planning 인계 요약` | 태스크 최소 1개 이상, Planning 태스크와 1:1 대응 여부 | +| `# 2 아키텍처/구조 설계` | 전체 구조 개요 1문단 이상, 주요 컴포넌트 1개 이상 | +| `# 3 상세 설계` | 모든 T-N 태스크에 설계 방향과 변경 대상이 있는가 | +| `# 4 인터페이스 정의` | 해당 없으면 "해당 없음" 명시, 있으면 함수/API 시그니처가 구체적인가 | +| `# 5 보안 고려사항` | 4개 항목(Injection/Auth/Data/Dep) 모두 해당/비해당 판정이 있는가, 해당 항목에 대응 방안이 있는가 | +| `# 6 리스크/가정/오픈 질문` | 리스크 1개 이상, 가정 1개 이상, OQ `Open` 상태가 있으면 종료 조건이 명시되었는가 | +| `# 7 확인 체크` | 체크 항목이 구체적이고 측정 가능한가 | +| `# 9 사용자 결정 필요` | 플레이스홀더가 실제 `{{...}}` 형식인가 (단순 문장 아닌가) | +| `# 10 Freeze` | Handoff Decision과 Rationale이 채워졌는가 | + +### 8. 최종 승인 판단 + +- **승인 가능 (Ready for Implementation)**: + - 모든 T-N 태스크에 설계 방향과 변경 대상이 채워졌는가 + - 인터페이스 계약이 구체적으로 명시되었는가 + - 보안 점검 항목 중 "해당"은 모두 대응 방안이 있는가 + - `# 6` 오픈 질문에 `Open` 상태 항목이 없거나 모두 `Deferred` 처리 완료인가 + - 남은 플레이스홀더는 모두 정당한가 (사용자/승인자 결정이 정말 필요) + - Freeze 플래그가 준비되었는가 (`READY_FOR_IMPLEMENTATION: true`로 변경 가능한가) + - 저장소 현황 대조에서 불일치 항목이 없는가 (3-2, 3-3) +- **조건부 (Pending Minor Changes)**: + - 일부 표현/인터페이스 초안만 수정하면 가능 + - 보안 항목 중 근거가 빈약한 항목 보완 권장 + - 저장소 현황 대조 결과 중 "확인 불가" 항목이 있어 수동 검토 권장 +- **보류 (Hold)**: + - T-N 태스크 설계 방향 누락, 인터페이스 미정의, 보안 "해당" 항목에 대응 방안 없음, OQ `Open` 잔여 등 근본적 재검토 필요 + - 저장소 현황 대조(3-2, 3-3)에서 불일치 항목이 하나라도 있는 경우 + +--- + +## 응답 형식 + +- **검토 결과 요약** + - Planning 인계 정합성 오류 (있으면 나열) + - 저장소 현황 대조 결과 (불일치/확인 불가 항목 나열, 없으면 "이상 없음") + - 발견된 일관성 오류 (있으면 나열) + - 표현/문법 오류 (있으면 나열) + - 섹션별 완성도 (예: `# 3` 상세 설계 — T-2 변경 대상 누락) + +- **플레이스홀더 처리 결과** + - 채워진 항목 (예: `{{COMPONENT_2_ROLE}}` → "Copilot 프롬프트 파일 등록·관리" 로 치환) + - 유지된 항목 (예: `{{DESIGN_TASK_OWNER_1:TBD}}` → 담당자 지정 필요로 유지) + +- **수정 사항 목록** (적용된 변경) + +- **최종 판단** + - 승인 가능 / 조건부 / 보류 + - 근거 및 남은 작업 사항 diff --git a/.github/prompts/review-discovery.prompt.md b/.github/prompts/review-discovery.prompt.md new file mode 100644 index 0000000..baf02fd --- /dev/null +++ b/.github/prompts/review-discovery.prompt.md @@ -0,0 +1,87 @@ +--- +name: "review-discovery" +description: "Review and validate SDLC Discovery document for consistency, completeness, and readiness for approval" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/1_discovery.md" +agent: "agent" +--- +SDLC Discovery 문서를 체계적으로 검토하고, 승인 가능한 상태인지 판단한다. + +목표: +- 1_discovery.md 파일의 일관성 확인 (개념/용어/범위 중복 및 충돌) +- 기술적 오류, 잘못된 표현, 명확하지 않은 문구 식별 +- AI agent에게 할당된 플레이스홀더({{...}}) 중 판단/결정 가능한 항목 처리 +- 플레이스홀더 중 사용자 결정이 정말 필요한 항목만 남겼는지 확인 +- 최종 승인 가능 상태 판단 + +검토 절차: + +1. 입력 해석 + - 사용자가 제공한 문서 경로 또는 CYCLE_ID에서 1_discovery.md 파일 위치를 확정한다. + - 파일이 없으면 입력값을 다시 확인하도록 사용자에게 피드백한다. + +2. 일관성 검토 (모든 섹션 대상) + - 용어: 같은 개념이 다른 이름으로 반복되는지 확인. 예: "사용자"와 "최종 사용자", "범위"와 "경계" 혼용. + - 개념 중복: 섹션 간 내용이 동일하거나 매우 유사한 부분 식별. 예: `# 1`의 해석과 `# 10` 요약의 중복. + - 범위 정합성: In Scope/Out of Scope가 명확히 구분되는지, 요구사항 목록과 맞는지 확인. + - 숫자 일관성: 리스크(R-1~3), 가정(A-1~3), 성공 기준(S-1~3) 등 번호가 누락 없이 연속인지 확인. + +3. 표현 검토 (모든 텍스트) + - 문법: 문장 구조, 주술 호응, 시제 일관성 확인. + - 명확성: 주관적이거나 모호한 표현 식별. 예: "적절한", "대략적으로", "대체로". + - 작성 수준: 기술 문서 기준의 형식적 톤 유지. 비공식 표현이나 과도한 가정 제거. + - 오타: 한글 띄어쓰기, 숫자 오류, 링크 형식 검증. + +4. 플레이스홀더 처리 + - 모든 `{{...}}` 플레이스홀더를 나열하고, 각 항목의 의도를 파악한다. + - AI agent 할당 항목 식별: + - `{{ASSUMPTION_1_DECISION:...}}`, `{{TARGET_STATE_2_DECISION:...}}` 같은 `_DECISION` 형태 + - `{{DECIDE_*}}`, `{{CONFIRM_*}}`, `{{DATA_*}}` 형태 + - 각 항목에 대해 아래 중 하나를 판단한다. + - **채울 수 있음**: 문서 내 다른 섹션, 입력 요청, 저장소 구조를 바탕으로 합리적 내용 추론 가능 → 실제 내용으로 치환 + - **판단 불가능**: 사용자/승인자의 정책 결정, 외부 데이터 확인, 승인 책임자 지정 필요 → 플레이스홀더 유지하되 명확성 강화 + - 처리 결과를 별도 목록으로 보고한다. + +5. 섹션별 최소 검수 기준 + - `# 0 문서 상태`: 메타데이터 완성도 확인 (예: CREATED_AT_KST는 현재 시각으로 채워졌는가) + - `# 2 요구사항 판정`: 판정이 신규/유사/중복 중 하나인가, 근거는 2줄 이상인가 + - `# 3 문제점 요약`: 현재 상태와 기대 상태가 명확히 대비되는가 + - `# 5 요구사항 목록`: FR/NFR 각각 최소 개수(FR 2개, NFR 1개) 이상인가, 범위 경계가 명시되었는가 + - `# 6 리스크/가정/오픈질문`: 항목 수가 적절한가(2개 이상), 오픈 질문은 정말 결정 필요인가 + - `# 8 확인 체크`: 체크 항목이 구체적이고 측정 가능한가 + - `# 10 사용자 결정 필요`: 플레이스홀더가 실제 플레이스홀더 형식인가 (단순 문장 아닌가) + - `# 11 Freeze`: Handoff Decision과 Rationale이 채워졌는가 + +6. 최종 승인 판단 + - **승인 가능 (Ready for Planning)**: + - 모든 일관성 오류가 해소되었는가 + - 명확하지 않은 표현이 제거되었는가 + - 남은 플레이스홀더는 모두 정당한가 (사용자/승인자 결정이 정말 필요) + - 모든 요구 섹션이 채워졌는가 + - Freeze 플래그가 준비되었는가 (READY_FOR_PLANNING: true로 변경 가능한가) + - **조건부 (Pending Minor Changes)**: + - 일부 표현만 수정하면 가능 + - 플레이스홀더 중 일부는 명확성을 위해 재작성 권장 + - **보류 (Hold)**: + - 개념적 불일치, 범위 재정의, 승인자 선정 등 근본적 재검토 필요 + +응답 형식: +- **검토 결과 요약** + - 발견된 일관성 오류 (있으면 나열) + - 표현/문법 오류 (있으면 나열) + - 섹션별 완성도 점수 (예: 3/5 = 범위 경계 미명시) + +- **플레이스홀더 처리 결과** + - 채워진 항목 (예: `{{TARGET_STATE_2_DECISION}}` → "GitHub 기반으로 운영"로 치환) + - 유지된 항목 (예: `{{DECIDE_ITEM_1}}` → 사용자 승인 필요로 유지) + +- **수정 사항 목록** (적용된 변경) + +- **최종 판단** + - 승인 가능 / 조건부 / 보류 + - 근거 및 남은 작업 사항 + +중요 규칙: +- 도큐먼트 내용을 변경하는 경우 반드시 명확히 표기한다. +- AI agent 판단으로 치환한 항목은 합리적 근거를 함께 설명한다. +- 의도적으로 플레이스홀더를 유지한 이유도 명시한다. +- 승인 판단은 객관적 기준(섹션 완성도, 형식 준수, 범위 명확성)을 우선으로 한다. diff --git a/.github/prompts/review-implementation.prompt.md b/.github/prompts/review-implementation.prompt.md new file mode 100644 index 0000000..8876d15 --- /dev/null +++ b/.github/prompts/review-implementation.prompt.md @@ -0,0 +1,111 @@ +--- +name: "review-implementation" +description: "Review and validate SDLC Implementation document for consistency, completeness, and readiness for approval" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/4_implementation.md" +agent: "agent" +--- +SDLC Implementation 문서를 체계적으로 검토하고, 승인 가능한 상태인지 판단한다. + +목표: +- `4_implementation.md` 파일의 일관성 확인 (태스크/변경 파일/완료 조건 간 중복 및 충돌) +- 기술적 오류, 잘못된 표현, 명확하지 않은 문구 식별 +- AI agent에게 할당된 플레이스홀더(`{{...}}`) 중 판단/결정 가능한 항목 처리 +- 플레이스홀더 중 사용자 결정이 정말 필요한 항목만 남겼는지 확인 +- 최종 승인 가능 상태 판단 + +--- + +## 검토 절차 + +### 1. 입력 해석 + +- 사용자가 제공한 문서 경로 또는 CYCLE_ID에서 `4_implementation.md` 파일 위치를 확정한다. +- 파일이 없으면 입력값을 다시 확인하도록 사용자에게 피드백하고 중단한다. +- `3_design.md`도 함께 읽어 인계 내용의 정합성 확인에 사용한다. + +### 2. Design 인계 정합성 검토 + +`# 1. Design 인계 요약`이 `3_design.md`의 확정 내용과 일치하는지 확인한다. + +- 태스크 목록(T-N 제목, 변경 대상)이 Design `# 1`/`# 3`과 내용/수량이 일치하는가 +- 이월된 오픈 질문이 Design `# 6`의 `Deferred` 항목과 대응하는가 +- `# 2` 태스크별 구현 방법의 변경 대상이 Design `# 3`의 변경 대상과 일치하는가 + +### 3. 일관성 검토 (모든 섹션 대상) + +- **태스크 번호 연속성**: `# 1`, `# 2`, `# 3`의 T-N 번호가 누락 없이 연속이고 일치하는가 +- **변경 파일 정합성**: `# 2` 태스크별 변경 대상이 `# 3` 변경 파일 목록에 빠짐없이 포함되어 있는가 +- **완료 조건 측정 가능성**: `# 2` 각 태스크의 완료 조건(DoD)이 구체적이고 측정 가능한가 ("구현 완료"처럼 모호한 표현 금지) +- **숫자 연속성**: R-N, IA-N, OQ-N 번호가 누락 없이 연속인지 확인 + +### 4. 표현 검토 (모든 텍스트) + +- **문법**: 문장 구조, 주술 호응, 시제 일관성 +- **명확성**: "적절히", "대략", "가능하면" 같은 모호한 표현 식별 +- **작성 수준**: 기술 문서 기준의 형식적 톤 유지. 비공식 표현 제거 +- **오타**: 한글 띄어쓰기, 숫자 오류, 테이블 형식 검증 + +### 5. 플레이스홀더 처리 + +모든 `{{...}}` 플레이스홀더를 나열하고 각 항목의 의도를 파악한다. + +AI agent가 채울 수 있는 항목: +- `{{..._DECISION:...}}` 형태 — 문서 내 다른 섹션이나 Design 내용으로 추론 가능한지 확인 +- 변경 파일 유형(`IMP_FILE_TYPE_N`), 관련 태스크(`IMP_FILE_TASK_N`) 등 구조적으로 추론 가능한 항목 + +사용자 결정이 필요한 항목 (플레이스홀더 유지): +- 태스크 담당자(`IMP_TASK_OWNER_N`) +- Freeze 확정 담당자(`CONFIRMED_BY`) + +각 항목에 대해 아래 중 하나를 판단한다: +- **채울 수 있음**: 문서 내 맥락, Design 내용, 저장소 구조로 합리적 추론 가능 → 실제 내용으로 치환 +- **판단 불가능**: 사용자/승인자 결정, 외부 확인, 책임자 지정 필요 → 플레이스홀더 유지하되 명확성 강화 + +처리 결과를 별도 목록으로 보고한다. + +### 6. 섹션별 최소 검수 기준 + +| 섹션 | 최소 기준 | +|------|---------| +| `# 0 문서 상태` | 메타데이터 완성도 확인 (CREATED_AT_KST, DESIGN_PATH 채워졌는가) | +| `# 1 Design 인계 요약` | 태스크 최소 1개 이상, Design 태스크와 1:1 대응 여부 | +| `# 2 구현 계획` | 모든 T-N 태스크에 구현 방법, 변경 대상, 완료 조건이 있는가 | +| `# 3 변경 파일 목록` | `# 2`에서 언급된 변경 대상이 모두 목록에 포함되었는가, 파일 경로가 실제 경로인가 | +| `# 4 리스크/가정/오픈 질문` | 리스크 1개 이상, 가정 1개 이상, OQ `Open` 상태가 있으면 종료 조건이 명시되었는가 | +| `# 5 확인 체크` | 체크 항목이 구체적이고 측정 가능한가 | +| `# 7 사용자 결정 필요` | 플레이스홀더가 실제 `{{...}}` 형식인가 (단순 문장 아닌가) | +| `# 8 Freeze` | Handoff Decision과 Rationale이 채워졌는가 | + +### 7. 최종 승인 판단 + +- **승인 가능 (Ready for Verification)**: + - 모든 T-N 태스크에 구현 방법, 변경 대상, 완료 조건이 채워졌는가 + - 변경 파일 목록이 실제 파일 경로 기준으로 정확한가 + - `# 4` 오픈 질문에 `Open` 상태 항목이 없거나 모두 `Deferred` 처리 완료인가 + - 남은 플레이스홀더는 모두 정당한가 (사용자/승인자 결정이 정말 필요) + - Freeze 플래그가 준비되었는가 (`READY_FOR_VERIFICATION: true`로 변경 가능한가) +- **조건부 (Pending Minor Changes)**: + - 완료 조건(DoD) 일부가 모호하거나, 변경 파일 경로 확인 필요 + - 플레이스홀더 중 일부는 명확성을 위해 재작성 권장 +- **보류 (Hold)**: + - 태스크 구현 방법 누락, 변경 파일 목록 불완전, OQ `Open` 잔여 등 근본적 재검토 필요 + +--- + +## 응답 형식 + +- **검토 결과 요약** + - Design 인계 정합성 오류 (있으면 나열) + - 발견된 일관성 오류 (있으면 나열) + - 표현/문법 오류 (있으면 나열) + - 섹션별 완성도 (예: `# 2` T-2 완료 조건 모호) + +- **플레이스홀더 처리 결과** + - 채워진 항목 (예: `{{IMP_FILE_TYPE_2}}` → `수정` 로 치환) + - 유지된 항목 (예: `{{IMP_TASK_OWNER_1:TBD}}` → 담당자 지정 필요로 유지) + +- **수정 사항 목록** (적용된 변경) + +- **최종 판단** + - 승인 가능 / 조건부 / 보류 + - 근거 및 남은 작업 사항 diff --git a/.github/prompts/review-operation.prompt.md b/.github/prompts/review-operation.prompt.md new file mode 100644 index 0000000..809384d --- /dev/null +++ b/.github/prompts/review-operation.prompt.md @@ -0,0 +1,110 @@ +--- +name: "review-operation" +description: "Review and validate SDLC Operations document for consistency, completeness, and readiness for approval" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/7_operation.md" +agent: "agent" +--- +SDLC Operations 문서를 체계적으로 검토하고, 승인 가능한 상태인지 판단한다. + +목표: +- `7_operation.md` 파일의 일관성 확인 (모니터링/런북/환류 항목 간 충돌 및 누락) +- 기술적 오류, 잘못된 표현, 명확하지 않은 문구 식별 +- AI agent에게 할당된 플레이스홀더(`{{...}}`) 중 판단/결정 가능한 항목 처리 +- 플레이스홀더 중 사용자 결정이 정말 필요한 항목만 남겼는지 확인 +- 최종 승인 가능 상태 판단 + +--- + +## 검토 절차 + +### 1. 입력 해석 + +- 사용자가 제공한 문서 경로 또는 CYCLE_ID에서 `7_operation.md` 파일 위치를 확정한다. +- 파일이 없으면 입력값을 다시 확인하도록 사용자에게 피드백하고 중단한다. +- `6_release.md`도 함께 읽어 인계 내용 정합성 확인에 사용한다. + +### 2. 인계 정합성 검토 + +- 배포 결과 요약이 Release `# 2`/`# 4`의 내용과 일치하는가 +- 이월된 오픈 질문이 Release `# 5`의 `Deferred` 항목과 대응하는가 +- 런북의 장애 대응 절차가 Release `# 3`의 롤백 계획과 연결되는가 + +### 3. 일관성 검토 (모든 섹션 대상) + +- **모니터링 실현 가능성**: `# 2` 모니터링 항목의 임계값이 수치화되었는가 ("오류가 없어야 한다" 대신 "5xx 오류율 1% 이하" 등) +- **런북 실행 가능성**: `# 3` 절차가 실제 운영자가 따를 수 있을 만큼 구체적인가 +- **에스컬레이션 일관성**: 에스컬레이션 경로가 실제 연락 가능한 대상인가 +- **숫자 연속성**: R-N, OQ-N 번호가 누락 없이 연속인지 확인 + +### 4. 표현 검토 (모든 텍스트) + +- **문법**: 문장 구조, 주술 호응, 시제 일관성 +- **명확성**: "문제가 생기면", "필요할 때" 같은 모호한 표현 식별 +- **작성 수준**: 기술 문서 기준의 형식적 톤 유지 +- **오타**: 한글 띄어쓰기, 숫자 오류, 테이블 형식 검증 + +### 5. 플레이스홀더 처리 + +모든 `{{...}}` 플레이스홀더를 나열하고 각 항목의 의도를 파악한다. + +AI agent가 채울 수 있는 항목: +- `{{..._DECISION:...}}` 형태 — 문서 내 다른 섹션이나 Release 내용으로 추론 가능한지 확인 +- 모니터링 확인 방법(`OPS_MONITOR_METHOD_N`), 장애 대응 첫 단계 등 구조적으로 추론 가능한 항목 + +사용자 결정이 필요한 항목 (플레이스홀더 유지): +- 모니터링 담당자(`OPS_MONITOR_OWNER`) +- 에스컬레이션 연락처(`OPS_ESCALATION_1`) +- Freeze 확정 담당자(`CONFIRMED_BY`) + +각 항목에 대해 아래 중 하나를 판단한다: +- **채울 수 있음**: 문서 내 맥락, Release 내용으로 합리적 추론 가능 → 실제 내용으로 치환 +- **판단 불가능**: 실제 운영 정보, 담당자 지정 필요 → 플레이스홀더 유지하되 명확성 강화 + +처리 결과를 별도 목록으로 보고한다. + +### 6. 섹션별 최소 검수 기준 + +| 섹션 | 최소 기준 | +|------|---------| +| `# 0 문서 상태` | 메타데이터 완성도 확인 (CREATED_AT_KST, REL_PATH 채워졌는가) | +| `# 1 Release 인계 요약` | 배포 환경과 스모크 테스트 결과가 명시되었는가 | +| `# 2 운영 모니터링` | 모니터링 항목 최소 1개 이상, 각 항목에 임계값과 대응 방안이 있는가 | +| `# 3 런북` | 정상 운영 절차 1단계 이상, 장애 대응 절차 1단계 이상, 에스컬레이션 경로가 있는가 | +| `# 5 리스크/오픈 질문` | OQ `Open` 상태가 있으면 종료 조건이 명시되었는가 | +| `# 6 다음 Discovery 환류` | "없음"이거나 구체적인 인사이트/개선 사항이 기록되었는가 | +| `# 7 확인 체크` | 체크 항목이 구체적이고 측정 가능한가 | +| `# 9 사용자 결정 필요` | 플레이스홀더가 실제 `{{...}}` 형식인가 | +| `# 10 Freeze` | Handoff Decision과 Rationale이 채워졌는가 | + +### 7. 최종 승인 판단 + +- **승인 가능 (SDLC 주기 완료)**: + - 모니터링 항목에 임계값과 대응 방안이 모두 명시되었는가 + - 런북(정상 운영/장애 대응/에스컬레이션)이 완비되었는가 + - `# 5` 오픈 질문에 `Open` 상태 항목이 없거나 모두 `Deferred` 처리 완료인가 + - `# 6` 다음 Discovery 환류 항목이 작성되었거나 "없음"으로 명시되었는가 + - Freeze 플래그가 준비되었는가 (`SDLC_CYCLE_COMPLETE: true`로 변경 가능한가) +- **조건부 (Pending Minor Changes)**: + - 일부 모니터링 임계값이 모호하거나, 런북 절차 보완 필요 +- **보류 (Hold)**: + - 모니터링 항목 없음, 장애 대응 절차 없음, 에스컬레이션 경로 없음 등 근본적 재검토 필요 + +--- + +## 응답 형식 + +- **검토 결과 요약** + - Release 인계 정합성 오류 (있으면 나열) + - 발견된 일관성 오류 (있으면 나열) + - 표현/문법 오류 (있으면 나열) + - 섹션별 완성도 (예: `# 2` 모니터링 임계값 미수치화) + +- **플레이스홀더 처리 결과** + - 채워진 항목 (예: `{{OPS_MONITOR_METHOD_1}}` → `GitHub 저장소 오류 로그 확인` 로 치환) + - 유지된 항목 (예: `{{OPS_MONITOR_OWNER:TBD}}` → 담당자 지정 필요로 유지) + +- **수정 사항 목록** (적용된 변경) + +- **최종 판단** + - 승인 가능 / 조건부 / 보류 + - 근거 및 남은 작업 사항 diff --git a/.github/prompts/review-planning.prompt.md b/.github/prompts/review-planning.prompt.md new file mode 100644 index 0000000..ca89bff --- /dev/null +++ b/.github/prompts/review-planning.prompt.md @@ -0,0 +1,127 @@ +--- +name: "review-planning" +description: "Review and validate SDLC Planning document for consistency, completeness, and readiness for approval" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/2_planning.md" +agent: "agent" +--- +SDLC Planning 문서를 체계적으로 검토하고, 승인 가능한 상태인지 판단한다. + +목표: +- `2_planning.md` 파일의 일관성 확인 (태스크/요구사항/범위 간 중복 및 충돌) +- 기술적 오류, 잘못된 표현, 명확하지 않은 문구 식별 +- AI agent에게 할당된 플레이스홀더(`{{...}}`) 중 판단/결정 가능한 항목 처리 +- 플레이스홀더 중 사용자 결정이 정말 필요한 항목만 남겼는지 확인 +- 최종 승인 가능 상태 판단 + +--- + +## 검토 절차 + +### 1. 입력 해석 + +- 사용자가 제공한 문서 경로 또는 CYCLE_ID에서 `2_planning.md` 파일 위치를 확정한다. +- 파일이 없으면 입력값을 다시 확인하도록 사용자에게 피드백하고 중단한다. +- `1_discovery.md`도 함께 읽어 인계 내용의 정합성 확인에 사용한다. + +### 2. Discovery 인계 정합성 검토 + +`# 1. Discovery 인계 요약`이 `1_discovery.md`의 확정 내용과 일치하는지 확인한다. + +- FR/NFR 목록이 Discovery `# 5`와 내용/수량이 일치하는가 +- In Scope / Out of Scope 경계가 Discovery와 충돌하지 않는가 +- 이월된 오픈 질문이 Discovery `# 6`의 `Deferred` 항목과 대응하는가 + +### 3. 일관성 검토 (모든 섹션 대상) + +- **용어**: 태스크 제목, 요구사항 ID(FR-N, T-N, M-N), 담당자 표기가 섹션 간 일치하는가 +- **태스크 참조**: `# 2` 태스크 분해 테이블의 T-N 번호가 `# 3` 공수 추정, `# 4` 일정 계획, `# 5` 의존성과 연속·일치하는가 +- **성공 기준 연결**: `# 6` 검증 계획의 기준(S-N)이 Discovery `# 7`과 대응하는가 +- **숫자 연속성**: T-N, M-N, OQ-N, R-N 번호가 누락 없이 연속인지 확인 + +### 4. 표현 검토 (모든 텍스트) + +- **문법**: 문장 구조, 주술 호응, 시제 일관성 +- **명확성**: "적절히", "대략", "가능하면" 같은 모호한 표현 식별 +- **작성 수준**: 기술 문서 기준의 형식적 톤 유지. 비공식 표현 제거 +- **오타**: 한글 띄어쓰기, 숫자 오류, 테이블 형식 검증 + +### 5. 플레이스홀더 처리 + +모든 `{{...}}` 플레이스홀더를 나열하고 각 항목의 의도를 파악한다. + +AI agent가 채울 수 있는 항목: +- `{{..._DECISION:...}}` 형태 — 문서 내 다른 섹션이나 Discovery 내용으로 추론 가능한지 확인 +- 태스크 유형(`TASK_TYPE_N`), 참조 요구사항(`TASK_REF_N`), 의존 관계(`TASK_DEP_N`) 등 구조적으로 추론 가능한 항목 + +사용자 결정이 필요한 항목 (플레이스홀더 유지): +- 태스크 담당자(`TASK_OWNER_N`) +- 마일스톤 목표 날짜(`MILESTONE_N_DATE`) +- 이터레이션 기간(`ITERATION_N_PERIOD`) +- 검증 담당자(`VERIFY_OWNER_N`) +- Freeze 확정 담당자(`CONFIRMED_BY`) + +각 항목에 대해 아래 중 하나를 판단한다: +- **채울 수 있음**: 문서 내 맥락, Discovery 내용, 저장소 구조로 합리적 추론 가능 → 실제 내용으로 치환 +- **판단 불가능**: 사용자/승인자 결정, 외부 데이터, 책임자 지정 필요 → 플레이스홀더 유지하되 명확성 강화 + +처리 결과를 별도 목록으로 보고한다. + +### 6. 섹션별 최소 검수 기준 + +| 섹션 | 최소 기준 | +|------|---------| +| `# 0 문서 상태` | 메타데이터 완성도 확인 (CREATED_AT_KST, DISCOVERY_PATH 채워졌는가) | +| `# 1 Discovery 인계 요약` | FR 2개 이상, NFR 1개 이상, In/Out Scope 명시 여부 | +| `# 2 작업 분해` | 태스크 최소 2개 이상, 각 태스크에 DoD가 있는가 | +| `# 3 공수 추정` | 모든 태스크에 추정 공수와 단위가 있는가, 총 공수와 신뢰도가 명시되었는가 | +| `# 4 일정 계획` | 마일스톤 최소 1개 이상, 이터레이션 단위가 정의되었는가 | +| `# 5 의존성 및 제약` | 태스크 간 의존성이 `# 2`와 일치하는가 | +| `# 6 검증 계획` | Discovery 성공 기준(S-N)과 연결된 검증 방법 초안이 있는가 | +| `# 7 리스크/가정/오픈 질문` | 항목이 적절한가(리스크 1개 이상, 가정 1개 이상), 오픈 질문은 정말 결정 필요인가 | +| `# 8 확인 체크` | 체크 항목이 구체적이고 측정 가능한가 | +| `# 10 사용자 결정 필요` | 플레이스홀더가 실제 `{{...}}` 형식인가 (단순 문장 아닌가) | +| `# 11 Freeze` | Handoff Decision과 Rationale이 채워졌는가 | + +### 7. 최종 승인 판단 + +- **승인 가능 (Ready for Design)**: + - 모든 일관성 오류가 해소되었는가 + - 명확하지 않은 표현이 제거되었는가 + - 남은 플레이스홀더는 모두 정당한가 (사용자/승인자 결정이 정말 필요) + - 모든 요구 섹션이 채워졌는가 + - Freeze 플래그가 준비되었는가 (`READY_FOR_DESIGN: true`로 변경 가능한가) +- **조건부 (Pending Minor Changes)**: + - 일부 표현/수치만 수정하면 가능 + - 플레이스홀더 중 일부는 명확성을 위해 재작성 권장 +- **보류 (Hold)**: + - 태스크-요구사항 연결 누락, 공수 추정 근거 부재, 범위 재정의 등 근본적 재검토 필요 + +--- + +## 응답 형식 + +- **검토 결과 요약** + - Discovery 인계 정합성 오류 (있으면 나열) + - 발견된 일관성 오류 (있으면 나열) + - 표현/문법 오류 (있으면 나열) + - 섹션별 완성도 (예: `# 3` 공수 추정 — T-2 추정값 누락) + +- **플레이스홀더 처리 결과** + - 채워진 항목 (예: `{{TASK_DEP_2}}` → `T-1` 로 치환) + - 유지된 항목 (예: `{{TASK_OWNER_1:TBD}}` → 담당자 지정 필요로 유지) + +- **수정 사항 목록** (적용된 변경) + +- **최종 판단** + - 승인 가능 / 조건부 / 보류 + - 근거 및 남은 작업 사항 + +--- + +## 중요 규칙 + +- 문서 내용을 변경하는 경우 반드시 명확히 표기한다. +- AI agent 판단으로 치환한 항목은 합리적 근거를 함께 설명한다. +- 의도적으로 플레이스홀더를 유지한 이유도 명시한다. +- 승인 판단은 객관적 기준(섹션 완성도, 형식 준수, Discovery 정합성)을 우선으로 한다. +- Discovery와의 정합성 확인은 `1_discovery.md`를 직접 읽어서 수행한다. 기억이나 추론에 의존하지 않는다. diff --git a/.github/prompts/review-release.prompt.md b/.github/prompts/review-release.prompt.md new file mode 100644 index 0000000..34a15db --- /dev/null +++ b/.github/prompts/review-release.prompt.md @@ -0,0 +1,110 @@ +--- +name: "review-release" +description: "Review and validate SDLC Release document for consistency, completeness, and readiness for approval" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/6_release.md" +agent: "agent" +--- +SDLC Release 문서를 체계적으로 검토하고, 승인 가능한 상태인지 판단한다. + +목표: +- `6_release.md` 파일의 일관성 확인 (배포 준비/롤백/스모크 테스트 간 중복 및 충돌) +- 기술적 오류, 잘못된 표현, 명확하지 않은 문구 식별 +- AI agent에게 할당된 플레이스홀더(`{{...}}`) 중 판단/결정 가능한 항목 처리 +- 플레이스홀더 중 사용자 결정이 정말 필요한 항목만 남겼는지 확인 +- 최종 승인 가능 상태 판단 + +--- + +## 검토 절차 + +### 1. 입력 해석 + +- 사용자가 제공한 문서 경로 또는 CYCLE_ID에서 `6_release.md` 파일 위치를 확정한다. +- 파일이 없으면 입력값을 다시 확인하도록 사용자에게 피드백하고 중단한다. +- `5_verification.md`와 `4_implementation.md`도 함께 읽어 인계 내용 정합성 확인에 사용한다. + +### 2. 인계 정합성 검토 + +- 검증 결과 요약이 Verification `# 3` 결과와 일치하는가 +- 이월된 오픈 질문이 Verification `# 5`의 `Deferred` 항목과 대응하는가 +- 스모크 테스트 항목이 핵심 FR과 연결되는가 + +### 3. 일관성 검토 (모든 섹션 대상) + +- **배포 순서 일관성**: `# 2` 배포 순서가 Implementation `# 3` 변경 파일 목록과 연결되는가 +- **롤백 실현 가능성**: `# 3` 롤백 절차가 실제 배포 방식에 맞게 기술되었는가 (git 기반이면 커밋/브랜치/태그 참조, CI/CD 기반이면 파이프라인 롤백 방법 등) +- **스모크 테스트 충족성**: `# 4` 스모크 테스트가 핵심 기능을 최소한 커버하는가 +- **숫자 연속성**: R-N, OQ-N 번호가 누락 없이 연속인지 확인 + +### 4. 표현 검토 (모든 텍스트) + +- **문법**: 문장 구조, 주술 호응, 시제 일관성 +- **명확성**: "필요 시", "대략", "적절히" 같은 모호한 표현 식별 +- **작성 수준**: 기술 문서 기준의 형식적 톤 유지 +- **오타**: 한글 띄어쓰기, 숫자 오류, 테이블 형식 검증 + +### 5. 플레이스홀더 처리 + +모든 `{{...}}` 플레이스홀더를 나열하고 각 항목의 의도를 파악한다. + +AI agent가 채울 수 있는 항목: +- `{{..._DECISION:...}}` 형태 — 문서 내 다른 섹션이나 저장소 구조로 추론 가능한지 확인 +- 배포 방식(`REL_DEPLOY_METHOD`), 스모크 테스트 방법(`REL_SMOKE_METHOD_N`) 등 저장소 구조 기반으로 추론 가능한 항목 + +사용자 결정이 필요한 항목 (플레이스홀더 유지): +- 롤백 담당자(`REL_ROLLBACK_OWNER`) +- 배포 대상 환경(`REL_TARGET_ENV`): 실제 운영 환경 정보 +- Freeze 확정 담당자(`CONFIRMED_BY`) + +각 항목에 대해 아래 중 하나를 판단한다: +- **채울 수 있음**: 저장소 구조, 문서 내 맥락으로 합리적 추론 가능 → 실제 내용으로 치환 +- **판단 불가능**: 실제 환경 정보, 담당자 지정 필요 → 플레이스홀더 유지하되 명확성 강화 + +처리 결과를 별도 목록으로 보고한다. + +### 6. 섹션별 최소 검수 기준 + +| 섹션 | 최소 기준 | +|------|---------| +| `# 0 문서 상태` | 메타데이터 완성도 확인 (CREATED_AT_KST, VER_PATH 채워졌는가) | +| `# 1 Verification 인계 요약` | 검증 결과 요약(통과 수/전체 수)이 있는가 | +| `# 2 배포 준비` | 배포 환경, 방식, 도구가 명시되었는가, 배포 순서가 1단계 이상인가 | +| `# 3 롤백 계획` | 롤백 조건 1개 이상, 롤백 절차 1단계 이상, 롤백 담당자가 있는가 | +| `# 4 배포 후 확인` | 스모크 테스트 항목 1개 이상, 각 항목에 확인 방법과 성공 기준이 있는가 | +| `# 5 리스크/오픈 질문` | OQ `Open` 상태가 있으면 종료 조건이 명시되었는가 | +| `# 6 확인 체크` | 체크 항목이 구체적이고 측정 가능한가 | +| `# 8 사용자 결정 필요` | 플레이스홀더가 실제 `{{...}}` 형식인가 | +| `# 9 Freeze` | Handoff Decision과 Rationale이 채워졌는가 | + +### 7. 최종 승인 판단 + +- **승인 가능 (Ready for Operations)**: + - 배포 준비(환경/방식/순서)가 명확히 정의되었는가 + - 롤백 조건, 절차, 담당자가 모두 명시되었는가 + - 스모크 테스트 항목이 최소 1개 이상이고 성공 기준이 구체적인가 + - `# 5` 오픈 질문에 `Open` 상태 항목이 없거나 모두 `Deferred` 처리 완료인가 + - Freeze 플래그가 준비되었는가 (`READY_FOR_OPERATIONS: true`로 변경 가능한가) +- **조건부 (Pending Minor Changes)**: + - 일부 배포 방식 설명이 모호하거나 스모크 테스트 성공 기준 보완 필요 +- **보류 (Hold)**: + - 롤백 계획 없음, 배포 순서 불명확, 스모크 테스트 항목 누락 등 근본적 재검토 필요 + +--- + +## 응답 형식 + +- **검토 결과 요약** + - Verification 인계 정합성 오류 (있으면 나열) + - 발견된 일관성 오류 (있으면 나열) + - 표현/문법 오류 (있으면 나열) + - 섹션별 완성도 (예: `# 3` 롤백 담당자 미지정) + +- **플레이스홀더 처리 결과** + - 채워진 항목 (예: `{{REL_DEPLOY_METHOD}}` → `git push (자동 배포 없음)` 로 치환) + - 유지된 항목 (예: `{{REL_ROLLBACK_OWNER:TBD}}` → 담당자 지정 필요로 유지) + +- **수정 사항 목록** (적용된 변경) + +- **최종 판단** + - 승인 가능 / 조건부 / 보류 + - 근거 및 남은 작업 사항 diff --git a/.github/prompts/review-verification.prompt.md b/.github/prompts/review-verification.prompt.md new file mode 100644 index 0000000..e74d2be --- /dev/null +++ b/.github/prompts/review-verification.prompt.md @@ -0,0 +1,114 @@ +--- +name: "review-verification" +description: "Review and validate SDLC Verification document for consistency, completeness, and readiness for approval" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/5_verification.md" +agent: "agent" +--- +SDLC Verification 문서를 체계적으로 검토하고, 승인 가능한 상태인지 판단한다. + +목표: +- `5_verification.md` 파일의 일관성 확인 (검증 항목/성공 기준/결과 간 중복 및 충돌) +- 기술적 오류, 잘못된 표현, 명확하지 않은 문구 식별 +- AI agent에게 할당된 플레이스홀더(`{{...}}`) 중 판단/결정 가능한 항목 처리 +- 플레이스홀더 중 사용자 결정이 정말 필요한 항목만 남겼는지 확인 +- 최종 승인 가능 상태 판단 + +--- + +## 검토 절차 + +### 1. 입력 해석 + +- 사용자가 제공한 문서 경로 또는 CYCLE_ID에서 `5_verification.md` 파일 위치를 확정한다. +- 파일이 없으면 입력값을 다시 확인하도록 사용자에게 피드백하고 중단한다. +- `4_implementation.md`와 `1_discovery.md`도 함께 읽어 인계 내용 및 성공 기준 정합성 확인에 사용한다. + +### 2. 인계 정합성 검토 + +- 구현 완료 태스크 목록이 Implementation `# 1`/`# 2`와 내용/수량이 일치하는가 +- 검증 항목(VC-N)이 Discovery `# 7` 성공 기준(S-N) 및 FR과 연결되어 있는가 (`# 2` 성공 기준 연결 섹션 확인) +- 이월된 오픈 질문이 Implementation `# 4`의 `Deferred` 항목과 대응하는가 + +### 3. 일관성 검토 (모든 섹션 대상) + +- **VC 번호 연속성**: `# 2` 검증 항목과 `# 3` 검증 결과의 VC-N 번호가 누락 없이 연속이고 일치하는가 +- **성공 기준 측정 가능성**: `# 2` 각 VC 항목의 성공 기준이 구체적이고 측정 가능한가 ("정상 동작"처럼 모호한 표현 금지) +- **검증 결과 정합성**: `# 3` 통과/실패 집계가 실제 결과 테이블과 일치하는가 +- **결함 연결성**: `# 4` BUG 항목이 검증 항목(VC-N)과 연결되는지 확인 +- **숫자 연속성**: R-N, OQ-N, BUG-N 번호가 누락 없이 연속인지 확인 + +### 4. 표현 검토 (모든 텍스트) + +- **문법**: 문장 구조, 주술 호응, 시제 일관성 +- **명확성**: "정상적으로", "충분히", "대략" 같은 모호한 표현 식별 +- **작성 수준**: 기술 문서 기준의 형식적 톤 유지. 비공식 표현 제거 +- **오타**: 한글 띄어쓰기, 숫자 오류, 테이블 형식 검증 + +### 5. 플레이스홀더 처리 + +모든 `{{...}}` 플레이스홀더를 나열하고 각 항목의 의도를 파악한다. + +AI agent가 채울 수 있는 항목: +- `{{..._DECISION:...}}` 형태 — 문서 내 다른 섹션이나 Discovery/Implementation 내용으로 추론 가능한지 확인 +- 검증 방법(`VER_METHOD_N`), 결함 심각도(`BUG_SEVERITY_N`) 등 구조적으로 추론 가능한 항목 + +사용자 결정이 필요한 항목 (플레이스홀더 유지): +- 검증 담당자(`VER_OWNER_N`) +- 결함 재작업 내용(`BUG_FIX_N`): 실제 구현 변경 필요 +- Freeze 확정 담당자(`CONFIRMED_BY`) + +각 항목에 대해 아래 중 하나를 판단한다: +- **채울 수 있음**: 문서 내 맥락, Discovery/Implementation 내용으로 합리적 추론 가능 → 실제 내용으로 치환 +- **판단 불가능**: 사용자/승인자 결정, 실제 검증 수행 필요 → 플레이스홀더 유지하되 명확성 강화 + +처리 결과를 별도 목록으로 보고한다. + +### 6. 섹션별 최소 검수 기준 + +| 섹션 | 최소 기준 | +|------|---------| +| `# 0 문서 상태` | 메타데이터 완성도 확인 (CREATED_AT_KST, IMP_PATH 채워졌는가) | +| `# 1 Implementation 인계 요약` | 태스크 최소 1개 이상, Implementation 태스크와 1:1 대응 여부 | +| `# 2 검증 계획` | VC 최소 2개 이상, 각 VC에 검증 방법과 측정 가능한 성공 기준이 있는가 | +| `# 2 성공 기준 연결` | Discovery S-N이 하나 이상의 VC-N과 연결되었는가 | +| `# 3 검증 결과` | VC-N과 결과 테이블의 행 수가 일치하는가, 집계 숫자가 맞는가 | +| `# 4 결함` | BUG `Open` 상태가 있으면 재작업 내용이 명시되었는가 | +| `# 5 리스크/오픈 질문` | OQ `Open` 상태가 있으면 종료 조건이 명시되었는가 | +| `# 6 확인 체크` | 체크 항목이 구체적이고 측정 가능한가 | +| `# 8 사용자 결정 필요` | 플레이스홀더가 실제 `{{...}}` 형식인가 (단순 문장 아닌가) | +| `# 9 Freeze` | Handoff Decision과 Rationale이 채워졌는가 | + +### 7. 최종 승인 판단 + +- **승인 가능 (Ready for Release)**: + - 모든 VC 항목이 "통과" 상태인가 + - BUG `Open` 상태 항목이 없는가 (Deferred는 근거와 함께 허용) + - Discovery 성공 기준(S-N)이 모두 VC와 연결되어 검증되었는가 + - `# 5` 오픈 질문에 `Open` 상태 항목이 없거나 모두 `Deferred` 처리 완료인가 + - 남은 플레이스홀더는 모두 정당한가 (사용자/승인자 결정이 정말 필요) + - Freeze 플래그가 준비되었는가 (`READY_FOR_RELEASE: true`로 변경 가능한가) +- **조건부 (Pending Minor Changes)**: + - 일부 VC 항목이 아직 "미완료"이나 곧 완료 예정 + - BUG 항목 심각도가 낮고 재작업 계획이 명확한 경우 +- **보류 (Hold)**: + - VC 항목에 "실패" 또는 "블로킹" 상태 존재, BUG `Open` 잔여, S-N 연결 누락 등 근본적 재검토 필요 + +--- + +## 응답 형식 + +- **검토 결과 요약** + - Implementation 인계 정합성 오류 (있으면 나열) + - 발견된 일관성 오류 (있으면 나열) + - 표현/문법 오류 (있으면 나열) + - 섹션별 완성도 (예: `# 2` VC-3 성공 기준 모호) + +- **플레이스홀더 처리 결과** + - 채워진 항목 (예: `{{VER_METHOD_2}}` → `자동` 로 치환) + - 유지된 항목 (예: `{{VER_OWNER_1:TBD}}` → 검증 담당자 지정 필요로 유지) + +- **수정 사항 목록** (적용된 변경) + +- **최종 판단** + - 승인 가능 / 조건부 / 보류 + - 근거 및 남은 작업 사항 diff --git a/.github/prompts/run-implementation.prompt.md b/.github/prompts/run-implementation.prompt.md new file mode 100644 index 0000000..4c0511b --- /dev/null +++ b/.github/prompts/run-implementation.prompt.md @@ -0,0 +1,99 @@ +--- +name: "run-implementation" +description: "Execute implementation tasks from 4_implementation.md and record results" +argument-hint: "예: sdlc-001 또는 docs/sdlc/sdlc-001_20260417_stage-pilot/4_implementation.md" +agent: "agent" +--- +`4_implementation.md`에 정의된 태스크를 순서대로 실제 구현하고, 완료 후 문서의 확인체크(`#5`)와 파일처리결과(`#6`)를 자동으로 채운다. + +목표: +- `#2 구현 계획`에 기술된 순서대로 태스크를 실행한다. +- 각 태스크 완료 후 DoD를 자체 확인하고, 미충족 시 즉시 보고한다. +- 모든 태스크 완료 후 `#3 변경 파일 목록`을 실제 결과로 갱신하고, `#5`와 `#6`을 채운다. +- 문서 상태는 `review`로 변경한다. + +--- + +## 실행 절차 + +### 1. 입력 해석 + +- CYCLE_ID(예: `sdlc-001`)가 주어지면 `docs/sdlc/` 아래에서 해당 패턴으로 시작하는 폴더를 찾아 `4_implementation.md` 경로를 확정한다. +- 파일 경로가 직접 주어지면 그대로 사용한다. +- 파일이 없으면 사용자에게 경로를 재확인하도록 요청하고 중단한다. + +### 2. 사전 게이트 확인 + +아래 조건을 모두 충족해야 구현을 시작한다. 미충족 시 이유를 보고하고 중단한다. + +| 항목 | 기준 | +|------|------| +| 문서 상태 | `draft` 또는 `review`이어야 한다. `confirmed`이면 이미 완료된 구현임을 알린다. | +| `#2` 구현 계획 존재 | 구현 순서와 T-N 섹션이 모두 채워져 있어야 한다. 플레이스홀더가 남아 있으면 `draft-implementation`을 먼저 완성하도록 안내한다. | +| `#3` 변경 파일 목록 존재 | 최소 1개 이상의 파일 항목이 있어야 한다. | +| Design 인계 조건 | 참조 `3_design.md`가 `confirmed` 상태인지 확인한다. 아니면 경고만 출력하고 계속 진행한다. | + +### 3. 구현 실행 + +`#2 구현 계획`의 `구현 순서` 목록을 기준으로 태스크를 순서대로 실행한다. + +#### 태스크별 실행 규칙 + +각 T-N 태스크에 대해 아래 순서로 진행한다. + +1. **계획 읽기**: 해당 T-N 섹션의 `구현 방법`, `변경 대상`, `완료 조건`, `주의사항`을 읽는다. +2. **현황 파악**: 변경 대상 파일이 이미 존재하는지 확인하고, 존재하면 관련 코드를 읽어 맥락을 파악한다. +3. **구현**: 파일 생성, 수정, 삭제를 수행한다. 기존 코드의 스타일과 패턴을 따른다. +4. **DoD 자체 확인**: `완료 조건`에 기술된 각 항목을 하나씩 점검한다. + - 충족: 다음 태스크로 진행한다. + - 미충족: 보고하고 즉시 재작업한다. 재작업 후에도 미충족이면 태스크를 블로킹으로 표시하고 사용자에게 결정을 요청한다. + +#### 실행 중 주의사항 + +- 각 태스크의 `주의사항`을 반드시 읽고 구현에 반영한다. +- `#4 리스크`에 기록된 리스크 완화 방안을 구현 중에 적용한다. +- `#1 이월된 오픈 질문` 항목이 있으면 구현 중 해당 결정을 내려 기록한다. +- 구현 중 새로 발견된 문제가 `#3 변경 파일 목록`에 없는 파일을 변경해야 하는 경우, 변경 전 그 이유를 간단히 기록한다. + +### 4. 완료 후 문서 갱신 + +모든 태스크 완료 후 아래 항목을 문서에 반영한다. 이 목록 외 내용은 수정하지 않는다. + +#### `#3 변경 파일 목록` 갱신 + +실제로 생성/수정/삭제된 파일을 기준으로 목록을 갱신한다. +- 계획에 있었으나 실제로 변경되지 않은 파일은 `비고`에 `미변경 - <이유>`를 기록하고 유지한다. +- 계획에 없었으나 실제로 변경된 파일은 새 행으로 추가하고 `비고`에 `계획 외 변경`을 기록한다. + +#### `#5 Verification으로 넘기기 전 확인 체크` 갱신 + +각 체크 항목을 실제 결과에 따라 `[x]`(완료) 또는 `[ ]`(미완료)로 업데이트한다. 블로킹 태스크가 있으면 해당 항목을 `[ ]`로 남기고 비고를 추가한다. + +#### `#6 파일 처리 결과` 갱신 + +- `처리 결과`: `갱신` +- `생성 경로`: 경로 확인 후 기입 +- `마지막 갱신 시각(KST)`: 현재 시각으로 기입 + +#### `#0 문서 상태` 변경 + +- `상태`: `review`로 변경 +- `마지막 갱신 시각(KST)`: 현재 시각으로 변경 + +### 5. 결과 보고 + +구현이 끝나면 아래 항목을 포함한 보고서를 출력한다. + +- **실행 완료된 태스크 목록** (T-N, 완료 조건 충족 여부) +- **블로킹 태스크** (있는 경우): 원인 및 필요한 사용자 결정 사항 +- **계획 외 변경 파일** (있는 경우): 파일명과 이유 +- **다음 단계 안내**: 블로킹 없음 → `/review-implementation sdlc-001` 실행 권장 + +--- + +## 중요 규칙 + +- `4_implementation.md`의 `#2`와 `#3`을 구현의 유일한 기준으로 삼는다. 범위 밖 변경은 사용자 확인 없이 수행하지 않는다. +- 기존 코드를 삭제하거나 되돌리기 어려운 파괴적 변경은 수행 전 사용자에게 확인한다. +- DoD가 측정 불가능한 서술로 되어 있으면 가능한 근접한 방식으로 자체 평가하고, 평가 방식을 보고서에 명시한다. +- 구현 실행은 `draft` 또는 `review` 상태에서만 허용한다. diff --git a/.github/prompts/run-sdlc.prompt.md b/.github/prompts/run-sdlc.prompt.md new file mode 100644 index 0000000..3e58855 --- /dev/null +++ b/.github/prompts/run-sdlc.prompt.md @@ -0,0 +1,257 @@ +--- +name: "run-sdlc" +description: "Run the full SDLC pipeline for a given cycle, automatically resuming from the first incomplete stage" +argument-hint: "예: sdlc-001 Justin" +agent: "agent" +--- +지정된 SDLC 주기의 전체 파이프라인을 순서대로 실행한다. + +인자: +- `sdlc-xyz`: SDLC 주기 ID (예: `sdlc-001`) +- `my-name`: 각 단계 승인자 이름 (예: `Justin`) + +목표: +- 지정된 SDLC 주기의 현재 진행 상태를 파악하고, 미완료 단계부터 순서대로 실행한다. +- 각 단계가 완료(`confirmed`)되면 다음 단계로 자동 진행한다. +- 사용자 판단이 필요한 경우 즉시 중단하고, 어떤 판단이 필요한지 명확하게 안내한다. + +--- + +## 실행 절차 + +### 1. 입력 해석 + +- 첫 번째 인자를 `CYCLE_ID`로 사용한다 (예: `sdlc-001`). +- 두 번째 인자를 `APPROVER_NAME`으로 사용한다 (예: `Justin`). +- `docs/sdlc/` 아래에서 `CYCLE_ID`로 시작하는 폴더를 찾는다. + - 폴더가 없으면 오류를 보고하고 중단한다. + - 폴더가 여러 개이면 가장 최근(날짜 순)을 사용하고 선택한 폴더 경로를 보고한다. +- 이후 단계에서 `SDLC_DIR = docs/sdlc/<일치하는 폴더>`로 참조한다. + +### 2. 현재 상태 파악 + +`SDLC_DIR/index.md`의 단계별 상태 테이블을 읽어 각 단계의 현재 상태를 확인한다. +파일이 없으면 각 문서 파일을 직접 읽어 `# 0. 문서 상태`의 `- 상태:` 줄에서 상태를 확인한다. + +확인 대상 단계와 해당 문서 파일: + +| 단계 | 문서 파일 | confirmed 조건 | +|------|-----------|----------------| +| Discovery | `1_discovery.md` | 상태 = `confirmed` 또는 `Ready for Planning: true` | +| Planning | `2_planning.md` | 상태 = `confirmed` 또는 `Ready for Design: true` | +| Design | `3_design.md` | 상태 = `confirmed` 또는 `Ready for Implementation: true` | +| Implementation | `4_implementation.md` | 상태 = `confirmed` 또는 `Ready for Verification: true` | +| Verification | `5_verification.md` | 상태 = `confirmed` 또는 `Ready for Release: true` | +| Release | `6_release.md` | 상태 = `confirmed` 또는 `Ready for Operations: true` | +| Operations | `7_operation.md` | 상태 = `confirmed` 또는 `SDLC 주기 완료: true` | + +### 3. 실행 시작 지점 결정 + +단계를 아래 순서로 순회하며 `confirmed`가 아닌 첫 번째 단계를 찾는다. + +1. Discovery +2. Planning +3. Design +4. Implementation +5. Verification +6. Release +7. Operations + +모든 단계가 `confirmed`이면 SDLC 주기가 완료되었음을 보고하고 종료한다. + +### 4. 단계별 실행 + +시작 지점부터 각 단계의 서브스텝을 아래 순서로 실행한다. +각 서브스텝 실행 후 결과를 확인하고, 블로킹 조건이 발생하면 즉시 중단한다. + +#### 4-1. Discovery 단계 (`1_discovery.md`) + +`1_discovery.md`의 상태에 따라 아래 서브스텝을 실행한다. + +| 현재 상태 | 실행할 서브스텝 | +|-----------|----------------| +| 파일 없음 | 오류 보고 후 중단 — Discovery 문서는 `/new-sdlc`로 먼저 생성해야 한다 | +| `draft` 또는 `review` | ① `review-discovery` → ② `confirm-discovery` | +| `confirmed` | 스킵 | + +- `review-discovery` 실행 시: 검토 결과가 **보류(Hold)**이면 → [블로킹 처리](#블로킹-처리) +- `confirm-discovery` 실행 시: `APPROVER_NAME`을 `Confirmed By` 값으로 사용한다. + 승인 불가 보고를 받으면 → [블로킹 처리](#블로킹-처리) + +#### 4-2. Planning 단계 (`2_planning.md`) + +`2_planning.md`의 상태에 따라 아래 서브스텝을 실행한다. + +| 현재 상태 | 실행할 서브스텝 | +|-----------|----------------| +| 파일 없음 | ① `draft-planning` → ② `review-planning` → ③ `confirm-planning` | +| `draft` | ① `review-planning` → ② `confirm-planning` | +| `review` | ① `confirm-planning` | +| `confirmed` | 스킵 | + +- `draft-planning` 실행 시: Discovery가 `confirmed` 상태인지 확인한다. 아니면 중단. +- `review-planning` 실행 시: 검토 결과가 **보류(Hold)**이면 → [블로킹 처리](#블로킹-처리) +- `confirm-planning` 실행 시: `APPROVER_NAME`을 `Confirmed By` 값으로 사용한다. + 승인 불가 보고를 받으면 → [블로킹 처리](#블로킹-처리) + +#### 4-3. Design 단계 (`3_design.md`) + +`3_design.md`의 상태에 따라 아래 서브스텝을 실행한다. + +| 현재 상태 | 실행할 서브스텝 | +|-----------|----------------| +| 파일 없음 | ① `draft-design` → ② `review-design` → ③ `confirm-design` | +| `draft` | ① `review-design` → ② `confirm-design` | +| `review` | ① `confirm-design` | +| `confirmed` | 스킵 | + +- `draft-design` 실행 시: Planning이 `confirmed` 상태인지 확인한다. 아니면 중단. +- `review-design` 실행 시: 검토 결과가 **보류(Hold)**이면 → [블로킹 처리](#블로킹-처리) +- `confirm-design` 실행 시: `APPROVER_NAME`을 `Confirmed By` 값으로 사용한다. + 승인 불가 보고를 받으면 → [블로킹 처리](#블로킹-처리) + +#### 4-4. Implementation 단계 (`4_implementation.md`) + +`4_implementation.md`의 상태에 따라 아래 서브스텝을 실행한다. + +| 현재 상태 | 실행할 서브스텝 | +|-----------|----------------| +| 파일 없음 | ① `draft-implementation` → ② `run-implementation` → ③ `review-implementation` → ④ `confirm-implementation` | +| `draft` | ① `run-implementation` → ② `review-implementation` → ③ `confirm-implementation` | +| `review` | ① `review-implementation` → ② `confirm-implementation` | +| `confirmed` | 스킵 | + +- `draft-implementation` 실행 시: Design이 `confirmed` 상태인지 확인한다. 아니면 중단. +- `run-implementation` 실행 시: 블로킹 태스크가 발생하면 → [블로킹 처리](#블로킹-처리) +- `review-implementation` 실행 시: 검토 결과가 **보류(Hold)**이면 → [블로킹 처리](#블로킹-처리) +- `confirm-implementation` 실행 시: `APPROVER_NAME`을 `Confirmed By` 값으로 사용한다. + 승인 불가 보고를 받으면 → [블로킹 처리](#블로킹-처리) + +#### 4-5. Verification 단계 (`5_verification.md`) + +`5_verification.md`의 상태에 따라 아래 서브스텝을 실행한다. + +| 현재 상태 | 실행할 서브스텝 | +|-----------|----------------| +| 파일 없음 | ① `draft-verification` → ② `review-verification` → ③ `confirm-verification` | +| `draft` | ① `review-verification` → ② `confirm-verification` | +| `review` | ① `confirm-verification` | +| `confirmed` | 스킵 | + +- `draft-verification` 실행 시: Implementation이 `confirmed` 상태인지 확인한다. 아니면 중단. +- `review-verification` 실행 시: 검토 결과가 **보류(Hold)**이면 → [블로킹 처리](#블로킹-처리) +- `confirm-verification` 실행 시: `APPROVER_NAME`을 `Confirmed By` 값으로 사용한다. + 승인 불가 보고를 받으면 → [블로킹 처리](#블로킹-처리) + +#### 4-6. Release 단계 (`6_release.md`) + +`6_release.md`의 상태에 따라 아래 서브스텝을 실행한다. + +| 현재 상태 | 실행할 서브스텝 | +|-----------|----------------| +| 파일 없음 | ① `draft-release` → ② `review-release` → ③ `confirm-release` | +| `draft` | ① `review-release` → ② `confirm-release` | +| `review` | ① `confirm-release` | +| `confirmed` | 스킵 | + +- `draft-release` 실행 시: Verification이 `confirmed` 상태인지 확인한다. 아니면 중단. +- `review-release` 실행 시: 검토 결과가 **보류(Hold)**이면 → [블로킹 처리](#블로킹-처리) +- `confirm-release` 실행 시: `APPROVER_NAME`을 `Confirmed By` 값으로 사용한다. + 승인 불가 보고를 받으면 → [블로킹 처리](#블로킹-처리) + +#### 4-7. Operations 단계 (`7_operation.md`) + +`7_operation.md`의 상태에 따라 아래 서브스텝을 실행한다. + +| 현재 상태 | 실행할 서브스텝 | +|-----------|----------------| +| 파일 없음 | ① `draft-operation` → ② `review-operation` → ③ `confirm-operation` | +| `draft` | ① `review-operation` → ② `confirm-operation` | +| `review` | ① `confirm-operation` | +| `confirmed` | 스킵 | + +- `draft-operation` 실행 시: Release가 `confirmed` 상태인지 확인한다. 아니면 중단. +- `review-operation` 실행 시: 검토 결과가 **보류(Hold)**이면 → [블로킹 처리](#블로킹-처리) +- `confirm-operation` 실행 시: `APPROVER_NAME`을 `Confirmed By` 값으로 사용한다. + 승인 불가 보고를 받으면 → [블로킹 처리](#블로킹-처리) + +--- + +### 블로킹 처리 + +아래 상황 중 하나가 발생하면 즉시 실행을 중단하고 사용자에게 아래 정보를 제공한다. + +1. **review-* 결과가 보류(Hold)인 경우** + - 어느 단계의 review에서 보류가 발생했는지 + - 보류 이유 (review 결과에서 제시된 미충족 항목) + - 해결을 위해 필요한 사용자 조치 + +2. **confirm-* 결과가 승인 불가인 경우** + - 어느 단계의 confirm이 실패했는지 + - C 유형 미해소 플레이스홀더 목록 (해당 시) + - 미해소 오픈 질문 목록 (해당 시) + - 해결 방법 안내 (예: 문서에서 해당 항목을 직접 채운 후 `/run-sdlc ` 재실행) + +3. **run-implementation 실행 중 블로킹 태스크가 발생한 경우** + - 블로킹된 태스크 번호(T-N)와 원인 + - 사용자가 결정해야 할 사항 + - 해결 후 `/run-sdlc ` 재실행 안내 + +4. **Verification 단계가 미완료인 경우** + - Verification 문서의 현재 상태 + - 필요한 조치 안내 + +--- + +### 5. 완료 보고 + +전체 파이프라인이 완료되면(모든 단계 `confirmed`) 아래 내용을 포함한 완료 보고를 출력한다. + +- **완료된 주기**: `CYCLE_ID` +- **각 단계별 최종 상태** (표 형식) +- **이번 실행에서 처리된 단계 목록** +- **다음 Discovery 환류 항목**: Operations `# 6` 섹션의 내용 요약 (있는 경우) +- **다음 SDLC 주기 시작 안내**: `/new-sdlc <다음 이슈 내용>` 명령 안내 + +--- + +## 서브스텝 실행 방식 + +각 서브스텝은 해당 프롬프트 파일의 전체 절차를 그대로 실행한다. + +| 서브스텝 | 참조 프롬프트 | +|----------|--------------| +| `review-discovery` | `.github/prompts/review-discovery.prompt.md` | +| `confirm-discovery` | `.github/prompts/confirm-discovery.prompt.md` | +| `draft-planning` | `.github/prompts/draft-planning.prompt.md` | +| `review-planning` | `.github/prompts/review-planning.prompt.md` | +| `confirm-planning` | `.github/prompts/confirm-planning.prompt.md` | +| `draft-design` | `.github/prompts/draft-design.prompt.md` | +| `review-design` | `.github/prompts/review-design.prompt.md` | +| `confirm-design` | `.github/prompts/confirm-design.prompt.md` | +| `draft-implementation` | `.github/prompts/draft-implementation.prompt.md` | +| `run-implementation` | `.github/prompts/run-implementation.prompt.md` | +| `review-implementation` | `.github/prompts/review-implementation.prompt.md` | +| `confirm-implementation` | `.github/prompts/confirm-implementation.prompt.md` | +| `draft-verification` | `.github/prompts/draft-verification.prompt.md` | +| `review-verification` | `.github/prompts/review-verification.prompt.md` | +| `confirm-verification` | `.github/prompts/confirm-verification.prompt.md` | +| `draft-release` | `.github/prompts/draft-release.prompt.md` | +| `review-release` | `.github/prompts/review-release.prompt.md` | +| `confirm-release` | `.github/prompts/confirm-release.prompt.md` | +| `draft-operation` | `.github/prompts/draft-operation.prompt.md` | +| `review-operation` | `.github/prompts/review-operation.prompt.md` | +| `confirm-operation` | `.github/prompts/confirm-operation.prompt.md` | + +`confirm-*` 서브스텝 실행 시 `APPROVER_NAME`을 해당 문서의 Freeze 섹션 `Confirmed By:` 값으로 주입한다. +해당 줄이 문서에 없거나 플레이스홀더로 되어 있으면, 실행 전 `APPROVER_NAME`으로 교체한다. + +--- + +## 중요 규칙 + +- 각 단계는 정해진 순서대로만 실행하며, 이전 단계가 `confirmed`가 아닌 상태에서 다음 단계를 시작하지 않는다. +- `run-implementation`은 실제 코드를 변경하는 단계이므로, 블로킹 조건이 없어도 실행 전 `4_implementation.md`의 구현 계획(`# 2 구현 계획`)과 변경 파일 목록(`# 3 변경 파일 목록`)을 요약해 사용자에게 안내한 뒤 진행한다. +- 사용자 판단 없이 임의로 결정할 수 없는 항목(담당자 지정, 외부 환경 정보, 정책 결정 등)은 반드시 중단하고 사용자에게 문의한다. +- 블로킹 처리 후 사용자가 문서를 직접 수정하면 `/run-sdlc `을 재실행해 이어서 진행할 수 있다. +- 현재 시각은 시스템 또는 컨텍스트에서 제공된 날짜/시간을 사용한다. diff --git a/.github/templates/sdlc/1_discovery.md b/.github/templates/sdlc/1_discovery.md new file mode 100644 index 0000000..b701b8b --- /dev/null +++ b/.github/templates/sdlc/1_discovery.md @@ -0,0 +1,219 @@ +# 0. 문서 상태 +이 문서의 현재 상태와 식별 정보를 기록한다. 문서 추적과 승인 흐름에 필요한 최소 메타데이터를 적는다. + +- 상태: {{DOC_STATUS:draft|review|confirmed}} +- 문서 ID: {{CYCLE_ID:sdlc-<3자리>__}} +- 이슈명: {{ISSUE_NAME:짧은 한글 또는 영문 이슈명}} +- 작성 시각(KST): {{CREATED_AT_KST:TBD}} +- 마지막 갱신 시각(KST): {{UPDATED_AT_KST:TBD}} + +# 1. 계획 상태 요약 +현재 Discovery가 어떤 배경에서 작성되고 있는지, 연계 문서가 있는지, 지금 시점의 해석이 무엇인지 짧게 요약한다. + +- 연계 문서 현황: + - Planning 점수 파일: {{PLANNING_SCORE_FILE:미생성 또는 경로}} + - 관련 TODO/메모: {{TODO_FILE:경로 또는 없음}} +- 해석: + - {{SUMMARY_LINE_1:현재 검토/작성 배경 요약}} + - {{SUMMARY_LINE_2:이번 Discovery에서 판단해야 할 핵심 요약}} + +# 2. 요구사항 판정 결과 +이번 요청이 기존 요구사항과 비교해 신규인지, 유사한지, 중복인지 판단하고 그 근거를 남긴다. + +- 판정: {{REQUIREMENT_CLASSIFICATION:완전 중복|유사|신규}} +- 근거 + - {{CLASSIFICATION_REASON_1}} + - {{CLASSIFICATION_REASON_2}} + +> **판정이 `완전 중복`인 경우**: 이하 섹션 작성을 중단하고 `# 9. 파일 처리 결과`에 중복 판정 사유와 참조 문서 경로를 기록한 뒤 문서를 닫는다. Planning으로 넘기지 않는다. + +# 3. 문제점의 요약 +문제의 현재 상태, 기대 상태, 관련 이해관계자, 제약사항을 정리한다. Discovery의 핵심 맥락을 가장 먼저 이해할 수 있어야 한다. + +- 현재 상태 + - {{CURRENT_STATE_1}} + - {{CURRENT_STATE_2}} +- 기대 상태 + - {{TARGET_STATE_1}} + - {{TARGET_STATE_2}} +- 이해관계자 + - {{STAKEHOLDER_1:예. 문서 작성자(AI agent)}} + - {{STAKEHOLDER_2:예. 리뷰어/승인자}} + - {{STAKEHOLDER_3:예. 운영 담당자}} +- 제약사항 + - {{CONSTRAINT_1}} + - {{CONSTRAINT_2}} + +## 주요 사용자 시나리오 +사용자 또는 운영자가 실제로 어떤 상황에서 이 변경을 필요로 하는지 대표 시나리오를 적는다. + +- {{USER_SCENARIO_1}} +- {{USER_SCENARIO_2}} +- {{USER_SCENARIO_3}} + +# 4. 이번에 정의할 변경 +이번 Discovery에서 다루는 핵심 변경 항목을 목록으로 적는다. 기능, 구조, 규칙 변경을 함께 포함해도 된다. + +- {{CHANGE_ITEM_1}} +- {{CHANGE_ITEM_2:필요 없으면 삭제}} +- {{CHANGE_ITEM_3:필요 없으면 삭제}} + +## 영향 범위 +변경이 미칠 코드/문서/운영 범위를 명시해 Planning에서 추정 누락을 줄인다. + +- 코드 영향: + - {{CODE_IMPACT_1:예. docs/sdlc/index.md 갱신 로직}} + - {{CODE_IMPACT_2:필요 없으면 삭제}} +- 문서 영향: + - {{DOC_IMPACT_1}} + - {{DOC_IMPACT_2:필요 없으면 삭제}} +- 운영 영향: + - {{OPS_IMPACT_1:예. 배포/운영 절차 변경 없음}} + - {{OPS_IMPACT_2:필요 없으면 삭제}} + +# 5. 요구사항 목록 +실제로 구현과 검증으로 이어질 요구사항을 기능/비기능으로 나누어 정리하고, 범위 경계를 명확히 적는다. + +## 기능 요구사항 +- FR-1: {{FR_1}} +- FR-2: {{FR_2}} +- FR-3: {{FR_3:필요 없으면 삭제}} +- FR-4: {{FR_4:필요 없으면 삭제}} + +## 비기능 요구사항 +성능, 운영성, 일관성, 자동화 안정성 등 기능 외 요구사항을 적는다. + +- NFR-1: {{NFR_1}} +- NFR-2: {{NFR_2}} +- NFR-3: {{NFR_3:필요 없으면 삭제}} + +## 범위 경계 +이번 반복에서 반드시 포함할 범위와 명시적으로 제외할 범위를 구분한다. + +- In Scope + - {{IN_SCOPE_1}} + - {{IN_SCOPE_2}} +- Out of Scope + - {{OUT_OF_SCOPE_1}} + - {{OUT_OF_SCOPE_2}} + +# 6. 리스크/가정 목록 +불확실성과 전제 조건을 분리해서 적는다. 리스크는 영향과 완화 방안을, 가정은 현재 판단의 전제를 기록한다. + +## 리스크 +- R-1 ({{RISK_LEVEL_1:High|Medium|Low}}): {{RISK_1}} + - 완화 방안: {{MITIGATION_1}} +- R-2 ({{RISK_LEVEL_2:High|Medium|Low}}): {{RISK_2}} + - 완화 방안: {{MITIGATION_2}} +- R-3 ({{RISK_LEVEL_3:High|Medium|Low}}): {{RISK_3:필요 없으면 삭제}} + - 완화 방안: {{MITIGATION_3:필요 없으면 삭제}} + +## 가정 +아직 확정되지 않았지만 현재 문서 작성의 기반이 되는 전제를 적는다. + +- A-1: {{ASSUMPTION_1}} +- A-2: {{ASSUMPTION_2}} +- A-3: {{ASSUMPTION_3:필요 없으면 삭제}} + +## 오픈 질문 +답을 아직 모르는 항목을 적는다. 추정으로 덮지 말고 Planning 이전에 확인할 질문으로 남긴다. + +- OQ-1: {{OPEN_QUESTION_1}} + - 상태: {{OPEN_QUESTION_STATUS_1:Open|Answered|Deferred|Dropped}} + - 처리 방안: {{OPEN_QUESTION_ACTION_1:누가 어떤 방식으로 결정/확인할지}} + - 종료 조건: {{OPEN_QUESTION_EXIT_1:언제 이 질문을 Answered/Deferred/Dropped로 처리할지}} +- OQ-2: {{OPEN_QUESTION_2}} + - 상태: {{OPEN_QUESTION_STATUS_2:Open|Answered|Deferred|Dropped}} + - 처리 방안: {{OPEN_QUESTION_ACTION_2:누가 어떤 방식으로 결정/확인할지}} + - 종료 조건: {{OPEN_QUESTION_EXIT_2:언제 이 질문을 Answered/Deferred/Dropped로 처리할지}} +- OQ-3: {{OPEN_QUESTION_3:필요 없으면 삭제}} + - 상태: {{OPEN_QUESTION_STATUS_3:Open|Answered|Deferred|Dropped}} + - 처리 방안: {{OPEN_QUESTION_ACTION_3:누가 어떤 방식으로 결정/확인할지}} + - 종료 조건: {{OPEN_QUESTION_EXIT_3:언제 이 질문을 Answered/Deferred/Dropped로 처리할지}} + +### 오픈 질문 처리 기준 +- `Open`: 아직 답이 없고 다음 단계 진행에 영향이 있는 상태다. 문서에 유지한다. +- `Answered`: 답이 확정된 상태다. 관련 본문/요구사항에 반영한 뒤 오픈 질문 목록에서는 제거하거나 resolved 기록으로 이동한다. +- `Deferred`: 지금 단계에서 결정하지 않고 다음 단계 또는 후속 이슈로 넘기는 상태다. 넘길 대상과 이유를 반드시 적는다. +- `Dropped`: 더 이상 유효하지 않은 질문이다. 삭제 사유를 짧게 남기고 목록에서 제거한다. +- 처리 원칙 1: 질문만 남기지 말고 반드시 `상태`, `처리 방안`, `종료 조건`을 함께 적는다. +- 처리 원칙 2: 답이 나온 질문은 본문 반영 없이 단순 삭제하지 않는다. 반영 위치를 먼저 갱신한다. +- 처리 원칙 3: High 영향 질문은 `Deferred` 처리 후 처리 방안에 Planning 인계 추적 방식을 명시한다. + +# 7. 초기 성공 기준 +이 변경이 성공했다고 판단할 기준을 측정 가능하게 정의한다. 가능하면 데이터 출처까지 연결한다. + +- S-1: {{SUCCESS_METRIC_1}} +- S-2: {{SUCCESS_METRIC_2}} +- S-3: {{SUCCESS_METRIC_3:필요 없으면 삭제}} + +## 측정 방식 및 데이터 출처 +각 성공 기준을 어떻게 측정할지와 어떤 데이터나 문서를 근거로 쓸지 적는다. + +- S-1 측정 방식: {{MEASURE_METHOD_1}} / 데이터 출처: {{MEASURE_SOURCE_1}} +- S-2 측정 방식: {{MEASURE_METHOD_2}} / 데이터 출처: {{MEASURE_SOURCE_2}} +- S-3 측정 방식: {{MEASURE_METHOD_3:필요 없으면 삭제}} / 데이터 출처: {{MEASURE_SOURCE_3:필요 없으면 삭제}} + +# 8. Planning으로 넘기기 전 확인 체크 +Planning 단계로 넘기기 전에 무엇이 확정되어야 하는지 확인한다. 미완료 항목은 후속 결정이 필요함을 뜻한다. + +- [ ] 범위(In Scope/Out of Scope) 확정 + - 기준: {{CHECK_SCOPE_CRITERIA}} +- [ ] 성공 지표의 측정 방식/데이터 출처 확정 + - 기준: {{CHECK_METRICS_CRITERIA}} +- [ ] High 영향 리스크 우선순위 및 해소 책임자 지정 + - 기준: {{CHECK_RISK_OWNER_CRITERIA}} +- [ ] 모든 오픈 질문(OQ) `Open` 상태 없음 확인 + - 기준: OQ 목록에 `Open` 상태 항목이 0개이거나, 잔여 항목 전부 `Deferred` 처리 완료 +- [ ] Freeze 확정 담당자(CONFIRMED_BY) 지정 + - 기준: {{CHECK_CONFIRMEDBY_CRITERIA}} + +# 9. 파일 처리 결과 +이 Discovery 문서 생성/갱신 결과와 참조 문서를 기록한다. 이후 추적과 리뷰 시 근거로 사용한다. + +- 처리 결과: {{FILE_RESULT:생성|갱신|미생성}} +- 생성 경로: {{OUTPUT_PATH}} +- 참조 문서: + - {{REFERENCE_1}} + - {{REFERENCE_2}} + - {{REFERENCE_3:필요 없으면 삭제}} + +# 10. 사용자 결정 필요 항목 요약 +사용자나 승인자가 결정해야 하는 항목만 모아 정리한다. 결정, 확인, 데이터 요청을 구분해서 적는다. + +## DECIDE +- {{DECIDE_ITEM_1}} +- {{DECIDE_ITEM_2:필요 없으면 삭제}} + +## CONFIRM +- {{CONFIRM_ITEM_1}} +- {{CONFIRM_ITEM_2:필요 없으면 삭제}} + +## DATA +- {{DATA_ITEM_1}} +- {{DATA_ITEM_2:필요 없으면 삭제}} + +# 11. Discovery Freeze +Planning 인계 시점의 확정 플래그와 섹션 참조만 기록한다. 내용 재작성 없이 원본 섹션을 링크로 대신한다. + +## 섹션 참조 +- 범위: [# 5. 요구사항 목록 > 범위 경계](#5-요구사항-목록) +- 리스크/오픈 질문: [# 6. 리스크/가정 목록](#6-리스크가정-목록) +- 성공 기준: [# 7. 초기 성공 기준](#7-초기-성공-기준) +- 인계 전 확인: [# 8. Planning으로 넘기기 전 확인 체크](#8-planning으로-넘기기-전-확인-체크) +- 사용자 결정 필요: [# 10. 사용자 결정 필요 항목 요약](#10-사용자-결정-필요-항목-요약) + +## Freeze 플래그 +- Handoff Decision: {{FREEZE_HANDOFF_DECISION:Planning 진행 가능|보류}} +- Handoff Rationale: {{FREEZE_HANDOFF_RATIONALE:진행 가능 또는 보류 판단 근거 1-2줄}} +- Ready for Planning: {{READY_FOR_PLANNING:false}} +- Confirmed By: {{CONFIRMED_BY:TBD}} +- Confirmed At (KST): {{CONFIRMED_AT_KST:TBD}} + +# 12. 작성 가이드 +템플릿 사용 시의 기본 규칙을 적는다. 실제 문서를 만들 때는 이 가이드를 기준으로 플레이스홀더를 치환한다. + +- 이 파일은 템플릿이다. 실제 문서 작성 시 `{{...}}` 플레이스홀더를 구체 값으로 교체한다. +- 필요 없는 항목은 삭제하고, 부족한 항목은 같은 형식으로 추가한다. +- Open Questions는 가정으로 대체하지 말고 그대로 유지한다. +- Discovery Freeze는 문서 하단에 반드시 유지한다. diff --git a/.github/templates/sdlc/2_planning.md b/.github/templates/sdlc/2_planning.md new file mode 100644 index 0000000..cd346f2 --- /dev/null +++ b/.github/templates/sdlc/2_planning.md @@ -0,0 +1,205 @@ +# 0. 문서 상태 +이 문서의 현재 상태와 식별 정보를 기록한다. 문서 추적과 승인 흐름에 필요한 최소 메타데이터를 적는다. + +- 상태: {{DOC_STATUS:draft|review|confirmed}} +- 문서 ID: {{CYCLE_ID:sdlc-<3자리>__}} +- 이슈명: {{ISSUE_NAME:짧은 한글 또는 영문 이슈명}} +- 참조 Discovery: {{DISCOVERY_PATH:docs/sdlc//1_discovery.md}} +- 작성 시각(KST): {{CREATED_AT_KST:TBD}} +- 마지막 갱신 시각(KST): {{UPDATED_AT_KST:TBD}} + +# 1. Discovery 인계 요약 +Discovery에서 확정된 핵심 내용을 요약한다. 원본은 1_discovery.md를 참조하며, 이 섹션은 Planning 작업의 입력 기준선이 된다. + +## 이슈 목적 +- {{PLANNING_ISSUE_PURPOSE:Discovery 이슈명과 핵심 목적 1-2줄}} + +## 확정 범위 +- In Scope + - {{PLANNING_IN_SCOPE_1}} + - {{PLANNING_IN_SCOPE_2}} +- Out of Scope + - {{PLANNING_OUT_OF_SCOPE_1}} + - {{PLANNING_OUT_OF_SCOPE_2}} + +## 기능 요구사항 (FR) 요약 +- FR-1: {{PLANNING_FR_1}} +- FR-2: {{PLANNING_FR_2}} +- FR-3: {{PLANNING_FR_3:필요 없으면 삭제}} +- FR-4: {{PLANNING_FR_4:필요 없으면 삭제}} + +## 비기능 요구사항 (NFR) 요약 +- NFR-1: {{PLANNING_NFR_1}} +- NFR-2: {{PLANNING_NFR_2:필요 없으면 삭제}} + +## 이월된 오픈 질문 / 리스크 +Discovery에서 `Deferred` 처리되어 Planning 단계에서 해소해야 하는 항목을 기록한다. + +- {{DEFERRED_ITEM_1:없으면 "없음"}} +- {{DEFERRED_ITEM_2:필요 없으면 삭제}} + +# 2. 작업 분해 (Task Breakdown) +FR/NFR 각각을 실행 가능한 단위 태스크로 분해한다. 각 태스크는 하나의 완료 조건을 가져야 한다. + +| ID | 태스크 제목 | 유형 | 참조 요구사항 | 의존 태스크 | 담당자 | +|-----|-----------|------|--------------|------------|--------| +| T-1 | {{TASK_TITLE_1}} | {{TASK_TYPE_1:개발\|문서\|검토\|설계\|운영}} | {{TASK_REF_1:FR-1}} | - | {{TASK_OWNER_1:TBD}} | +| T-2 | {{TASK_TITLE_2}} | {{TASK_TYPE_2:개발\|문서\|검토\|설계\|운영}} | {{TASK_REF_2:FR-2}} | {{TASK_DEP_2:-}} | {{TASK_OWNER_2:TBD}} | +| T-3 | {{TASK_TITLE_3:필요 없으면 삭제}} | {{TASK_TYPE_3:개발\|문서\|검토\|설계\|운영}} | {{TASK_REF_3}} | {{TASK_DEP_3:-}} | {{TASK_OWNER_3:TBD}} | +| T-4 | {{TASK_TITLE_4:필요 없으면 삭제}} | {{TASK_TYPE_4:개발\|문서\|검토\|설계\|운영}} | {{TASK_REF_4}} | {{TASK_DEP_4:-}} | {{TASK_OWNER_4:TBD}} | + +## 태스크 완료 조건 (DoD) +각 태스크의 완료 기준을 명시한다. + +- T-1: {{TASK_DOD_1}} +- T-2: {{TASK_DOD_2}} +- T-3: {{TASK_DOD_3:필요 없으면 삭제}} +- T-4: {{TASK_DOD_4:필요 없으면 삭제}} + +# 3. 공수 추정 +각 태스크의 예상 공수를 적는다. 단위는 팀 기준에 맞게 선택한다(SP 또는 시간). + +| ID | 태스크 제목 | 추정 공수 | 추정 단위 | 비고 | +|-----|-----------|---------|---------|------| +| T-1 | {{TASK_TITLE_1}} | {{EFFORT_1}} | {{EFFORT_UNIT:SP\|시간\|일}} | {{EFFORT_NOTE_1:필요 없으면 삭제}} | +| T-2 | {{TASK_TITLE_2}} | {{EFFORT_2}} | {{EFFORT_UNIT}} | {{EFFORT_NOTE_2:필요 없으면 삭제}} | +| T-3 | {{TASK_TITLE_3:필요 없으면 삭제}} | {{EFFORT_3}} | {{EFFORT_UNIT}} | {{EFFORT_NOTE_3:필요 없으면 삭제}} | +| T-4 | {{TASK_TITLE_4:필요 없으면 삭제}} | {{EFFORT_4}} | {{EFFORT_UNIT}} | {{EFFORT_NOTE_4:필요 없으면 삭제}} | + +- 총 추정 공수: {{TOTAL_EFFORT}} +- 추정 신뢰도: {{EFFORT_CONFIDENCE:High|Medium|Low}} +- 추정 근거: {{EFFORT_BASIS:추정에 사용한 방법 또는 유사 사례}} + +# 4. 일정 계획 +이터레이션 또는 스프린트 단위로 태스크 배분 계획을 적는다. + +## 마일스톤 +| 마일스톤 | 목표 날짜 | 포함 태스크 | 완료 조건 | +|---------|---------|-----------|---------| +| M-1: {{MILESTONE_1_NAME}} | {{MILESTONE_1_DATE:TBD}} | {{MILESTONE_1_TASKS:T-1, T-2}} | {{MILESTONE_1_DONE}} | +| M-2: {{MILESTONE_2_NAME:필요 없으면 삭제}} | {{MILESTONE_2_DATE:TBD}} | {{MILESTONE_2_TASKS}} | {{MILESTONE_2_DONE}} | + +## 이터레이션 계획 +- 이터레이션 단위: {{ITERATION_UNIT:스프린트|주|없음(단일 배포)}} +- 이터레이션 1 ({{ITERATION_1_PERIOD:날짜 범위 또는 TBD}}): {{ITERATION_1_TASKS:T-1, T-2}} +- 이터레이션 2 ({{ITERATION_2_PERIOD:날짜 범위 또는 TBD}}): {{ITERATION_2_TASKS:T-3, T-4}} + +# 5. 의존성 및 제약 +태스크 간 의존 관계와 외부 의존성을 기록한다. + +## 태스크 간 의존성 +- {{TASK_DEPENDENCY_1:예. T-2는 T-1 완료 후 시작 가능}} +- {{TASK_DEPENDENCY_2:필요 없으면 삭제}} + +## 외부 의존성 +다른 팀, 시스템, 도구에 의존하는 항목을 적는다. + +- {{EXTERNAL_DEP_1:예. CI/CD 파이프라인 설정 필요}} +- {{EXTERNAL_DEP_2:필요 없으면 삭제}} + +## 기술/환경 제약 +- {{TECH_CONSTRAINT_1}} +- {{TECH_CONSTRAINT_2:필요 없으면 삭제}} + +# 6. 검증 계획 개요 +Discovery의 성공 기준과 연결해 어떻게 검증할지 초안을 적는다. 상세 검증은 Verification 단계에서 정의한다. + +| 성공 기준 | 검증 방법 초안 | 담당자 | +|---------|-------------|--------| +| {{VERIFY_CRITERIA_1:S-1 요약}} | {{VERIFY_METHOD_1}} | {{VERIFY_OWNER_1:TBD}} | +| {{VERIFY_CRITERIA_2:S-2 요약}} | {{VERIFY_METHOD_2}} | {{VERIFY_OWNER_2:TBD}} | +| {{VERIFY_CRITERIA_3:S-3 요약 또는 삭제}} | {{VERIFY_METHOD_3}} | {{VERIFY_OWNER_3:TBD}} | + +# 7. 리스크 +Planning 단계에서 새로 식별된 리스크를 기록한다. Discovery에서 이월된 리스크는 `# 1` 이월 항목에서 확인한다. + +## 리스크 +- R-1 ({{PLAN_RISK_LEVEL_1:High|Medium|Low}}): {{PLAN_RISK_1}} + - 완화 방안: {{PLAN_MITIGATION_1}} +- R-2 ({{PLAN_RISK_LEVEL_2:High|Medium|Low}}): {{PLAN_RISK_2:필요 없으면 삭제}} + - 완화 방안: {{PLAN_MITIGATION_2:필요 없으면 삭제}} + +## 가정 +Planning 수행의 전제가 되는 가정을 적는다. + +- PA-1: {{PLAN_ASSUMPTION_1}} +- PA-2: {{PLAN_ASSUMPTION_2:필요 없으면 삭제}} + +## 오픈 질문 +Planning 진행 중 확인이 필요한 질문을 적는다. + +- OQ-1: {{PLAN_OPEN_QUESTION_1}} + - 상태: {{PLAN_OQ_STATUS_1:Open|Answered|Deferred|Dropped}} + - 처리 방안: {{PLAN_OQ_ACTION_1}} + - 종료 조건: {{PLAN_OQ_EXIT_1}} +- OQ-2: {{PLAN_OPEN_QUESTION_2:필요 없으면 삭제}} + - 상태: {{PLAN_OQ_STATUS_2:Open|Answered|Deferred|Dropped}} + - 처리 방안: {{PLAN_OQ_ACTION_2}} + - 종료 조건: {{PLAN_OQ_EXIT_2}} + +# 8. Design으로 넘기기 전 확인 체크 +Design 단계로 넘기기 전에 무엇이 확정되어야 하는지 확인한다. + +- [ ] 전체 태스크 목록 확정 및 담당자 지정 + - 기준: {{CHECK_TASKS_CRITERIA:모든 태스크에 담당자가 지정되어야 한다}} +- [ ] 공수 추정 완료 및 총 공수 확인 + - 기준: {{CHECK_EFFORT_CRITERIA:모든 태스크의 추정 공수가 채워져야 한다}} +- [ ] 마일스톤 및 이터레이션 계획 확정 + - 기준: {{CHECK_SCHEDULE_CRITERIA:M-1 이상의 마일스톤과 이터레이션 경계가 정의되어야 한다}} +- [ ] 외부 의존성 해소 계획 확인 + - 기준: {{CHECK_DEP_CRITERIA:외부 의존성 각 항목에 담당자 또는 해소 방안이 있어야 한다}} +- [ ] 모든 오픈 질문(OQ) `Open` 상태 없음 확인 + - 기준: OQ 목록에 `Open` 상태 항목이 0개이거나, 잔여 항목 전부 `Deferred` 처리 완료 +- [ ] Freeze 확정 담당자(CONFIRMED_BY) 지정 + - 기준: {{CHECK_CONFIRMEDBY_CRITERIA:문서 승인 또는 인계 결정을 내릴 담당자가 명시되어야 한다}} + +# 9. 파일 처리 결과 +이 Planning 문서 생성/갱신 결과와 참조 문서를 기록한다. + +- 처리 결과: {{FILE_RESULT:생성|갱신|미생성}} +- 생성 경로: {{OUTPUT_PATH}} +- 참조 문서: + - {{DISCOVERY_PATH:docs/sdlc//1_discovery.md}} + - {{REFERENCE_1:필요 없으면 삭제}} + +# 10. 사용자 결정 필요 항목 요약 +사용자나 승인자가 결정해야 하는 항목만 모아 정리한다. + +## DECIDE +- {{DECIDE_ITEM_1}} +- {{DECIDE_ITEM_2:필요 없으면 삭제}} + +## CONFIRM +- {{CONFIRM_ITEM_1}} +- {{CONFIRM_ITEM_2:필요 없으면 삭제}} + +## DATA +- {{DATA_ITEM_1}} +- {{DATA_ITEM_2:필요 없으면 삭제}} + +# 11. Planning Freeze +Design 인계 시점의 확정 플래그와 섹션 참조만 기록한다. 내용 재작성 없이 원본 섹션을 링크로 대신한다. + +## 섹션 참조 +- 작업 분해: [# 2. 작업 분해](#2-작업-분해-task-breakdown) +- 공수/일정: [# 3. 공수 추정](#3-공수-추정), [# 4. 일정 계획](#4-일정-계획) +- 의존성: [# 5. 의존성 및 제약](#5-의존성-및-제약) +- 검증 계획: [# 6. 검증 계획 개요](#6-검증-계획-개요) +- 리스크/오픈 질문: [# 7. 리스크](#7-리스크) +- 인계 전 확인: [# 8. Design으로 넘기기 전 확인 체크](#8-design으로-넘기기-전-확인-체크) +- 사용자 결정 필요: [# 10. 사용자 결정 필요 항목 요약](#10-사용자-결정-필요-항목-요약) + +## Freeze 플래그 +- Handoff Decision: {{FREEZE_HANDOFF_DECISION:Design 진행 가능|보류}} +- Handoff Rationale: {{FREEZE_HANDOFF_RATIONALE:진행 가능 또는 보류 판단 근거 1-2줄}} +- Ready for Design: {{READY_FOR_DESIGN:false}} +- Confirmed By: {{CONFIRMED_BY:TBD}} +- Confirmed At (KST): {{CONFIRMED_AT_KST:TBD}} + +# 12. 작성 가이드 +템플릿 사용 시의 기본 규칙을 적는다. 실제 문서를 만들 때는 이 가이드를 기준으로 플레이스홀더를 치환한다. + +- 이 파일은 템플릿이다. 실제 문서 작성 시 `{{...}}` 플레이스홀더를 구체 값으로 교체한다. +- 필요 없는 태스크/마일스톤 행은 삭제하고, 부족한 항목은 같은 형식으로 추가한다. +- 공수 추정은 팀 기준 단위(SP/시간/일)를 통일해서 사용한다. +- Planning Freeze는 문서 하단에 반드시 유지한다. diff --git a/.github/templates/sdlc/3_design.md b/.github/templates/sdlc/3_design.md new file mode 100644 index 0000000..4dd5ded --- /dev/null +++ b/.github/templates/sdlc/3_design.md @@ -0,0 +1,187 @@ +# 0. 문서 상태 +이 문서의 현재 상태와 식별 정보를 기록한다. 문서 추적과 승인 흐름에 필요한 최소 메타데이터를 적는다. + +- 상태: {{DOC_STATUS:draft|review|confirmed}} +- 문서 ID: {{CYCLE_ID:sdlc-<3자리>__}} +- 이슈명: {{ISSUE_NAME:짧은 한글 또는 영문 이슈명}} +- 참조 Planning: {{PLANNING_PATH:docs/sdlc//2_planning.md}} +- 작성 시각(KST): {{CREATED_AT_KST:TBD}} +- 마지막 갱신 시각(KST): {{UPDATED_AT_KST:TBD}} + +# 1. Planning 인계 요약 +Planning에서 확정된 핵심 내용을 요약한다. 원본은 2_planning.md를 참조하며, 이 섹션은 Design 작업의 입력 기준선이 된다. + +## 이슈 목적 +- {{DESIGN_ISSUE_PURPOSE:Planning 이슈명과 핵심 목적 1-2줄}} + +## 확정 태스크 목록 +| ID | 태스크 제목 | 참조 요구사항 | 담당자 | +|----|-----------|------------|--------| +| T-1 | {{DESIGN_TASK_TITLE_1}} | {{DESIGN_TASK_REF_1}} | {{DESIGN_TASK_OWNER_1:TBD}} | +| T-2 | {{DESIGN_TASK_TITLE_2}} | {{DESIGN_TASK_REF_2}} | {{DESIGN_TASK_OWNER_2:TBD}} | +| T-3 | {{DESIGN_TASK_TITLE_3:필요 없으면 삭제}} | {{DESIGN_TASK_REF_3}} | {{DESIGN_TASK_OWNER_3:TBD}} | + +## 이월된 오픈 질문 / 리스크 +Planning에서 `Deferred` 처리되어 Design 단계에서 해소해야 하는 항목을 기록한다. + +- {{DESIGN_DEFERRED_ITEM_1:없으면 "없음"}} +- {{DESIGN_DEFERRED_ITEM_2:필요 없으면 삭제}} + +# 2. 아키텍처 및 구조 설계 +변경이 미치는 전체 구조와 주요 컴포넌트 관계를 설명한다. + +## 전체 구조 개요 +{{ARCH_OVERVIEW:시스템/모듈/파일 구조를 개요 수준으로 설명. 다이어그램 또는 목록 형태 모두 가능}} + +## 주요 컴포넌트 +| 컴포넌트 | 역할 | 영향 범위 | +|---------|------|---------| +| {{COMPONENT_1_NAME}} | {{COMPONENT_1_ROLE}} | {{COMPONENT_1_SCOPE}} | +| {{COMPONENT_2_NAME}} | {{COMPONENT_2_ROLE}} | {{COMPONENT_2_SCOPE}} | +| {{COMPONENT_3_NAME:필요 없으면 삭제}} | {{COMPONENT_3_ROLE}} | {{COMPONENT_3_SCOPE}} | + +## 데이터 흐름 +변경과 관련된 주요 데이터 흐름 또는 처리 순서를 적는다. 복잡하면 단계별 목록으로 표현한다. + +- {{DATA_FLOW_1}} +- {{DATA_FLOW_2}} +- {{DATA_FLOW_3:필요 없으면 삭제}} + +# 3. 상세 설계 +태스크(T-N)별로 구체적인 구현/변경 방법을 기술한다. + +## T-1: {{DESIGN_TASK_TITLE_1}} +- 설계 방향: {{DESIGN_DETAIL_1}} +- 변경 대상: {{DESIGN_TARGET_1:파일 경로, 함수명, 설정 키 등}} +- 입력/출력: {{DESIGN_IO_1:입력값과 출력값 또는 사이드이펙트}} +- 예외/엣지 케이스: {{DESIGN_EDGE_1:필요 없으면 삭제}} + +## T-2: {{DESIGN_TASK_TITLE_2}} +- 설계 방향: {{DESIGN_DETAIL_2}} +- 변경 대상: {{DESIGN_TARGET_2}} +- 입력/출력: {{DESIGN_IO_2}} +- 예외/엣지 케이스: {{DESIGN_EDGE_2:필요 없으면 삭제}} + +## T-3: {{DESIGN_TASK_TITLE_3:필요 없으면 삭제}} +- 설계 방향: {{DESIGN_DETAIL_3}} +- 변경 대상: {{DESIGN_TARGET_3}} +- 입력/출력: {{DESIGN_IO_3}} +- 예외/엣지 케이스: {{DESIGN_EDGE_3:필요 없으면 삭제}} + +# 4. 인터페이스 정의 +외부 시스템, 모듈 간 계약(API, 이벤트, 파일 포맷 등)을 명시한다. 해당 없으면 "해당 없음"으로 기재한다. + +## API / 함수 시그니처 +- {{INTERFACE_1:예. function foo(bar: string): boolean — 설명}} +- {{INTERFACE_2:필요 없으면 삭제}} + +## 데이터 스키마 / 포맷 +- {{SCHEMA_1:예. { id: string, status: "draft"|"confirmed" } — 설명}} +- {{SCHEMA_2:필요 없으면 삭제}} + +## 이벤트 / 메시지 +- {{EVENT_1:필요 없으면 삭제}} +- {{EVENT_2:필요 없으면 삭제}} + +# 5. 보안 고려사항 +OWASP Top 10 기준으로 이번 변경에서 주의해야 할 보안 항목을 점검한다. + +| 항목 | 해당 여부 | 대응 방안 | +|------|---------|---------| +| 입력값 검증 (Injection) | {{SEC_INJECTION:해당|비해당}} | {{SEC_INJECTION_ACTION:비해당이면 삭제}} | +| 인증/인가 | {{SEC_AUTH:해당|비해당}} | {{SEC_AUTH_ACTION:비해당이면 삭제}} | +| 민감 데이터 노출 | {{SEC_DATA:해당|비해당}} | {{SEC_DATA_ACTION:비해당이면 삭제}} | +| 의존성 취약점 | {{SEC_DEP:해당|비해당}} | {{SEC_DEP_ACTION:비해당이면 삭제}} | +| 기타 | {{SEC_OTHER:필요 없으면 삭제}} | {{SEC_OTHER_ACTION:필요 없으면 삭제}} | + +# 6. 리스크 +Design 단계에서 새로 식별된 리스크를 기록한다. Planning에서 이월된 리스크는 `# 1` 이월 항목에서 확인한다. + +## 리스크 +- R-1 ({{DESIGN_RISK_LEVEL_1:High|Medium|Low}}): {{DESIGN_RISK_1}} + - 완화 방안: {{DESIGN_MITIGATION_1}} +- R-2 ({{DESIGN_RISK_LEVEL_2:High|Medium|Low}}): {{DESIGN_RISK_2:필요 없으면 삭제}} + - 완화 방안: {{DESIGN_MITIGATION_2:필요 없으면 삭제}} + +## 가정 +Design 수행의 전제가 되는 가정을 적는다. + +- DA-1: {{DESIGN_ASSUMPTION_1}} +- DA-2: {{DESIGN_ASSUMPTION_2:필요 없으면 삭제}} + +## 오픈 질문 +Design 진행 중 확인이 필요한 질문을 적는다. + +- OQ-1: {{DESIGN_OPEN_QUESTION_1}} + - 상태: {{DESIGN_OQ_STATUS_1:Open|Answered|Deferred|Dropped}} + - 처리 방안: {{DESIGN_OQ_ACTION_1}} + - 종료 조건: {{DESIGN_OQ_EXIT_1}} +- OQ-2: {{DESIGN_OPEN_QUESTION_2:필요 없으면 삭제}} + - 상태: {{DESIGN_OQ_STATUS_2:Open|Answered|Deferred|Dropped}} + - 처리 방안: {{DESIGN_OQ_ACTION_2}} + - 종료 조건: {{DESIGN_OQ_EXIT_2}} + +# 7. Implementation으로 넘기기 전 확인 체크 +Implementation 단계로 넘기기 전에 무엇이 확정되어야 하는지 확인한다. + +- [ ] 전체 컴포넌트 및 태스크별 설계 완성 + - 기준: {{CHECK_DESIGN_COMPLETE:모든 T-N 태스크에 설계 방향과 변경 대상이 채워져야 한다}} +- [ ] 인터페이스 계약 확정 + - 기준: {{CHECK_INTERFACE:외부 의존 컴포넌트와의 계약이 명시되어야 한다}} +- [ ] 보안 점검 완료 + - 기준: {{CHECK_SECURITY:OWASP 점검 항목 중 해당 항목은 대응 방안이 있어야 한다}} +- [ ] 모든 오픈 질문(OQ) `Open` 상태 없음 확인 + - 기준: OQ 목록에 `Open` 상태 항목이 0개이거나, 잔여 항목 전부 `Deferred` 처리 완료 +- [ ] Freeze 확정 담당자(CONFIRMED_BY) 지정 + - 기준: {{CHECK_CONFIRMEDBY_CRITERIA:문서 승인 또는 인계 결정을 내릴 담당자가 명시되어야 한다}} + +# 8. 파일 처리 결과 +이 Design 문서 생성/갱신 결과와 참조 문서를 기록한다. + +- 처리 결과: {{FILE_RESULT:생성|갱신|미생성}} +- 생성 경로: {{OUTPUT_PATH}} +- 참조 문서: + - {{PLANNING_PATH:docs/sdlc//2_planning.md}} + - {{REFERENCE_1:필요 없으면 삭제}} + +# 9. 사용자 결정 필요 항목 요약 +사용자나 승인자가 결정해야 하는 항목만 모아 정리한다. + +## DECIDE +- {{DECIDE_ITEM_1}} +- {{DECIDE_ITEM_2:필요 없으면 삭제}} + +## CONFIRM +- {{CONFIRM_ITEM_1}} +- {{CONFIRM_ITEM_2:필요 없으면 삭제}} + +## DATA +- {{DATA_ITEM_1}} +- {{DATA_ITEM_2:필요 없으면 삭제}} + +# 10. Design Freeze +Implementation 인계 시점의 확정 플래그와 섹션 참조만 기록한다. 내용 재작성 없이 원본 섹션을 링크로 대신한다. + +## 섹션 참조 +- 아키텍처/구조: [# 2. 아키텍처 및 구조 설계](#2-아키텍처-및-구조-설계) +- 상세 설계: [# 3. 상세 설계](#3-상세-설계) +- 인터페이스: [# 4. 인터페이스 정의](#4-인터페이스-정의) +- 보안: [# 5. 보안 고려사항](#5-보안-고려사항) +- 리스크/오픈 질문: [# 6. 리스크](#6-리스크) +- 인계 전 확인: [# 7. Implementation으로 넘기기 전 확인 체크](#7-implementation으로-넘기기-전-확인-체크) +- 사용자 결정 필요: [# 9. 사용자 결정 필요 항목 요약](#9-사용자-결정-필요-항목-요약) + +## Freeze 플래그 +- Handoff Decision: {{FREEZE_HANDOFF_DECISION:Implementation 진행 가능|보류}} +- Handoff Rationale: {{FREEZE_HANDOFF_RATIONALE:진행 가능 또는 보류 판단 근거 1-2줄}} +- Ready for Implementation: {{READY_FOR_IMPLEMENTATION:false}} +- Confirmed By: {{CONFIRMED_BY:TBD}} +- Confirmed At (KST): {{CONFIRMED_AT_KST:TBD}} + +# 11. 작성 가이드 +템플릿 사용 시의 기본 규칙을 적는다. 실제 문서를 만들 때는 이 가이드를 기준으로 플레이스홀더를 치환한다. + +- 이 파일은 템플릿이다. 실제 문서 작성 시 `{{...}}` 플레이스홀더를 구체 값으로 교체한다. +- 필요 없는 컴포넌트/태스크 항목은 삭제하고, 부족한 항목은 같은 형식으로 추가한다. +- 보안 고려사항은 "비해당"이라도 근거를 남긴다. +- Design Freeze는 문서 하단에 반드시 유지한다. diff --git a/.github/templates/sdlc/4_implementation.md b/.github/templates/sdlc/4_implementation.md new file mode 100644 index 0000000..0d3a1a8 --- /dev/null +++ b/.github/templates/sdlc/4_implementation.md @@ -0,0 +1,155 @@ +# 0. 문서 상태 +이 문서의 현재 상태와 식별 정보를 기록한다. 문서 추적과 승인 흐름에 필요한 최소 메타데이터를 적는다. + +- 상태: {{DOC_STATUS:draft|review|confirmed}} +- 문서 ID: {{CYCLE_ID:sdlc-<3자리>__}} +- 이슈명: {{ISSUE_NAME:짧은 한글 또는 영문 이슈명}} +- 참조 Design: {{DESIGN_PATH:docs/sdlc//3_design.md}} +- 작성 시각(KST): {{CREATED_AT_KST:TBD}} +- 마지막 갱신 시각(KST): {{UPDATED_AT_KST:TBD}} + +# 1. Design 인계 요약 +Design에서 확정된 핵심 내용을 요약한다. 원본은 3_design.md를 참조하며, 이 섹션은 Implementation 작업의 입력 기준선이 된다. + +## 이슈 목적 +- {{IMP_ISSUE_PURPOSE:Design 이슈명과 핵심 목적 1-2줄}} + +## 확정 태스크 및 변경 대상 +| ID | 태스크 제목 | 변경 대상 파일/함수 | 담당자 | +|----|-----------|-------------------|--------| +| T-1 | {{IMP_TASK_TITLE_1}} | {{IMP_TASK_TARGET_1}} | {{IMP_TASK_OWNER_1:TBD}} | +| T-2 | {{IMP_TASK_TITLE_2}} | {{IMP_TASK_TARGET_2}} | {{IMP_TASK_OWNER_2:TBD}} | +| T-3 | {{IMP_TASK_TITLE_3:필요 없으면 삭제}} | {{IMP_TASK_TARGET_3}} | {{IMP_TASK_OWNER_3:TBD}} | + +## 이월된 오픈 질문 / 리스크 +Design에서 `Deferred` 처리되어 Implementation 단계에서 해소해야 하는 항목을 기록한다. + +- {{IMP_DEFERRED_ITEM_1:없으면 "없음"}} +- {{IMP_DEFERRED_ITEM_2:필요 없으면 삭제}} + +# 2. 구현 계획 +태스크(T-N)별 구현 순서와 접근 방법을 기술한다. + +## 구현 순서 +태스크 간 의존 관계와 우선순위를 고려한 구현 순서를 정의한다. + +1. {{IMP_ORDER_1:예. T-1 — 기반 구조 구현 (다른 태스크의 의존 대상)}} +2. {{IMP_ORDER_2:예. T-2 — 핵심 기능 구현}} +3. {{IMP_ORDER_3:필요 없으면 삭제}} + +## T-1: {{IMP_TASK_TITLE_1}} +- 구현 방법: {{IMP_METHOD_1:설계 방향을 실제 코드/설정으로 구현하는 접근}} +- 변경 대상: {{IMP_TARGET_1:실제 파일 경로, 함수명, 설정 키}} +- 완료 조건: {{IMP_DOD_1:이 태스크가 완료된 것으로 간주하는 기준}} +- 주의사항: {{IMP_NOTE_1:구현 중 주의해야 할 사항. 필요 없으면 삭제}} + +## T-2: {{IMP_TASK_TITLE_2}} +- 구현 방법: {{IMP_METHOD_2}} +- 변경 대상: {{IMP_TARGET_2}} +- 완료 조건: {{IMP_DOD_2}} +- 주의사항: {{IMP_NOTE_2:필요 없으면 삭제}} + +## T-3: {{IMP_TASK_TITLE_3:필요 없으면 삭제}} +- 구현 방법: {{IMP_METHOD_3}} +- 변경 대상: {{IMP_TARGET_3}} +- 완료 조건: {{IMP_DOD_3}} +- 주의사항: {{IMP_NOTE_3:필요 없으면 삭제}} + +# 3. 변경 파일 목록 +이번 Implementation에서 생성/수정/삭제되는 파일을 미리 나열한다. 구현 완료 후 실제 결과를 반영해 갱신한다. + +| 파일 경로 | 변경 유형 | 관련 태스크 | 비고 | +|---------|---------|-----------|------| +| {{IMP_FILE_1}} | {{IMP_FILE_TYPE_1:생성\|수정\|삭제}} | {{IMP_FILE_TASK_1:T-1}} | {{IMP_FILE_NOTE_1:필요 없으면 삭제}} | +| {{IMP_FILE_2}} | {{IMP_FILE_TYPE_2:생성\|수정\|삭제}} | {{IMP_FILE_TASK_2}} | {{IMP_FILE_NOTE_2:필요 없으면 삭제}} | +| {{IMP_FILE_3:필요 없으면 삭제}} | {{IMP_FILE_TYPE_3:생성\|수정\|삭제}} | {{IMP_FILE_TASK_3}} | {{IMP_FILE_NOTE_3:필요 없으면 삭제}} | + +# 4. 리스크 및 제약 +Implementation 단계에서 새로 식별된 리스크와 제약사항을 기록한다. + +## 리스크 +- R-1 ({{IMP_RISK_LEVEL_1:High|Medium|Low}}): {{IMP_RISK_1}} + - 완화 방안: {{IMP_MITIGATION_1}} +- R-2 ({{IMP_RISK_LEVEL_2:High|Medium|Low}}): {{IMP_RISK_2:필요 없으면 삭제}} + - 완화 방안: {{IMP_MITIGATION_2:필요 없으면 삭제}} + +## 가정 +Implementation 수행의 전제가 되는 가정을 적는다. + +- IA-1: {{IMP_ASSUMPTION_1}} +- IA-2: {{IMP_ASSUMPTION_2:필요 없으면 삭제}} + +## 오픈 질문 +Implementation 진행 중 확인이 필요한 질문을 적는다. + +- OQ-1: {{IMP_OPEN_QUESTION_1}} + - 상태: {{IMP_OQ_STATUS_1:Open|Answered|Deferred|Dropped}} + - 처리 방안: {{IMP_OQ_ACTION_1}} + - 종료 조건: {{IMP_OQ_EXIT_1}} +- OQ-2: {{IMP_OPEN_QUESTION_2:필요 없으면 삭제}} + - 상태: {{IMP_OQ_STATUS_2:Open|Answered|Deferred|Dropped}} + - 처리 방안: {{IMP_OQ_ACTION_2}} + - 종료 조건: {{IMP_OQ_EXIT_2}} + +# 5. Verification으로 넘기기 전 확인 체크 +Verification 단계로 넘기기 전에 무엇이 완료되어야 하는지 확인한다. + +- [ ] 모든 T-N 태스크 구현 완료 + - 기준: {{CHECK_ALL_TASKS:각 태스크의 완료 조건(DoD)을 충족해야 한다}} +- [ ] 변경 파일 목록과 실제 변경 일치 + - 기준: {{CHECK_FILE_LIST:3_design.md의 변경 대상과 실제 변경된 파일이 일치해야 한다}} +- [ ] 단위 테스트 또는 로컬 검증 완료 + - 기준: {{CHECK_LOCAL_VERIFY:변경 사항이 로컬 환경에서 의도대로 동작하는지 확인해야 한다}} +- [ ] 모든 오픈 질문(OQ) `Open` 상태 없음 확인 + - 기준: OQ 목록에 `Open` 상태 항목이 0개이거나, 잔여 항목 전부 `Deferred` 처리 완료 +- [ ] Freeze 확정 담당자(CONFIRMED_BY) 지정 + - 기준: {{CHECK_CONFIRMEDBY_CRITERIA:문서 승인 또는 인계 결정을 내릴 담당자가 명시되어야 한다}} + +# 6. 파일 처리 결과 +이 Implementation 문서 생성/갱신 결과와 참조 문서를 기록한다. + +- 처리 결과: {{FILE_RESULT:생성|갱신|미생성}} +- 생성 경로: {{OUTPUT_PATH}} +- 참조 문서: + - {{DESIGN_PATH:docs/sdlc//3_design.md}} + - {{REFERENCE_1:필요 없으면 삭제}} + +# 7. 사용자 결정 필요 항목 요약 +사용자나 승인자가 결정해야 하는 항목만 모아 정리한다. + +## DECIDE +- {{DECIDE_ITEM_1}} +- {{DECIDE_ITEM_2:필요 없으면 삭제}} + +## CONFIRM +- {{CONFIRM_ITEM_1}} +- {{CONFIRM_ITEM_2:필요 없으면 삭제}} + +## DATA +- {{DATA_ITEM_1}} +- {{DATA_ITEM_2:필요 없으면 삭제}} + +# 8. Implementation Freeze +Verification 인계 시점의 확정 플래그와 섹션 참조만 기록한다. 내용 재작성 없이 원본 섹션을 링크로 대신한다. + +## 섹션 참조 +- 구현 계획: [# 2. 구현 계획](#2-구현-계획) +- 변경 파일 목록: [# 3. 변경 파일 목록](#3-변경-파일-목록) +- 리스크/오픈 질문: [# 4. 리스크 및 제약](#4-리스크-및-제약) + +## 확정 플래그 +- Handoff Decision: {{FREEZE_HANDOFF_DECISION:보류}} +- Handoff Rationale: {{FREEZE_HANDOFF_RATIONALE:구현 완료 및 로컬 검증 후 Verification으로 인계}} +- Ready for Verification: {{READY_FOR_VERIFICATION:false}} +- Confirmed By: {{CONFIRMED_BY:TBD}} +- Confirmed At (KST): {{CONFIRMED_AT_KST:TBD}} + +--- + +# 12. 작성 가이드 +*이 섹션은 작성 참고용이다. 문서 완성 후 삭제해도 된다.* + +- **변경 대상 파일 경로**: 실제 저장소 파일 경로를 명시한다. 추정이나 가상 경로를 쓰지 않는다. +- **완료 조건(DoD)**: "구현 완료"처럼 모호한 표현 대신 "파일 X에 함수 Y가 추가되고 입력 Z에 대해 올바른 결과를 반환한다"처럼 측정 가능하게 작성한다. +- **오픈 질문**: 구현 중 발생한 기술적 판단 사항, 외부 확인 필요 항목 등을 기록한다. +- **Freeze 섹션**: 모든 태스크 완료 및 로컬 검증 후 담당자가 직접 갱신한다. diff --git a/.github/templates/sdlc/5_verification.md b/.github/templates/sdlc/5_verification.md new file mode 100644 index 0000000..be15e8b --- /dev/null +++ b/.github/templates/sdlc/5_verification.md @@ -0,0 +1,160 @@ +# 0. 문서 상태 +이 문서의 현재 상태와 식별 정보를 기록한다. 문서 추적과 승인 흐름에 필요한 최소 메타데이터를 적는다. + +- 상태: {{DOC_STATUS:draft|review|confirmed}} +- 문서 ID: {{CYCLE_ID:sdlc-<3자리>__}} +- 이슈명: {{ISSUE_NAME:짧은 한글 또는 영문 이슈명}} +- 참조 Implementation: {{IMP_PATH:docs/sdlc//4_implementation.md}} +- 작성 시각(KST): {{CREATED_AT_KST:TBD}} +- 마지막 갱신 시각(KST): {{UPDATED_AT_KST:TBD}} + +# 1. Implementation 인계 요약 +Implementation에서 완료된 핵심 내용을 요약한다. 원본은 4_implementation.md를 참조하며, 이 섹션은 Verification 작업의 입력 기준선이 된다. + +## 이슈 목적 +- {{VER_ISSUE_PURPOSE:Implementation 이슈명과 핵심 목적 1-2줄}} + +## 구현 완료 태스크 +| ID | 태스크 제목 | 변경 파일/함수 | 완료 조건(DoD) | +|----|-----------|--------------|--------------| +| T-1 | {{VER_TASK_TITLE_1}} | {{VER_TASK_TARGET_1}} | {{VER_TASK_DOD_1}} | +| T-2 | {{VER_TASK_TITLE_2}} | {{VER_TASK_TARGET_2}} | {{VER_TASK_DOD_2}} | +| T-3 | {{VER_TASK_TITLE_3:필요 없으면 삭제}} | {{VER_TASK_TARGET_3}} | {{VER_TASK_DOD_3}} | + +## 이월된 오픈 질문 / 리스크 +Implementation에서 `Deferred` 처리되어 Verification 단계에서 해소해야 하는 항목을 기록한다. + +- {{VER_DEFERRED_ITEM_1:없으면 "없음"}} +- {{VER_DEFERRED_ITEM_2:필요 없으면 삭제}} + +# 2. 검증 계획 +Discovery `# 7` 성공 기준(S-N)을 기반으로 Verification 항목을 정의한다. + +## 검증 범위 +- {{VER_SCOPE_1:예. 기능 요구사항(FR) 전체 충족 여부}} +- {{VER_SCOPE_2:예. 비기능 요구사항(NFR) 성능 기준 충족 여부}} +- {{VER_SCOPE_3:필요 없으면 삭제}} + +## 검증 항목 +| ID | 검증 항목 | 검증 방법 | 성공 기준 | 담당자 | +|----|---------|---------|---------|--------| +| VC-1 | {{VER_ITEM_1}} | {{VER_METHOD_1:수동\|자동\|혼합}} | {{VER_CRITERIA_1}} | {{VER_OWNER_1:TBD}} | +| VC-2 | {{VER_ITEM_2}} | {{VER_METHOD_2:수동\|자동\|혼합}} | {{VER_CRITERIA_2}} | {{VER_OWNER_2:TBD}} | +| VC-3 | {{VER_ITEM_3:필요 없으면 삭제}} | {{VER_METHOD_3:수동\|자동\|혼합}} | {{VER_CRITERIA_3}} | {{VER_OWNER_3:TBD}} | +| VC-4 | {{VER_ITEM_4:필요 없으면 삭제}} | {{VER_METHOD_4:수동\|자동\|혼합}} | {{VER_CRITERIA_4}} | {{VER_OWNER_4:TBD}} | + +## 성공 기준 연결 +Discovery의 성공 기준(S-N)과 검증 항목(VC-N)의 연결을 명시한다. + +- S-1 → {{VER_S1_LINK:VC-1, VC-2 등}} +- S-2 → {{VER_S2_LINK:VC-3 등}} +- S-3 → {{VER_S3_LINK:필요 없으면 삭제}} + +# 3. 검증 결과 +검증 수행 후 각 항목의 결과를 기록한다. 초안 생성 시 모두 `미완료`로 초기화한다. + +| ID | 검증 항목 | 결과 | 비고 | +|----|---------|------|------| +| VC-1 | {{VER_ITEM_1}} | {{VER_RESULT_1:미완료\|통과\|실패\|블로킹}} | {{VER_RESULT_NOTE_1:필요 없으면 삭제}} | +| VC-2 | {{VER_ITEM_2}} | {{VER_RESULT_2:미완료\|통과\|실패\|블로킹}} | {{VER_RESULT_NOTE_2:필요 없으면 삭제}} | +| VC-3 | {{VER_ITEM_3:필요 없으면 삭제}} | {{VER_RESULT_3:미완료\|통과\|실패\|블로킹}} | {{VER_RESULT_NOTE_3:필요 없으면 삭제}} | + +## 전체 검증 결과 +- 통과: {{VER_PASS_COUNT:0}} / {{VER_TOTAL_COUNT:0}} +- 실패/블로킹: {{VER_FAIL_COUNT:0}} +- 검증 완료 여부: {{VER_COMPLETE:false}} + +# 4. 결함 및 재작업 사항 +검증 중 발견된 결함과 재작업이 필요한 항목을 기록한다. + +- BUG-1: {{BUG_1:없으면 "없음"}} + - 심각도: {{BUG_SEVERITY_1:Critical|High|Medium|Low}} + - 재작업 내용: {{BUG_FIX_1}} + - 상태: {{BUG_STATUS_1:Open|Fixed|Deferred}} +- BUG-2: {{BUG_2:필요 없으면 삭제}} + - 심각도: {{BUG_SEVERITY_2:Critical|High|Medium|Low}} + - 재작업 내용: {{BUG_FIX_2}} + - 상태: {{BUG_STATUS_2:Open|Fixed|Deferred}} + +# 5. 리스크 및 오픈 질문 +Verification 단계에서 새로 식별된 리스크와 오픈 질문을 기록한다. + +## 리스크 +- R-1 ({{VER_RISK_LEVEL_1:High|Medium|Low}}): {{VER_RISK_1}} + - 완화 방안: {{VER_MITIGATION_1}} +- R-2 ({{VER_RISK_LEVEL_2:High|Medium|Low}}): {{VER_RISK_2:필요 없으면 삭제}} + - 완화 방안: {{VER_MITIGATION_2:필요 없으면 삭제}} + +## 오픈 질문 +- OQ-1: {{VER_OPEN_QUESTION_1}} + - 상태: {{VER_OQ_STATUS_1:Open|Answered|Deferred|Dropped}} + - 처리 방안: {{VER_OQ_ACTION_1}} + - 종료 조건: {{VER_OQ_EXIT_1}} +- OQ-2: {{VER_OPEN_QUESTION_2:필요 없으면 삭제}} + - 상태: {{VER_OQ_STATUS_2:Open|Answered|Deferred|Dropped}} + - 처리 방안: {{VER_OQ_ACTION_2}} + - 종료 조건: {{VER_OQ_EXIT_2}} + +# 6. Release로 넘기기 전 확인 체크 +Release 단계로 넘기기 전에 무엇이 완료되어야 하는지 확인한다. + +- [ ] 모든 검증 항목(VC-N) 통과 + - 기준: {{CHECK_ALL_VC:VC 목록의 모든 항목이 "통과" 상태여야 한다}} +- [ ] 결함(BUG) `Open` 상태 없음 + - 기준: {{CHECK_BUGS:BUG 목록에 `Open` 상태 항목이 0개여야 한다. `Deferred`는 근거와 함께 허용}} +- [ ] 성공 기준(S-N) 전체 충족 + - 기준: {{CHECK_SUCCESS_CRITERIA:Discovery에서 정의된 S-N 기준이 모두 VC 항목과 연결되어 통과되었는가}} +- [ ] 모든 오픈 질문(OQ) `Open` 상태 없음 확인 + - 기준: OQ 목록에 `Open` 상태 항목이 0개이거나, 잔여 항목 전부 `Deferred` 처리 완료 +- [ ] Freeze 확정 담당자(CONFIRMED_BY) 지정 + - 기준: {{CHECK_CONFIRMEDBY_CRITERIA:문서 승인 또는 인계 결정을 내릴 담당자가 명시되어야 한다}} + +# 7. 파일 처리 결과 +이 Verification 문서 생성/갱신 결과와 참조 문서를 기록한다. + +- 처리 결과: {{FILE_RESULT:생성|갱신|미생성}} +- 생성 경로: {{OUTPUT_PATH}} +- 참조 문서: + - {{IMP_PATH:docs/sdlc//4_implementation.md}} + - {{REFERENCE_1:필요 없으면 삭제}} + +# 8. 사용자 결정 필요 항목 요약 +사용자나 승인자가 결정해야 하는 항목만 모아 정리한다. + +## DECIDE +- {{DECIDE_ITEM_1}} +- {{DECIDE_ITEM_2:필요 없으면 삭제}} + +## CONFIRM +- {{CONFIRM_ITEM_1}} +- {{CONFIRM_ITEM_2:필요 없으면 삭제}} + +## DATA +- {{DATA_ITEM_1}} +- {{DATA_ITEM_2:필요 없으면 삭제}} + +# 9. Verification Freeze +Release 인계 시점의 확정 플래그와 섹션 참조만 기록한다. 내용 재작성 없이 원본 섹션을 링크로 대신한다. + +## 섹션 참조 +- 검증 계획: [# 2. 검증 계획](#2-검증-계획) +- 검증 결과: [# 3. 검증 결과](#3-검증-결과) +- 결함/재작업: [# 4. 결함 및 재작업 사항](#4-결함-및-재작업-사항) + +## 확정 플래그 +- Handoff Decision: {{FREEZE_HANDOFF_DECISION:보류}} +- Handoff Rationale: {{FREEZE_HANDOFF_RATIONALE:검증 완료 및 결함 없음 확인 후 Release로 인계}} +- Ready for Release: {{READY_FOR_RELEASE:false}} +- Confirmed By: {{CONFIRMED_BY:TBD}} +- Confirmed At (KST): {{CONFIRMED_AT_KST:TBD}} + +--- + +# 10. 작성 가이드 +*이 섹션은 작성 참고용이다. 문서 완성 후 삭제해도 된다.* + +- **검증 항목(VC-N)**: Discovery 성공 기준(S-N)과 반드시 연결한다. FR/NFR 각 항목이 하나 이상의 VC와 연결되어야 한다. +- **검증 방법**: 수동(테스터가 직접 실행), 자동(CI/테스트 코드), 혼합(일부 자동 + 수동 확인) 중 선택한다. +- **성공 기준**: "정상 동작"처럼 모호한 표현 대신 "입력 X에 대해 결과 Y를 반환한다"처럼 측정 가능하게 작성한다. +- **결함(BUG)**: 검증 중 발견된 모든 문제를 기록한다. `Deferred` 처리 시 근거와 후속 처리 계획을 명시한다. +- **Freeze 섹션**: 모든 VC 통과 및 BUG `Open` 없음 확인 후 담당자가 직접 갱신한다. diff --git a/.github/templates/sdlc/6_release.md b/.github/templates/sdlc/6_release.md new file mode 100644 index 0000000..2f934be --- /dev/null +++ b/.github/templates/sdlc/6_release.md @@ -0,0 +1,162 @@ +# 0. 문서 상태 +이 문서의 현재 상태와 식별 정보를 기록한다. 문서 추적과 승인 흐름에 필요한 최소 메타데이터를 적는다. + +- 상태: {{DOC_STATUS:draft|review|confirmed}} +- 문서 ID: {{CYCLE_ID:sdlc-<3자리>__}} +- 이슈명: {{ISSUE_NAME:짧은 한글 또는 영문 이슈명}} +- 참조 Verification: {{VER_PATH:docs/sdlc//5_verification.md}} +- 작성 시각(KST): {{CREATED_AT_KST:TBD}} +- 마지막 갱신 시각(KST): {{UPDATED_AT_KST:TBD}} + +# 1. Verification 인계 요약 +Verification에서 완료된 핵심 내용을 요약한다. 원본은 5_verification.md를 참조하며, 이 섹션은 Release 작업의 입력 기준선이 된다. + +## 이슈 목적 +- {{REL_ISSUE_PURPOSE:Verification 이슈명과 핵심 목적 1-2줄}} + +## 검증 결과 요약 +- 검증 항목 수: {{REL_VC_TOTAL}}개 +- 전체 통과 여부: {{REL_VC_ALL_PASS:true|false}} +- 결함(BUG) 잔여: {{REL_BUG_REMAIN:0}}건 + +## 이월된 오픈 질문 / 리스크 +Verification에서 `Deferred` 처리되어 Release 단계에서 해소해야 하는 항목을 기록한다. + +- {{REL_DEFERRED_ITEM_1:없으면 "없음"}} +- {{REL_DEFERRED_ITEM_2:필요 없으면 삭제}} + +# 2. 배포 준비 +배포 환경, 배포 전 체크리스트, 배포 순서를 정의한다. + +## 배포 환경 +- 대상 환경: {{REL_TARGET_ENV:예. production, staging}} +- 배포 방식: {{REL_DEPLOY_METHOD:예. git push, CI/CD 파이프라인, 수동 복사}} +- 배포 도구/채널: {{REL_DEPLOY_TOOL:예. GitHub Actions, 수동 SSH, 없음}} + +## 배포 전 체크리스트 +배포 실행 전에 확인해야 할 항목을 나열한다. + +- [ ] {{REL_PRE_CHECK_1:예. 대상 환경 설정 파일 백업 완료}} +- [ ] {{REL_PRE_CHECK_2:예. 롤백 계획 확인 완료}} +- [ ] {{REL_PRE_CHECK_3:필요 없으면 삭제}} + +## 배포 순서 +변경 사항의 배포 순서를 적는다. 의존 관계가 있는 경우 순서를 명확히 기술한다. + +1. {{REL_STEP_1:예. 설정 파일 배포}} +2. {{REL_STEP_2:예. 코드 변경 배포}} +3. {{REL_STEP_3:필요 없으면 삭제}} + +# 3. 롤백 계획 +배포 후 문제가 발생했을 때 이전 상태로 되돌리는 방법을 기술한다. + +## 롤백 조건 +아래 조건 중 하나라도 충족되면 롤백을 즉시 실행한다. + +- {{REL_ROLLBACK_TRIGGER_1:예. 배포 후 핵심 기능 오류 발생}} +- {{REL_ROLLBACK_TRIGGER_2:예. 성능 지표가 임계값 이하로 하락}} +- {{REL_ROLLBACK_TRIGGER_3:필요 없으면 삭제}} + +## 롤백 절차 +1. {{REL_ROLLBACK_STEP_1:예. 이전 버전 파일/설정 복원}} +2. {{REL_ROLLBACK_STEP_2:예. 배포 채널에서 롤백 실행}} +3. {{REL_ROLLBACK_STEP_3:필요 없으면 삭제}} + +## 롤백 담당자 +- {{REL_ROLLBACK_OWNER:TBD}} + +# 4. 배포 후 확인 +배포 완료 후 정상 동작을 확인하는 방법을 기술한다. + +## 스모크 테스트 항목 +| 항목 | 확인 방법 | 성공 기준 | +|------|---------|---------| +| {{REL_SMOKE_ITEM_1}} | {{REL_SMOKE_METHOD_1}} | {{REL_SMOKE_CRITERIA_1}} | +| {{REL_SMOKE_ITEM_2}} | {{REL_SMOKE_METHOD_2}} | {{REL_SMOKE_CRITERIA_2}} | +| {{REL_SMOKE_ITEM_3:필요 없으면 삭제}} | {{REL_SMOKE_METHOD_3}} | {{REL_SMOKE_CRITERIA_3}} | + +## 모니터링 확인 항목 +배포 후 일정 시간 동안 모니터링해야 하는 지표나 로그를 기록한다. + +- {{REL_MONITOR_1:예. 오류 로그 발생 여부 확인 (1시간)}} +- {{REL_MONITOR_2:필요 없으면 삭제}} + +# 5. 리스크 및 오픈 질문 +Release 단계에서 새로 식별된 리스크와 오픈 질문을 기록한다. + +## 리스크 +- R-1 ({{REL_RISK_LEVEL_1:High|Medium|Low}}): {{REL_RISK_1}} + - 완화 방안: {{REL_MITIGATION_1}} +- R-2 ({{REL_RISK_LEVEL_2:High|Medium|Low}}): {{REL_RISK_2:필요 없으면 삭제}} + - 완화 방안: {{REL_MITIGATION_2:필요 없으면 삭제}} + +## 오픈 질문 +- OQ-1: {{REL_OPEN_QUESTION_1}} + - 상태: {{REL_OQ_STATUS_1:Open|Answered|Deferred|Dropped}} + - 처리 방안: {{REL_OQ_ACTION_1}} + - 종료 조건: {{REL_OQ_EXIT_1}} +- OQ-2: {{REL_OPEN_QUESTION_2:필요 없으면 삭제}} + - 상태: {{REL_OQ_STATUS_2:Open|Answered|Deferred|Dropped}} + - 처리 방안: {{REL_OQ_ACTION_2}} + - 종료 조건: {{REL_OQ_EXIT_2}} + +# 6. Operations로 넘기기 전 확인 체크 +Operations 단계로 넘기기 전에 무엇이 완료되어야 하는지 확인한다. + +- [ ] 배포 완료 및 스모크 테스트 통과 + - 기준: {{CHECK_DEPLOY:배포 절차대로 실행되었고 스모크 테스트 전 항목이 통과되었는가}} +- [ ] 롤백 계획 확정 + - 기준: {{CHECK_ROLLBACK:롤백 조건, 절차, 담당자가 모두 명시되었는가}} +- [ ] 모든 오픈 질문(OQ) `Open` 상태 없음 확인 + - 기준: OQ 목록에 `Open` 상태 항목이 0개이거나, 잔여 항목 전부 `Deferred` 처리 완료 +- [ ] Freeze 확정 담당자(CONFIRMED_BY) 지정 + - 기준: {{CHECK_CONFIRMEDBY_CRITERIA:문서 승인 또는 인계 결정을 내릴 담당자가 명시되어야 한다}} + +# 7. 파일 처리 결과 +이 Release 문서 생성/갱신 결과와 참조 문서를 기록한다. + +- 처리 결과: {{FILE_RESULT:생성|갱신|미생성}} +- 생성 경로: {{OUTPUT_PATH}} +- 참조 문서: + - {{VER_PATH:docs/sdlc//5_verification.md}} + - {{REFERENCE_1:필요 없으면 삭제}} + +# 8. 사용자 결정 필요 항목 요약 +사용자나 승인자가 결정해야 하는 항목만 모아 정리한다. + +## DECIDE +- {{DECIDE_ITEM_1}} +- {{DECIDE_ITEM_2:필요 없으면 삭제}} + +## CONFIRM +- {{CONFIRM_ITEM_1}} +- {{CONFIRM_ITEM_2:필요 없으면 삭제}} + +## DATA +- {{DATA_ITEM_1}} +- {{DATA_ITEM_2:필요 없으면 삭제}} + +# 9. Release Freeze +Operations 인계 시점의 확정 플래그와 섹션 참조만 기록한다. 내용 재작성 없이 원본 섹션을 링크로 대신한다. + +## 섹션 참조 +- 배포 준비: [# 2. 배포 준비](#2-배포-준비) +- 롤백 계획: [# 3. 롤백 계획](#3-롤백-계획) +- 배포 후 확인: [# 4. 배포 후 확인](#4-배포-후-확인) + +## 확정 플래그 +- Handoff Decision: {{FREEZE_HANDOFF_DECISION:보류}} +- Handoff Rationale: {{FREEZE_HANDOFF_RATIONALE:배포 완료 및 스모크 테스트 통과 후 Operations로 인계}} +- Ready for Operations: {{READY_FOR_OPERATIONS:false}} +- Confirmed By: {{CONFIRMED_BY:TBD}} +- Confirmed At (KST): {{CONFIRMED_AT_KST:TBD}} + +--- + +# 10. 작성 가이드 +*이 섹션은 작성 참고용이다. 문서 완성 후 삭제해도 된다.* + +- **배포 방식**: git 기반 프로젝트는 커밋 해시, 브랜치, 태그를 명시하면 롤백이 쉽다. +- **롤백 계획**: "문제가 생기면 롤백한다"가 아니라 구체적인 조건, 절차, 담당자를 미리 정의한다. +- **스모크 테스트**: 배포 직후 서비스가 최소한 동작하는지 확인하는 핵심 시나리오만 포함한다. 전체 기능 검증은 Verification 단계에서 완료한 것을 전제로 한다. +- **모니터링**: 배포 후 지켜봐야 하는 지표(오류율, 응답 시간, 로그 패턴 등)를 구체적으로 기록한다. diff --git a/.github/templates/sdlc/7_operation.md b/.github/templates/sdlc/7_operation.md new file mode 100644 index 0000000..8e6478a --- /dev/null +++ b/.github/templates/sdlc/7_operation.md @@ -0,0 +1,154 @@ +# 0. 문서 상태 +이 문서의 현재 상태와 식별 정보를 기록한다. 문서 추적과 승인 흐름에 필요한 최소 메타데이터를 적는다. + +- 상태: {{DOC_STATUS:draft|review|confirmed}} +- 문서 ID: {{CYCLE_ID:sdlc-<3자리>__}} +- 이슈명: {{ISSUE_NAME:짧은 한글 또는 영문 이슈명}} +- 참조 Release: {{REL_PATH:docs/sdlc//6_release.md}} +- 작성 시각(KST): {{CREATED_AT_KST:TBD}} +- 마지막 갱신 시각(KST): {{UPDATED_AT_KST:TBD}} + +# 1. Release 인계 요약 +Release에서 완료된 핵심 내용을 요약한다. 원본은 6_release.md를 참조하며, 이 섹션은 Operations 작업의 입력 기준선이 된다. + +## 이슈 목적 +- {{OPS_ISSUE_PURPOSE:Release 이슈명과 핵심 목적 1-2줄}} + +## 배포 결과 요약 +- 배포 환경: {{OPS_DEPLOY_ENV:예. production}} +- 배포 완료 시각(KST): {{OPS_DEPLOYED_AT:TBD}} +- 스모크 테스트 결과: {{OPS_SMOKE_RESULT:통과|일부 실패|미완료}} + +## 이월된 오픈 질문 / 리스크 +Release에서 `Deferred` 처리되어 Operations 단계에서 해소해야 하는 항목을 기록한다. + +- {{OPS_DEFERRED_ITEM_1:없으면 "없음"}} +- {{OPS_DEFERRED_ITEM_2:필요 없으면 삭제}} + +# 2. 운영 모니터링 +배포 후 지속적으로 모니터링해야 하는 항목과 기준을 정의한다. + +## 모니터링 항목 +| 항목 | 확인 방법 | 임계값 / 이상 기준 | 대응 방안 | +|------|---------|----------------|---------| +| {{OPS_MONITOR_ITEM_1}} | {{OPS_MONITOR_METHOD_1}} | {{OPS_MONITOR_THRESHOLD_1}} | {{OPS_MONITOR_ACTION_1}} | +| {{OPS_MONITOR_ITEM_2}} | {{OPS_MONITOR_METHOD_2}} | {{OPS_MONITOR_THRESHOLD_2}} | {{OPS_MONITOR_ACTION_2}} | +| {{OPS_MONITOR_ITEM_3:필요 없으면 삭제}} | {{OPS_MONITOR_METHOD_3}} | {{OPS_MONITOR_THRESHOLD_3}} | {{OPS_MONITOR_ACTION_3}} | + +## 모니터링 담당자 +- {{OPS_MONITOR_OWNER:TBD}} + +# 3. 운영 절차 (런북) +이 변경 사항과 관련된 운영 중 발생할 수 있는 상황별 대응 절차를 정의한다. + +## 정상 운영 확인 절차 +배포 후 일정 주기로 정상 동작을 확인하는 절차를 기술한다. + +1. {{OPS_ROUTINE_STEP_1:예. 오류 로그 확인 (일 1회)}} +2. {{OPS_ROUTINE_STEP_2:필요 없으면 삭제}} + +## 장애 대응 절차 +이 변경과 관련된 장애가 발생했을 때의 초기 대응 절차를 기술한다. + +1. {{OPS_INCIDENT_STEP_1:예. 오류 로그에서 관련 스택 트레이스 확인}} +2. {{OPS_INCIDENT_STEP_2:예. 롤백 판단 기준 확인 후 롤백 또는 핫픽스 결정}} +3. {{OPS_INCIDENT_STEP_3:필요 없으면 삭제}} + +## 에스컬레이션 경로 +장애 대응 중 에스컬레이션이 필요한 경우 연락 대상을 기록한다. + +- {{OPS_ESCALATION_1:TBD}} + +# 4. 운영 중 발생한 이슈 +운영 중 발견된 이슈를 기록한다. 초안 생성 시 비워 두고 운영 중 갱신한다. + +- {{OPS_ISSUE_1:없음 (운영 중 발견 시 기록)}} + +# 5. 리스크 및 오픈 질문 +Operations 단계에서 새로 식별된 리스크와 오픈 질문을 기록한다. + +## 리스크 +- R-1 ({{OPS_RISK_LEVEL_1:High|Medium|Low}}): {{OPS_RISK_1}} + - 완화 방안: {{OPS_MITIGATION_1}} +- R-2 ({{OPS_RISK_LEVEL_2:High|Medium|Low}}): {{OPS_RISK_2:필요 없으면 삭제}} + - 완화 방안: {{OPS_MITIGATION_2:필요 없으면 삭제}} + +## 오픈 질문 +- OQ-1: {{OPS_OPEN_QUESTION_1}} + - 상태: {{OPS_OQ_STATUS_1:Open|Answered|Deferred|Dropped}} + - 처리 방안: {{OPS_OQ_ACTION_1}} + - 종료 조건: {{OPS_OQ_EXIT_1}} +- OQ-2: {{OPS_OPEN_QUESTION_2:필요 없으면 삭제}} + - 상태: {{OPS_OQ_STATUS_2:Open|Answered|Deferred|Dropped}} + - 처리 방안: {{OPS_OQ_ACTION_2}} + - 종료 조건: {{OPS_OQ_EXIT_2}} + +# 6. 다음 Discovery 환류 +운영 중 발견된 인사이트와 개선 사항을 다음 SDLC Discovery의 입력으로 기록한다. + +- {{OPS_FEEDBACK_1:없으면 "없음"}} +- {{OPS_FEEDBACK_2:필요 없으면 삭제}} +- {{OPS_FEEDBACK_3:필요 없으면 삭제}} + +# 7. 확인 체크 +Operations 문서가 완성되었는지 확인한다. + +- [ ] 모니터링 항목 및 임계값 정의 완료 + - 기준: {{CHECK_MONITORING:모니터링 항목에 임계값과 대응 방안이 명시되어야 한다}} +- [ ] 런북(정상 운영/장애 대응 절차) 정의 완료 + - 기준: {{CHECK_RUNBOOK:운영 중 발생 가능한 상황에 대한 절차가 1단계 이상 있어야 한다}} +- [ ] 에스컬레이션 경로 정의 완료 + - 기준: {{CHECK_ESCALATION:장애 시 연락할 담당자가 명시되어야 한다}} +- [ ] 다음 Discovery 환류 항목 작성 (없으면 "없음" 기재) + - 기준: OPS_FEEDBACK 항목이 "없음"이 아닐 경우 구체적으로 기술되었는가 +- [ ] Freeze 확정 담당자(CONFIRMED_BY) 지정 + - 기준: {{CHECK_CONFIRMEDBY_CRITERIA:문서 승인 담당자가 명시되어야 한다}} + +# 8. 파일 처리 결과 +이 Operations 문서 생성/갱신 결과와 참조 문서를 기록한다. + +- 처리 결과: {{FILE_RESULT:생성|갱신|미생성}} +- 생성 경로: {{OUTPUT_PATH}} +- 참조 문서: + - {{REL_PATH:docs/sdlc//6_release.md}} + - {{REFERENCE_1:필요 없으면 삭제}} + +# 9. 사용자 결정 필요 항목 요약 +사용자나 승인자가 결정해야 하는 항목만 모아 정리한다. + +## DECIDE +- {{DECIDE_ITEM_1}} +- {{DECIDE_ITEM_2:필요 없으면 삭제}} + +## CONFIRM +- {{CONFIRM_ITEM_1}} +- {{CONFIRM_ITEM_2:필요 없으면 삭제}} + +## DATA +- {{DATA_ITEM_1}} +- {{DATA_ITEM_2:필요 없으면 삭제}} + +# 10. Operations Freeze +이 SDLC 주기의 최종 확정 플래그를 기록한다. + +## 섹션 참조 +- 운영 모니터링: [# 2. 운영 모니터링](#2-운영-모니터링) +- 런북: [# 3. 운영 절차 런북](#3-운영-절차-런북) +- 다음 Discovery 환류: [# 6. 다음 Discovery 환류](#6-다음-discovery-환류) + +## 확정 플래그 +- Handoff Decision: {{FREEZE_HANDOFF_DECISION:보류}} +- Handoff Rationale: {{FREEZE_HANDOFF_RATIONALE:모니터링 안정화 및 런북 완비 후 주기 완료}} +- SDLC 주기 완료: {{SDLC_CYCLE_COMPLETE:false}} +- Confirmed By: {{CONFIRMED_BY:TBD}} +- Confirmed At (KST): {{CONFIRMED_AT_KST:TBD}} + +--- + +# 11. 작성 가이드 +*이 섹션은 작성 참고용이다. 문서 완성 후 삭제해도 된다.* + +- **모니터링 항목**: "오류가 없는지 확인"처럼 모호한 기준 대신 "5xx 오류율 1% 이상 시 알림" 같이 수치화된 임계값을 명시한다. +- **런북**: 실제 운영자가 참고할 수 있도록 구체적인 명령, 경로, 연락처를 기록한다. +- **다음 Discovery 환류**: 이 주기에서 발견된 기술 부채, 개선 아이디어, 범위에서 제외된 요구사항 등을 기록한다. 이 항목이 다음 `/new-sdlc` 의 입력이 된다. +- **SDLC 주기 완료**: 모니터링 안정화 기간(배포 후 일정 시간 경과, 이상 없음) 확인 후 `true`로 변경한다. diff --git a/.github/templates/sdlc/index.md b/.github/templates/sdlc/index.md new file mode 100644 index 0000000..fa240da --- /dev/null +++ b/.github/templates/sdlc/index.md @@ -0,0 +1,12 @@ +# {{CYCLE_ID}} + +| 단계 | 문서 | 상태 | +|------|------|------| +| 1. Discovery | [1_discovery.md](./1_discovery.md) | `draft` | +| 2. Planning | [2_planning.md](./2_planning.md) | `-` | +| 3. Design | [3_design.md](./3_design.md) | `-` | +| 4. Implementation | [4_implementation.md](./4_implementation.md) | `-` | +| 5. Verification | [5_verification.md](./5_verification.md) | `-` | +| 6. Release | [6_release.md](./6_release.md) | `-` | +| 7. Operations | [7_operations.md](./7_operations.md) | `-` | +| Summary | [summary.md](./summary.md) | `-` | diff --git a/.github/templates/sdlc/summary.md b/.github/templates/sdlc/summary.md new file mode 100644 index 0000000..ee472ea --- /dev/null +++ b/.github/templates/sdlc/summary.md @@ -0,0 +1,16 @@ +# Summary - {{CYCLE_ID:sdlc-<3자리>__}} + +- 이슈명: {{ISSUE_NAME:짧은 한글 또는 영문 이슈명}} +- 상태: {{SUMMARY_STATUS:draft|review|confirmed}} +- 작성 시각(KST): {{CREATED_AT_KST:TBD}} +- 마지막 갱신 시각(KST): {{UPDATED_AT_KST:TBD}} + +## 핵심 요약 + +- {{SUMMARY_POINT_1}} +- {{SUMMARY_POINT_2:필요 없으면 삭제}} + +## 단계별 문서 + +- [Discovery](./1_discovery.md) +- [Index](./index.md)