@boyingliu01/xp-gate 0.8.19 → 0.8.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/lib/init.js +2 -2
  2. package/lib/install-skill.js +13 -4
  3. package/lib/principles.js +5 -0
  4. package/mock-policy/AGENTS.md +3 -3
  5. package/mutation/AGENTS.md +3 -3
  6. package/package.json +1 -1
  7. package/plugins/claude-code/.claude-plugin/plugin.json +1 -1
  8. package/plugins/claude-code/skills/delphi-review/AGENTS.md +3 -3
  9. package/plugins/claude-code/skills/sprint-flow/AGENTS.md +3 -3
  10. package/plugins/claude-code/skills/sprint-flow/SKILL.md +135 -1091
  11. package/plugins/claude-code/skills/sprint-flow/references/orchestration-rules.md +333 -0
  12. package/plugins/claude-code/skills/sprint-flow/references/phase-1-plan.md +17 -46
  13. package/plugins/claude-code/skills/sprint-flow/references/phase-2-build.md +4 -193
  14. package/plugins/claude-code/skills/sprint-flow/references/phase-3-review.md +13 -30
  15. package/plugins/claude-code/skills/sprint-flow/references/phase-6-ship.md +4 -181
  16. package/plugins/claude-code/skills/sprint-flow/references/phase-7-land.md +4 -135
  17. package/plugins/claude-code/skills/sprint-flow/references/phase-8-cleanup.md +4 -187
  18. package/plugins/claude-code/skills/sprint-flow/references/phase-minus-1-isolate.md +58 -0
  19. package/plugins/claude-code/skills/test-specification-alignment/AGENTS.md +3 -3
  20. package/plugins/opencode/package.json +1 -1
  21. package/plugins/opencode/skills/delphi-review/AGENTS.md +3 -3
  22. package/plugins/opencode/skills/sprint-flow/AGENTS.md +3 -3
  23. package/plugins/opencode/skills/sprint-flow/SKILL.md +135 -1091
  24. package/plugins/opencode/skills/sprint-flow/references/orchestration-rules.md +333 -0
  25. package/plugins/opencode/skills/sprint-flow/references/phase-1-plan.md +17 -46
  26. package/plugins/opencode/skills/sprint-flow/references/phase-2-build.md +4 -193
  27. package/plugins/opencode/skills/sprint-flow/references/phase-3-review.md +13 -30
  28. package/plugins/opencode/skills/sprint-flow/references/phase-6-ship.md +4 -181
  29. package/plugins/opencode/skills/sprint-flow/references/phase-7-land.md +4 -135
  30. package/plugins/opencode/skills/sprint-flow/references/phase-8-cleanup.md +4 -187
  31. package/plugins/opencode/skills/sprint-flow/references/phase-minus-1-isolate.md +58 -0
  32. package/plugins/opencode/skills/test-specification-alignment/AGENTS.md +3 -3
  33. package/plugins/qoder/bin/xp-gate-check +5 -1
  34. package/plugins/qoder/skills/delphi-review/AGENTS.md +3 -3
  35. package/plugins/qoder/skills/sprint-flow/AGENTS.md +3 -3
  36. package/plugins/qoder/skills/test-specification-alignment/AGENTS.md +3 -3
  37. package/principles/AGENTS.md +3 -3
  38. package/skills/delphi-review/AGENTS.md +3 -3
  39. package/skills/sprint-flow/AGENTS.md +3 -3
  40. package/skills/sprint-flow/SKILL.md +135 -1091
  41. package/skills/sprint-flow/references/orchestration-rules.md +333 -0
  42. package/skills/sprint-flow/references/phase-1-plan.md +17 -46
  43. package/skills/sprint-flow/references/phase-2-build.md +4 -193
  44. package/skills/sprint-flow/references/phase-3-review.md +13 -30
  45. package/skills/sprint-flow/references/phase-6-ship.md +4 -181
  46. package/skills/sprint-flow/references/phase-7-land.md +4 -135
  47. package/skills/sprint-flow/references/phase-8-cleanup.md +4 -187
  48. package/skills/sprint-flow/references/phase-minus-1-isolate.md +58 -0
  49. package/skills/test-specification-alignment/AGENTS.md +3 -3
@@ -78,69 +78,8 @@ workflow_steps:
78
78
  - `--with-performance`: Enable load/stress testing (backend projects)
79
79
  - `--mode <build_mode>`: Phase 2 build mode. Default = ralph-loop (REQ-level iteration, token-efficient). parallel = legacy all-at-once mode
80
80
 
81
- ---
82
-
83
- ## Scope
84
-
85
- **What this skill does**:
86
- - Automates the full 7-phase development pipeline from requirement to production
87
- - Integrates existing skills (brainstorming, autoplan, delphi-review, TDD, ship, etc.)
88
- - Enforces quality gates and hard transitions between phases
89
- - Captures emergent requirements and feedback for continuous improvement
90
-
91
- **What this skill does NOT do**:
92
- - Replace individual skills — users can still call `delphi-review`, `test-driven-development`, etc. directly
93
- - Bypass quality gates or user confirmations at critical checkpoints
94
- - Automatically merge to main without explicit user approval (Phase 6/7)
95
- - Handle non-development tasks (bug reports, code review requests without implementation, questions)
96
-
97
- **Applicable scenarios**:
98
- - New feature development
99
- - Module creation
100
- - End-to-end implementation of user stories
101
- - Sprint-level planning and execution
102
-
103
- **Not applicable**:
104
- - Single bug fixes (use `/investigate` or direct TDD)
105
- - Code review requests (use `/review` or `delphi-review --mode code-walkthrough`)
106
- - Architecture questions (use `/plan-eng-review`)
107
- - Simple explanations or documentation requests
108
-
109
- ## Examples
110
-
111
- ### Example 1: Full feature sprint
112
- User: `/sprint-flow "开发用户认证模块,支持登录、登出、权限检查"`
113
- Expected behavior: create/verify isolated worktree, run estimate, produce design/spec, build with TDD, review, wait for manual acceptance, then prepare ship path.
114
- Expected output: phase summaries, `specification.yaml`, verification evidence, and PR URL if the user chooses PR shipping.
115
-
116
- ### Example 2: Stop after planning
117
- User: `/sprint-flow "开发 REST API" --stop-at plan`
118
- Expected behavior: complete isolate/estimate/think/plan, produce specification and slices, then stop without implementation.
119
- Expected output: phase-1 summary and clear next command to resume from build.
120
-
121
- ### Example 3: Should not trigger
122
- User: "解释一下这个函数为什么报错"
123
- Expected behavior: do not run sprint-flow; route to investigation/explanation instead.
124
-
125
81
  # Sprint Flow Skill
126
82
 
127
- ## Scope
128
-
129
- **In Scope:**
130
- - Sprint 全流程编排(Phase -1 ISOLATE 到 Phase 8 CLEANUP)
131
- - Git worktree 隔离与环境准备
132
- - 自动规模评估与流程路由(轻量/标准/复杂)
133
- - 多 Skill 串联调用(brainstorming, autoplan, delphi-review, TDD, ralph-loop 等)
134
- - 关键节点暂停与用户决策
135
- - 状态持久化(sprint-state.json)
136
- - 多平台适配(Claude Code, OpenCode, Qoder)
137
-
138
- **Out of Scope:**
139
- - Does NOT handle internal Skill implementation (each Skill remains independent)
140
- - Does NOT write business code
141
- - Does NOT configure CI/CD pipelines (project's own responsibility)
142
- - Does NOT deploy to production (only up to PR creation + merge)
143
-
144
83
  ## Security Notes
145
84
 
146
85
  - sprint-flow **不执行任何破坏性命令**(no `rm -rf`, `git push --force`, `DROP TABLE` 等)
@@ -174,53 +113,34 @@ Expected behavior: do not run sprint-flow; route to investigation/explanation in
174
113
  调用 `/sprint-flow "[需求描述]"` 后,自动执行以下流程:
175
114
 
176
115
  ```
177
- Phase -1: ISOLATE → ⚠️ 检测保护分支(main/master/develop/trunk/mainline) → 强制创建 git worktree
178
- 已在 worktree 中 → 跳过 → 项目 setup → .gitignore 校验sprint-state isolation 记录
179
- Phase -0.5: AUTO-ESTIMATE自动评估需求规模 → ⚠️ 展示评估结果,用户确认
180
- → 轻量:Phase 0-3 reduced intensity 执行 THINK/PLAN/review(不跳过 delphi-review
181
- 标准:正常流程 Phase 0-4
182
- 复杂:完整流程 Phase 0-8 + 风险警告
183
- Phase 0: THINK → brainstorming → ⚠️ HARD-GATE: 设计未批准不可进入实现Design Document (AI编辑行为约束: 原则3 Surgical Changes, 验证循环要求: 原则4 Goal-Driven Execution - 见 AGENTS.md "## AI CODING DISCIPLINE (Karpathy Principles)")
184
- Phase 1: PLANautoplan (orchestrator直执行,taste_decisions交互确认) delphi-review (subagent自动多轮至APPROVED)
185
- 自动生成 specification.yaml(无需独立 skill)
186
- Phase 2: BUILD⚠️ GITHOOKS-GATE: 检查并安装 Git Hooks(缺失→阻断)
187
- dispatching-parallel-agents (并行检测) + executing-plans (隔离执行)
188
- → test-driven-development (RED→GREEN→REFACTOR)
189
- → freeze (盲评隔离) → requesting-code-review → unfreeze
190
- → verification-before-completion → ⚠️ (验证失败超过 max 3)
191
- → MVP v1
192
- Phase 3: REVIEW → delphi-review --mode code-walkthrough → test-specification-alignment
193
- → browse → ⚠️ (验证失败)
194
- Phase 4: ⚠️ ⚠️ USER ACCEPTANCE → 必须人工验收 → Emergent Issues List
195
- Phase 5: FEEDBACK → learn + retro(工程回顾)+ systematic-debugging(根因调试)
196
- Phase 6: SHIP → finishing-a-development-branch (4 选项) → ship (PR 路径)
197
- → PR 创建完成
198
- Phase 7: ⚠️ LAND → land-and-deploy → merge PR + wait CI + canary health check
199
- → deploy verification + auto-rollback on failure
200
- Phase 8: CLEANUP → git worktree remove + branch delete + sprint-state.json update → status: merged
201
- → Sprint Summary → IF emergent issues → Sprint 2
116
+ Phase -1: ISOLATE → 保护分支检测→强制worktree
117
+ Phase -0.5: AUTO-ESTIMATE展示评估结果→用户确认路由(轻量/标准/复杂)
118
+ Phase 0: THINKbrainstorming → ⚠️ HARD-GATE(设计未批准→阻断)
119
+ Phase 1: PLAN autoplan delphi-review(等待APPROVED)→specification.yaml
120
+ Phase 2: BUILD GITHOOKS-GATE ralph-loop/TDD → freeze/盲评→verification
121
+ Phase 3: REVIEW delphi-review --mode code-walkthrough test-alignment → browse
122
+ Phase 4: ⚠️ USER ACCEPTANCE必须人工验收Emergent Issues List
123
+ Phase 5: FEEDBACKlearn + retro + systematic-debugging
124
+ Phase 6: SHIP finishing-a-development-branch ship(PR)
125
+ Phase 7: ⚠️ LAND land-and-deploy merge + CI + canary
126
+ Phase 8: CLEANUP worktree remove + branch delete + sprint summary
202
127
  ```
203
128
 
204
129
  ---
205
130
 
206
131
  ## 暂停点设计(不是随时停,而是设计明确的暂停点)
207
132
 
208
- | 暂停点位置 | 触发条件 | 用户操作 | 自动恢复条件 |
209
- |-----------|---------|---------|-------------|
210
- | **Phase -1** | ⚠️ **保护分支强制隔离 / --no-isolate 跳过** | 输出 ⚠️ 警告或自动创建 worktree | 自动创建或用户确认后继续 |
211
- | **Phase -0.5** | **AUTO-ESTIMATE 结果展示** | 接受建议 / 修改流程 / 取消 | 用户确认后按路由继续 |
212
- | **Phase 0** | ⚠️ **设计未 APPROVED (HARD-GATE)** | 根据反馈修改设计 | 设计 APPROVED 后继续 |
213
- | Phase 1 | autoplan surfacing taste_decisions | 用户确认每个决策 | 确认后自动继续 |
214
- | Phase 1 | delphi-review APPROVED | 修复并重新评审 | APPROVED 后自动继续 |
215
- | Phase 2 | 验证失败超过 max 3 | 用户决定修复或放弃 | 验证通过后自动继续 |
216
- | Phase 2 | 成本超阈值 | 用户决定继续或暂停 | 用户确认后自动继续 |
217
- | Phase 3 | browse 发现问题 | 回退 Phase 2(不暂停) | 验证通过后自动继续 |
218
- | **Phase 4** | ⚠️ **必须人工验收** | 用户实际使用后确认 | 用户确认后继续 |
219
- | **Phase 5** | ⚠️ **必须执行,不可跳过 (HARD-GATE)** | Phase 5 完成后进入 Phase 6 | `feedback-log.md` 生成后自动继续 |
220
- | Phase 6 | finishing-a-development-branch | 用户选择 4 选项 (merge/PR/discard/keep) | 确认后自动继续 |
221
- | Phase 6 | ship PR 创建(PR 路径)| 用户确认合并 | 合并后自动继续 |
222
- | **Phase 7** | **land-and-deploy 完成/失败** | **用户确认合并结果 / 处理部署失败** | **确认/修复后继续** |
223
- | **Phase 8** | **worktree 清理完成/失败** | **用户确认清理 / 手动处理残留** | **确认后结束流程** |
133
+ - **Phase -1**: 保护分支强制隔离 输出警告或自动创建 worktree 自动恢复
134
+ - **Phase -0.5**: AUTO-ESTIMATE 结果展示 → 用户确认 → 按路由继续
135
+ - **Phase 0**: 设计未 APPROVED (HARD-GATE) 用户修改 APPROVED 后继续
136
+ - **Phase 1**: autoplan taste_decisions 用户确认 / delphi-review 未APPROVED 修复→APPROVED
137
+ - **Phase 2**: 验证失败>max3 用户决策修复/放弃 / 成本超阈值 用户确认
138
+ - **Phase 3**: browse 发现问题 回退 Phase 2(不暂停)
139
+ - **Phase 4**: ⚠️ 必须人工验收 用户确认后继续
140
+ - **Phase 5**: ⚠️ 不可跳过 (HARD-GATE) feedback-log.md 生成后自动继续
141
+ - **Phase 6**: finishing-a-development-branch(4选项) 确认; ship PR 用户确认合并
142
+ - **Phase 7**: land-and-deploy 完成/失败 用户确认合并结果/处理部署失败
143
+ - **Phase 8**: worktree 清理完成/失败 用户确认 结束流程
224
144
 
225
145
  ---
226
146
 
@@ -231,7 +151,7 @@ Phase 8: CLEANUP → git worktree remove + branch delete + sprint-state.json upd
231
151
  | 1 | **-1** | **ISOLATE** | Detect protected branch → Create git worktree → Setup project → Validate .gitignore → Record sprint state | Worktree path |
232
152
  | 2 | **-0.5** | **AUTO-ESTIMATE** | Analyze code structure → Count references → Assess cross-module impact → Classify (lightweight/standard/complex) | Impact assessment + flow recommendation |
233
153
  | 3 | **0** | **THINK** | brainstorming → Generate design doc + CONTEXT.md + ADR | Design document |
234
- | 4 | **1** | **PLAN** | **Orchestrator: autoplan → Subagent: delphi-review (auto multi-round) → to-issues → Generate specification.yaml + slices-manifest.json** | specification.yaml |
154
+ | 4 | **1** | **PLAN** | autoplan → delphi-review (mandatory; lightweight allowed) → Generate specification.yaml + slices-manifest.json | specification.yaml |
235
155
  | 5 | **2** | **BUILD** | GITHOOKS-GATE → ralph-loop (default) or parallel → TDD → freeze → blind review → verification | MVP code |
236
156
  | 6 | **3** | **REVIEW** | delphi-review --mode code-walkthrough → test-specification-alignment → browse QA → benchmark (optional) | Review report |
237
157
  | 7 | **4** | **USER ACCEPT** | **Manual verification** → Capture emergent issues | Emergent issues list |
@@ -287,135 +207,37 @@ Sprint Flow: ISOLATE → AUTO-ESTIMATE → THINK → PLAN → BUILD → REVIEW
287
207
 
288
208
  ### Phase -1: ISOLATE(git worktree 隔离)
289
209
 
290
- **执行时机**: `/sprint-flow` 启动后、Phase 0 THINK 之前。**自动执行**。
291
-
292
- **目的**: 默认在 git worktree 中隔离 sprint 工作,防止在保护分支上直接运行导致代码污染。
293
-
294
- **AI agent 直接执行 bash 命令**(不需要调用外部 skill),步骤如下:
295
-
296
- | 步骤 | 动作 | 说明 |
297
- |------|------|------|
298
- | 0 | **检测当前环境** | 运行 `git rev-parse --git-dir` 和 `git rev-parse --git-common-dir`。如果 `GIT_DIR != GIT_COMMON`:已在 worktree 中 → 输出 "Already in isolated worktree" → 进入 Phase 0 |
299
- | 0.5 | **Sprint Lock 检测(Issue #144)** | 检查 `.sprint-state/sprint.lock` 是否存在: `[ -f .sprint-state/sprint.lock ]`。如果存在: 读取锁内容,检查是否 stale(超过 24 小时或 worktree 目录不存在)→ stale → 输出 `[WARN] 发现过期 sprint lock,将覆盖` → 更新锁。非 stale → 输出 `[BLOCK] 已有活跃 sprint (ID: {sprint_id}, started: {started_at})。请先完成当前 sprint 或手动删除 .sprint-state/sprint.lock` → 退出。锁不存在 → 创建锁: `echo '{"sprint_id":"sprint-YYYY-MM-DD-NN","started_at":"<ISO8601>"}' > .sprint-state/sprint.lock` |
300
- | 1 | **检查保护分支** | 获取当前分支名 `git branch --show-current`。保护分支列表: `main, master, develop, trunk, mainline`。保护分支 → 强制创建 worktree。非保护分支 → 依然创建 worktree(推荐,不阻断) |
301
- | 2 | **创建 worktree** | 创建目录: `mkdir -p .worktrees/sprint`。检测已有 NN 编号: `ls .worktrees/sprint/ 2>/dev/null | grep -oE '[0-9]{2}$' | sort -n | tail -1`(取最后两位数字,数值排序,取最大),NN = 结果 + 1(无结果则从 01 开始)。运行 `git worktree add .worktrees/sprint/sprint-YYYY-MM-DD-NN -b sprint/YYYY-MM-DD-NN`。**注意**: `cd` 在 AI agent 单次工具调用中不保持状态,步骤 3-6 必须通过 `workdir` 参数或 `&&` 链式命令在新 worktree 目录下执行 |
302
- | 3 | **项目 setup** | 在 worktree 目录下: 检测项目类型: `package.json` → `npm install`, `go.mod` → `go mod download`, `pyproject.toml` → `pip/poetry install` |
303
- | 4 | **.gitignore 校验** | 在**仓库根目录**(非 worktree)执行: `git check-ignore -q .worktrees`。如果未忽略 → 将 `.worktrees/` 添加到 `.gitignore` → `git add .gitignore` → `git commit -m 'chore: ignore .worktrees directory'` |
304
- | 5 | **Sprint State 记录** | `mkdir -p .sprint-state` 在 worktree 目录下。写入 `.sprint-state/sprint-state.json`(如已存在则合并,保留原有字段),新增/更新 `isolation` 对象,设置 `phase: -1`,`status: "running"` |
305
- | 6 | **基线验证** | 在 worktree 目录下: 检测测试方式(package.json 有 "test" script → `npm test`, go.mod → `go test ./...`, pyproject.toml → `pytest`)。测试失败 → 输出失败信息 → 询问用户是否继续 |
306
-
307
- **参数处理**:
308
-
309
- - `--no-isolate`: 跳过自动创建,输出 ⚠️ 警告 `'[WARN] 未创建 worktree 隔离,在 {branch} 分支上直接运行 sprint 有污染风险'` → 进入 Phase 0
310
- - `--branch-name <name>`: 使用自定义分支名(默认自动生成 `sprint/YYYY-MM-DD-NN`),分支名中的 `/` 在 worktree 路径中自动替换为 `-`(如 `feat/user-login` → 分支名 `feat/user-login`,路径 `.worktrees/sprint/feat-user-login`)
311
- - `--force`: 强制在当前分支继续(即使已是保护分支),**要求用户显式确认**: 输出 ⚠️ 警告 `'[WARN] 使用 --force 在 {branch} 分支上直接运行 sprint。此操作绕过隔离保护,请确认风险。'` → 等待用户确认("继续" / "取消") → 确认后进入 Phase 0
312
-
313
- **参数交互规则**:
210
+ **执行时机**: `/sprint-flow` 启动后 → Phase 0 THINK 前。**自动执行**。
314
211
 
315
- | 参数组合 | 行为 |
316
- |---------|------|
317
- | `--no-isolate` 单独 | 跳过隔离,输出警告 → Phase 0 |
318
- | `--force` 单独 | 跳过隔离,要求确认 → Phase 0 |
319
- | `--no-isolate` + `--branch-name` | `--branch-name` 忽略,仅 `--no-isolate` 生效 |
320
- | `--force` + `--branch-name` | `--branch-name` 忽略,仅 `--force` 生效 |
321
- | `--no-isolate` + `--force` | 等效,输出 `--no-isolate` 警告 → Phase 0 |
322
- | `--resume-from build` + `--no-isolate` | `--resume-from` 优先,直接跳过 Phase -1 |
323
-
324
- **错误处理和回退**:
325
- | 错误场景 | 回退行为 |
326
- |---------|---------|
327
- | `git worktree add` 失败(沙箱/权限问题) | 输出 `[ERROR] git worktree add 失败: {error}` → `[WARN] 无法创建 worktree 隔离,将在当前目录继续。请手动设置隔离分支。` → 在当前目录继续 |
328
- | `.gitignore` 自动添加失败 | 输出 `[WARN] 无法自动添加 .gitignore,请手动将 .worktrees/ 添加到 .gitignore` → 继续 |
329
- | 基线测试失败 | 输出 `[FAIL] 基线测试未通过:` + 失败详情 → 询问用户 `'基线测试失败,是否继续 sprint?(y/N)'` |
330
-
331
- **sprint-state.json isolation 对象格式**:
332
- ```json
333
- {
334
- "isolation": {
335
- "worktree_path": ".worktrees/sprint/sprint-2026-05-24-01",
336
- "branch": "sprint/2026-05-24-01",
337
- "created_from": "main",
338
- "created_from_commit": "abc123def..."
339
- }
340
- }
341
- ```
212
+ **详细指令**: 参见 `references/phase-minus-1-isolate.md` 包含步骤表、参数处理、错误回退、sprint-state 格式。
342
213
 
343
- > **清理提示**: Sprint 完成(Phase 6 SHIP)后,执行 `git worktree remove <worktree_path>` 清理 worktree 目录,同时保留 `.sprint-state/` 中的历史记录。
214
+ **快速参考**:
215
+ 1. 检测保护分支 (main/master/develop) → 自动创建 worktree `.worktrees/sprint/sprint-YYYY-MM-DD-NN`
216
+ 2. Sprint Lock 检测(Issue #144)— stale 锁自动覆盖,非 stale 阻断
217
+ 3. 项目 setup (`npm install`/`go mod download`/`pip install`)
218
+ 4. `.gitignore` 校验 + Sprint State 记录 + 基线测试
219
+ 5. **参数**: `--no-isolate` (跳过),`--branch-name <name>`,`--force` (绕过保护分支)
344
220
 
345
221
  ### Phase -0.5: AUTO-ESTIMATE(自动化规模评估与流程路由)
346
222
 
347
- **执行时机**: Phase -1 ISOLATE 完成后、Phase 0 THINK 之前。**自动执行**。
348
-
349
- **目的**: 自动评估需求规模,匹配适度流程,避免小需求走重量级流程造成资源浪费。不依赖人/AI 主观判断,而是通过代码结构分析提供客观指标。
350
-
351
- **详细指令**: 参见 `references/phase-minus-0-5-auto-estimate.md`
352
-
353
- #### 快速参考
354
-
355
- **步骤**:
356
- 1. **识别需求类型** — 删除/修改已存在代码 → 立即分析;新增功能 → brainstorming 后分析
357
- 2. **收集指标** — 引用计数 (`grep -rn`)、跨模块依赖 (目录分布)、循环依赖、Public API 暴露、测试文件数
358
- 3. **汇总评估** — 综合打分 → 轻量 / 标准 / 复杂
359
- 4. **输出结果** — 使用 `templates/auto-estimate-output-template.md` 标准格式
360
- 5. **用户确认** — 接受建议 / 修改流程 / 取消
361
- 6. **路由执行** — 按最终级别进入对应 Phase
223
+ **执行时机**: Phase -1 ISOLATE 完成后 → Phase 0 THINK 前。**自动执行**。
362
224
 
363
- **路由决策表**:
225
+ **详细指令**: 参见 `references/phase-minus-0-5-auto-estimate.md` — 包含步骤、决策表、输出格式、纠偏机制。
364
226
 
365
- | 评估结果 | 路由 | 说明 |
366
- |---------|------|------|
367
- | **轻量** (引用 ≤3, 同模块,无循环依赖) | Phase 0-3 reduced intensity 执行(THINK/PLAN/review 强度降低,不跳过 delphi-review) | 轻量仍需要评审,但强度可调整 |
368
- | **标准** (引用 4-10, 跨 1-2 模块) | 正常流程 Phase 0-4 | 标准 sprint |
369
- | **复杂** (引用 >10 或 循环依赖 或 跨 3+ 模块) | 完整 Phase 0-8 + 风险警告 | 高风险需求 |
370
-
371
- **输出模板**: `templates/auto-estimate-output-template.md`
372
- **学习日志**: `templates/auto-estimate-learning-log.md`(记录用户 override,用于阈值优化)
373
-
374
- **输出格式**:
375
- ```
376
- +-------------------------------------------------------------+
377
- | AUTO-ESTIMATE 评估结果 |
378
- +-------------------------------------------------------------+
379
- | 需求:{task_description} |
380
- | 类型:{change_type} |
381
- | |
382
- | [{impact_level}] Impact: {impact_label} |
383
- | |
384
- | 引用:{ref_count} 处 |
385
- | 跨模块:{cross_module_count} 个 ({module_list}) |
386
- | 循环依赖:{circular_dep_status} |
387
- | Public API:{public_api_count} 个 |
388
- | |
389
- | 建议流程:{recommended_flow} |
390
- | |
391
- | {risk_warning} |
392
- | |
393
- | [接受建议] [修改流程] [取消] |
394
- +-------------------------------------------------------------+
395
- ```
396
-
397
- **纠偏机制**:
398
- - **接受建议**: 按推荐流程执行,记录 `user_decision: "accepted"`
399
- - **修改流程**: 用户选择其他级别,记录 `override_reason` 到 `.sprint-state/auto-estimate-learning.json`
400
- - **取消**: 停止本次 sprint
401
-
402
- **⚠️ 轻量路由的特殊处理**:
403
- - 轻量路由 Phase 0-3 以 reduced intensity 执行(THINK/PLAN/review 强度降低)
404
- - **所有路由必须产生** `.sprint-state/delphi-reviewed.json` 且 `verdict = "APPROVED"` 才能进入 BUILD
405
- - Phase 2 BUILD 仍然执行完整 TDD + 盲评 + 验证
227
+ **快速参考**:
228
+ 1. 识别需求类型(删除/修改/新增/BugFix)→ 收集指标(引用计数、跨模块依赖、循环依赖)
229
+ 2. 综合打分 → **轻量** (≤3 ref, 同模块) / **标准** (4-10 ref, 1-2 modules) / **复杂** (>10 ref 或循环依赖)
230
+ 3. 输出评估结果(使用 `templates/auto-estimate-output-template.md`)→ 用户确认后路由至对应 Phase
231
+ 4. **所有路由必须产生** `delphi-reviewed.json` (verdict: APPROVED) 才能进入 Phase 2 BUILD
406
232
 
407
233
  ### Phase 0: THINK(需求探索与设计)
408
- - **Subagent dispatch**: orchestrator 通过 `task(category="unspecified-high", load_skills=[])` 启动独立 session
234
+ - **Subagent dispatch**: orchestrator 通过 `task(category="deep", load_skills=["brainstorming"])` 启动独立 session
409
235
  - 输入: Phase -1 summary(worktree 路径)+ 用户原始需求
410
236
  - 输出: 结构化设计文档 → 直接作为 Phase 1 PLAN 的输入
411
237
  - **HARD-GATE**: 设计未批准 → 不可进入实现
412
238
 
413
239
  ### Phase 1: PLAN(共识评审)
414
- - **注意**: `autoplan` 是交互式 skill(可能在 taste_decisions 节点暂停等待用户输入),**必须由 orchestrator 直接执行**,不可 dispatch 到 subagent(Issue #225)。
415
- - **子流程**:
416
- 1. **Orchestrator** 直接调用 `task(category="deep", load_skills=["autoplan"], ...)` 执行 autoplan(可交互式等待用户确认 taste_decisions)
417
- 2. Autoplan 完成后,将结果(设计文档 + taste_decisions 确认)传给 subagent
418
- 3. **Subagent** 执行 delphi-review + to-issues: `task(category="deep", load_skills=["delphi-review", "to-issues"], prompt="autoplan 结果: ...")`
240
+ - **Subagent dispatch**: orchestrator 通过 `task(category="deep", load_skills=["autoplan", "delphi-review", "to-issues"])` 启动独立 session
419
241
  - 输入: phase-0-summary.md + 设计文档
420
242
  - 输出: `specification.yaml`(含 user_stories[])+ `slices-manifest.json`
421
243
 
@@ -438,55 +260,16 @@ Sprint Flow: ISOLATE → AUTO-ESTIMATE → THINK → PLAN → BUILD → REVIEW
438
260
 
439
261
  **核心原则**: 没有质量门禁的代码不可进入 BUILD 阶段。**GITHOOKS-GATE 失败 → 不可编码。**
440
262
 
441
- ### Phase 2: BUILD(DELPHI-GATE → ralph-loop 默认 + TDD + 盲评 + 验证)
442
-
443
- **⚠️ DELPHI-GATE(BUILD 入口门禁)**:
444
- Phase 2 第一步必须执行 DELPHI-GATE 检查。没有 delphi-review APPROVED → 不可编码。
445
-
446
- 检查步骤:
447
- 1. 读取 `.sprint-state/delphi-reviewed.json`
448
- 2. 验证文件存在 → 不存在 → 输出 `[BLOCKED] delphi-review not APPROVED. 必须先完成 Phase 1 的 delphi-review。` → 返回 Phase 1
449
- 3. 验证 `verdict` 字段 == `"APPROVED"` → 不等于 → 同上 BLOCK
450
- 4. ✅ 通过 → 进入 BUILD 编码
451
-
452
- **输入**: `slices-manifest.json`(由 Phase 1 `/to-issues` 生成),按 `execution_order` 逐个执行。
263
+ ### Phase 2: BUILD(ralph-loop 默认 + TDD + 盲评 + 验证)
453
264
 
454
- **默认模式**: `ralph-loop` — 逐 REQ/切片 迭代构建。每个切片(REQ)dispatch 独立 subagent,干净上下文,全量回归测试。Token 节约 40-67%。参见 `skills/ralph-loop/SKILL.md`。
265
+ **详细指令**: 参见 `references/phase-2-build.md`。
455
266
 
456
- **并行模式**: 通过 `--mode parallel` 启用 `dispatching-parallel-agents`。仅分发无依赖的 AFK 切片(通过 `dependency_graph` 判定)。HITL 切片需人工确认后才可分发。
457
-
458
- **替代原 xp-consensus**:使用 superpowers 成熟 skill 组合,保留关键行为(freeze 隔离、熔断回退、成本监控)。
459
-
460
- | 步骤 | Skill | 说明 |
461
- |------|-------|------|
462
- | -1 | **`hooks-install`** _(githooks/scripts)_ | `githooks/verify.sh` → 缺失则 `githooks/install.sh` |
463
- | 0 | **`dispatching-parallel-agents`** _(superpowers)_ | 检测可并行任务,并行分发独立子任务 |
464
- | 1 | `test-driven-development` (superpowers) | RED → GREEN → REFACTOR 铁律执行 |
465
- | 2 | **`executing-plans`** _(superpowers)_ | 在隔离 session 中执行计划,有 review checkpoint |
466
- | 3 | `freeze` (gstack) | 锁定业务代码,盲评 agent 只能访问测试 |
467
- | 4 | `requesting-code-review` (superpowers) | 独立 agent 盲评业务代码(隔离状态) |
468
- | 5 | `unfreeze` (gstack) | 解锁业务代码 |
469
- | 6 | `verification-before-completion` (superpowers) | 运行测试 + lint,证据优先 |
470
- | 7 | 成本监控(sprint-flow 编排层) | 超阈值 BLOCK + 用户决策 |
471
-
472
- **关键行为保留**(原 xp-consensus 17 状态机中的真实边缘情况):
473
-
474
- | 原状态 | 新处理方案 |
475
- |--------|-----------|
476
- | `CIRCUIT_BREAKER_TRIGGERED` | sprint-flow 编排层监控成本,超阈值 BLOCK + 用户决策 |
477
- | `ROLLBACK_TO_ROUND1` | verification-before-completion 失败 → 修复 max 3 次 → 仍失败 BLOCK |
478
- | `GATE1_FAILED`/`GATE1_COMPLETE` | verification-before-completion 内置此区分 |
479
- | `GATE2_RUNNING` | `cso` (gstack) — Phase 1-6 安全审计替代 |
480
- | `SEALED_CODE_ISOLATION` | 保留 freeze skill 调用 |
481
-
482
- **语言特定 TDD**:通过 `--lang` 参数选择:
483
- - `springboot-tdd` / `django-tdd` / `golang-testing`
484
-
485
- **Mock Minimization**(Phase 2 强制):
486
- - 默认使用 integration-first:real DB (sqlite-in-memory), real collaborators
487
- - Mock 仅用于:external services, network calls, I/O boundaries
488
- - Mock 密度 > 30% 时必须添加 `// @mock-justified: <reason>` 注解(理由最少 10 字符)
489
- - Phase 3 Gate M 会在 push 时验证 mock 密度
267
+ **快速参考**:
268
+ 1. **DELPHI-GATE**: 验证 `.sprint-state/delphi-reviewed.json` 存在且 `verdict = "APPROVED"` → 否则 BLOCK
269
+ 2. **输入**: `slices-manifest.json`(Phase 1 生成),按 `execution_order` 逐个执行
270
+ 3. **模式**: 默认 `ralph-loop`(逐 REQ 迭代,token 节约 40-67%),可选 `--mode parallel`
271
+ 4. **Skill 步骤**: hooks-install dispatching-parallel-agents → TDD (RED/GREEN/REFACTOR) → freeze → blind-review → unfreeze → verification-before-completion → 成本监控
272
+ 5. **Mock Minimization**: integration-first, mock 仅限 external services, 密度 > 30% 需 `@mock-justified`
490
273
 
491
274
  ### Phase 3: REVIEW + TEST(验证)
492
275
  - **Subagent dispatch**: orchestrator 通过 `task(category="deep", load_skills=["delphi-review", "test-specification-alignment"])` 启动独立 session
@@ -512,716 +295,130 @@ Phase 2 第一步必须执行 DELPHI-GATE 检查。没有 delphi-review APPROVED
512
295
  - 使用 `@templates/emergent-issues-template.md` 检查清单
513
296
 
514
297
  ### Phase 5: FEEDBACK CAPTURE(反馈获取)
515
- - **Subagent dispatch**: orchestrator 通过 `task(category="quick", load_skills=["learn", "retro", "systematic-debugging"])` 启动独立 session
516
- - 输入: phase-4-summary.md(验收结果)+ emergent-issues.md(如有)
517
- - 输出: `feedback-log.md`
518
- - **HARD-GATE**: Phase 5 不可跳过。Phase 4 完成后 → 必须进入 Phase 5 → 完成后才能进入 Phase 6。
519
- - **`learn` (gstack)** — Sprint 级复盘(**Phase 5 必须自动调用,不依赖手动触发**)
520
- - **默认提炼模板**(无需用户额外输入):
521
- > 提炼总结并保存可复用的经验教训,把大模型不知道、并且犯错后无法立即发现和纠正的知识保存下来。如果是对其他项目也有价值的,就保存成全局记忆,否则保存为项目记忆。
522
- - ralph-loop 已在 BUILD Phase 内部实现 per-REQ learn(permanent/contextual 分类)
523
- - Phase 5 额外进行 Sprint 级复盘,总结全 Phase 经验
524
- - **learnings 自动注入**:`/learn export` 时自动 append 到 CLAUDE.md / AGENTS.md 末尾形成 `## Project Learnings` 章节
525
- - **`retro` (gstack)** — 工程回顾:提交历史、工作模式、代码质量趋势
526
- - **`systematic-debugging` (superpowers)** — 根因调试
298
+ - **Subagent**: `task(category="quick", load_skills=["learn", "retro", "systematic-debugging"])`
299
+ - 输入: phase-4-summary.md + emergent-issues.md → 输出: `feedback-log.md`
300
+ - **HARD-GATE**: 不可跳过。`learn` (Sprint 级复盘, 默认提炼模板) + `retro` (工程回顾) + `systematic-debugging` (根因调试)
527
301
 
528
302
  ### Phase 6: SHIP(发布准备)
529
- - **Subagent dispatch**: orchestrator 通过 `task(category="quick", load_skills=["finishing-a-development-branch", "ship"])` 启动独立 session
530
- - 输入: phase-5-summary.md + feedback-log.md
531
- - 输出: PR URL
532
- - **HARD-GATE**: Phase 5 未完成 → 不可进入 Phase 6。验证 `.sprint-state/phase-outputs/feedback-log.md` 存在。
533
- - **⚠️ GITHOOKS-GATE**: 再次验证 hooks 完整性(Phase 2 的 TDD 编码已触发提交,SHIP 阶段还会再次提交)
534
- - 运行 `githooks/verify.sh` → 缺失 → `githooks/install.sh` → 阻断直至修复
535
- - **⚠️ VERSION-GATE**: Phase 6 提交前必须 bump VERSION 文件(与变更类型无关)
536
- - 默认 bump PATCH 位(如 `0.6.0.0` → `0.6.1.0`,MICRO 重置为 0)
537
- - 重大新功能 bump MINOR 位(如 `0.6.0.0` → `0.7.0.0`),Breaking change bump MAJOR 位
538
- - 运行 `bash scripts/sync-version.sh` 同步到所有 package.json(root、npm-package、claude-plugin、opencode)
539
- - 更新 `CHANGELOG.md` 添加本次变更记录(含变更类型说明:skill-only / code / mixed)
540
- - 验证:`git diff VERSION` 确认版本号已变更,未变更 → 阻断
541
- - **此规则与变更类型无关** — 纯 skill 变更(仅 .md 文件)也必须 bump PATCH,确保每次 sprint 都触发 npm 发布
542
- - **📋 VERSION CHANGESET(Issue #142)**: 每次 VERSION bump 必须创建原子化的 changeset 记录,确保版本变更可追溯、可审计
543
- - 在 `.sprint-state/changesets/` 目录下创建 JSON 文件,文件名格式: `changeset-{YYYYMMDDHHMMSS}.json`
544
- - changeset 字段:
545
- ```json
546
- {
547
- "id": "cs_xxxxxxxx",
548
- "created_at": "2026-06-07T12:00:00Z",
549
- "sprint_id": "sprint-2026-06-07-01",
550
- "old_version": "0.8.1.2",
551
- "new_version": "0.8.2.0",
552
- "change_type": "patch|minor|major",
553
- "description": "brief description of changes in this bump",
554
- "files_changed": ["VERSION", "CHANGELOG.md", "package.json", "src/npm-package/package.json", "plugins/claude-code/.claude-plugin/plugin.json", "plugins/opencode/package.json"],
555
- "semver_note": "npm semver 3-digit: 0.8.2"
556
- }
557
- ```
558
- - changeset 创建时机:VERSION 更新后、`sync-version.sh` 执行后、commit 前
559
- - changeset 随 commit 一起提交,形成版本变更的完整审计链
560
- - **用途**: 回滚时通过 changeset 精确还原版本号、CI/CD 自动确定发布范围、审核时追踪每次 bump 的原因
561
- - **`finishing-a-development-branch`** (superpowers) — 结构化完成流:4 选项(merge / PR / discard / keep)
562
- - `ship` (gstack) — 创建 PR(PR 路径时使用)
563
- - Phase 6 输出:PR URL(用于 Phase 7 输入)
564
-
565
- ### Phase 7: LAND(合并 + 部署)
566
- - **Subagent dispatch**: orchestrator 通过 `task(category="deep", load_skills=["land-and-deploy"])` 启动独立 session
567
- - 输入: phase-6-summary.md + PR URL
568
- - 输出: 部署状态 + Canary 报告
569
- - 输入:Phase 6 输出的 PR URL
570
- - 调用:`land-and-deploy` skill
571
- - 流程:
572
- 1. Merge PR(`gh pr merge --squash`)
573
- 2. 等待 CI 完成(poll `gh pr checks` 直到 success 或 10min timeout)
574
- 3. 等待 Deploy 完成(如已配置,10min timeout)
575
- 4. **Canary Health Check**(如已配置部署平台):
576
- - 健康检查端点:项目根路径 `/` 或自定义 `/.well-known/health`
577
- - SLA 指标:HTTP 200 响应 + 错误率 <1% + p99 响应 <2s
578
- - 超时策略:最长 5 分钟,每 10s polling 一次
579
- - 部署**失败**时的回滚:`git revert` 最后一次 merge commit + 输出 `[ERROR] Deploy failed, auto-rolled back merge`
580
- - 条件跳过:无部署配置时,仅执行 merge + CI checks,跳过 deploy/canary
581
- - 输出:部署状态 + Canary 报告(成功/失败/跳过)
582
303
 
583
- ### Phase 8: CLEANUP(安全清理 + 总结)
304
+ **详细指令**: 参见 `references/phase-6-ship.md` GITHOOKS-GATE / VERSION-GATE / VERSION CHANGESET (Issue #142) / changeset schema。
584
305
 
585
- **执行时机**: Phase 7 LAND 成功后(或 Phase 6 Option 1 本地 Merge 后)
586
-
587
- **动作**:
588
- 0. **保存分支信息**(必须在 worktree remove 之前执行):
589
- - `sprint_branch=$(git branch --show-current)`
590
- - 如果 sprint_branch 为空或与 `isolation.branch` 不匹配: 使用 `isolation.branch`
591
- 1. **检测 worktree 是否存在**: `[ -d <worktree_path> ]`
592
- 2. **安全清理**:
593
- - **⚠️ 禁止使用通配符或递归 shell 删除命令** — 必须先列出 `isolation.worktree_path` 并确认只清理本 sprint worktree
594
- - 首选 git worktree 管理命令清理该精确路径;失败时重试最多 3 次,间隔 1s
595
- - 如果仍失败:输出 `[WARN] Worktree cleanup failed; list the target path and ask the user to clean it manually`
596
- - ** NEVER delete arbitrary directories** — 只删除本 sprint 创建的 `isolation.worktree_path`
597
- 3. **残留检测**: `[ -d <worktree_path> ]` → 如果仍有残留,输出警告 `[WARN] 检测到残留目录,请手动检查:<worktree_path>`
598
- 4. **删除本地和远程分支**(⚠️ 必须在步骤 2 worktree remove 成功后执行):
599
- - 切回主分支: `cd <repo_root> && git checkout main && git pull origin main`
600
- - 删除本地分支: `git branch -D <sprint_branch>`
601
- - 使用 `-D` 因为 squash merge 后 git 不认为已合并
602
- - 如果分支不存在(已被其他流程删除): 静默跳过
603
- - 删除远程分支: `git push origin --delete <sprint_branch>`
604
- - 如果远程分支删除失败: 输出 `[WARN] Remote branch cleanup failed, please manually run: git push origin --delete <sprint_branch>`
605
- 5. **关闭遗留 OPEN PR**:
606
- - `gh pr list --head <sprint_branch> --state open`
607
- - 如果存在 OPEN PR: 关闭并评论说明该 sprint 已通过其他 PR 完成
608
- 6. **更新 `.sprint-state/sprint-state.json`**:
609
- - `phase: 8`
610
- - `status: "merged"` 或 `"completed"`
611
- 7. **释放 Sprint Lock(Issue #144)**:
612
- - `rm -f .sprint-state/sprint.lock`
613
- - 验证锁已删除: `[ ! -f .sprint-state/sprint.lock ] || echo "[WARN] sprint lock 未能删除,请手动清理"`
614
- 8. **输出 Cleanup Report + Sprint Summary**
615
-
616
- **执行顺序依赖**:
617
- ```
618
- 步骤 0 (保存分支名) → 步骤 2 (worktree remove 解除分支文件占用) → 步骤 4 (branch -D 删分支引用 → push --delete 删远程)
619
- ```
306
+ **快速参考**:
307
+ - **Dispatch**: `task(category="quick", load_skills=["finishing-a-development-branch", "ship"])`
308
+ - 输入: phase-5-summary.md + feedback-log.md → 输出: PR URL
309
+ - **HARD-GATE**: Phase 5 未完成 → BLOCK。验证 `feedback-log.md` 存在。
310
+ - **GITHOOKS-GATE**: 验证 hooks 完整性,缺失则 `githooks/install.sh`
311
+ - **VERSION-GATE**: bump PATCH/MINOR/MAJOR `sync-version.sh` CHANGELOG.md `git diff VERSION` 验证
620
312
 
621
- **条件跳过**: `--no-isolate` 路径(无 worktree/分支可清理)
313
+ ### Phase 7: LAND(合并 + 部署)
622
314
 
623
- **输出**: `[CLEANUP] Worktree removed + Branch deleted:` + 残留检测(✅ clean / ⚠️ residual)
315
+ **详细指令**: 参见 `references/phase-7-land.md` 完整流程、SLA 指标、回滚策略。
624
316
 
625
- **IF emergent issues → Sprint 2**
317
+ **快速参考**:
318
+ - **Dispatch**: `task(category="deep", load_skills=["land-and-deploy"])`
319
+ - 输入: phase-6-summary.md + PR URL → 输出: 部署状态 + Canary 报告
320
+ - 流程: Merge PR → 等待 CI (10min) → 等待 Deploy (10min) → Canary Health Check (5min)
321
+ - **回滚**: `git revert` 最后一次 merge commit
322
+ - 条件跳过: 无部署配置时仅 merge + CI
626
323
 
627
- ---
324
+ ### Phase 8: CLEANUP(安全清理 + 总结)
628
325
 
629
- ## 编排层规则(Orchestration Rules)
326
+ **执行时机**: Phase 7 LAND 成功后。**详细指令**: 参见 `references/phase-8-cleanup.md`。
630
327
 
631
- ### Agent Dispatch Rules
632
-
633
- | Agent Type | 适用场景 | 不适用场景 | 超时处理 |
634
- |-----------|---------|-----------|---------|
635
- | `explore` (bare) | **窄搜索**:单个关键词/pattern,已知文件位置 | 多角度宽泛搜索,读取大文件,3+ search angles | >5min → cancel + 用 `deep` 重试 |
636
- | `librarian` (bare) | **外部参考**:API 文档、OSS 示例 | 内部代码库宽泛探索 | >5min → cancel + `deep` 重试 |
637
- | `task(category="deep")` | **复杂研究**:多模块分析,架构决策 | 单文件 trivial fix | 无限制 |
638
- | `task(category="unspecified-high")` | **高 effort 实现**:新模块、重构 | 单行修改 | 无限制 |
639
-
640
- **关键规则**:
641
-
642
- 1. Bare `explore` agent 本质是 contextual grep,**不是研究 agent**。如果任务涉及:
643
- - 3+ 个独立搜索角度
644
- - 读取多个大文件(>200 行)
645
- - 需要跨层分析(如"查 ralph-loop + .sprint-state/ + token 阈值 + phase transition")
646
-
647
- → **必须用 `task(category="deep", load_skills=[...])` 替代**
648
-
649
- 2. 如果 `explore` agent >5 分钟未返回 → cancel 并立即用 `task(category="deep")` 重试。不要等待。
650
-
651
- 3. **并行 explore 仍然是正确模式**。2-4 个窄搜索 explore agent 并行执行是高效且推荐的。问题在于给单一 explore agent 分配宽泛任务。
652
-
653
- **issue #83 根因**:`bg_1abf2ed9` 被分配了 4 个独立搜索角度的宽泛任务(ralph-loop context + .sprint-state/ + token threshold + phase transition),bare explore agent 超时丢失 session。同批的 `bg_5ecf590d`(窄搜索 OpenCode compaction API)3m35s 正常完成。
654
-
655
- ### Phase Subagent Dispatch Matrix
656
-
657
- | Phase | 名称 | Subagent? | Category | load_skills | 执行者 |
658
- |-------|------|:---------:|----------|-------------|--------|
659
- | -1 | ISOLATE | ❌ | Bash(直接执行) | 无 | orchestrator |
660
- | -0.5 | AUTO-ESTIMATE | ❌ | Bash(直接执行) | 无 | orchestrator |
661
- | 0 | THINK | ✅ | `unspecified-high` | `[]` | subagent |
662
- | 1 | PLAN (**autoplan**) | **❌** | **orchestrator 直接执行** | `["autoplan"]` | **orchestrator** |
663
- | 1 | PLAN (**delphi-review + to-issues**) | ✅ | `deep` | `["delphi-review", "to-issues"]` | **subagent(仅处理评审+切片)** |
664
- | 2 | BUILD | ✅(已有) | ralph-loop | `["test-driven-development"]` | subagent |
665
- | 3 | REVIEW | ✅ | `deep` | `["delphi-review", "test-specification-alignment"]` | subagent |
666
- | 4 | USER ACCEPT | ❌ | **强制人工** | 无 | 用户 |
667
- | 5 | FEEDBACK | ✅ | `quick` | `["learn", "retro", "systematic-debugging"]` | subagent |
668
- | 6 | SHIP | ✅ | `quick` | `["finishing-a-development-branch", "ship"]` | subagent |
669
- | 7 | LAND | ✅ | `deep` | `["land-and-deploy"]` | subagent |
670
- | 8 | CLEANUP | ❌ | Bash(直接执行) | 无 | orchestrator |
671
-
672
- > **#225 关键规则**: `autoplan` 是交互式 skill(可能在 taste_decisions 节点暂停等待用户输入),因此**必须由 orchestrator 直接执行**,不可 dispatch 到 subagent。只有 delphi-review 和 to-issues 这种非交互式步骤可以 dispatch 到 subagent。
673
-
674
- **上下文隔离原则**:
675
- - 每个 Subagent 在**独立 session** 中启动,不继承 orchestrator 的对话历史
676
- - orchestrator session 仅接收 subagent 的最终结果摘要(~13,000 tokens/sprint)
677
- - 现代模型百万 token 上下文 + 缓存命中 → 单 sprint 不会触发 overflow
678
-
679
- ### CONTEXT INHERITANCE
680
-
681
- 每个 Phase subagent 启动时,上下文仅通过以下路径继承:
682
-
683
- | Phase | 加载来源 | 内容 |
684
- |-------|---------|------|
685
- | Phase -1 | 无前置(Bash 操作) | 用户原始需求 + 当前分支状态 |
686
- | Phase 0 | phase--1-summary(仅路径) | 隔离环境信息(worktree 路径) |
687
- | Phase 1 | phase-0-summary.md + design-doc | 设计决策 + 结构化规格 |
688
- | Phase 2 | phase-1-summary.md + specification.yaml | 评审结论 + REQ 列表 |
689
- | Phase 3 | phase-2-summary.md + MVP 代码 | 构建结果 |
690
- | Phase 4 | — | **人工验收**。Phase 4 不产生 subagent summary,但用户验收结果记录在 `.sprint-state/phase-outputs/emergent-issues.md`(如有 emergent issues)。Phase 5 加载此文件。 |
691
- | Phase 5 | phase-4-summary.md + emergent-issues.md | 验收结论 |
692
- | Phase 6 | phase-5-summary.md + feedback-log.md | 复盘结论 |
693
- | Phase 7 | phase-6-summary.md + PR URL | 发布准备 |
694
- | Phase 8 | phase-7-summary(Bash 操作) | 部署结果 |
695
-
696
- **隔离原则**:每个 Phase subagent 在干净上下文中启动。
697
- 输入仅限上表对应的摘要文件和一级产出物。
698
- 不包含前一 Phase 的完整对话、中间文件、失败尝试。
699
-
700
- **特殊场景**:
701
- - `--resume-from <phase>`:跳过前置 Phase,直接从指定 Phase 启动。**MUST 先执行 RESUME GATE(Issue #148)** 校验 sprint 状态、git 可达性和文件时效性,再执行 Phase Transition Gate 校验摘要文件格式。例如 `--resume-from build` 要求 `phase-1-summary.md` 和 `specification.yaml` 已存在且非 stale。
702
- - `--no-isolate`:跳过 Phase -1 ISOLATE,直接在当前分支执行。Phase 0 无 `phase--1-summary` 可用,上下文继承来源为用户原始需求 + 当前 git 状态。所有后续 Phase 的 worktree enforcement 不适用(无 worktree),但仍需保持代码隔离。
703
- - `next_phase_context` 中的 `{path}` 等变量占位符在实际写入时被替换为具体值。示例中的 `{path}` 应替换为实际 worktree 路径(如 `.worktrees/sprint/sprint-2026-06-01-01`)。
704
-
705
- ### PHASE TRANSITION RULES
706
-
707
- 每个 Phase subagent 完成后,必须按顺序执行以下步骤:
708
-
709
- 1. **写入 Phase 摘要**:创建 `.sprint-state/phase-outputs/phase-{N}-summary.md`
710
- - 格式:YAML frontmatter + Markdown body(body ≤ 50 行)
711
- - 大小限制:≤ 40,000 字符(≈ 10,000 tokens)
712
-
713
- 2. **更新 sprint-state.json**:
714
- - `phase`: 当前阶段编号
715
- - `outputs`: 新增当前阶段输出文件路径
716
- - `phase_history`: 追加或更新当前阶段的记录
717
- - Phase 开始时:追加 `{ "phase": N, "phase_name": "NAME", "status": "running", "started_at": "<ISO 8601>", "completed_at": null, "duration_seconds": null }`
718
- - Phase 完成时:更新对应条目,填充 `completed_at`(ISO 8601)和 `duration_seconds`(`completed_at - started_at` 的秒数)
719
- - Phase 跳过时(如轻量路由跳过 Phase 0 brainstorming):设置 `status: "skipped"`
720
-
721
- 3. **等待用户确认 checkpoint**(如适用)
722
-
723
- 4. **展示进度看板**:执行 `node scripts/render-sprint-progress.cjs` 渲染进度看板
724
- - 脚本自动读取 `.sprint-state/sprint-state.json` 并输出 ASCII 进度看板
725
- - 渲染规则:已完成阶段显示 ✅ + 耗时,当前阶段 🔄,待做 ⬜,跳过 ⏭️,失败 ❌
726
- - 进度条:`[████▓░░░░░░] {pct}%`(已完成数/总阶段数 11)
727
- - 下一步行动:根据当前阶段 + 状态,自动查找对应提示
728
- - 输出物路径:列出 `outputs` 中已有的文件路径
729
- - 时机:每个 Phase 完成后的 transition 阶段自动展示,用户无需请求
730
- - 向后兼容:旧版 `sprint-state.json` 缺少 `phase_history` 时,从 `phase` 字段推断状态
731
-
732
- ### Phase Summary 格式(YAML Frontmatter Schema)
733
-
734
- 每个 `phase-N-summary.md` 必须包含以下 YAML frontmatter:
328
+ **快速参考**:
329
+ 1. 保存分支信息 → `git worktree remove <worktree_path>`(精确路径,禁止通配符)
330
+ 2. 删除本地分支 (`git branch -D`) + 远程分支 (`git push origin --delete`)
331
+ 3. 关闭遗留 OPEN PR (`gh pr list --head`)
332
+ 4. 更新 sprint-state.json (phase:8, status: merged) + 释放 Sprint Lock (Issue #144)
333
+ 5. 输出 Cleanup Report + Sprint Summary
334
+ 6. **IF emergent issues Sprint 2**. **条件跳过**: `--no-isolate` 路径
735
335
 
736
- ```markdown
737
336
  ---
738
- phase: -1
739
- phase_name: ISOLATE
740
- status: completed
741
- outputs:
742
- - path: ".worktrees/sprint/sprint-YYYY-MM-DD-NN"
743
- type: directory
744
- decisions:
745
- - title: "Worktree isolation enabled"
746
- rationale: "Prevent main branch pollution"
747
- unresolved_issues: []
748
- next_phase_context: "Worktree created at {path}. All subsequent edits MUST use this workdir."
749
- ---
750
-
751
- ## Phase Summary
752
- {简明摘要,不超过 50 行}
753
- ```
754
-
755
- **必填字段**: `phase`, `phase_name`, `status`, `outputs`, `decisions`, `next_phase_context`
756
- **可选字段**: `unresolved_issues`
757
-
758
- ### Phase Transition Gate
759
-
760
- Orchestrator dispatch 下一 Phase 前必须执行验证:
761
-
762
- ```bash
763
- # === Phase Transition Gate ===
764
-
765
- # 1. Phase summary file validation
766
- SUMMARY=".sprint-state/phase-outputs/phase-${N}-summary.md"
767
- [ -f "$SUMMARY" ] || { echo "[BLOCK] phase-${N}-summary 不存在"; exit 1; }
768
- FRONTMARKERS=$(grep -c "^---" "$SUMMARY" 2>/dev/null || echo 0)
769
- [ "$FRONTMARKERS" -ge 2 ] || { echo "[BLOCK] YAML frontmatter 格式不完整"; exit 1; }
770
- grep -q "^phase:" "$SUMMARY" || { echo "[BLOCK] 缺少 phase 字段"; exit 1; }
771
- grep -q "^phase_name:" "$SUMMARY" || { echo "[BLOCK] 缺少 phase_name 字段"; exit 1; }
772
- grep -q "^status:" "$SUMMARY" || { echo "[BLOCK] 缺少 status 字段"; exit 1; }
773
- grep -q "^decisions:" "$SUMMARY" || { echo "[BLOCK] 缺少 decisions 字段"; exit 1; }
774
- grep -q "^outputs:" "$SUMMARY" || { echo "[BLOCK] 缺少 outputs 字段"; exit 1; }
775
- grep -q "^next_phase_context:" "$SUMMARY" || { echo "[BLOCK] 缺少 next_phase_context"; exit 1; }
776
- CHARS=$(wc -c < "$SUMMARY" | tr -d ' ')
777
- [ "$CHARS" -le 40000 ] || { echo "[BLOCK] 摘要超出大小限制 (${CHARS}/40000 chars)"; exit 1; }
778
-
779
- # 2. sprint-state.json enforcement check (Issue #146)
780
- SPRINT_STATE=".sprint-state/sprint-state.json"
781
- [ -f "$SPRINT_STATE" ] || { echo "[BLOCK] sprint-state.json 不存在"; exit 1; }
782
-
783
- # Verify phase_history includes current phase with completed_at
784
- PHASE_HISTORY_CHECK=$(grep -c "\"phase\": $N" "$SPRINT_STATE" 2>/dev/null || echo 0)
785
- [ "$PHASE_HISTORY_CHECK" -gt 0 ] || {
786
- echo "[BLOCK] sprint-state.json phase_history 缺少 phase $N 的记录"
787
- echo "[ACTION] 在 dispatch 下一 Phase 前更新 sprint-state.json:"
788
- echo " - phase: $N"
789
- echo " - phase_history: 追加 {phase:N, status:completed, completed_at:<ISO8601>}"
790
- echo " - outputs: 追加当前 phase 的输出文件"
791
- exit 1
792
- }
793
-
794
- # Verify completed_at is set (not null)
795
- COMPLETED_AT_VALUE=$(grep -A3 "\"phase\": $N" "$SPRINT_STATE" 2>/dev/null | grep "completed_at" | head -1 | grep -o '"[^"]*"$' | tr -d '"')
796
- [ "$COMPLETED_AT_VALUE" != "null" ] && [ -n "$COMPLETED_AT_VALUE" ] || {
797
- echo "[BLOCK] sprint-state.json phase $N 的 completed_at 未设置 (null)"
798
- echo "[ACTION] 设置 completed_at 为当前时间 (ISO 8601):"
799
- echo " date -u +%Y-%m-%dT%H:%M:%SZ"
800
- exit 1
801
- }
802
- ```
803
-
804
- **由 orchestrator 强制执行**,不依赖 subagent 自觉遵守。
805
- 验证失败 → BLOCK,不可 dispatch 下一 Phase。
806
-
807
- ### RESUME GATE / --resume-from 断点校验(Issue #148)
808
-
809
- 当使用 `--resume-from <phase>` 时,在执行 Phase Transition Gate 之前,
810
- orchestrator MUST 先执行以下断点校验。任何一项失败 → BLOCK,拒绝恢复。
811
-
812
- ```bash
813
- SPRINT_STATE=".sprint-state/sprint-state.json"
814
- [ -f "$SPRINT_STATE" ] || { echo "[BLOCK] sprint-state.json 不存在,无法恢复"; exit 1; }
815
-
816
- # 1. Sprint ID 一致性:确认 resume 的目标 sprint 与 sprint-state.json 匹配
817
- SPRINT_ID=$(grep -o '"id": "[^"]*"' "$SPRINT_STATE" | head -1 | cut -d'"' -f4)
818
- CURRENT_SPRINT_ID=$(echo "$TASK_DESCRIPTION" | md5sum | head -8 2>/dev/null || echo "unknown")
819
- # 实际 sprint id 由 Phase -1 生成,此处仅验证文件存在且包含 id 字段
820
- [ -n "$SPRINT_ID" ] || { echo "[BLOCK] sprint-state.json 缺少 id 字段"; exit 1; }
821
-
822
- # 2. 阶段顺序校验:--resume-from 的 phase 必须是最后已完成 phase 的后继
823
- LAST_COMPLETED_PHASE=$(grep -o '"phase": [0-9]' "$SPRINT_STATE" | tail -1 | awk '{print $2}')
824
- RESUME_PHASE=$((RESUME_PHASE)) # orchestrator 将 --resume-from 参数值转为整数
825
- [ "$RESUME_PHASE" -gt "$LAST_COMPLETED_PHASE" ] || {
826
- echo "[BLOCK] --resume-from phase ($RESUME_PHASE) 必须在最后已完成 phase ($LAST_COMPLETED_PHASE) 之后"
827
- exit 1
828
- }
829
-
830
- # 3. Git 状态校验:isolation branch 仍然可达
831
- ISOLATION_BRANCH=$(grep -o '"branch": "[^"]*"' "$SPRINT_STATE" | head -1 | cut -d'"' -f4)
832
- ISOLATION_COMMIT=$(grep -o '"created_from_commit": "[^"]*"' "$SPRINT_STATE" | head -1 | cut -d'"' -f4)
833
- if [ -n "$ISOLATION_BRANCH" ]; then
834
- git rev-parse --verify "$ISOLATION_BRANCH" >/dev/null 2>&1 || {
835
- echo "[BLOCK] isolation branch '$ISOLATION_BRANCH' 已不存在(可能被删除或 force push 覆盖)"
836
- exit 1
837
- }
838
- fi
839
- if [ -n "$ISOLATION_COMMIT" ]; then
840
- git cat-file -e "${ISOLATION_COMMIT}^{commit}" 2>/dev/null || {
841
- echo "[WARN] isolation commit $ISOLATION_COMMIT 不可达(可能被 GC 或 rebase 清理),恢复后可能状态不一致"
842
- # WARN 而非 BLOCK — 可继续但有风险
843
- }
844
- fi
845
-
846
- # 4. 文件时效性校验:前置摘要文件的 mtime 不晚于其生成 phase 的完成时间
847
- RESUME_PREREQ_PHASE=$((RESUME_PHASE - 1))
848
- PREREQ_FILE=".sprint-state/phase-outputs/phase-${RESUME_PREREQ_PHASE}-summary.md"
849
- [ -f "$PREREQ_FILE" ] || { echo "[BLOCK] 前置摘要文件 ${PREREQ_FILE} 不存在"; exit 1; }
850
-
851
- # 提取前置 phase 的完成时间
852
- PREREQ_COMPLETED_AT=$(grep -A3 "\"phase\": $RESUME_PREREQ_PHASE" "$SPRINT_STATE" 2>/dev/null | grep "completed_at" | head -1 | cut -d'"' -f4)
853
- if [ -n "$PREREQ_COMPLETED_AT" ] && [ "$PREREQ_COMPLETED_AT" != "null" ]; then
854
- FILE_MTIME=$(stat -c %Y "$PREREQ_FILE" 2>/dev/null || stat -f %m "$PREREQ_FILE" 2>/dev/null)
855
- COMPLETED_EPOCH=$(date -d "$PREREQ_COMPLETED_AT" +%s 2>/dev/null || echo "")
856
- if [ -n "$FILE_MTIME" ] && [ -n "$COMPLETED_EPOCH" ]; then
857
- # 容忍 60 秒时钟偏差
858
- [ "$FILE_MTIME" -le $((COMPLETED_EPOCH + 60)) ] || {
859
- echo "[WARN] 前置摘要文件 ${PREREQ_FILE} 在 phase $RESUME_PREREQ_PHASE 完成后被修改(mtime: $(date -d @$FILE_MTIME '+%Y-%m-%d %H:%M:%S'), completed_at: $PREREQ_COMPLETED_AT)"
860
- echo "[ACTION] 继续恢复前请确认修改是预期的。输入 'confirm' 继续,其他取消:"
861
- read USER_CONFIRM
862
- [ "$USER_CONFIRM" = "confirm" ] || { echo "[BLOCK] 用户取消恢复"; exit 1; }
863
- }
864
- fi
865
- fi
866
-
867
- # 5. specification.yaml 时效性校验(仅 --resume-from build)
868
- SPEC_FILE="specification.yaml"
869
- if [ "$RESUME_PHASE" -ge 2 ] && [ -f "$SPEC_FILE" ]; then
870
- SPEC_MTIME=$(stat -c %Y "$SPEC_FILE" 2>/dev/null || stat -f %m "$SPEC_FILE" 2>/dev/null)
871
- PLAN_COMPLETED_AT=$(grep -A3 '"phase": 1' "$SPRINT_STATE" 2>/dev/null | grep "completed_at" | head -1 | cut -d'"' -f4)
872
- if [ -n "$SPEC_MTIME" ] && [ -n "$PLAN_COMPLETED_AT" ] && [ "$PLAN_COMPLETED_AT" != "null" ]; then
873
- PLAN_EPOCH=$(date -d "$PLAN_COMPLETED_AT" +%s 2>/dev/null || echo "")
874
- if [ -n "$PLAN_EPOCH" ] && [ "$SPEC_MTIME" -gt $((PLAN_EPOCH + 60)) ]; then
875
- echo "[WARN] specification.yaml 在 Plan phase 完成后被修改"
876
- echo "[ACTION] 继续恢复前请确认 specification.yaml 的修改是预期的。输入 'confirm' 继续:"
877
- read USER_CONFIRM
878
- [ "$USER_CONFIRM" = "confirm" ] || { echo "[BLOCK] 用户取消恢复"; exit 1; }
879
- fi
880
- fi
881
- fi
882
-
883
- echo "✅ RESUME GATE PASSED — 断点校验通过"
884
- # 继续执行 Phase Transition Gate
885
- ```
886
337
 
887
- 验证失败 BLOCK,不可执行 `--resume-from`。
888
- orchestrator 必须展示失败原因并建议用户启动新 Sprint 或手动修复后重试。
889
-
890
- ### WORKTREE ENFORCEMENT(Issue #84)
891
-
892
- Phase -1 执行完毕后,**所有后续操作(Phase 0 到 Phase 8)的文件编辑、命令执行 MUST 在 worktree 目录下执行**:
893
-
894
- - **工作目录**:所有 Bash 命令必须通过 `workdir` 参数或 `&&` 链式命令在 worktree 路径下执行
895
- - **文件写入**:所有 `write`、`edit` 工具的 `filePath` 必须位于 `isolation.worktree_path` 下
896
- - **验证步骤**:Phase 0 开始前,输出 `[WORKTREE] 后续所有操作将在 {worktree_path} 中进行`
897
- - **例外**:`.gitignore` 校验(Phase -1 表步 4)和 `git worktree remove`(Phase 8 清理)在仓库根目录执行
898
- Sprint state is persisted as JSON in `.sprint-state/sprint-state.json`:
899
- ```json
900
- {
901
- "id": "sprint-2026-04-26-01",
902
- "task_description": "开发访谈机器人,支持多轮对话",
903
- "phase": -1,
904
- "status": "running|paused|completed",
905
- "started_at": "2026-04-26T10:00:00Z",
906
- "isolation": {
907
- "worktree_path": ".worktrees/sprint/sprint-2026-04-26-01",
908
- "branch": "sprint/2026-04-26-01",
909
- "created_from": "main",
910
- "created_from_commit": "abc123def..."
911
- },
912
- "auto_estimate": {
913
- "change_type": "删除已存在代码|修改已存在代码|新增功能|Bug修复",
914
- "metrics": {
915
- "ref_count": 12,
916
- "cross_module_count": 3,
917
- "modules": ["auth", "user", "admin"],
918
- "circular_dep": true,
919
- "public_api_count": 5,
920
- "test_file_count": 4
921
- },
922
- "estimated_level": "轻量|标准|复杂",
923
- "recommended_flow": "轻量流程 (Phase 0-3, reduced-intensity Delphi)|标准流程 (Phase 0-4)|完整 Sprint Flow (Phase 0-8)",
924
- "risk_warnings": ["循环依赖: user ↔ plane"],
925
- "user_decision": "accepted|overridden|cancelled",
926
- "override_reason": null
927
- },
928
- "phase_history": [
929
- {
930
- "phase": -1,
931
- "phase_name": "ISOLATE",
932
- "status": "completed",
933
- "started_at": "2026-04-26T10:00:00Z",
934
- "completed_at": "2026-04-26T10:03:00Z",
935
- "duration_seconds": 180
936
- }
937
- ],
938
- "outputs": {
939
- "pain_document": "docs/pain-document.md",
940
- "specification": "specification.yaml",
941
- "mvp": "mvp-v1/",
942
- "review_report": "review-report.md"
943
- },
944
- "metrics": {
945
- "tests_passed": 15,
946
- "tests_failed": 0,
947
- "coverage_pct": 85
948
- }
949
- }
950
- ```
951
-
952
- **新增字段说明**:
953
- - `task_description`: Sprint 需求描述(Phase -1 启动时写入)
954
- - `started_at`: Sprint 启动时间戳(Phase -1 启动时写入,ISO 8601 格式)
955
- - `phase_history`: 阶段历史数组,每个元素记录阶段的执行信息:
956
- - `phase`: 阶段编号
957
- - `phase_name`: 阶段名称
958
- - `status`: completed / running / failed / skipped
959
- - `started_at`: 阶段开始时间(ISO 8601)
960
- - `completed_at`: 阶段完成时间(null 表示未完成)
961
- - `duration_seconds`: 耗时秒数(null 表示未完成)
962
-
963
- **Eval assertions check for:** `phase`, `status`, `isolation.branch`, `outputs.specification`, `metrics.coverage_pct`, `phase_history`, `task_description`.
338
+ ## 编排层规则(Orchestration Rules)
964
339
 
965
- ---
340
+ 全部内容: 参见 `references/orchestration-rules.md`。包含:
341
+ - Agent Dispatch (4 types), Phase Subagent Matrix, CONTEXT INHERITANCE
342
+ - Phase Transition Rules, Phase Summary schema, Phase Transition Gate, RESUME GATE
343
+ - WORKTREE ENFORCEMENT, Eval assertions
966
344
 
967
345
  ## 参数说明
968
346
 
969
- ### 默认用法(无参数)
970
-
971
- ```bash
972
- /sprint-flow "开发访谈机器人,支持多轮对话"
973
-
974
- # 自动执行 Think Plan Build Review → Ship 全流程
975
- # 关键节点暂停等待用户确认
976
- ```
977
-
978
- ### --stop-at(执行到某阶段后停止)
979
-
980
- ```bash
981
- /sprint-flow "开发访谈机器人" --stop-at plan
982
- # Think Plan 输出 specification.yaml → 停止
983
- # 适用场景:先评审方案,后续手动决定是否继续
984
- ```
985
-
986
- ### --resume-from(从某阶段继续)
987
-
988
- **前置校验**:MUST 执行 RESUME GATE(见上节)后才可 dispatch 下一 Phase。
989
-
990
- ```bash
991
- /sprint-flow "继续 Sprint" --resume-from build --spec specification.yaml
992
- # → 1. 执行 RESUME GATE(校验 sprint-state + git 状态 + 文件时效性)
993
- # → 2. 执行 Phase Transition Gate(校验摘要文件格式)
994
- # → 3. 从 Build 恢复,但必须已有 specification.yaml + .sprint-state/delphi-reviewed.json (verdict: APPROVED)
995
- # 适用场景:中断恢复,使用已通过 delphi-review 的 specification.yaml
996
- ```
997
-
998
- **已知限制**:
999
- - `--resume-from` 校验为**尽力而为**:git commit 可被 GC 回收、文件 mtime 可被 `git checkout` 修改
1000
- - 校验失败时 orchestrator 应输出完整诊断日志,建议用户启动新 Sprint 而非手动修补
1001
-
1002
- ### --phase(只执行单个阶段)
1003
-
1004
- ```bash
1005
- /sprint-flow "评审代码" --phase review-only
1006
- # → 只执行 Phase 3 的评审
1007
- # 适用场景:单独验证某个阶段
1008
- ```
1009
-
1010
- ### --status(查看 Sprint 进度)
1011
-
1012
- ```bash
1013
- /sprint-flow --status
1014
- # → 执行 node scripts/render-sprint-progress.cjs
1015
- # → 读取 .sprint-state/sprint-state.json 并渲染 ASCII 进度看板
1016
- # → 不执行任何 Phase,仅展示当前状态
1017
- # 适用场景:碎片时间恢复时快速查看进度、中断后确认当前阶段和下一步操作
1018
- ```
1019
-
1020
- **行为规则**:
1021
- - 执行 `node scripts/render-sprint-progress.cjs`(脚本自动处理所有渲染逻辑)
1022
- - 如果 `sprint-state.json` 不存在 → 脚本输出 `[INFO] 未找到活跃的 Sprint。请先运行 /sprint-flow "[需求描述]" 启动新 Sprint。`
1023
- - 如果 `status == "completed"` → 脚本输出完整看板 + `[INFO] Sprint 已完成。`
347
+ | 参数 | 作用 | 示例 |
348
+ |------|------|------|
349
+ | (无参数) | 全流程 Think → Plan → Build → Review → Ship | `/sprint-flow "开发访谈机器人"` |
350
+ | `--stop-at <phase>` | 执行到指定 Phase 后停止 | `--stop-at plan` |
351
+ | `--resume-from <phase>` | 从指定 Phase 恢复(需先执行 RESUME GATE) | `--resume-from build --spec specification.yaml` |
352
+ | `--phase <name>` | 只执行单个 Phase | `--phase review-only` |
353
+ | `--status` | 查看 Sprint 进度(只读,不执行 Phase) | `--status` |
354
+ | `--lang <lang>` | 指定项目语言 | `--lang springboot` / `django` / `golang` |
355
+ | `--type <type>` | 指定项目类型 | `--type web-nextjs` / `backend-django` |
356
+ | `--spec <file>` | 使用已有的 specification.yaml | `--spec path/to/spec.yaml` |
357
+ | `--no-isolate` | 跳过 git worktree 隔离 | `--no-isolate` |
358
+ | `--branch-name <name>` | 自定义分支名 | `--branch-name feat/my-feature` |
359
+ | `--force` | 强制在当前分支继续 | `--force` |
360
+ | `--with-performance` | 启用负载/压力测试 | `--with-performance` |
361
+ | `--mode <mode>` | 构建模式(ralph-loop / parallel) | `--mode ralph-loop` |
362
+
363
+ **`--status` 行为规则**:
364
+ - 执行 `node scripts/render-sprint-progress.cjs`,读取 `.sprint-state/sprint-state.json` 并渲染 ASCII 进度看板
365
+ - 如果 `sprint-state.json` 不存在 → `[INFO] 未找到活跃的 Sprint`
366
+ - 如果 `status == "completed"` 输出完整看板 + `[INFO] Sprint 已完成。`
1024
367
  - `--status` 可与其他参数组合:`--status --resume-from build` → 先展示状态,再提示 "将从 Phase 2 BUILD 继续"
1025
- - 向后兼容:旧版 `sprint-state.json` 缺少 `phase_history`/`task_description` 时,按模板"向后兼容"规则渲染
1026
-
1027
- ### --lang(指定项目语言)
1028
368
 
1029
- ```bash
1030
- /sprint-flow "开发用户认证模块" --lang springboot
1031
- # Phase 2 自动调用 springboot-tdd + springboot-verification
369
+ **`--resume-from` 限制**:校验为**尽力而为**(git commit 可被 GC 回收、文件 mtime 可被 `git checkout` 修改)。校验失败时输出完整诊断日志,建议启动新 Sprint。
1032
370
 
1033
- /sprint-flow "开发 REST API" --lang django
1034
- # Phase 2 自动调用 django-tdd + django-verification
1035
-
1036
- /sprint-flow "开发并发任务调度器" --lang golang
1037
- # Phase 2 自动调用 golang-testing
1038
- ```
371
+ **项目类型自动检测**(按顺序检查):
1039
372
 
1040
- ### --type(指定项目类型)
1041
-
1042
- ```bash
1043
- /sprint-flow "开发用户登录页面" --type web-nextjs
1044
- /sprint-flow "开发 REST API" --type backend-django
1045
- # 默认: 从项目文件自动检测
1046
- ```
1047
-
1048
- 自动检测逻辑(按顺序检查):
1049
-
1050
373
  | 检测条件 | 类型 |
1051
374
  |---------|------|
1052
375
  | `package.json` + `next.config.js` | `web-nextjs` |
1053
- | `package.json` + `vite.config.ts` + `react` 依赖 | `web-react` |
1054
- | `package.json` + `vue` 依赖 | `web-vue` |
376
+ | `package.json` + `vite.config.ts` + react 依赖 | `web-react` |
377
+ | `package.json` + vue 依赖 | `web-vue` |
1055
378
  | `pubspec.yaml` + `flutter:` | `mobile-flutter` |
1056
- | `package.json` + `react-native` 依赖 or `ios/` + `android/` | `mobile-react-native` |
1057
- | `go.mod` | `backend-go` (可选 k6 负载测试)|
1058
- | `pom.xml` | `backend-springboot` (可选 gatling 负载测试)|
1059
- | `manage.py` 或 `pyproject.toml` (django) | `backend-django` (可选 locust 负载测试)|
379
+ | `package.json` + react-native 依赖 or `ios/` + `android/` | `mobile-react-native` |
380
+ | `go.mod` | `backend-go` (可选 k6) |
381
+ | `pom.xml` | `backend-springboot` (可选 gatling) |
382
+ | `manage.py` 或 `pyproject.toml` (django) | `backend-django` (可选 locust) |
1060
383
  | 无匹配 | `backend-cli` |
1061
384
 
1062
- ### 项目类型到 Skill 注入映射
385
+ **项目类型 Skill 注入映射**:
1063
386
 
1064
- | Phase | Backend (default) | Web Frontend | Mobile | Load/Performance Testing |
1065
- |-------|------------------|-------------|--------|--------------------------|
1066
- | Phase 0 (THINK) | `brainstorming` | (同) | (同) | (通用) |
1067
- | Phase 1 (PLAN) | `autoplan` + `delphi-review` | + `design-shotgun` | (同 web) | (同) |
1068
- | Phase 2 (BUILD) | TDD + blind-review | (同 backend) | + `vercel-react-native-skills` (RN) / `flutter-review` (Flutter) | (同) |
1069
- | Phase 3 (REVIEW) | `delphi-review --mode code-walkthrough` + `test-specification-alignment` + `k6` / `locust` / `gatling` | + `qa` + `design-review` + `benchmark` | Flutter: `flutter-test` / RN: `detox E2E` | k6/locust/gatling (补充 API 测试后的负载测试验证) |
1070
- | Phase 5 (FEEDBACK) | `learn` + `retro` | (同) | (同) | (同) |
1071
- | Phase 6 (SHIP) | `finishing-a-development-branch` + `ship` | (同) | + platform deploy (可选) | (同) |
1072
- | Phase 7 (LAND) | `land-and-deploy` + canary | (同) | (同) | (同) |
1073
- | Phase 8 (CLEANUP) | worktree remove + branch delete + state update | (同) | (同) | (同) |
1074
- | Browse | `localhost:3000` | 部署 URL + 表单/交互 | Flutter Web / RN Web 测试 | (专用负载测试) |
387
+ | Phase | Backend (default) | Web Frontend | Mobile | Load Test |
388
+ |-------|------------------|-------------|--------|-----------|
389
+ | 0 THINK | `brainstorming` | (同) | (同) | (通用) |
390
+ | 1 PLAN | `autoplan` + `delphi-review` | + `design-shotgun` | (同 web) | (同) |
391
+ | 2 BUILD | TDD + blind-review | (同 backend) | + `vercel-react-native-skills` / `flutter-review` | (同) |
392
+ | 3 REVIEW | `delphi-review --mode code-walkthrough` + `test-specification-alignment` + k6/locust/gatling | + `qa` + `design-review` + `benchmark` | Flutter: `flutter-test` / RN: `detox E2E` | k6/locust/gatling |
393
+ | 5 FEEDBACK | `learn` + `retro` | (同) | (同) | (同) |
394
+ | 6 SHIP | `finishing-a-development-branch` + `ship` | (同) | + platform deploy | (同) |
395
+ | 7 LAND | `land-and-deploy` + canary | (同) | (同) | (同) |
396
+ | 8 CLEANUP | worktree remove + branch delete + state update | (同) | (同) | (同) |
397
+ | Browse | `localhost:3000` | 部署 URL + 表单/交互 | Flutter Web / RN Web | (专用) |
1075
398
 
1076
- **Mobile 专属工具链**:
1077
- - **Flutter**: `flutter analyze`, `flutter test`, `flutter build`, `pub publish`
1078
- - **React Native**: `metro`, `detox`, `jest`, `react-native run-ios/android`
399
+ **Mobile 工具链**: Flutter — `flutter analyze/test/build/pub publish`; RN — `metro/detox/jest/react-native run-ios/android`
1079
400
 
1080
401
  ---
1081
402
 
1082
403
  ## 状态管理
1083
404
 
1084
- ### Sprint State
1085
-
1086
- ```yaml
1087
- Sprint State:
1088
- id: sprint-YYYY-MM-DD-NN
1089
- phase: [-1, 0-6] # -1=ISOLATE, 0-6=各阶段
1090
- status: [pending, running, paused, completed, failed] # 统一状态
1091
- pause_reason: [none, wait_isolation, wait_approved, wait_gate1, wait_uat, wait_ship, wait_user_confirm]
1092
- isolation: # Phase -1 隔离信息
1093
- worktree_path: .worktrees/sprint/sprint-YYYY-MM-DD-NN
1094
- branch: sprint/YYYY-MM-DD-NN
1095
- created_from: main
1096
- created_from_commit: abc123def...
1097
-
1098
- 存储位置: <project-root>/.sprint-state/
1099
- ├─ sprint-state.yaml # 当前 Sprint 状态
1100
- ├─ sprint-state.json # 当前 Sprint 状态 (JSON 格式,同上)
1101
- └─ phase-outputs/
1102
- ├─ pain-document.md # Phase 0 输出
1103
- ├─ specification.yaml # Phase 1 输出
1104
- ├─ mvp-v1/ # Phase 2 输出
1105
- ├─ review-report.md # Phase 3 输出
1106
- ├─ emergent-issues.md # Phase 4 输出
1107
- ├─ feedback-log.md # Phase 5 输出
1108
- └─ sprint-summary.md # Phase 6 输出
1109
- ```
1110
-
1111
- ### Sprint 2 自动触发机制
405
+ **Sprint State**: 存储于 `<project-root>/.sprint-state/` — `sprint-state.yaml`/`.json` + `phase-outputs/` (pain-document.md / specification.yaml / mvp-v1 / review-report.md / emergent-issues.md / feedback-log.md / sprint-summary.md)
1112
406
 
1113
- ```yaml
1114
- Sprint 结束时 (Phase 6 完成):
1115
- IF emergent_issues_count == 0 → sprint_completed,结束流程
1116
- IF emergent_issues_count > 0 → sprint_2_needed:
1117
- ├─ IF emergent_issues 有 Critical → 自动启动 Sprint 2
1118
- ├─ IF emergent_issues 仅 Major/Minor → 询问用户
1119
- └─ Sprint 2 Pain Document 自动从 emergent-issues.md 转化
1120
- ```
407
+ **Sprint 2 自动触发**: Phase 6 完成时 — `emergent_issues_count == 0` → 结束; `> 0` → Critical 自动启动 Sprint 2, Major/Minor 询问用户
1121
408
 
1122
409
  ---
1123
410
 
1124
411
  ## 使用示例
1125
412
 
1126
- ### 示例 1:完整流程
1127
-
1128
- ```bash
1129
- /sprint-flow "开发访谈机器人,支持多轮对话"
1130
-
1131
- # 输出:
1132
- # Phase 0: brainstorming 需求探索 → 设计文档 → ⚠️ HARD-GATE: 等待用户 APPROVED
1133
- # 用户 APPROVED → 自动进入 Phase 1
1134
- # Phase 1: autoplan 发现 2 个 taste_decisions → ⚠️ 暂停
1135
- # 用户确认决策后 → delphi-review → Round 1 REQUEST_CHANGES
1136
- # 修复 → Round 2 APPROVED → specification.yaml
1137
- # Phase 2: TDD + freeze + review → verification → MVP v1
1138
- # Phase 3: cross-model-review APPROVED → browse QA 通过
1139
- # Phase 4: ⚠️ 用户验收 → 发现 1 个 Major emergent issue
1140
- # Phase 5: learn → 记录 → Sprint 2 Pain Document
1141
- # Phase 6: ship → PR → 用户确认合并 → canary 监控
1142
- # → Sprint Summary → 发现 emergent issue → 提示是否开始 Sprint 2
1143
- ```
1144
-
1145
- ### 示例 2:中断恢复
1146
-
1147
- ```bash
1148
- # 第一次:执行到 Plan 后停止
1149
- /sprint-flow "开发用户认证模块" --stop-at plan
1150
- # → 输出 specification.yaml
1151
-
1152
- # 第二次:三天后继续
1153
- /sprint-flow "继续开发" --resume-from build --spec docs/specification.yaml
1154
- # → 1. RESUME GATE:校验 sprint-state + git + 文件时效性(三天前生成的文件可能 stale)
1155
- # → 2. Phase Transition Gate:校验摘要文件格式
1156
- # → 3. 从 Build 入口恢复,但必须已有 specification.yaml + .sprint-state/delphi-reviewed.json (verdict: APPROVED)
1157
- ```
1158
-
1159
- ### 示例 3:语言特定
1160
-
1161
- ```bash
1162
- /sprint-flow "开发 REST API" --lang django
1163
- # Phase 2 自动调用 django-tdd + django-verification
1164
- # Gate 1 包含 Django 特定的验证(migrations, linting, coverage)
1165
- ```
1166
-
1167
- ### 示例 4:使用 --mode parallel(旧有并行模式)
1168
-
1169
- ```bash
1170
- /sprint-flow "修改单行配置" --mode parallel
1171
- # 小改动可使用旧有并行模式,一次 dispatch 完成
1172
- # 注意:默认 ralph-loop 模式已覆盖绝大多数场景
1173
- ```
1174
-
1175
- ### 示例 4b:仅验证隔离(--stop-at isolate)
1176
-
1177
- ```bash
1178
- /sprint-flow "开发用户登录" --stop-at isolate
1179
- # → 仅执行 Phase -1 ISOLATE
1180
- # → 检测 main 分支 → 创建 worktree → setup → .gitignore → baseline
1181
- # → 输出 worktree 路径 → 停止
1182
- # 适用场景:手动验证隔离是否正常创建,后续手动决定是否继续
1183
- ```
1184
-
1185
- ### 示例 5:Worktree 隔离(默认行为)
1186
-
1187
- ```bash
1188
- /sprint-flow "开发用户登录"
1189
- # Phase -1 ISOLATE:
1190
- # → 检测当前在 main 分支(保护分支)→ 强制创建 worktree
1191
- # → mkdir -p .worktrees/sprint
1192
- # → 检测已有 NN 编号(.worktrees/sprint/ | grep -oE '[0-9]{2}$' | sort -n | tail -1)
1193
- # → git worktree add .worktrees/sprint/sprint-2026-05-24-01 -b sprint/2026-05-24-01
1194
- # → 在 worktree 目录下:npm install → 基线测试 → .sprint-state/ 记录
1195
- # → 进入 Phase 0 THINK...
1196
-
1197
- # 跳过隔离(⚠️ 有污染风险)
1198
- /sprint-flow "开发用户登录" --no-isolate
1199
- # → [WARN] 未创建 worktree 隔离,在 main 分支上直接运行 sprint 有污染风险
1200
- # → 直接进入 Phase 0
1201
-
1202
- # 强制跳过(需用户确认)
1203
- /sprint-flow "开发用户登录" --force
1204
- # → [WARN] 使用 --force 在 main 分支上直接运行 sprint → 等待用户确认 → 确认后进入 Phase 0
1205
-
1206
- # 自定义分支名
1207
- /sprint-flow "开发用户登录" --branch-name feat/user-login
1208
- # → 分支名:feat/user-login(保留 /)
1209
- # → worktree 路径:.worktrees/sprint/feat-user-login(/ 替换为 -)
1210
-
1211
- # Sprint 完成后安全清理:先列出本 sprint 的 isolation.worktree_path
1212
- # 仅清理 sprint-state 中记录的精确 worktree 路径
1213
- # 禁止使用通配符或递归 shell 删除命令
1214
- # 如果自动清理失败,输出目标路径并要求用户手动处理
1215
- ```
1216
-
1217
- ---
413
+ | 场景 | 命令 | 说明 |
414
+ |------|------|------|
415
+ | 完整流水线 | `/sprint-flow "开发访谈机器人"` | 自动执行 11 阶段 → specification.yaml + PR URL |
416
+ | 规划后停止 | `/sprint-flow "开发认证模块" --stop-at plan` | 输出 specification.yaml 后停止,供评审 |
417
+ | 仅构建阶段 | `/sprint-flow "开发 API" --lang django --phase build-only` | 跳过隔离/规划,直接 Build |
1218
418
 
1219
419
  ## 底层 Skills 保持独立
1220
420
 
1221
- 所有被调用的 Skills 保持独立可用:
1222
- - 用户可以直接调用 `delphi-review` 单独评审
1223
- - 用户可以直接调用 `test-driven-development` 单独执行 TDD
1224
- - sprint-flow 只是自动串联调用,不替代底层 Skills
421
+ 所有被调用的 Skills 独立可用:`delphi-review` (单独评审), `test-driven-development` (TDD),sprint-flow 仅自动串联
1225
422
 
1226
423
  ---
1227
424
 
@@ -1248,68 +445,17 @@ See [Output Contract](#output-contract) below for the canonical machine-readable
1248
445
 
1249
446
  ## Output Contract
1250
447
 
1251
- ### Machine-Readable Outputs
1252
-
1253
- **Phase Summary** (all automated Phases must output):
1254
- ```markdown
1255
- ---
1256
- phase: <N>
1257
- phase_name: <NAME>
1258
- status: completed|paused|failed
1259
- outputs:
1260
- - path: "path/to/output"
1261
- type: file|directory
1262
- decisions:
1263
- - title: "Decision title"
1264
- rationale: "Rationale for decision"
1265
- unresolved_issues: []
1266
- next_phase_context: "Context needed by next phase"
1267
- ---
1268
-
1269
- ## Phase Summary
1270
- Concise summary, <= 50 lines.
1271
- ```
1272
-
1273
- **Sprint State JSON** (all Phases must maintain):
1274
- ```json
1275
- {
1276
- "id": "sprint-YYYY-MM-DD-NN",
1277
- "phase": <N>,
1278
- "status": "running|paused|completed|failed",
1279
- "isolation": {
1280
- "worktree_path": ".worktrees/sprint/sprint-YYYY-MM-DD-NN",
1281
- "branch": "sprint/YYYY-MM-DD-NN"
1282
- },
1283
- "outputs": {},
1284
- "metrics": {}
1285
- }
1286
- ```
1287
-
1288
- ### Final User-Facing Output
448
+ **Phase Summary** (每个 Phase 必须输出 YAML frontmatter): `phase/N`, `phase_name`, `status`, `outputs[]`, `decisions[]`, `next_phase_context` + markdown body (≤50 lines)
1289
449
 
1290
- When ending or pausing, output:
1291
- - Current Phase and status
1292
- - Generated file paths
1293
- - Passed/failed validation commands
1294
- - Next user decision required (if applicable)
1295
- - PR URL (Phase 6 success) or cleanup report (Phase 8 success)
1296
-
1297
- ## Security Notes
450
+ **Sprint State JSON**: `{id, phase, status, isolation {worktree_path, branch}, outputs, metrics}` — 存储于 `.sprint-state/sprint-state.json`
1298
451
 
1299
- - Sprint Flow 会执行 git 操作(worktree、branch、commit、PR、merge),在受保护分支上默认必须隔离。
1300
- - 不得使用 `--no-verify` 绕过 quality gates;hook 失败必须修复根因。
1301
- - 不得自动推送、创建 PR、merge 或 deploy,除非用户请求的流程明确进入 Ship/Land 阶段并已通过前置 gate。
1302
- - 不得修改、打印或提交 `.delphi-config.json`、API keys、tokens、cookies、SSH keys 等敏感信息。
1303
- - Phase 7 deploy/canary 失败时必须报告失败并按配置回滚;不可静默忽略部署失败。
1304
- - Phase 4 用户验收不可由模型代替;人工验收是发布安全边界。
1305
- - worktree 清理只允许删除本 sprint 创建的 `isolation.worktree_path`,不得删除任意用户目录。
1306
-
1307
- ---
452
+ **Final User-Facing Output**: Phase/status, file paths, validation results, next user decision, PR URL or cleanup report
1308
453
 
1309
454
  ## References
1310
455
 
1311
456
  详细指令文件位于 `@references/`:
1312
457
  - `@references/phase-minus-1-isolate.md` — Phase -1 详细指令
458
+ - `@references/phase-minus-0-5-auto-estimate.md` — Phase -0.5 详细指令
1313
459
  - `@references/phase-0-think.md` — Phase 0 详细指令
1314
460
  - `@references/phase-1-plan.md` — Phase 1 详细指令
1315
461
  - `@references/phase-2-build.md` — Phase 2 详细指令
@@ -1317,6 +463,8 @@ When ending or pausing, output:
1317
463
  - `@references/phase-4-uat.md` — Phase 4 详细指令(人工)
1318
464
  - `@references/phase-5-feedback.md` — Phase 5 详细指令
1319
465
  - `@references/phase-6-ship.md` — Phase 6 详细指令
466
+ - `@references/phase-7-land.md` — Phase 7 详细指令
467
+ - `@references/phase-8-cleanup.md` — Phase 8 详细指令
1320
468
 
1321
469
  ---
1322
470
 
@@ -1330,110 +478,6 @@ When ending or pausing, output:
1330
478
 
1331
479
  ---
1332
480
 
1333
- ## Anti-Patterns
1334
-
1335
- | ❌ 错误 | ✅ 正确 |
1336
- |---|---|
1337
- | 在保护分支 (main/master) 上直接执行 sprint | Phase -1 自动创建 worktree 隔离 |
1338
- | 跳过 Phase 4 用户验收("赶时间") | Phase 4 是 HARD-GATE,必须人工验收 |
1339
- | Phase 2 不安装 Git Hooks 就开始编码 | GITHOOKS-GATE 检查必须先于 BUILD |
1340
- | 单个 subagent 处理所有 REQ | ralph-loop 逐 REQ 迭代,每个 REQ 独立上下文 |
1341
- | 验证失败仍 commit | 验证不通过的代码不 commit |
1342
- | 跳过 Phase 5 FEEDBACK 直接 SHIP | Phase 5 是 HARD-GATE,不可跳过 |
1343
- | --force 在生产分支上运行不确认 | --force 必须等待用户显式确认风险 |
1344
- | Phase 6 SHIP 后不清理 worktree/分支 | Phase 8 CLEANUP 必须执行 worktree remove + branch delete |
1345
-
1346
- ---
1347
-
1348
- ## Output Format (MANDATORY)
1349
-
1350
- Sprint-flow orchestrator MUST output phase transition status as valid JSON:
1351
-
1352
- ```json
1353
- {
1354
- "skill_name": "sprint-flow",
1355
- "sprint_id": "sprint-YYYY-MM-DD-NN",
1356
- "current_phase": 2,
1357
- "phase_name": "BUILD",
1358
- "status": "running|paused|completed|failed",
1359
- "isolation": {
1360
- "worktree_path": ".worktrees/sprint/sprint-YYYY-MM-DD-NN",
1361
- "branch": "sprint/YYYY-MM-DD-NN"
1362
- },
1363
- "progress": {
1364
- "total_phases": 11,
1365
- "completed_phases": 4,
1366
- "percentage": 36,
1367
- "phase_history": [
1368
- { "phase": -1, "phase_name": "ISOLATE", "status": "completed", "started_at": "2026-06-02T14:30:00Z", "completed_at": "2026-06-02T14:33:00Z", "duration_seconds": 180 },
1369
- { "phase": -0.5, "phase_name": "AUTO-ESTIMATE", "status": "completed", "started_at": "2026-06-02T14:33:00Z", "completed_at": "2026-06-02T14:34:00Z", "duration_seconds": 60 },
1370
- { "phase": 0, "phase_name": "THINK", "status": "completed", "started_at": "2026-06-02T14:34:00Z", "completed_at": "2026-06-02T14:59:00Z", "duration_seconds": 1500 },
1371
- { "phase": 1, "phase_name": "PLAN", "status": "completed", "started_at": "2026-06-02T14:59:00Z", "completed_at": "2026-06-02T15:17:00Z", "duration_seconds": 1080 },
1372
- { "phase": 2, "phase_name": "BUILD", "status": "running", "started_at": "2026-06-02T15:17:00Z", "completed_at": null, "duration_seconds": null }
1373
- ]
1374
- },
1375
- "outputs": {
1376
- "specification": "specification.yaml",
1377
- "mvp": "mvp-v1/"
1378
- },
1379
- "metrics": {
1380
- "tests_passed": 15,
1381
- "tests_failed": 0,
1382
- "coverage_pct": 85
1383
- }
1384
- }
1385
- ```
1386
-
1387
- **Eval assertions check for:** `phase`, `status`, `isolation.branch`, `outputs.specification`, `metrics.coverage_pct`, `progress.phase_history`.
1388
-
1389
- ---
1390
-
1391
- ## Anti-Patterns
1392
-
1393
- | ❌ 错误 | ✅ 正确 |
1394
- |---|---|
1395
- | 在保护分支 (main/master) 上直接执行 sprint | Phase -1 自动创建 worktree 隔离 |
1396
- | 跳过 Phase 4 用户验收("赶时间") | Phase 4 是 HARD-GATE,必须人工验收 |
1397
- | Phase 2 不安装 Git Hooks 就开始编码 | GITHOOKS-GATE 检查必须先于 BUILD |
1398
- | 单个 subagent 处理所有 REQ | ralph-loop 逐 REQ 迭代,每个 REQ 独立上下文 |
1399
- | 验证失败仍 commit | 验证不通过的代码不 commit |
1400
- | 跳过 Phase 5 FEEDBACK 直接 SHIP | Phase 5 是 HARD-GATE,不可跳过 |
1401
- | --force 在生产分支上运行不确认 | --force 必须等待用户显式确认风险 |
1402
- | Phase 6 SHIP 后不清理 worktree/分支 | Phase 8 CLEANUP 必须执行 worktree remove + branch delete |
1403
-
1404
- ---
1405
-
1406
- ## Output Format (MANDATORY)
1407
-
1408
- Sprint-flow orchestrator MUST output phase transition status as valid JSON:
1409
-
1410
- ```json
1411
- {
1412
- "skill_name": "sprint-flow",
1413
- "sprint_id": "sprint-YYYY-MM-DD-NN",
1414
- "current_phase": 2,
1415
- "phase_name": "BUILD",
1416
- "status": "running|paused|completed|failed",
1417
- "isolation": {
1418
- "worktree_path": ".worktrees/sprint/sprint-YYYY-MM-DD-NN",
1419
- "branch": "sprint/YYYY-MM-DD-NN"
1420
- },
1421
- "outputs": {
1422
- "specification": "specification.yaml",
1423
- "mvp": "mvp-v1/"
1424
- },
1425
- "metrics": {
1426
- "tests_passed": 15,
1427
- "tests_failed": 0,
1428
- "coverage_pct": 85
1429
- }
1430
- }
1431
- ```
1432
-
1433
- **Eval assertions check for:** `phase`, `status`, `isolation.branch`, `outputs.specification`, `metrics.coverage_pct`.
1434
-
1435
- ---
1436
-
1437
481
  ## 研究证据
1438
482
 
1439
483
  | 证据 | 来源 | 应用 |