bf-lead-plan
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseLead Plan (Distribute Pattern)
Lead Plan (Distribute Pattern)
Overview
概述
승인된 Tech Spec을 분석하여 Epic → Story 구조를 생성하고, 각 Story에 난이도(S/M/L/XL)를 태깅한다. Story 문서가 5개 이상이면 Creator 에이전트를 병렬로 스폰하여 문서를 작성한다.
分析已批准的Tech Spec以生成Epic → Story结构,并为每个Story标记难度等级(S/M/L/XL)。当Story文档数量达到5个及以上时,将并行生成Creator Agent来编写文档。
When to Use
使用场景
- 가 스폰
bf-lead-orchestrate - 직접 호출하지 않는다.
- 由生成
bf-lead-orchestrate - 请勿直接调用
Prerequisites
前置条件
- 승인된 Tech Spec:
docs/tech-specs/{TICKET}-tech-spec.md - Tech Spec 리뷰 통과 (사람 개입 ① 완료)
- 已批准的Tech Spec:
docs/tech-specs/{TICKET}-tech-spec.md - Tech Spec审核通过(人工介入①完成)
Error Handling
错误处理
- Tech Spec 파일 미존재: 신호를 orchestrate에 전달 후 종료
"error: tech-spec not found at {경로}" - Story Creator 스폰 실패: Lead가 직접 Story 문서를 작성 (4개 이하일 때와 동일하게 순차 처리)
- conventions.md 미존재: 경고만 표시하고 난이도 태깅은 기본 기준으로 진행 (컨벤션 영향도 반영 불가)
- Tech Spec文件不存在:向orchestrate发送信号后终止
"error: tech-spec not found at {路径}" - Story Creator生成失败:由Lead直接编写Story文档(与4个及以下Story时的顺序处理方式相同)
- conventions.md不存在:仅显示警告,难度标记将按照默认标准进行(无法反映规范的影响)
Instructions
操作步骤
1. 초기 로딩
1. 初始加载
- 읽기
docs/tech-specs/{TICKET}-tech-spec.md - 읽기 (있으면) — 기존 도메인/아키텍처 규칙을 난이도 판정과 Story 분리 기준에 반영
docs/conventions.md
- 读取
docs/tech-specs/{TICKET}-tech-spec.md - 读取(如果存在)——将现有领域/架构规则反映到难度判定和Story拆分标准中
docs/conventions.md
2. Epic 도출
2. 提取Epic
- 기능 단위 또는 도메인 단위로 에픽을 분리한다.
- 에픽 간 의존성을 명시한다.
- 에픽은 순차적으로 실행됨을 기준으로 순서를 결정한다.
- Epic 최소 규모: Epic당 Story 3개 이상을 권장한다. Story 2개 이하인 Epic이 나오면 인접 Epic과 병합을 검토한다. 단, 도메인 경계가 명확하여 병합이 부자연스러운 경우(예: 인증 vs 결제)는 2개도 허용한다. Epic마다 E2E 검증·통합 리뷰·사람 확인 등 고정 오버헤드가 발생하므로, 불필요하게 작은 Epic은 피한다.
- Story 0개 에픽 처리: 인프라 준비, 설정 변경 등 Story로 분해할 수 없는 에픽은 sprint-status.yaml에 Story 없이 에픽만 등록하고, 로 초기화한다 (기본 템플릿의
e2e: passed이 아닌pending로 직접 설정).passed
- 按功能单元或领域单元拆分Epic
- 明确Epic之间的依赖关系
- 以Epic需按顺序执行为基准确定顺序
- Epic最小规模:建议每个Epic包含3个及以上Story。若出现包含2个及以下Story的Epic,需考虑与相邻Epic合并。但如果领域边界清晰,合并会显得突兀(例如:认证 vs 支付),则允许保留2个Story的Epic。由于每个Epic都会产生E2E验证、集成审核、人工确认等固定开销,应避免不必要的小型Epic。
- 无Story的Epic处理:对于无法拆分为Story的Epic(如基础设施准备、配置变更等),直接在sprint-status.yaml中仅注册Epic,不添加Story,并将初始化为
e2e(而非默认模板中的passed)。pending
3. Story 구조 결정
3. 确定Story结构
각 Epic 내 Story를 결정한다:
- Story는 병렬 실행 가능한 단위로 분리한다.
- 각 Story에 명확한 AC를 포함한다.
- Story 간 의존성이 있으면 Dependencies 섹션에 명시한다.
确定每个Epic内的Story:
- 将Story拆分为可并行执行的单元
- 每个Story需包含明确的验收条件(AC)
- 若Story之间存在依赖关系,需在Dependencies部分明确说明
4. 난이도 태깅
4. 难度标记
<HARD-GATE>
모든 Story에 반드시 난이도(S/M/L/XL)를 태깅해야 한다. 난이도 태그 없이 Story 문서를 완성하지 않는다. 난이도는 agent 구성(모델 선택, 팀 규모)을 결정하는 핵심 입력이다.
</HARD-GATE>
각 Story에 난이도를 태깅한다:
| 난이도 | 기준 |
|---|---|
| S (Simple) | 단일 파일, 명확한 AC, 의존성 없음 |
| M (Medium) | 2~3 파일, 모듈 간 연결 있음 |
| L (Large) | 다수 파일, 아키텍처 영향 큼 |
| XL (Complex) | 크로스 레이어, 보안/성능 고려, 설계 판단 포함 |
- 에 아키텍처 규칙이 정의되어 있으면, 해당 규칙의 영향을 받는 Story의 난이도를 상향 조정한다 (예: 컨벤션에 엄격한 보안 규칙이 있으면 관련 Story를 M→L로).
docs/conventions.md
<HARD-GATE>
必须为所有Story标记难度等级(S/M/L/XL)。不得在未标记难度的情况下完成Story文档。难度等级是决定Agent配置(模型选择、团队规模)的核心输入。
</HARD-GATE>
为每个Story标记难度等级:
| 难度 | 判定标准 |
|---|---|
| S (Simple) | 单文件、明确的AC、无依赖关系 |
| M (Medium) | 2~3个文件、存在模块间关联 |
| L (Large) | 多文件、对架构影响较大 |
| XL (Complex) | 跨层、需考虑安全/性能、包含设计决策 |
- 若中定义了架构规则,需将受该规则影响的Story难度等级上调(例如:若规范中有严格的安全规则,则将相关Story从M调整为L)
docs/conventions.md
5. Story 문서 작성 (Distribute Pattern)
5. 编写Story文档(Distribute模式)
Story 5개 이상:
- Creator 에이전트를 스폰한다 ().
model: sonnet - 각 Creator에게 전달:
- Story AC, Epic 컨텍스트, Story 문서 템플릿 (아래 Output Format 참조)
- Lead가 모든 Creator의 + story 파일을 수집한다.
"done"
Story 4개 이하:
- Lead가 직접 순차적으로 Story 문서를 작성한다.
Story数量≥5个时:
- 生成Creator Agent()
model: sonnet - 向每个Creator传递:
- Story验收条件、Epic上下文、Story文档模板(参考下方输出格式)
- 由Lead收集所有Creator返回的信号及story文件
"done"
Story数量≤4个时:
- 由Lead直接按顺序编写Story文档
6. Sprint 식별자 결정
6. 确定Sprint标识符
Sprint 식별자는 Jira 티켓 번호를 그대로 사용한다 (예: ):
HACKLE-13554- 스폰 시 전달받은 번호를 sprint-status.yaml의 최상위 키로 사용
{TICKET} - 디렉토리에 이미 같은 티켓의 아카이브가 있으면 에러 보고
docs/archive/
Sprint标识符直接使用Jira工单编号(例如:):
HACKLE-13554- 将生成时接收到的编号作为sprint-status.yaml的顶级键
{TICKET} - 若目录中已存在相同工单的存档,则上报错误
docs/archive/
7. sprint-status.yaml 생성
7. 生成sprint-status.yaml
<HARD-GATE>
sprint-status.yaml의 모든 메트릭 필드(model_used, ralph_retries, ralph_approaches, review_blockers, review_recommended, failure_tag, is_regression, parent_story, ralph_stuck)를 기본값(0/null/false)으로 초기화해야 한다. 필드 누락은 이후 bf-metrics 분석을 오염시킨다.
</HARD-GATE>
yaml
{TICKET}:
epic-1:
story-1:
status: todo
difficulty: S
tdd: pending
review: pending
model_used: null
ralph_retries: 0
ralph_approaches: 0
review_blockers: 0
review_recommended: 0
failure_tag: null
is_regression: false
parent_story: null
ralph_stuck: false
story-2:
status: todo
difficulty: M
tdd: pending
review: pending
model_used: null
ralph_retries: 0
ralph_approaches: 0
review_blockers: 0
review_recommended: 0
failure_tag: null
is_regression: false
parent_story: null
ralph_stuck: false
e2e: pending메트릭 필드 기본값: 모든 필드는 0/null/false로 초기화. 각 필드는 이후 Lead 스킬들이 기록한다:
,model_used,ralph_retries,ralph_approaches: bf-lead-implementralph_stuck ,review_blockers: bf-lead-reviewreview_recommended ,failure_tag,is_regression: E2E agentparent_story
<HARD-GATE>
sprint-status.yaml中的所有指标字段(model_used, ralph_retries, ralph_approaches, review_blockers, review_recommended, failure_tag, is_regression, parent_story, ralph_stuck)必须初始化为默认值(0/null/false)。字段缺失会污染后续的bf-metrics分析。
</HARD-GATE>
yaml
{TICKET}:
epic-1:
story-1:
status: todo
difficulty: S
tdd: pending
review: pending
model_used: null
ralph_retries: 0
ralph_approaches: 0
review_blockers: 0
review_recommended: 0
failure_tag: null
is_regression: false
parent_story: null
ralph_stuck: false
story-2:
status: todo
difficulty: M
tdd: pending
review: pending
model_used: null
ralph_retries: 0
ralph_approaches: 0
review_blockers: 0
review_recommended: 0
failure_tag: null
is_regression: false
parent_story: null
ralph_stuck: false
e2e: pending指标字段默认值:所有字段初始化为0/null/false。后续将由各Lead技能负责记录:
,model_used,ralph_retries,ralph_approaches:由bf-lead-implement记录ralph_stuck ,review_blockers:由bf-lead-review记录review_recommended ,failure_tag,is_regression:由E2E agent记录parent_story
8. 파일 저장 및 커밋
8. 保存文件并提交
- Story 파일:
docs/stories/{TICKET}-story-{N}.md - sprint-status.yaml:
docs/sprint-status.yaml - git commit하지 않는다 — docs/ 산출물은 Phase 4 Archive에서 일괄 커밋한다.
- Story文件:
docs/stories/{TICKET}-story-{N}.md - sprint-status.yaml:
docs/sprint-status.yaml - 请勿执行git commit —— docs/产出物将在Phase 4 Archive阶段统一提交
9. Done 신호
9. 发送Done信号
- 스폰한 상위 에이전트에 전달: + stories/ 경로 + sprint-status.yaml 경로
"done" - 종료 (컨텍스트 소멸).
- 向生成当前Agent的上级Agent发送:+ stories/路径 + sprint-status.yaml路径
"done" - 终止(上下文销毁)
Output Format
输出格式
Story 문서 템플릿
Story文档模板
markdown
undefinedmarkdown
undefined{TICKET}-story-{N}: {Story 제목}
{TICKET}-story-{N}: {Story标题}
에픽
所属Epic
{소속 에픽 ID 및 이름}
{所属Epic ID及名称}
난이도
难度等级
{S | M | L | XL} — {난이도 판정 근거}
{S | M | L | XL} — {难度判定依据}
인수 조건
验收条件
- AC 1: {구체적이고 테스트 가능한 기준}
- AC 2: ...
- AC 1: {具体可测试的标准}
- AC 2: ...
기술 노트
技术笔记
- 변경 대상 파일/모듈
- 주요 라이브러리 (구현에 핵심적인 외부 라이브러리 — 예: zod, react-hook-form, @tanstack/react-query)
- 의존성 (다른 Story와의 관계)
- 주의사항
- 变更目标文件/模块
- 核心库(对实现至关重要的外部库——例如:zod, react-hook-form, @tanstack/react-query)
- 依赖关系(与其他Story的关联)
- 注意事项
의존성
依赖关系
- {의존하는 Story ID} (있는 경우)
undefined- {依赖的Story ID}(若有)
undefined