Squashed '.vendor/stage-pilot/' changes from 7ab085e..551777b

551777b feat: add interface contract and data model baseline support to bootstrap-baseline
f17e086 feat: add bootstrap seed file support to bootstrap-baseline skill
be85338 feat: introduce lightweight change path, change-req skill, and release feedback loop
949bb40 docs(skill): new-discovery 병렬 Discovery 및 active-cycle 처리 규칙 강화
7f96130 docs: fix draft-req skill template paths
94b1445 diff --git a/.github/skills/draft-batch-design/SKILL.md b/.github/skills/draft-batch-design/SKILL.md index 5f87d00..944e075 100644 --- a/.github/skills/draft-batch-design/SKILL.md +++ b/.github/skills/draft-batch-design/SKILL.md @@ -1,6 +1,6 @@  ---  name: draft-batch-design -description: "Use when: drafting the design document for an existing batch, running /draft-batch-design with a BAT ID, filling docs/batches/<BAT_ID>/design.md, or recording architecture and interface decisions before implementation." +description: "Use when: drafting the design document for an existing batch, running /draft-batch-design with a BAT ID, filling docs/batches/<BAT_ID>/design.md, recording architecture and interface decisions before implementation, or planning updates to docs/project-structure.md and docs/runtime-flows.md."  argument-hint: "예: bat-001 또는 docs/batches/bat-001_20260424_scaffold"  user-invocable: true  --- @@ -9,27 +9,43 @@ user-invocable: true
d1ce3ce 프로세스 완전 변경

git-subtree-dir: .vendor/stage-pilot
git-subtree-split: 551777bc7009ee133fbaab1267ca324f1dc3c6bb
This commit is contained in:
2026-04-30 13:00:41 +00:00
parent 8406e6f7af
commit 362b008940
106 changed files with 6716 additions and 4165 deletions
+194 -198
View File
@@ -1,243 +1,239 @@
# 플레이스홀더 가이드
이 파일은 `.github/templates/` 및 `.github/prompts/`에서 사용하는 `{{...}}` 플레이스홀더의 문법, 처리 주체, 전체 목록을 정의한다.
템플릿을 수정하거나 새 프롬프트를 작성할 때 이 파일을 기준으로 한다.
이 파일은 active workspace 기준으로 `.github/templates/`와 `.github/skills/`에서 사용하는 플레이스홀더의 문법과 처리 원칙을 정의한다.
---
기본 전제는 아래와 같다.
- active SDLC 진입점은 skill-only 체계다.
- baseline 문서와 active index 초기화는 `bootstrap-baseline`이 담당하며, 이 단계는 Discovery unit를 만들지 않는다.
- `.github/prompts/`는 active 기준 문서가 아니다.
- active 산출물 경로는 `docs/discovery/`, `docs/srs/`, `docs/batches/`, `docs/releases/`다.
## 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:...}}` |
| --- | --- | --- |
| `{{KEY}}` | 단순 치환 대상 | `{{DISCOVERY_ID}}` |
| `{{KEY:hint}}` | 힌트 포함 치환 대상 | `{{CONFIRMED_AT_KST:TBD}}` |
| `{{KEY:opt1\|opt2}}` | 열거형 선택 값 | `{{DOC_STATUS:draft\|confirmed}}` |
> **규칙**: 플레이스홀더를 채울 때는 `{{...}}` 전체를 값으로 교체한다. 힌트나 파이프(`|`) 열거는 최종 문서에 남기지 않는다.
규칙:
---
- 최종 문서에는 `{{...}}` 문법이 남지 않아야 한다.
- 힌트 텍스트는 치환 시 함께 제거한다.
- 사람 승인 없이는 확정할 수 없는 값은 본문에 무리하게 확정하지 말고 Notes 또는 결정 필요 항목으로 남긴다.
## 2. 처리 주체 분류
## 2. 처리 주체
플레이스홀더는 **누가 채워야 하는가**에 따라 세 가지로 나뉜다.
플레이스홀더는 아래 세 가지 처리 주체 중 하나에 속한다.
### A. 자동 치환 (Auto — 프롬프트 실행 시 agent가 즉시 채움)
### A. 자동 치환
| 키 | 치환 값 | 사용 위치 |
|---|---|---|
| `{{DOC_STATUS}}` / `{{DOC_STATUS:draft\|review\|confirmed}}` | `draft` | 모든 SDLC 문서 `#0` |
| `{{CYCLE_ID}}` / `{{CYCLE_ID:sdlc-<3자리>_<YYYYMMDD>_<topic-slug>}}` | 계산된 주기 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` |
- ID, 생성 시각, 갱신 시각, 상태 기본값처럼 실행 시점에 자동으로 정해지는 값
- 예:
- `{{DISCOVERY_ID}}`
- `{{CONFIRMED_AT_KST}}`
- `{{BAT_ID}}`
- `{{REL_ID}}`
---
### B. AI 근거 기반 치환
### B. AI 추론 치환 (Infer — agent가 입력 요청과 저장소 맥락을 바탕으로 초안을 채움)
- 현재 저장소 상태, 상위 문서, 이미 확정된 값으로 채울 수 있는 항목
- 예:
- Discovery의 현재 상태 요약
- REQ의 Impacted Area 초안
- Batch planning의 dependency 정리
- Release rollout checklist 초안
> 입력만으로 합리적 추론이 가능한 항목은 플레이스홀더로 남기지 않고 자연어 문장으로 채운다.
> 추론이 불확실한 경우에는 `_DECISION` 접미사 형태로 남기고 `review-discovery` 단계에서 처리한다.
### C. 사람 결정 필요
| 키 | 설명 | 위치 |
|---|---|---|
| `{{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` |
- 정책 선택, 승인자 지정, 우선순위 확정, 외부 환경 정보처럼 사람 판단이 필요한 값
- 이런 항목은 무리하게 확정하지 않는다.
---
## 3. 경로별 플레이스홀더 원칙
### C. 사용자 결정 필요 (Decide — 자동 추론 불가, 사용자/승인자가 직접 채워야 함)
### 3.0 Bootstrap baseline 템플릿
> 이 항목들은 `#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` |
- `.github/templates/bootstrap/baseline-seed.yaml`
- `.github/templates/project-structure.md`
- `.github/templates/runtime-flows.md`
- `.github/templates/discovery/index.md`
- `.github/templates/srs/index.md`
- `.github/templates/batches/index.md`
- `.github/templates/releases/index.md`
---
처리 원칙:
## 3. `_DECISION` 접미사 패턴
- `bootstrap-baseline`은 먼저 `.stagepilot/bootstrap/baseline.yaml` seed를 만들거나 보강한다.
- greenfield 저장소처럼 관찰 가능한 정보가 부족하면 최소 질문 세트로 seed를 채운다.
- `bootstrap-baseline`은 baseline 문서와 index를 초기화하지만 Discovery 문서를 만들지 않는다.
- baseline 문서는 seed를 source of truth로 렌더링하고, 필요하면 저장소 관찰값으로 보강한다.
- index 문서는 빈 register 골격만 준비하고, 실제 unit 행은 이후 skill이 추가한다.
섹션 본문에 판단이 필요한 항목이 생겼을 때 AI agent가 임시로 삽입하는 마커이다.
주요 키:
- **형식**: `{{원래키_N_DECISION:판단 내용 또는 질문}}`
- **예시**: `{{TARGET_STATE_2_DECISION:README 확장으로 할지, 별도 파일로 분리할지 결정 필요}}`
- **처리 규칙**:
- `review-discovery` 프롬프트 실행 시 각 항목을 검토하여 아래 중 하나로 처리한다.
- 추론 가능 → 자연어 문장으로 치환
- 사용자 결정 필요 → `#10`으로 이동하고 본문은 맥락 설명 문장으로 대체
- `{{BASELINE_MODE}}`
- `{{BASELINE_SEED_PATH}}`
- `{{PROJECT_SUMMARY}}`
- `{{PRIMARY_DOMAIN}}`
- `{{TECH_STACK_BULLETS}}`
- `{{PRIMARY_RUNTIME}}`
- `{{PRIMARY_ENTRYPOINT_BULLETS}}`
- `interfaces.contracts[*]`
- `data_model.entities[*]`
---
### 3.0.1 선택 cross-cutting 템플릿
---
대상 경로:
## Planning 전용 플레이스홀더 (`2_planning.md`)
- `.github/templates/interface-contract.md`
- `.github/templates/data-model.md`
### A. 자동 치환 (Auto)
처리 원칙:
| 키 | 치환 값 | 사용 위치 |
|---|---|---|
| `{{DISCOVERY_PATH}}` | `docs/sdlc/<CYCLE_ID>/1_discovery.md` | `#0`, `#9` |
- 이 문서들은 optional cross-cutting reference다.
- active unit의 source of truth를 대체하지 않고, 여러 REQ와 batch에 공통으로 반복되는 계약 정보를 모아 둔다.
- `bootstrap-baseline`은 seed의 `interfaces`와 `data_model` 섹션을 우선 읽고, 값이 없으면 `runtime`, `structure`, `notes`를 바탕으로 기본 초안을 구체적으로 유도한다.
- baseline 수준의 변경이 있을 때만 갱신하고, REQ별 acceptance criteria를 그대로 복사하지 않는다.
### 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` |
- `{{BASELINE_MODE}}`
- `{{BASELINE_SEED_PATH}}`
- `{{PROJECT_SUMMARY}}`
- `{{PRIMARY_DOMAIN}}`
- `{{PRIMARY_RUNTIME}}`
- `{{INTERFACE_NAME_1}}`
- `{{INTERFACE_PURPOSE_1}}`
- `{{INTERFACE_SUMMARY_BULLETS}}`
- `{{INTERFACE_INPUTS_1}}`
- `{{INTERFACE_OUTPUTS_1}}`
- `{{INTERFACE_ERRORS_1}}`
- `{{INTERFACE_COMPATIBILITY_1}}`
- `{{INTERFACE_SHARED_CONSTRAINTS_BULLETS}}`
- `{{INTERFACE_CURRENT_GAPS_BULLETS}}`
- `{{PERSISTENCE_BACKEND}}`
- `{{ENTITY_NAME_1}}`
- `{{ENTITY_PURPOSE_1}}`
- `{{ENTITY_SOURCE_1}}`
- `{{ENTITY_LIFECYCLE_1}}`
- `{{MODEL_SUMMARY_BULLETS}}`
- `{{ENTITY_FIELDS_1}}`
- `{{ENTITY_RELATIONSHIPS_1}}`
- `{{CONSISTENCY_RULE_BULLETS}}`
- `{{PERSISTENCE_NOTES_BULLETS}}`
- `{{MODEL_CURRENT_GAPS_BULLETS}}`
### C. 사용자 결정 필요 (Decide)
### 3.1 Discovery 템플릿
| 키 | 설명 | 위치 |
|---|---|---|
| `{{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` |
대상 경로:
---
- `.github/templates/discovery/discovery.md`
- `docs/discovery/*.md`
## Design 전용 플레이스홀더 (`3_design.md`)
주요 키:
### A. 자동 치환 (Auto)
- `{{DISCOVERY_ID}}`
- `{{ISSUE_NAME}}`
- `{{CREATED_AT_KST}}`
- `{{UPDATED_AT_KST}}`
- `{{FREEZE_HANDOFF_DECISION}}`
- `{{READY_FOR_REQ_DRAFTING}}`
- `{{CONFIRMED_BY}}`
- `{{CONFIRMED_AT_KST}}`
| 키 | 치환 값 | 사용 위치 |
|---|---|---|
| `{{PLANNING_PATH}}` | `docs/sdlc/<CYCLE_ID>/2_planning.md` | `#0`, `#8` |
처리 원칙:
### B. AI 추론 치환 (Infer)
- Discovery는 REQ 초안 작성으로 넘길 수 있을 때만 freeze handoff를 완료한다.
- Discovery 문서의 용어는 `Planning` 직결이 아니라 `REQ Drafting` 기준으로 유지한다.
| 키 | 설명 | 위치 |
|---|---|---|
| `{{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` |
### 3.2 SRS 템플릿
### 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` |
- `docs/srs/req-template.md`
- `docs/srs/index.md`
---
주요 키:
## 4. 참조 위치 요약
- `REQ-XXX`
- `Status`
- `Type`
- `Priority`
- `Owner`
| 파일 | 역할 | 관련 플레이스홀더 |
|---|---|---|
| `.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) |
처리 원칙:
- REQ는 `Proposed -> Approved -> Implemented -> Deprecated` 상태를 따른다.
- `draft-req`는 초안을 만들고, `confirm-req`는 `Proposed -> Approved`, `confirm-req-implemented`는 `Approved -> Implemented` 전환을 담당한다.
### 3.3 Batch 템플릿
대상 경로:
- `.github/templates/batches/*`
- `docs/batches/*`
주요 키:
- `{{BAT_ID}}`
- `Profile`
- Included REQ 목록
- Source Discovery
처리 원칙:
- batch는 Approved REQ만 포함한다.
- batch는 `standard` 또는 `batch-lite` profile을 가진다.
- `batch-lite`는 `minor-change` fast path의 기본 delivery profile이며, 처음에는 `index.md`와 `planning.md`만 만들 수 있다.
- planning, design, implementation, verification 문서는 같은 batch 폴더 아래에서 관리한다. 단, `batch-lite`는 design/implementation/verification을 단계 진입 시점에 생성할 수 있다.
- `confirm-batch-verification` 성공 전에는 `release-candidate`로 올리지 않는다.
### 3.4 Release 템플릿
대상 경로:
- `.github/templates/releases/*`
- `docs/releases/*`
주요 키:
- `{{REL_ID}}`
- `Profile`
- `Change Request Input`
- Included Batch
- Rollout Plan
- Rollback Plan
처리 원칙:
- release는 `release-candidate` batch만 포함한다.
- release는 `docs-only`, `tooling`, `app-service` profile 중 하나를 가진다.
- feedback handoff에는 `Discovery Input`, `REQ Input`, `Change Request Input`을 구분해 기록한다.
- `confirm-release`는 release 승인, `capture-release-feedback`는 운영 환류 기록을 담당한다.
## 4. Active Skill Summary
| 목적 | Skill | 주요 입력 | 주요 출력 |
| --- | --- | --- | --- |
| Bootstrap baseline 초기화 | `.github/skills/bootstrap-baseline/SKILL.md` | 저장소 루트, baseline/index 존재 여부 | baseline 문서와 active index |
| Discovery 초안 생성 | `.github/skills/new-discovery/SKILL.md` | 이슈/요청 요약 | `docs/discovery/*.md` |
| Discovery 확정 | `.github/skills/confirm-discovery/SKILL.md` | `DISCOVERY_ID` | confirmed Discovery |
| REQ 초안 생성 | `.github/skills/draft-req/SKILL.md` | `DISCOVERY_ID` | `docs/srs/<Type>/req-*.md` |
| REQ 확정 | `.github/skills/confirm-req/SKILL.md` | `REQ-ID` | Approved REQ |
| REQ 변경 관리 | `.github/skills/change-req/SKILL.md` | `REQ-ID` | Change Log 기반 REQ 갱신 |
| REQ 구현 완료 전환 | `.github/skills/confirm-req-implemented/SKILL.md` | `REQ-ID` 또는 `BAT-ID` | Implemented REQ |
| Batch 추천 | `.github/skills/suggest-batch-reqs/SKILL.md` | `DISCOVERY_ID` 또는 REQ 목록 | batch 후보안 |
| Batch 생성 | `.github/skills/draft-batch/SKILL.md` | Approved REQ 목록 | `docs/batches/<BAT_ID>/` |
| Delivery 진행 | `.github/skills/draft-batch-planning/SKILL.md`, `.github/skills/draft-batch-design/SKILL.md`, `.github/skills/run-batch-implementation/SKILL.md`, `.github/skills/draft-batch-verification/SKILL.md`, `.github/skills/confirm-batch-verification/SKILL.md` | `BAT-ID` | batch 문서와 상태 |
| Release 진행 | `.github/skills/draft-release/SKILL.md`, `.github/skills/confirm-release/SKILL.md`, `.github/skills/capture-release-feedback/SKILL.md` | `BAT-ID` 또는 `REL-ID` | release 문서와 운영 환류 |
| 다음 Discovery 추천 | `.github/skills/suggest-next-discovery/SKILL.md` | `REL-ID` 또는 없음 | follow-up 후보안 |
| 상위 orchestration | `.github/skills/run-sdlc/SKILL.md` | Discovery/REQ/Batch/Release 식별자 | 다음 skill 라우팅 |
## 5. 금지 사항
- active 설명 문서에서 `.github/prompts/`를 기준 경로로 안내하지 않는다.
- `review-*`를 별도 active 단계로 서술하지 않는다.
- `docs/sdlc/`를 신규 active 산출물 경로로 사용하지 않는다.