xp-gate 0.5.1

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 (90) hide show
  1. package/adapter-common.sh +192 -0
  2. package/adapters/cpp.sh +76 -0
  3. package/adapters/dart.sh +41 -0
  4. package/adapters/flutter.sh +41 -0
  5. package/adapters/go.sh +59 -0
  6. package/adapters/iac.sh +189 -0
  7. package/adapters/java.sh +191 -0
  8. package/adapters/kotlin.sh +77 -0
  9. package/adapters/objectivec.sh +38 -0
  10. package/adapters/powershell.sh +138 -0
  11. package/adapters/python.sh +104 -0
  12. package/adapters/shell.sh +55 -0
  13. package/adapters/swift.sh +44 -0
  14. package/adapters/typescript.sh +61 -0
  15. package/bin/xp-gate.js +157 -0
  16. package/hooks/adapter-common.sh +192 -0
  17. package/hooks/pre-commit +1667 -0
  18. package/hooks/pre-push +395 -0
  19. package/lib/__tests__/detect-deps.test.js +209 -0
  20. package/lib/__tests__/doctor.test.js +448 -0
  21. package/lib/__tests__/download-skill.test.js +281 -0
  22. package/lib/__tests__/init.test.js +327 -0
  23. package/lib/__tests__/install-skill.test.js +326 -0
  24. package/lib/__tests__/migrate.test.js +212 -0
  25. package/lib/__tests__/rollback.test.js +183 -0
  26. package/lib/__tests__/ui-detector.test.ts +200 -0
  27. package/lib/__tests__/uninstall-skill.test.js +189 -0
  28. package/lib/__tests__/uninstall.test.js +589 -0
  29. package/lib/__tests__/update-skill.test.js +276 -0
  30. package/lib/detect-deps.js +157 -0
  31. package/lib/doctor.js +370 -0
  32. package/lib/download-skill.js +96 -0
  33. package/lib/init.js +367 -0
  34. package/lib/install-skill.js +184 -0
  35. package/lib/migrate.js +120 -0
  36. package/lib/rollback.js +78 -0
  37. package/lib/ui-detector.ts +99 -0
  38. package/lib/uninstall-skill.js +69 -0
  39. package/lib/uninstall.js +401 -0
  40. package/lib/update-skill.js +90 -0
  41. package/package.json +39 -0
  42. package/plugins/claude-code/.claude-plugin/plugin.json +21 -0
  43. package/plugins/claude-code/bin/delphi-review-guard.sh +68 -0
  44. package/plugins/claude-code/bin/xp-gate-check +47 -0
  45. package/plugins/claude-code/hooks/hooks.json +37 -0
  46. package/skills/delphi-review/.delphi-config.json.example +45 -0
  47. package/skills/delphi-review/AGENTS.md +54 -0
  48. package/skills/delphi-review/INSTALL.md +152 -0
  49. package/skills/delphi-review/SKILL.md +371 -0
  50. package/skills/delphi-review/evals/evals.json +82 -0
  51. package/skills/delphi-review/opencode.json.delphi.example +56 -0
  52. package/skills/delphi-review/references/code-walkthrough.md +486 -0
  53. package/skills/ralph-loop/SKILL.md +330 -0
  54. package/skills/ralph-loop/evals/evals.json +311 -0
  55. package/skills/ralph-loop/evolution-history.json +59 -0
  56. package/skills/ralph-loop/evolution-log.md +16 -0
  57. package/skills/ralph-loop/references/components/memory.md +55 -0
  58. package/skills/ralph-loop/references/components/middleware.md +54 -0
  59. package/skills/ralph-loop/references/components/skill-invocations.md +39 -0
  60. package/skills/ralph-loop/references/components/system-prompt.md +24 -0
  61. package/skills/ralph-loop/references/components/tool-descriptions.md +32 -0
  62. package/skills/ralph-loop/references/phase-2-build-ralph.md +89 -0
  63. package/skills/ralph-loop/templates/progress-log.md +36 -0
  64. package/skills/sprint-flow/SKILL.md +600 -0
  65. package/skills/sprint-flow/evals/evals.json +78 -0
  66. package/skills/sprint-flow/evolution-history.json +39 -0
  67. package/skills/sprint-flow/evolution-log.md +23 -0
  68. package/skills/sprint-flow/references/components/memory.md +87 -0
  69. package/skills/sprint-flow/references/components/middleware.md +72 -0
  70. package/skills/sprint-flow/references/components/skill-invocations.md +104 -0
  71. package/skills/sprint-flow/references/components/system-prompt.md +27 -0
  72. package/skills/sprint-flow/references/components/tool-descriptions.md +96 -0
  73. package/skills/sprint-flow/references/phase-0-think.md +115 -0
  74. package/skills/sprint-flow/references/phase-1-plan.md +178 -0
  75. package/skills/sprint-flow/references/phase-2-build.md +198 -0
  76. package/skills/sprint-flow/references/phase-3-review.md +213 -0
  77. package/skills/sprint-flow/references/phase-4-uat.md +125 -0
  78. package/skills/sprint-flow/references/phase-5-feedback.md +100 -0
  79. package/skills/sprint-flow/references/phase-6-ship.md +193 -0
  80. package/skills/sprint-flow/references/phase-7-land.md +140 -0
  81. package/skills/sprint-flow/references/phase-8-cleanup.md +192 -0
  82. package/skills/sprint-flow/templates/emergent-issues-template.md +120 -0
  83. package/skills/sprint-flow/templates/pain-document-template.md +115 -0
  84. package/skills/sprint-flow/templates/sprint-summary-template.md +120 -0
  85. package/skills/test-specification-alignment/AGENTS.md +59 -0
  86. package/skills/test-specification-alignment/SKILL.md +605 -0
  87. package/skills/test-specification-alignment/evals/evals.json +75 -0
  88. package/skills/test-specification-alignment/references/alignment-verification-algorithm.md +493 -0
  89. package/skills/test-specification-alignment/references/phase2-constraint-enforcement.md +431 -0
  90. package/skills/test-specification-alignment/references/specification-format.md +348 -0
@@ -0,0 +1,600 @@
1
+ ---
2
+ name: sprint-flow
3
+ description: >
4
+ One-Shot Sprint 自动流水线。单一入口,自动串联 Think → Plan → Build →
5
+ Review → Ship 流程。整合 brainstorming + autoplan + delphi-review + TDD +
6
+ delphi-review --mode code-walkthrough + ship 等现有 Skills。关键节点暂停等待用户决策。
7
+ 承认 Emergent Requirements 限制,设计用户验收环节。
8
+
9
+ TRIGGER:
10
+ - "开发新功能"
11
+ - "实现 X"
12
+ - "start sprint"
13
+ - "一键开发"
14
+ - "/sprint-flow"
15
+
16
+ 用法: /sprint-flow "[需求描述]"
17
+ 示例: /sprint-flow "开发访谈机器人,支持多轮对话"
18
+
19
+ 可选参数:
20
+ --no-isolate: 跳过自动 worktree 隔离(⚠️ 在保护分支上有污染风险)
21
+ --branch-name <name>: 自定义分支名(默认自动生成 sprint/YYYY-MM-DD-NN)
22
+ --force: 强制在当前分支继续(即使已是保护分支,⚠️ 输出警告)
23
+ --stop-at <phase>: 执行到指定阶段后停止 (isolate/think/plan/build/review/ship/land/cleanup)
24
+ --resume-from <phase>: 从指定阶段继续,跳过前面阶段
25
+ --phase <phase>: 只执行单个阶段 (isolate-only/think-only/plan-only/build-only/review-only/ship-only/land-only/cleanup-only)
26
+ --lang <language>: 指定项目语言 (springboot/django/golang)
27
+ --type <project_type>: 指定项目类型 (web-nextjs/web-react/web-vue/mobile-flutter/mobile-react-native/backend-django/backend-go/backend-springboot)
28
+ --spec <file>: 使用已有的 specification.yaml 文件
29
+ --with-performance: 启用负载/压力测试(后端项目)
30
+ --mode <build_mode>: 指定 Phase 2 构建模式。默认 = ralph-loop(逐 REQ 迭代,token 节约)。parallel = 旧有并行模式(一次性 dispatch 所有需求)
31
+
32
+ maturity: beta
33
+ ---
34
+
35
+ # Sprint Flow Skill
36
+
37
+ ## 核心原则
38
+
39
+ | 原则 | 说明 |
40
+ |------|------|
41
+ | **单一入口** | 用户只需调用 `/sprint-flow`,自动串联全流程 |
42
+ | **自动流水线** | 类似 autoplan,自动执行多个阶段 |
43
+ | **关键节点暂停** | APPROVED 确认、Gate 1 通过、Ship 确认、⚠️ Phase 4 必须人工 |
44
+ | **承认 Emergent** | 用户验收环节必须人工,无法自动化(78% 失败不可见) |
45
+ | **复用现有 Skills** | 不重新发明,整合调用现有体系 |
46
+
47
+ ---
48
+
49
+ ## 完整流程(默认无参数)
50
+
51
+ 调用 `/sprint-flow "[需求描述]"` 后,自动执行以下流程:
52
+
53
+ ```
54
+ Phase -1: ISOLATE → ⚠️ 检测保护分支(main/master/develop/trunk/mainline) → 强制创建 git worktree
55
+ → 已在 worktree 中 → 跳过 → 项目 setup → .gitignore 校验 → sprint-state isolation 记录
56
+ Phase 0: THINK → brainstorming → ⚠️ HARD-GATE: 设计未批准 → 不可进入实现 → Design Document (AI编辑行为约束: 原则3 Surgical Changes, 验证循环要求: 原则4 Goal-Driven Execution - 见 AGENTS.md "## AI CODING DISCIPLINE (Karpathy Principles)")
57
+ Phase 1: PLAN → autoplan → ⚠️ (如有taste_decisions,暂停等用户确认)
58
+ → delphi-review → ⚠️ (等待 APPROVED)
59
+ → 自动生成 specification.yaml(无需独立 skill)
60
+ Phase 2: BUILD → ⚠️ GITHOOKS-GATE: 检查并安装 Git Hooks(缺失→阻断)
61
+ → dispatching-parallel-agents (并行检测) + executing-plans (隔离执行)
62
+ → test-driven-development (RED→GREEN→REFACTOR)
63
+ → freeze (盲评隔离) → requesting-code-review → unfreeze
64
+ → verification-before-completion → ⚠️ (验证失败超过 max 3)
65
+ → MVP v1
66
+ Phase 3: REVIEW → delphi-review --mode code-walkthrough → test-specification-alignment
67
+ → browse → ⚠️ (验证失败)
68
+ Phase 4: ⚠️ ⚠️ USER ACCEPTANCE → 必须人工验收 → Emergent Issues List
69
+ Phase 5: FEEDBACK → learn + retro(工程回顾)+ systematic-debugging(根因调试)
70
+ Phase 6: SHIP → finishing-a-development-branch (4 选项) → ship (PR 路径)
71
+ → PR 创建完成
72
+ Phase 7: ⚠️ LAND → land-and-deploy → merge PR + wait CI + canary health check
73
+ → deploy verification + auto-rollback on failure
74
+ Phase 8: CLEANUP → git worktree remove + sprint-state.json update → status: merged
75
+ → Sprint Summary → IF emergent issues → Sprint 2
76
+ ```
77
+
78
+ ---
79
+
80
+ ## 暂停点设计(不是随时停,而是设计明确的暂停点)
81
+
82
+ | 暂停点位置 | 触发条件 | 用户操作 | 自动恢复条件 |
83
+ |-----------|---------|---------|-------------|
84
+ | **Phase -1** | ⚠️ **保护分支强制隔离 / --no-isolate 跳过** | 输出 ⚠️ 警告或自动创建 worktree | 自动创建或用户确认后继续 |
85
+ | **Phase 0** | ⚠️ **设计未 APPROVED (HARD-GATE)** | 根据反馈修改设计 | 设计 APPROVED 后继续 |
86
+ | Phase 1 | autoplan surfacing taste_decisions | 用户确认每个决策 | 确认后自动继续 |
87
+ | Phase 1 | delphi-review 未 APPROVED | 修复并重新评审 | APPROVED 后自动继续 |
88
+ | Phase 2 | 验证失败超过 max 3 | 用户决定修复或放弃 | 验证通过后自动继续 |
89
+ | Phase 2 | 成本超阈值 | 用户决定继续或暂停 | 用户确认后自动继续 |
90
+ | Phase 3 | browse 发现问题 | 回退 Phase 2(不暂停) | 验证通过后自动继续 |
91
+ | **Phase 4** | ⚠️ **必须人工验收** | 用户实际使用后确认 | 用户确认后继续 |
92
+ | **Phase 5** | ⚠️ **必须执行,不可跳过 (HARD-GATE)** | Phase 5 完成后进入 Phase 6 | `feedback-log.md` 生成后自动继续 |
93
+ | Phase 6 | finishing-a-development-branch | 用户选择 4 选项 (merge/PR/discard/keep) | 确认后自动继续 |
94
+ | Phase 6 | ship PR 创建(PR 路径)| 用户确认合并 | 合并后自动继续 |
95
+ | **Phase 7** | **land-and-deploy 完成/失败** | **用户确认合并结果 / 处理部署失败** | **确认/修复后继续** |
96
+ | **Phase 8** | **worktree 清理完成/失败** | **用户确认清理 / 手动处理残留** | **确认后结束流程** |
97
+
98
+ ---
99
+
100
+ ## 各 Phase 调用的 Skills
101
+
102
+ ### Phase -1: ISOLATE(git worktree 隔离)
103
+
104
+ **执行时机**: `/sprint-flow` 启动后、Phase 0 THINK 之前。**自动执行**。
105
+
106
+ **目的**: 默认在 git worktree 中隔离 sprint 工作,防止在保护分支上直接运行导致代码污染。
107
+
108
+ **AI agent 直接执行 bash 命令**(不需要调用外部 skill),步骤如下:
109
+
110
+ | 步骤 | 动作 | 说明 |
111
+ |------|------|------|
112
+ | 0 | **检测当前环境** | 运行 `git rev-parse --git-dir` 和 `git rev-parse --git-common-dir`。如果 `GIT_DIR != GIT_COMMON`:已在 worktree 中 → 输出 "Already in isolated worktree" → 进入 Phase 0 |
113
+ | 1 | **检查保护分支** | 获取当前分支名 `git branch --show-current`。保护分支列表: `main, master, develop, trunk, mainline`。保护分支 → 强制创建 worktree。非保护分支 → 依然创建 worktree(推荐,不阻断) |
114
+ | 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 目录下执行 |
115
+ | 3 | **项目 setup** | 在 worktree 目录下: 检测项目类型: `package.json` → `npm install`, `go.mod` → `go mod download`, `pyproject.toml` → `pip/poetry install` |
116
+ | 4 | **.gitignore 校验** | 在**仓库根目录**(非 worktree)执行: `git check-ignore -q .worktrees`。如果未忽略 → 将 `.worktrees/` 添加到 `.gitignore` → `git add .gitignore` → `git commit -m 'chore: ignore .worktrees directory'` |
117
+ | 5 | **Sprint State 记录** | `mkdir -p .sprint-state` 在 worktree 目录下。写入 `.sprint-state/sprint-state.json`(如已存在则合并,保留原有字段),新增/更新 `isolation` 对象,设置 `phase: -1`,`status: "running"` |
118
+ | 6 | **基线验证** | 在 worktree 目录下: 检测测试方式(package.json 有 "test" script → `npm test`, go.mod → `go test ./...`, pyproject.toml → `pytest`)。测试失败 → 输出失败信息 → 询问用户是否继续 |
119
+
120
+ **参数处理**:
121
+
122
+ - `--no-isolate`: 跳过自动创建,输出 ⚠️ 警告 `'[WARN] 未创建 worktree 隔离,在 {branch} 分支上直接运行 sprint 有污染风险'` → 进入 Phase 0
123
+ - `--branch-name <name>`: 使用自定义分支名(默认自动生成 `sprint/YYYY-MM-DD-NN`),分支名中的 `/` 在 worktree 路径中自动替换为 `-`(如 `feat/user-login` → 分支名 `feat/user-login`,路径 `.worktrees/sprint/feat-user-login`)
124
+ - `--force`: 强制在当前分支继续(即使已是保护分支),**要求用户显式确认**: 输出 ⚠️ 警告 `'[WARN] 使用 --force 在 {branch} 分支上直接运行 sprint。此操作绕过隔离保护,请确认风险。'` → 等待用户确认("继续" / "取消") → 确认后进入 Phase 0
125
+
126
+ **参数交互规则**:
127
+
128
+ | 参数组合 | 行为 |
129
+ |---------|------|
130
+ | `--no-isolate` 单独 | 跳过隔离,输出警告 → Phase 0 |
131
+ | `--force` 单独 | 跳过隔离,要求确认 → Phase 0 |
132
+ | `--no-isolate` + `--branch-name` | `--branch-name` 忽略,仅 `--no-isolate` 生效 |
133
+ | `--force` + `--branch-name` | `--branch-name` 忽略,仅 `--force` 生效 |
134
+ | `--no-isolate` + `--force` | 等效,输出 `--no-isolate` 警告 → Phase 0 |
135
+ | `--resume-from build` + `--no-isolate` | `--resume-from` 优先,直接跳过 Phase -1 |
136
+
137
+ **错误处理和回退**:
138
+ | 错误场景 | 回退行为 |
139
+ |---------|---------|
140
+ | `git worktree add` 失败(沙箱/权限问题) | 输出 `[ERROR] git worktree add 失败: {error}` → `[WARN] 无法创建 worktree 隔离,将在当前目录继续。请手动设置隔离分支。` → 在当前目录继续 |
141
+ | `.gitignore` 自动添加失败 | 输出 `[WARN] 无法自动添加 .gitignore,请手动将 .worktrees/ 添加到 .gitignore` → 继续 |
142
+ | 基线测试失败 | 输出 `[FAIL] 基线测试未通过:` + 失败详情 → 询问用户 `'基线测试失败,是否继续 sprint?(y/N)'` |
143
+
144
+ **sprint-state.json isolation 对象格式**:
145
+ ```json
146
+ {
147
+ "isolation": {
148
+ "worktree_path": ".worktrees/sprint/sprint-2026-05-24-01",
149
+ "branch": "sprint/2026-05-24-01",
150
+ "created_from": "main",
151
+ "created_from_commit": "abc123def..."
152
+ }
153
+ }
154
+ ```
155
+
156
+ > **清理提示**: Sprint 完成(Phase 6 SHIP)后,执行 `git worktree remove <worktree_path>` 清理 worktree 目录,同时保留 `.sprint-state/` 中的历史记录。
157
+
158
+ ### Phase 0: THINK(需求探索与设计)
159
+ - `brainstorming` (superpowers) — **HARD-GATE**: 设计未批准 → 不可进入实现
160
+ - 输出: 结构化设计文档 → 直接作为 Phase 1 PLAN 的输入
161
+ - 替代原因: office-hours 的 YC 六问适合新产品方向验证,brainstorming 的"设计批准才可进入实现"机制更适合 sprint-flow 场景
162
+
163
+ ### Phase 1: PLAN(共识评审)
164
+ - `autoplan` (gstack) — CEO → Design → Eng 自动流水线
165
+ - `delphi-review` — 多轮匿名评审直到共识
166
+ - `to-issues` — 将 APPROVED 的 PRD/spec 拆解为垂直切片 Issue(HITL/AFK + 依赖图 + effort 估算)
167
+ - **specification.yaml** — 自动生成(含 User Stories 段)
168
+
169
+ **条件分支逻辑**:
170
+ - IF autoplan AUTO_APPROVED + 无 taste_decisions → 跳过 delphi-review
171
+ - IF autoplan NEEDS_REVIEW OR taste_decisions > 0 → 调用 delphi-review
172
+ - delphi-review APPROVED → 生成 specification.yaml(含 user_stories[]) → **调用 /to-issues** 拆解为垂直切片 → slices-manifest.json → Phase 2 按 execution_order 执行
173
+
174
+ ### Phase 1→2: GITHOOKS-GATE(质量门禁安装检查)
175
+
176
+ **执行时机**: Phase 1 完全通过、准备进入 Phase 2 BUILD 之前.
177
+
178
+ **必须执行**: 运行 `githooks/verify.sh` 检查当前项目的 hooks 是否安装。
179
+
180
+ **检查结果处理**:
181
+ - ✅ 全部存在 → 直接进入 Phase 2 BUILD
182
+ - ❌ 部分/全部缺失 → 运行 `githooks/install.sh` 安装(包括 `.git/hooks/pre-commit`、`.git/hooks/pre-push`、`githooks/adapter-common.sh`、`githooks/adapters/`)
183
+ - 如果 githooks/ 目录不存在于项目根目录(即当前项目不是 xp-gate) → 从 xp-gate 仓库拉取 `githooks/` 目录结构
184
+ - 安装完成后再次 `verify.sh` 确认
185
+
186
+ **核心原则**: 没有质量门禁的代码不可进入 BUILD 阶段。**GITHOOKS-GATE 失败 → 不可编码。**
187
+
188
+ ### Phase 2: BUILD(DELPHI-GATE → ralph-loop 默认 + TDD + 盲评 + 验证)
189
+
190
+ **⚠️ DELPHI-GATE(BUILD 入口门禁)**:
191
+ Phase 2 第一步必须执行 DELPHI-GATE 检查。没有 delphi-review APPROVED → 不可编码。
192
+
193
+ 检查步骤:
194
+ 1. 读取 `.sprint-state/delphi-reviewed.json`
195
+ 2. 验证文件存在 → 不存在 → 输出 `[BLOCKED] delphi-review not APPROVED. 必须先完成 Phase 1 的 delphi-review。` → 返回 Phase 1
196
+ 3. 验证 `verdict` 字段 == `"APPROVED"` → 不等于 → 同上 BLOCK
197
+ 4. ✅ 通过 → 进入 BUILD 编码
198
+
199
+ **输入**: `slices-manifest.json`(由 Phase 1 `/to-issues` 生成),按 `execution_order` 逐个执行。
200
+
201
+ **默认模式**: `ralph-loop` — 逐 REQ/切片 迭代构建。每个切片(REQ)dispatch 独立 subagent,干净上下文,全量回归测试。Token 节约 40-67%。参见 `skills/ralph-loop/SKILL.md`。
202
+
203
+ **并行模式**: 通过 `--mode parallel` 启用 `dispatching-parallel-agents`。仅分发无依赖的 AFK 切片(通过 `dependency_graph` 判定)。HITL 切片需人工确认后才可分发。
204
+
205
+ **替代原 xp-consensus**:使用 superpowers 成熟 skill 组合,保留关键行为(freeze 隔离、熔断回退、成本监控)。
206
+
207
+ | 步骤 | Skill | 说明 |
208
+ |------|-------|------|
209
+ | -1 | **`hooks-install`** _(githooks/scripts)_ | `githooks/verify.sh` → 缺失则 `githooks/install.sh` |
210
+ | 0 | **`dispatching-parallel-agents`** _(superpowers)_ | 检测可并行任务,并行分发独立子任务 |
211
+ | 1 | `test-driven-development` (superpowers) | RED → GREEN → REFACTOR 铁律执行 |
212
+ | 2 | **`executing-plans`** _(superpowers)_ | 在隔离 session 中执行计划,有 review checkpoint |
213
+ | 3 | `freeze` (gstack) | 锁定业务代码,盲评 agent 只能访问测试 |
214
+ | 4 | `requesting-code-review` (superpowers) | 独立 agent 盲评业务代码(隔离状态) |
215
+ | 5 | `unfreeze` (gstack) | 解锁业务代码 |
216
+ | 6 | `verification-before-completion` (superpowers) | 运行测试 + lint,证据优先 |
217
+ | 7 | 成本监控(sprint-flow 编排层) | 超阈值 BLOCK + 用户决策 |
218
+
219
+ **关键行为保留**(原 xp-consensus 17 状态机中的真实边缘情况):
220
+
221
+ | 原状态 | 新处理方案 |
222
+ |--------|-----------|
223
+ | `CIRCUIT_BREAKER_TRIGGERED` | sprint-flow 编排层监控成本,超阈值 BLOCK + 用户决策 |
224
+ | `ROLLBACK_TO_ROUND1` | verification-before-completion 失败 → 修复 max 3 次 → 仍失败 BLOCK |
225
+ | `GATE1_FAILED`/`GATE1_COMPLETE` | verification-before-completion 内置此区分 |
226
+ | `GATE2_RUNNING` | `cso` (gstack) — Phase 1-6 安全审计替代 |
227
+ | `SEALED_CODE_ISOLATION` | 保留 freeze skill 调用 |
228
+
229
+ **语言特定 TDD**:通过 `--lang` 参数选择:
230
+ - `springboot-tdd` / `django-tdd` / `golang-testing`
231
+
232
+ **Mock Minimization**(Phase 2 强制):
233
+ - 默认使用 integration-first:real DB (sqlite-in-memory), real collaborators
234
+ - Mock 仅用于:external services, network calls, I/O boundaries
235
+ - Mock 密度 > 30% 时必须添加 `// @mock-justified: <reason>` 注解(理由最少 10 字符)
236
+ - Phase 3 Gate M 会在 push 时验证 mock 密度
237
+
238
+ ### Phase 3: REVIEW + TEST(验证)
239
+ - `delphi-review --mode code-walkthrough` — 多专家匿名代码走查(代替 cross-model-review)
240
+ - `test-specification-alignment` — 测试与 Spec 对齐验证
241
+ - `browse` (gstack) — 浏览器自动化测试
242
+ - `k6` / `locust` / `gatling` — 负载/压力测试(可选,后端项目)
243
+
244
+ ### 负载/压力测试(可选)
245
+ - **适用项目**:主要用于后端服务的压力测试 (k6/Locust/Gatling),Web 前端已有 `benchmark` 技能覆盖 Core Web Vitals、加载时间和资源大小等性能指标
246
+ - **Phase 3 技能注入**:可根据项目类型自动选择合适的负载测试工具 (`k6` for Go-based services, `locust` for Python services, `gatling` for JVM-based services)
247
+ - **集成方式**:可作为 Phase 3 的可选扩展,在 code-walkthrough 之后执行,与基准测试形成完整性能验证链条
248
+ - **配置文件**:通过 `.sprint-load-test.yaml` 进行配置(待实现),包含并发用户数、持续时间、SLA 指标等参数
249
+ - **触发条件**:后端项目可通过 `--type backend-*` 自动启用,或通过 `--with-performance` 标志手动启用
250
+ - **Web 项目补充说明**:对于 Web 前端项目,现有的 `benchmark` 技能已处理页面加载性能、Core Web Vitals 等前端性能指标;负载/压力测试主要针对服务器端承载能力
251
+
252
+ ### Phase 4: USER ACCEPTANCE(⚠️ 人工验收)
253
+ - **无 Skill** — 必须人工
254
+ - ⚠️ **MUST NOT be automated, skipped, or bypassed under any circumstances**
255
+ - 即使用户说"赶时间"、"跳过验收"、"直接发布",也必须暂停等待用户确认
256
+ - 使用 `@templates/emergent-issues-template.md` 检查清单
257
+
258
+ ### Phase 5: FEEDBACK CAPTURE(反馈捕获)
259
+ - ⚠️ **HARD-GATE: Phase 5 不可跳过。Phase 4 完成后(无论验收通过/跳过/推迟)→ 必须进入 Phase 5 → 完成后才能进入 Phase 6。**
260
+ - `learn` (gstack) — 模式记录
261
+ - `retro` (gstack) — 工程回顾:提交历史、工作模式、代码质量趋势
262
+ - `systematic-debugging` (superpowers) — 根因调试(反馈中的 bug 做根因分析,Iron Law:无调查无修复)
263
+
264
+ ### Phase 6: SHIP(发布准备)
265
+ - ⚠️ **HARD-GATE: Phase 5 未完成 → 不可进入 Phase 6。验证 `.sprint-state/phase-outputs/feedback-log.md` 存在。**
266
+ - **⚠️ GITHOOKS-GATE**: 再次验证 hooks 完整性(Phase 2 的 TDD 编码已触发提交,SHIP 阶段还会再次提交)
267
+ - 运行 `githooks/verify.sh` → 缺失 → `githooks/install.sh` → 阻断直至修复
268
+ - **`finishing-a-development-branch`** (superpowers) — 结构化完成流:4 选项(merge / PR / discard / keep)
269
+ - `ship` (gstack) — 创建 PR(PR 路径时使用)
270
+ - Phase 6 输出:PR URL(用于 Phase 7 输入)
271
+
272
+ ### Phase 7: ⚠️ LAND(合并 + 部署)
273
+ - 输入:Phase 6 输出的 PR URL
274
+ - 调用:`land-and-deploy` skill
275
+ - 流程:
276
+ 1. Merge PR(`gh pr merge --squash`)
277
+ 2. 等待 CI 完成(poll `gh pr checks` 直到 success 或 10min timeout)
278
+ 3. 等待 Deploy 完成(如已配置,10min timeout)
279
+ 4. **Canary Health Check**(如已配置部署平台):
280
+ - 健康检查端点:项目根路径 `/` 或自定义 `/.well-known/health`
281
+ - SLA 指标:HTTP 200 响应 + 错误率 <1% + p99 响应 <2s
282
+ - 超时策略:最长 5 分钟,每 10s polling 一次
283
+ - 部署**失败**时的回滚:`git revert` 最后一次 merge commit + 输出 `[ERROR] Deploy failed, auto-rolled back merge`
284
+ - 条件跳过:无部署配置时,仅执行 merge + CI checks,跳过 deploy/canary
285
+ - 输出:部署状态 + Canary 报告(成功/失败/跳过)
286
+
287
+ ### Phase 8: CLEANUP(清理 + 总结)
288
+ - 执行时机:Phase 7 LAND 成功后(或 Phase 6 Option 1 本地 Merge 后)
289
+ - 动作:
290
+ 1. 检测 worktree 是否存在:`[ -d <worktree_path> ]`
291
+ 2. `git worktree remove <worktree_path>` 删除 worktree
292
+ - **原子性保障**: 如果首次失败(权限问题),重试最多 3 次,间隔 1s
293
+ - 如果仍失败:输出 `[WARN] Failed to remove worktree, please manually run: git worktree remove <path>`
294
+ 3. 检测残留目录:`[ -d <worktree_path> ]` → 如果仍有残留,输出警告
295
+ 4. 更新 `.sprint-state/sprint-state.json`:
296
+ - `phase: 8`
297
+ - `status: "merged"` 或 `"completed"`
298
+ 5. 输出 Cleanup Report + Sprint Summary
299
+ - 条件跳过:`--no-isolate` 路径(无 worktree 可清理)
300
+ - 输出:`[CLEANUP] Worktree removed:` + 残留检测(✅ clean / ⚠️ residual)
301
+ - IF emergent issues → Sprint 2
302
+
303
+ ---
304
+
305
+ ## Output Format (MANDATORY)
306
+ Sprint state is persisted as JSON in `.sprint-state/sprint-state.json`:
307
+ ```json
308
+ {
309
+ "id": "sprint-2026-04-26-01",
310
+ "phase": -1,
311
+ "status": "running|paused|completed",
312
+ "isolation": {
313
+ "worktree_path": ".worktrees/sprint/sprint-2026-04-26-01",
314
+ "branch": "sprint/2026-04-26-01",
315
+ "created_from": "main",
316
+ "created_from_commit": "abc123def..."
317
+ },
318
+ "outputs": {
319
+ "pain_document": "docs/pain-document.md",
320
+ "specification": "specification.yaml",
321
+ "mvp": "mvp-v1/",
322
+ "review_report": "review-report.md"
323
+ },
324
+ "metrics": {
325
+ "tests_passed": 15,
326
+ "tests_failed": 0,
327
+ "coverage_pct": 85
328
+ }
329
+ }
330
+ ```
331
+ **Eval assertions check for:** `phase`, `status`, `isolation.branch`, `outputs.specification`, `metrics.coverage_pct`.
332
+
333
+ ---
334
+
335
+ ## 参数说明
336
+
337
+ ### 默认用法(无参数)
338
+
339
+ ```bash
340
+ /sprint-flow "开发访谈机器人,支持多轮对话"
341
+
342
+ # 自动执行 Think → Plan → Build → Review → Ship 全流程
343
+ # 关键节点暂停等待用户确认
344
+ ```
345
+
346
+ ### --stop-at(执行到某阶段后停止)
347
+
348
+ ```bash
349
+ /sprint-flow "开发访谈机器人" --stop-at plan
350
+ # → Think → Plan → 输出 specification.yaml → 停止
351
+ # 适用场景:先评审方案,后续手动决定是否继续
352
+ ```
353
+
354
+ ### --resume-from(从某阶段继续)
355
+
356
+ ```bash
357
+ /sprint-flow "继续 Sprint" --resume-from build --spec specification.yaml
358
+ # → 跳过 Think + Plan,直接从 Build 开始
359
+ # 适用场景:中断恢复,使用已有的 specification.yaml
360
+ ```
361
+
362
+ ### --phase(只执行单个阶段)
363
+
364
+ ```bash
365
+ /sprint-flow "评审代码" --phase review-only
366
+ # → 只执行 Phase 3 的评审
367
+ # 适用场景:单独验证某个阶段
368
+ ```
369
+
370
+ ### --lang(指定项目语言)
371
+
372
+ ```bash
373
+ /sprint-flow "开发用户认证模块" --lang springboot
374
+ # Phase 2 自动调用 springboot-tdd + springboot-verification
375
+
376
+ /sprint-flow "开发 REST API" --lang django
377
+ # Phase 2 自动调用 django-tdd + django-verification
378
+
379
+ /sprint-flow "开发并发任务调度器" --lang golang
380
+ # Phase 2 自动调用 golang-testing
381
+ ```
382
+
383
+ ### --type(指定项目类型)
384
+
385
+ ```bash
386
+ /sprint-flow "开发用户登录页面" --type web-nextjs
387
+ /sprint-flow "开发 REST API" --type backend-django
388
+ # 默认: 从项目文件自动检测
389
+ ```
390
+
391
+ 自动检测逻辑(按顺序检查):
392
+
393
+ | 检测条件 | 类型 |
394
+ |---------|------|
395
+ | `package.json` + `next.config.js` | `web-nextjs` |
396
+ | `package.json` + `vite.config.ts` + `react` 依赖 | `web-react` |
397
+ | `package.json` + `vue` 依赖 | `web-vue` |
398
+ | `pubspec.yaml` + `flutter:` | `mobile-flutter` |
399
+ | `package.json` + `react-native` 依赖 or `ios/` + `android/` | `mobile-react-native` |
400
+ | `go.mod` | `backend-go` (可选 k6 负载测试)|
401
+ | `pom.xml` | `backend-springboot` (可选 gatling 负载测试)|
402
+ | `manage.py` 或 `pyproject.toml` (django) | `backend-django` (可选 locust 负载测试)|
403
+ | 无匹配 | `backend-cli` |
404
+
405
+ ### 项目类型到 Skill 注入映射
406
+
407
+ | Phase | Backend (default) | Web Frontend | Mobile | Load/Performance Testing |
408
+ |-------|------------------|-------------|--------|--------------------------|
409
+ | Phase 0 (THINK) | `brainstorming` | (同) | (同) | (通用) |
410
+ | Phase 1 (PLAN) | `autoplan` + `delphi-review` | + `design-shotgun` | (同 web) | (同) |
411
+ | Phase 2 (BUILD) | TDD + blind-review | (同 backend) | + `vercel-react-native-skills` (RN) / `flutter-review` (Flutter) | (同) |
412
+ | 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 测试后的负载测试验证) |
413
+ | Phase 5 (FEEDBACK) | `learn` + `retro` | (同) | (同) | (同) |
414
+ | Phase 6 (SHIP) | `finishing-a-development-branch` + `ship` | (同) | + platform deploy (可选) | (同) |
415
+ | Phase 7 (LAND) | `land-and-deploy` + canary | (同) | (同) | (同) |
416
+ | Phase 8 (CLEANUP) | worktree remove + state update | (同) | (同) | (同) |
417
+ | Browse | `localhost:3000` | 部署 URL + 表单/交互 | Flutter Web / RN Web 测试 | (专用负载测试) |
418
+
419
+ **Mobile 专属工具链**:
420
+ - **Flutter**: `flutter analyze`, `flutter test`, `flutter build`, `pub publish`
421
+ - **React Native**: `metro`, `detox`, `jest`, `react-native run-ios/android`
422
+
423
+ ---
424
+
425
+ ## 状态管理
426
+
427
+ ### Sprint State
428
+
429
+ ```yaml
430
+ Sprint State:
431
+ id: sprint-YYYY-MM-DD-NN
432
+ phase: [-1, 0-6] # -1=ISOLATE, 0-6=各阶段
433
+ status: [pending, running, paused, completed, failed] # 统一状态
434
+ pause_reason: [none, wait_isolation, wait_approved, wait_gate1, wait_uat, wait_ship, wait_user_confirm]
435
+ isolation: # Phase -1 隔离信息
436
+ worktree_path: .worktrees/sprint/sprint-YYYY-MM-DD-NN
437
+ branch: sprint/YYYY-MM-DD-NN
438
+ created_from: main
439
+ created_from_commit: abc123def...
440
+
441
+ 存储位置: <project-root>/.sprint-state/
442
+ ├─ sprint-state.yaml # 当前 Sprint 状态
443
+ ├─ sprint-state.json # 当前 Sprint 状态 (JSON 格式,同上)
444
+ └─ phase-outputs/
445
+ ├─ pain-document.md # Phase 0 输出
446
+ ├─ specification.yaml # Phase 1 输出
447
+ ├─ mvp-v1/ # Phase 2 输出
448
+ ├─ review-report.md # Phase 3 输出
449
+ ├─ emergent-issues.md # Phase 4 输出
450
+ ├─ feedback-log.md # Phase 5 输出
451
+ └─ sprint-summary.md # Phase 6 输出
452
+ ```
453
+
454
+ ### Sprint 2 自动触发机制
455
+
456
+ ```yaml
457
+ Sprint 结束时 (Phase 6 完成):
458
+ IF emergent_issues_count == 0 → sprint_completed,结束流程
459
+ IF emergent_issues_count > 0 → sprint_2_needed:
460
+ ├─ IF emergent_issues 有 Critical → 自动启动 Sprint 2
461
+ ├─ IF emergent_issues 仅 Major/Minor → 询问用户
462
+ └─ Sprint 2 Pain Document 自动从 emergent-issues.md 转化
463
+ ```
464
+
465
+ ---
466
+
467
+ ## 使用示例
468
+
469
+ ### 示例 1:完整流程
470
+
471
+ ```bash
472
+ /sprint-flow "开发访谈机器人,支持多轮对话"
473
+
474
+ # 输出:
475
+ # Phase 0: brainstorming 需求探索 → 设计文档 → ⚠️ HARD-GATE: 等待用户 APPROVED
476
+ # 用户 APPROVED → 自动进入 Phase 1
477
+ # Phase 1: autoplan 发现 2 个 taste_decisions → ⚠️ 暂停
478
+ # 用户确认决策后 → delphi-review → Round 1 REQUEST_CHANGES
479
+ # 修复 → Round 2 APPROVED → specification.yaml
480
+ # Phase 2: TDD + freeze + review → verification → MVP v1
481
+ # Phase 3: cross-model-review APPROVED → browse QA 通过
482
+ # Phase 4: ⚠️ 用户验收 → 发现 1 个 Major emergent issue
483
+ # Phase 5: learn → 记录 → Sprint 2 Pain Document
484
+ # Phase 6: ship → PR → 用户确认合并 → canary 监控
485
+ # → Sprint Summary → 发现 emergent issue → 提示是否开始 Sprint 2
486
+ ```
487
+
488
+ ### 示例 2:中断恢复
489
+
490
+ ```bash
491
+ # 第一次:执行到 Plan 后停止
492
+ /sprint-flow "开发用户认证模块" --stop-at plan
493
+ # → 输出 specification.yaml
494
+
495
+ # 第二次:三天后继续
496
+ /sprint-flow "继续开发" --resume-from build --spec docs/specification.yaml
497
+ # → 跳过 Think + Plan,直接从 Build 开始
498
+ ```
499
+
500
+ ### 示例 3:语言特定
501
+
502
+ ```bash
503
+ /sprint-flow "开发 REST API" --lang django
504
+ # Phase 2 自动调用 django-tdd + django-verification
505
+ # Gate 1 包含 Django 特定的验证(migrations, linting, coverage)
506
+ ```
507
+
508
+ ### 示例 4:使用 --mode parallel(旧有并行模式)
509
+
510
+ ```bash
511
+ /sprint-flow "修改单行配置" --mode parallel
512
+ # 小改动可使用旧有并行模式,一次 dispatch 完成
513
+ # 注意:默认 ralph-loop 模式已覆盖绝大多数场景
514
+ ```
515
+
516
+ ### 示例 4b:仅验证隔离(--stop-at isolate)
517
+
518
+ ```bash
519
+ /sprint-flow "开发用户登录" --stop-at isolate
520
+ # → 仅执行 Phase -1 ISOLATE
521
+ # → 检测 main 分支 → 创建 worktree → setup → .gitignore → baseline
522
+ # → 输出 worktree 路径 → 停止
523
+ # 适用场景:手动验证隔离是否正常创建,后续手动决定是否继续
524
+ ```
525
+
526
+ ### 示例 5:Worktree 隔离(默认行为)
527
+
528
+ ```bash
529
+ /sprint-flow "开发用户登录"
530
+ # Phase -1 ISOLATE:
531
+ # → 检测当前在 main 分支(保护分支)→ 强制创建 worktree
532
+ # → mkdir -p .worktrees/sprint
533
+ # → 检测已有 NN 编号(.worktrees/sprint/ | grep -oE '[0-9]{2}$' | sort -n | tail -1)
534
+ # → git worktree add .worktrees/sprint/sprint-2026-05-24-01 -b sprint/2026-05-24-01
535
+ # → 在 worktree 目录下: npm install → 基线测试 → .sprint-state/ 记录
536
+ # → 进入 Phase 0 THINK...
537
+
538
+ # 跳过隔离(⚠️ 有污染风险)
539
+ /sprint-flow "开发用户登录" --no-isolate
540
+ # → [WARN] 未创建 worktree 隔离,在 main 分支上直接运行 sprint 有污染风险
541
+ # → 直接进入 Phase 0
542
+
543
+ # 强制跳过(需用户确认)
544
+ /sprint-flow "开发用户登录" --force
545
+ # → [WARN] 使用 --force 在 main 分支上直接运行 sprint → 等待用户确认 → 确认后进入 Phase 0
546
+
547
+ # 自定义分支名
548
+ /sprint-flow "开发用户登录" --branch-name feat/user-login
549
+ # → 分支名: feat/user-login(保留 /)
550
+ # → worktree 路径: .worktrees/sprint/feat-user-login(/ 替换为 -)
551
+
552
+ # 🧹 Sprint 完成后清理
553
+ git worktree remove .worktrees/sprint/sprint-2026-05-24-01
554
+ ```
555
+
556
+ ---
557
+
558
+ ## 底层 Skills 保持独立
559
+
560
+ 所有被调用的 Skills 保持独立可用:
561
+ - 用户可以直接调用 `delphi-review` 单独评审
562
+ - 用户可以直接调用 `test-driven-development` 单独执行 TDD
563
+ - sprint-flow 只是自动串联调用,不替代底层 Skills
564
+
565
+ ---
566
+
567
+ ## References
568
+
569
+ 详细指令文件位于 `@references/`:
570
+ - `@references/phase-minus-1-isolate.md` — Phase -1 详细指令
571
+ - `@references/phase-0-think.md` — Phase 0 详细指令
572
+ - `@references/phase-1-plan.md` — Phase 1 详细指令
573
+ - `@references/phase-2-build.md` — Phase 2 详细指令
574
+ - `@references/phase-3-review.md` — Phase 3 详细指令
575
+ - `@references/phase-4-uat.md` — Phase 4 详细指令(人工)
576
+ - `@references/phase-5-feedback.md` — Phase 5 详细指令
577
+ - `@references/phase-6-ship.md` — Phase 6 详细指令
578
+
579
+ ---
580
+
581
+ ## Templates
582
+
583
+ 模板文件位于 `@templates/`:
584
+ - `@templates/pain-document-template.md` — Pain Document 模板
585
+ - `@templates/emergent-issues-template.md` — Emergent Issues 检查清单
586
+ - `@templates/sprint-summary-template.md` — Sprint Summary 模板
587
+
588
+ ---
589
+
590
+ ## 研究证据
591
+
592
+ | 证据 | 来源 | 应用 |
593
+ |------|------|------|
594
+ | One-shot = 单次迭代执行 | Boris Cherny interview | Phase 2 设计 |
595
+ | 80% session 从 Plan Mode 开始 | Boris skill | Phase 1 设计 |
596
+ | Verification improves 2-3x | Boris #1 tip | Phase 3 设计 |
597
+ | Emergent requirements 无法消除 | Mike Cohn, Rafael Santos | Phase 4 人工设计 |
598
+ | 78% failures invisible | arXiv research | Phase 4 必要性证明 |
599
+ | Think → Plan → Build → Ship | gstack ETHOS | 整体流程设计 |
600
+