bf-lead-plan

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Lead 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 파일 미존재:
    "error: tech-spec not found at {경로}"
    신호를 orchestrate에 전달 후 종료
  • 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
    읽기
  • docs/conventions.md
    읽기 (있으면) — 기존 도메인/아키텍처 규칙을 난이도 판정과 Story 분리 기준에 반영
  • 读取
    docs/tech-specs/{TICKET}-tech-spec.md
  • 读取
    docs/conventions.md
    (如果存在)——将现有领域/架构规则反映到难度判定和Story拆分标准中

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)크로스 레이어, 보안/성능 고려, 설계 판단 포함
  • docs/conventions.md
    에 아키텍처 규칙이 정의되어 있으면, 해당 규칙의 영향을 받는 Story의 난이도를 상향 조정한다 (예: 컨벤션에 엄격한 보안 규칙이 있으면 관련 Story를 M→L로).
<HARD-GATE> 必须为所有Story标记难度等级(S/M/L/XL)。不得在未标记难度的情况下完成Story文档。难度等级是决定Agent配置(模型选择、团队规模)的核心输入。 </HARD-GATE>
为每个Story标记难度等级:
难度判定标准
S (Simple)单文件、明确的AC、无依赖关系
M (Medium)2~3个文件、存在模块间关联
L (Large)多文件、对架构影响较大
XL (Complex)跨层、需考虑安全/性能、包含设计决策
  • docs/conventions.md
    中定义了架构规则,需将受该规则影响的Story难度等级上调(例如:若规范中有严格的安全规则,则将相关Story从M调整为L)

5. Story 문서 작성 (Distribute Pattern)

5. 编写Story文档(Distribute模式)

Story 5개 이상:
  • Creator 에이전트를 스폰한다 (
    model: sonnet
    ).
  • 각 Creator에게 전달:
    • Story AC, Epic 컨텍스트, Story 문서 템플릿 (아래 Output Format 참조)
  • Lead가 모든 Creator의
    "done"
    + story 파일을 수집한다.
Story 4개 이하:
  • Lead가 직접 순차적으로 Story 문서를 작성한다.
Story数量≥5个时:
  • 生成Creator Agent(
    model: sonnet
  • 向每个Creator传递:
    • Story验收条件、Epic上下文、Story文档模板(参考下方输出格式)
  • 由Lead收集所有Creator返回的
    "done"
    信号及story文件
Story数量≤4个时:
  • 由Lead直接按顺序编写Story文档

6. Sprint 식별자 결정

6. 确定Sprint标识符

Sprint 식별자는 Jira 티켓 번호를 그대로 사용한다 (예:
HACKLE-13554
):
  • 스폰 시 전달받은
    {TICKET}
    번호를 sprint-status.yaml의 최상위 키로 사용
  • docs/archive/
    디렉토리에 이미 같은 티켓의 아카이브가 있으면 에러 보고
Sprint标识符直接使用Jira工单编号(例如:
HACKLE-13554
):
  • 将生成时接收到的
    {TICKET}
    编号作为sprint-status.yaml的顶级键
  • 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
    ,
    ralph_stuck
    : bf-lead-implement
  • review_blockers
    ,
    review_recommended
    : bf-lead-review
  • failure_tag
    ,
    is_regression
    ,
    parent_story
    : E2E agent
<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
    ,
    ralph_stuck
    :由bf-lead-implement记录
  • review_blockers
    ,
    review_recommended
    :由bf-lead-review记录
  • failure_tag
    ,
    is_regression
    ,
    parent_story
    :由E2E agent记录

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信号

  • 스폰한 상위 에이전트에 전달:
    "done"
    + stories/ 경로 + sprint-status.yaml 경로
  • 종료 (컨텍스트 소멸).
  • 向生成当前Agent的上级Agent发送:
    "done"
    + stories/路径 + sprint-status.yaml路径
  • 终止(上下文销毁)

Output Format

输出格式

Story 문서 템플릿

Story文档模板

markdown
undefined
markdown
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