--- name: bf-execute description: BF 워크플로우의 사람-시스템 경계 허브. orchestrate를 모드별로 스폰하고, 에픽 단위 루프를 돌며 사람과 소통하는 유일한 경계이다. --- # BF Execute (Entry Point) ## Overview BF 워크플로우의 실행 진입점이자 **사람-시스템 경계 허브**이다. `bf-lead-orchestrate`를 모드별로 스폰하여 에픽 단위 루프를 돌며, 각 에픽 완료 후 사람에게 결과를 제시한다. 시스템 내부 에이전트는 사람과 직접 소통하지 않으며, bf-execute가 유일한 소통 경계이다. ## When to Use - 사용자가 `/bf-execute`를 입력했을 때 - `/bf-spec`으로 Tech Spec이 승인된 후 다음 단계로 진행할 때 ## Prerequisites - 승인된 Tech Spec: `docs/tech-specs/{TICKET}-tech-spec.md` - Tech Spec 리뷰 통과 (사람 개입 ① 완료) ## Error Handling - Tech Spec 미존재: "Tech Spec 파일이 없습니다. `/bf-spec`으로 먼저 Tech Spec을 작성하고 리뷰를 받으세요." 안내 - Tech Spec 리뷰 미존재 (`docs/reviews/{TICKET}-tech-spec-review.md` 없음): "Tech Spec 리뷰가 수행되지 않았습니다. `/bf-spec`에서 리뷰를 포함한 전체 흐름을 실행하세요." 안내 - orchestrate 스폰 실패: "에이전트 생성에 실패했습니다. 잠시 후 다시 시도하거나, Claude Code를 재시작하세요." 안내 ## Instructions ### 1. 사전 확인 - `docs/tech-specs/{TICKET}-tech-spec.md` 존재 확인 - 사용자에게 Jira 티켓 번호를 확인한다 (미제공 시 요청). ### 2. Plan 단계 — orchestrate (plan 모드) 스폰 - Task tool 사용, `model: sonnet` (plan 모드는 단순 라우터 역할이므로 Sonnet으로 충분) - 전달: `mode: "plan"`, tech-spec 경로, conventions.md 경로 (있으면) - 수신 대기: `"done"` + sprint-status.yaml 경로 + stories/ 경로 - 수신 후: sprint-status.yaml을 읽어 에픽/스토리 구조를 사람에게 제시한다. ### 3. 에픽 루프 sprint-status.yaml의 에픽을 순서대로 순회한다. 각 에픽에 대해: #### 3a. orchestrate (epic 모드) 스폰 - Task tool 사용, `model: opus` - 전달: `mode: "epic"`, `epic_id`, tech-spec 경로, conventions.md 경로 - 수정 재실행인 경우: `modification_path` 추가 전달 - 수신 대기: `"done"` + sprint-status.yaml 경로 + review.md 경로 #### 3b. 에픽 결과 제시 에픽 결과를 사람에게 반드시 제시하고 판단을 받아야 한다. 결과가 깨끗해 보여도(Blocker 0, E2E passed) 자동으로 다음 에픽으로 진행하지 않는다. 이것이 사람 판단 ②이며, BF 워크플로우에서 사람이 개입하는 정확히 2개 지점 중 하나이다. orchestrate 완료 후 sprint-status.yaml과 review.md를 읽어 사람에게 제시한다: ``` ## Epic {EPIC-ID} 완료 ### Story 결과 | 스토리 | 상태 | 난이도 | 재시도 횟수 | Stuck | |--------|------|--------|------------|-------| | story-1 | done | S | 0 | - | | story-2 | done | M | 2 | - | | story-3 | skipped (stuck) | L | 5 | stuck.md 참조 | ### E2E: {passed | skipped | escalated | max-regression-cycles} ### Integration Review: Blockers {N}건, Recommended {N}건 ### 상세: docs/reviews/{EPIC-ID}-review.md > ⚠️ (모든 Story가 skipped인 경우에만 표시) > 이 에픽의 모든 Story가 skipped(stuck) 상태입니다. 진행 시 해당 기능이 구현되지 않은 상태로 넘어갑니다. 진행하시겠습니까? 1. 다음 에픽으로 진행 2. 수정 후 재실행 (수정 내용 입력) 3. 워크플로우 중단 ``` #### 3c. 사람 판단 처리 사람의 선택에 따라: **1. 다음 에픽으로 진행:** - 해당 에픽의 사람 수용 상태를 sprint-status.yaml에 반영한다 (`yq -i` 사용): - `status: skipped`인 Story의 `review`를 `"approved"`로 설정 (사람이 skip을 수용) - `review: pending`인 `status: done` Story의 `review`를 `"approved"`로 설정 (사람이 Blocker를 수용) ```bash # skipped Story review 정리 yq -i '....review = "approved"' docs/sprint-status.yaml # Blocker 수용 — done Story의 pending review를 approved로 전환 yq -i '....review = "approved"' docs/sprint-status.yaml ``` - 다음 에픽의 3a로 이동한다. **2. 수정 후 재실행:** - 사람이 수정 내용을 텍스트로 입력한다. - bf-execute가 수정 내용을 분석하여 대상 Story를 추론하고, 사람에게 확인한다: - "수정 대상 Story: story-1, story-3으로 판단됩니다. 맞습니까?" - 사람이 수정하면 그에 따른다. - `docs/reviews/{EPIC-ID}-modification.md`에 기록한다: ```markdown # {EPIC-ID} Modification ## 수정 지시 {사람이 입력한 수정 내용 원문} ## 대상 Story - {확인된 수정 대상 Story ID 목록} ``` - **git commit하지 않는다** — docs/ 산출물은 Phase 4 Archive에서 일괄 커밋한다. - 같은 에픽에 대해 orchestrate를 epic 모드로 다시 스폰한다 (`modification_path` 전달). - 3b로 돌아가 결과를 다시 제시한다. **3. 워크플로우 중단:** - 현재 상태를 안내하고 종료한다. - `/bf-resume`으로 재개 가능함을 안내한다. ### 4. 전체 완료 모든 에픽 완료 후: ``` 워크플로우가 완료되었습니다. 다음 단계: 1. /bf-archive-sprint — 스프린트 아카이빙 2. /bf-metrics — 메트릭 분석 (선택) 3. /bf-update-conventions — 컨벤션 업데이트 ``` ## Output Format - 사용자에게 에픽별 결과 제시 + 판단 요청 - 완료 시 다음 단계 안내 - 모든 산출물은 orchestrate 이하 Lead들이 생성 (메인 세션은 modification.md만 직접 생성)