specops 0.2.5 → 0.3.2

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 (201) hide show
  1. package/.opencode/agent/specops-codebase-mapper.md +764 -0
  2. package/.opencode/agent/specops-debugger.md +1246 -0
  3. package/.opencode/agent/specops-executor.md +475 -0
  4. package/.opencode/agent/specops-integration-checker.md +443 -0
  5. package/.opencode/agent/specops-phase-researcher.md +547 -0
  6. package/.opencode/agent/specops-plan-checker.md +690 -0
  7. package/.opencode/agent/specops-planner.md +581 -0
  8. package/.opencode/agent/specops-project-researcher.md +354 -0
  9. package/.opencode/agent/specops-research-synthesizer.md +242 -0
  10. package/.opencode/agent/specops-roadmapper.md +642 -0
  11. package/.opencode/agent/specops-work-verifier.md +573 -0
  12. package/.opencode/references/checkpoints.md +776 -0
  13. package/.opencode/references/continuation-format.md +249 -0
  14. package/.opencode/references/decimal-phase-calculation.md +65 -0
  15. package/.opencode/references/git-integration.md +248 -0
  16. package/.opencode/references/git-planning-commit.md +38 -0
  17. package/.opencode/references/model-profile-resolution.md +34 -0
  18. package/.opencode/references/model-profiles.md +92 -0
  19. package/.opencode/references/phase-argument-parsing.md +61 -0
  20. package/.opencode/references/planning-config.md +196 -0
  21. package/.opencode/references/questioning.md +145 -0
  22. package/.opencode/references/tdd.md +263 -0
  23. package/.opencode/references/ui-brand.md +160 -0
  24. package/.opencode/references/verification-patterns.md +612 -0
  25. package/.opencode/templates/DEBUG.md +164 -0
  26. package/.opencode/templates/UAT.md +180 -0
  27. package/.opencode/templates/VALIDATION.md +76 -0
  28. package/.opencode/templates/codebase/architecture.md +255 -0
  29. package/.opencode/templates/codebase/concerns.md +310 -0
  30. package/.opencode/templates/codebase/conventions.md +307 -0
  31. package/.opencode/templates/codebase/integrations.md +280 -0
  32. package/.opencode/templates/codebase/stack.md +186 -0
  33. package/.opencode/templates/codebase/structure.md +285 -0
  34. package/.opencode/templates/codebase/testing.md +480 -0
  35. package/.opencode/templates/context.md +221 -0
  36. package/.opencode/templates/continue-here.md +78 -0
  37. package/.opencode/templates/debug-subagent-prompt.md +91 -0
  38. package/.opencode/templates/discovery.md +147 -0
  39. package/.opencode/templates/milestone-archive.md +123 -0
  40. package/.opencode/templates/milestone.md +115 -0
  41. package/.opencode/templates/phase-prompt.md +333 -0
  42. package/.opencode/templates/planner-subagent-prompt.md +117 -0
  43. package/.opencode/templates/project.md +184 -0
  44. package/.opencode/templates/requirements.md +130 -0
  45. package/.opencode/templates/research-project/ARCHITECTURE.md +204 -0
  46. package/.opencode/templates/research-project/FEATURES.md +147 -0
  47. package/.opencode/templates/research-project/PITFALLS.md +200 -0
  48. package/.opencode/templates/research-project/STACK.md +120 -0
  49. package/.opencode/templates/research-project/SUMMARY.md +170 -0
  50. package/.opencode/templates/research.md +278 -0
  51. package/.opencode/templates/retrospective.md +54 -0
  52. package/.opencode/templates/roadmap.md +202 -0
  53. package/.opencode/templates/state.md +176 -0
  54. package/.opencode/templates/summary-complex.md +59 -0
  55. package/.opencode/templates/summary-minimal.md +41 -0
  56. package/.opencode/templates/summary-standard.md +48 -0
  57. package/.opencode/templates/summary.md +248 -0
  58. package/.opencode/templates/user-setup.md +311 -0
  59. package/.opencode/templates/verification-report.md +322 -0
  60. package/.opencode/workflows/add-phase.md +111 -0
  61. package/.opencode/workflows/add-tests.md +350 -0
  62. package/.opencode/workflows/add-todo.md +157 -0
  63. package/.opencode/workflows/audit-milestone.md +297 -0
  64. package/.opencode/workflows/check-todos.md +176 -0
  65. package/.opencode/workflows/cleanup.md +152 -0
  66. package/.opencode/workflows/complete-milestone.md +763 -0
  67. package/.opencode/workflows/diagnose-issues.md +219 -0
  68. package/.opencode/workflows/discovery-phase.md +288 -0
  69. package/.opencode/workflows/discuss-phase.md +542 -0
  70. package/.opencode/workflows/execute-phase.md +449 -0
  71. package/.opencode/workflows/execute-plan.md +447 -0
  72. package/.opencode/workflows/health.md +156 -0
  73. package/.opencode/workflows/help.md +489 -0
  74. package/.opencode/workflows/insert-phase.md +129 -0
  75. package/.opencode/workflows/list-phase-assumptions.md +178 -0
  76. package/.opencode/workflows/map-codebase.md +315 -0
  77. package/.opencode/workflows/new-milestone.md +382 -0
  78. package/.opencode/workflows/new-project.md +1116 -0
  79. package/.opencode/workflows/pause-work.md +122 -0
  80. package/.opencode/workflows/plan-milestone-gaps.md +274 -0
  81. package/.opencode/workflows/plan-phase.md +569 -0
  82. package/.opencode/workflows/progress.md +381 -0
  83. package/.opencode/workflows/quick.md +453 -0
  84. package/.opencode/workflows/remove-phase.md +154 -0
  85. package/.opencode/workflows/research-phase.md +73 -0
  86. package/.opencode/workflows/resume-project.md +304 -0
  87. package/.opencode/workflows/set-profile.md +80 -0
  88. package/.opencode/workflows/settings.md +213 -0
  89. package/.opencode/workflows/transition.md +544 -0
  90. package/.opencode/workflows/update.md +219 -0
  91. package/.opencode/workflows/verify-phase.md +242 -0
  92. package/.opencode/workflows/verify-work.md +569 -0
  93. package/commands/specops/add-phase.md +43 -0
  94. package/commands/specops/add-tests.md +41 -0
  95. package/commands/specops/add-todo.md +47 -0
  96. package/commands/specops/audit-milestone.md +36 -0
  97. package/commands/specops/check-todos.md +45 -0
  98. package/commands/specops/cleanup.md +18 -0
  99. package/commands/specops/complete-milestone.md +136 -0
  100. package/commands/specops/debug.md +167 -0
  101. package/commands/specops/discuss-phase.md +83 -0
  102. package/commands/specops/execute-phase.md +41 -0
  103. package/commands/specops/health.md +22 -0
  104. package/commands/specops/help.md +22 -0
  105. package/commands/specops/insert-phase.md +32 -0
  106. package/commands/specops/join-discord.md +18 -0
  107. package/commands/specops/list-phase-assumptions.md +46 -0
  108. package/commands/specops/map-codebase.md +71 -0
  109. package/commands/specops/new-milestone.md +44 -0
  110. package/commands/specops/new-project.md +42 -0
  111. package/commands/specops/pause-work.md +38 -0
  112. package/commands/specops/plan-milestone-gaps.md +34 -0
  113. package/commands/specops/plan-phase.md +45 -0
  114. package/commands/specops/progress.md +24 -0
  115. package/commands/specops/quick.md +41 -0
  116. package/commands/specops/reapply-patches.md +111 -0
  117. package/commands/specops/remove-phase.md +31 -0
  118. package/commands/specops/research-phase.md +189 -0
  119. package/commands/specops/resume-work.md +40 -0
  120. package/commands/specops/set-profile.md +34 -0
  121. package/commands/specops/settings.md +36 -0
  122. package/commands/specops/update.md +37 -0
  123. package/commands/specops/verify-work.md +38 -0
  124. package/dist/__integration__/fixtures/generator.d.ts +4 -0
  125. package/dist/__integration__/fixtures/generator.js +1 -0
  126. package/dist/__integration__/mocks/server.d.ts +7 -0
  127. package/dist/__integration__/mocks/server.js +1 -0
  128. package/dist/__integration__/setup.d.ts +6 -0
  129. package/dist/__integration__/setup.js +1 -0
  130. package/dist/acceptance/lazyDetector.js +1 -1
  131. package/dist/acceptance/reporter.js +1 -1
  132. package/dist/acceptance/runner.js +1 -1
  133. package/dist/cli.js +1 -1
  134. package/dist/context/index.js +1 -1
  135. package/dist/context/promptTemplate.js +1 -1
  136. package/dist/context/techContextLoader.js +1 -1
  137. package/dist/engine.d.ts +1 -0
  138. package/dist/engine.js +1 -1
  139. package/dist/evolution/distiller.js +1 -1
  140. package/dist/evolution/index.js +1 -1
  141. package/dist/evolution/memoryGraph.js +1 -1
  142. package/dist/evolution/selector.js +1 -1
  143. package/dist/evolution/signals.js +1 -1
  144. package/dist/evolution/solidify.js +1 -1
  145. package/dist/evolution/store.js +1 -1
  146. package/dist/evolution/types.js +1 -1
  147. package/dist/init.d.ts +4 -3
  148. package/dist/init.js +1 -1
  149. package/dist/machines/agentMachine.js +1 -1
  150. package/dist/machines/supervisorMachine.js +1 -1
  151. package/dist/persistence/schema.js +1 -1
  152. package/dist/persistence/stateFile.js +1 -1
  153. package/dist/plugin-engine.js +1 -1
  154. package/dist/plugin.js +1 -1
  155. package/dist/requirement-analysis/analyzers/repository-parser.d.ts +121 -0
  156. package/dist/requirement-analysis/analyzers/repository-parser.js +1 -0
  157. package/dist/requirement-analysis/generators/prd-generator.d.ts +90 -0
  158. package/dist/requirement-analysis/generators/prd-generator.js +1 -0
  159. package/dist/requirement-analysis/integrations/v1-integration.d.ts +73 -0
  160. package/dist/requirement-analysis/integrations/v1-integration.js +1 -0
  161. package/dist/requirement-analysis/tools/analyze-requirements.js +1 -0
  162. package/dist/requirement-analysis/types/analysis-result.d.ts +326 -0
  163. package/dist/requirement-analysis/types/analysis-result.js +1 -0
  164. package/dist/requirement-analysis/types/feature-mapping.d.ts +294 -0
  165. package/dist/requirement-analysis/types/feature-mapping.js +1 -0
  166. package/dist/requirement-analysis/types/index.d.ts +171 -0
  167. package/dist/requirement-analysis/types/index.js +1 -0
  168. package/dist/requirement-analysis/types/tech-stack.d.ts +213 -0
  169. package/dist/requirement-analysis/types/tech-stack.js +1 -0
  170. package/dist/requirement-analysis/utils/error-handler.d.ts +112 -0
  171. package/dist/requirement-analysis/utils/error-handler.js +1 -0
  172. package/dist/types/index.d.ts +4 -2
  173. package/dist/types/index.js +1 -1
  174. package/dist/utils/id.js +1 -1
  175. package/package.json +4 -2
  176. package/skills/competitor-search/SKILL.md +169 -0
  177. package/skills/demand-analysis/SKILL.md +307 -0
  178. package/skills/feature-search/SKILL.md +182 -0
  179. package/skills/requirement-analysis/README.md +464 -0
  180. package/skills/requirement-analysis/SKILL.md +224 -0
  181. package/skills/requirement-analysis/templates/feature-mapping-template.json +210 -0
  182. package/skills/requirement-analysis/templates/prd-template.md +104 -0
  183. package/skills/tech-selection/SKILL.md +198 -0
  184. package/dist/__e2e__/01-state-engine.e2e.test.d.ts +0 -10
  185. package/dist/__e2e__/01-state-engine.e2e.test.js +0 -1
  186. package/dist/acceptance/lazyDetector.test.d.ts +0 -1
  187. package/dist/acceptance/lazyDetector.test.js +0 -1
  188. package/dist/acceptance/reporter.test.d.ts +0 -1
  189. package/dist/acceptance/reporter.test.js +0 -1
  190. package/dist/acceptance/runner.test.d.ts +0 -1
  191. package/dist/acceptance/runner.test.js +0 -1
  192. package/dist/context/promptTemplate.test.d.ts +0 -1
  193. package/dist/context/promptTemplate.test.js +0 -1
  194. package/dist/context/techContextLoader.test.d.ts +0 -1
  195. package/dist/context/techContextLoader.test.js +0 -1
  196. package/dist/machines/agentMachine.test.d.ts +0 -1
  197. package/dist/machines/agentMachine.test.js +0 -1
  198. package/dist/machines/supervisorMachine.test.d.ts +0 -1
  199. package/dist/machines/supervisorMachine.test.js +0 -1
  200. package/dist/persistence/stateFile.test.d.ts +0 -1
  201. package/dist/persistence/stateFile.test.js +0 -1
@@ -0,0 +1,542 @@
1
+ <purpose>
2
+ 提取下游 Agent 所需的实现决策。分析阶段以识别灰色地带,让用户选择要讨论的内容,然后深入探讨每个选定的领域直到满意为止。
3
+
4
+ 你是一个思考伙伴,而不是面试官。用户是愿景制定者——你是构建者。你的工作是捕获将指导研究和规划的决策,而不是自己去弄清楚实现方式。
5
+ </purpose>
6
+
7
+ <downstream_awareness>
8
+ **CONTEXT.md 供以下角色使用:**
9
+
10
+ 1. **specops-phase-researcher** — 读取 CONTEXT.md 以了解要研究什么
11
+ - "用户想要卡片式布局" → 研究员调查卡片组件模式
12
+ - "决定使用无限滚动" → 研究员研究虚拟化库
13
+
14
+ 2. **specops-planner** — 读取 CONTEXT.md 以了解哪些决策已锁定
15
+ - "移动端下拉刷新" → 规划器将其纳入任务规格
16
+ - "Claude 自行决定:加载骨架屏" → 规划器可以决定实现方式
17
+
18
+ **你的职责:** 清晰地捕获决策,使下游 Agent 无需再次询问用户即可执行。
19
+
20
+ **不是你的职责:** 弄清楚如何实现。研究和规划会利用你捕获的决策来完成这些工作。
21
+ </downstream_awareness>
22
+
23
+ <philosophy>
24
+ **用户 = 创始人/愿景制定者。Claude = 构建者。**
25
+
26
+ 用户了解:
27
+ - 他们想象中的工作方式
28
+ - 它应该看起来/感觉如何
29
+ - 什么是必要的 vs 锦上添花的
30
+ - 他们脑中的具体行为或参考
31
+
32
+ 用户不了解(也不应该被问到):
33
+ - 代码库模式(研究员读代码)
34
+ - 技术风险(研究员识别这些)
35
+ - 实现方式(规划器来解决)
36
+ - 成功指标(从工作中推断)
37
+
38
+ 询问愿景和实现选择。为下游 Agent 捕获决策。
39
+ </philosophy>
40
+
41
+ <scope_guardrail>
42
+ **关键:不允许范围蔓延。**
43
+
44
+ 阶段边界来自 ROADMAP.md 且是固定的。讨论是澄清如何实现已确定范围内的内容,而不是是否添加新功能。
45
+
46
+ **允许(澄清模糊性):**
47
+ - "帖子应该如何展示?"(布局、密度、显示信息)
48
+ - "空状态时显示什么?"(功能范围内)
49
+ - "下拉刷新还是手动?"(行为选择)
50
+
51
+ **不允许(范围蔓延):**
52
+ - "我们是否也应该添加评论?"(新功能)
53
+ - "搜索/过滤怎么样?"(新功能)
54
+ - "也许加入收藏功能?"(新功能)
55
+
56
+ **判断标准:** 这是在澄清如何实现阶段中已有的内容,还是在添加一个可以成为独立阶段的新功能?
57
+
58
+ **当用户建议范围蔓延时:**
59
+ ```
60
+ "[功能 X] 是一个新功能——应该作为独立阶段。
61
+ 要我记录到路线图待办中吗?
62
+
63
+ 现在让我们专注于 [当前阶段领域]。"
64
+ ```
65
+
66
+ 将想法记录在"延迟想法"部分。不要丢失它,也不要执行它。
67
+ </scope_guardrail>
68
+
69
+ <gray_area_identification>
70
+ 灰色地带是**用户关心的实现决策**——可以有多种方式且会改变结果的事情。
71
+
72
+ **如何识别灰色地带:**
73
+
74
+ 1. **阅读阶段目标**(来自 ROADMAP.md)
75
+ 2. **理解领域** — 正在构建什么类型的东西?
76
+ - 用户能看到的 → 视觉呈现、交互、状态很重要
77
+ - 用户能调用的 → 接口契约、响应、错误很重要
78
+ - 用户能运行的 → 调用方式、输出、行为模式很重要
79
+ - 用户能阅读的 → 结构、语气、深度、流程很重要
80
+ - 需要组织的 → 标准、分组、异常处理很重要
81
+ 3. **生成阶段特定的灰色地带** — 不是通用类别,而是此阶段的具体决策
82
+
83
+ **不要使用通用类别标签**(UI、UX、行为)。生成具体的灰色地带:
84
+
85
+ ```
86
+ 阶段:"用户认证"
87
+ → 会话处理、错误响应、多设备策略、恢复流程
88
+
89
+ 阶段:"整理照片库"
90
+ → 分组标准、重复处理、命名规范、文件夹结构
91
+
92
+ 阶段:"数据库备份 CLI"
93
+ → 输出格式、标志设计、进度报告、错误恢复
94
+
95
+ 阶段:"API 文档"
96
+ → 结构/导航、代码示例深度、版本管理方式、交互元素
97
+ ```
98
+
99
+ **核心问题:** 哪些决策会改变结果,需要用户来权衡?
100
+
101
+ **Claude 处理这些(不要问):**
102
+ - 技术实现细节
103
+ - 架构模式
104
+ - 性能优化
105
+ - 范围(路线图定义了这些)
106
+ </gray_area_identification>
107
+
108
+ <process>
109
+
110
+ **快速路径可用:** 如果你已经有 PRD 或验收标准文档,使用 `/specops:plan-phase {phase} --prd path/to/prd.md` 跳过此讨论直接进入规划。
111
+
112
+ <step name="initialize" priority="first">
113
+ 从参数中获取阶段编号(必需)。
114
+
115
+ ```bash
116
+ INIT=$(node .opencode/bin/specops-tools.cjs init phase-op "${PHASE}")
117
+ ```
118
+
119
+ 解析 JSON 获取:`commit_docs`、`phase_found`、`phase_dir`、`phase_number`、`phase_name`、`phase_slug`、`padded_phase`、`has_research`、`has_context`、`has_plans`、`has_verification`、`plan_count`、`roadmap_exists`、`planning_exists`。
120
+
121
+ **如果 `phase_found` 为 false:**
122
+ ```
123
+ 阶段 [X] 在路线图中未找到。
124
+
125
+ 使用 /specops:progress 查看可用阶段。
126
+ ```
127
+ 退出工作流。
128
+
129
+ **如果 `phase_found` 为 true:** 继续到 check_existing。
130
+ </step>
131
+
132
+ <step name="check_existing">
133
+ 使用 init 返回的 `has_context` 检查 CONTEXT.md 是否已存在。
134
+
135
+ ```bash
136
+ ls ${phase_dir}/*-CONTEXT.md 2>/dev/null
137
+ ```
138
+
139
+ **如果已存在:**
140
+ 使用 AskUserQuestion:
141
+ - header: "Context"
142
+ - question: "阶段 [X] 已有上下文。你想怎么做?"
143
+ - options:
144
+ - "更新它" — 审查并修改现有上下文
145
+ - "查看它" — 显示当前内容
146
+ - "跳过" — 使用现有上下文
147
+
148
+ 如果"更新":加载现有内容,继续到 analyze_phase
149
+ 如果"查看":显示 CONTEXT.md,然后提供更新/跳过选项
150
+ 如果"跳过":退出工作流
151
+
152
+ **如果不存在:**
153
+
154
+ 检查 init 返回的 `has_plans` 和 `plan_count`。**如果 `has_plans` 为 true:**
155
+
156
+ 使用 AskUserQuestion:
157
+ - header: "计划已存在"
158
+ - question: "阶段 [X] 已有 {plan_count} 个计划,但没有用户上下文。你在这里做的决策不会影响现有计划,除非你重新规划。"
159
+ - options:
160
+ - "继续并之后重新规划" — 捕获上下文,然后运行 /specops:plan-phase {X} 重新规划
161
+ - "查看现有计划" — 在决定前查看计划
162
+ - "取消" — 跳过 discuss-phase
163
+
164
+ 如果"继续并之后重新规划":继续到 analyze_phase。
165
+ 如果"查看现有计划":显示计划文件,然后提供"继续"/"取消"选项。
166
+ 如果"取消":退出工作流。
167
+
168
+ **如果 `has_plans` 为 false:** 继续到 analyze_phase。
169
+ </step>
170
+
171
+ <step name="analyze_phase">
172
+ 分析阶段以识别值得讨论的灰色地带。
173
+
174
+ **阅读 ROADMAP.md 中的阶段描述并确定:**
175
+
176
+ 1. **领域边界** — 此阶段交付什么功能?清晰陈述。
177
+
178
+ 2. **按类别划分的灰色地带** — 对于每个相关类别(UI、UX、行为、空状态、内容),识别 1-2 个会改变实现的具体模糊点。
179
+
180
+ 3. **跳过评估** — 如果没有有意义的灰色地带(纯基础设施、明确的实现),该阶段可能不需要讨论。
181
+
182
+ **在内部输出你的分析,然后呈现给用户。**
183
+
184
+ "帖子信息流"阶段的分析示例:
185
+ ```
186
+ 领域:展示关注用户的帖子
187
+ 灰色地带:
188
+ - UI:布局风格(卡片 vs 时间线 vs 网格)
189
+ - UI:信息密度(完整帖子 vs 预览)
190
+ - 行为:加载模式(无限滚动 vs 分页)
191
+ - 空状态:没有帖子时显示什么
192
+ - 内容:显示哪些元数据(时间、作者、反应数)
193
+ ```
194
+ </step>
195
+
196
+ <step name="present_gray_areas">
197
+ 向用户呈现领域边界和灰色地带。
198
+
199
+ **首先,陈述边界:**
200
+ ```
201
+ 阶段 [X]:[名称]
202
+ 领域:[此阶段交付什么——来自你的分析]
203
+
204
+ 我们将澄清如何实现这些内容。
205
+ (新功能属于其他阶段。)
206
+ ```
207
+
208
+ **然后使用 AskUserQuestion(multiSelect: true):**
209
+ - header: "讨论"
210
+ - question: "你想讨论 [阶段名称] 的哪些方面?"
211
+ - options:生成 3-4 个阶段特定的灰色地带,每个包含:
212
+ - "[具体领域]"(标签)— 具体的,不是通用的
213
+ - [此领域涵盖的 1-2 个问题](描述)
214
+ - **高亮推荐选项并简要说明原因**
215
+
216
+ **不要包含"跳过"或"你来决定"选项。** 用户运行此命令就是为了讨论——给他们真正的选择。
217
+
218
+ **按领域的示例:**
219
+
220
+ "帖子信息流"(视觉功能):
221
+ ```
222
+ ☐ 布局风格 — 卡片 vs 列表 vs 时间线?信息密度?
223
+ ☐ 加载行为 — 无限滚动还是分页?下拉刷新?
224
+ ☐ 内容排序 — 时间顺序、算法推荐还是用户选择?
225
+ ☐ 帖子元数据 — 每个帖子显示什么信息?时间戳、反应、作者?
226
+ ```
227
+
228
+ "数据库备份 CLI"(命令行工具):
229
+ ```
230
+ ☐ 输出格式 — JSON、表格还是纯文本?详细程度级别?
231
+ ☐ 标志设计 — 短标志、长标志还是两者都有?必需 vs 可选?
232
+ ☐ 进度报告 — 静默、进度条还是详细日志?
233
+ ☐ 错误恢复 — 快速失败、重试还是提示操作?
234
+ ```
235
+
236
+ "整理照片库"(组织任务):
237
+ ```
238
+ ☐ 分组标准 — 按日期、位置、人脸还是事件?
239
+ ☐ 重复处理 — 保留最佳、全部保留还是每次提示?
240
+ ☐ 命名规范 — 原始名称、日期还是描述性名称?
241
+ ☐ 文件夹结构 — 扁平、按年嵌套还是按类别?
242
+ ```
243
+
244
+ 继续到 discuss_areas 处理选定的领域。
245
+ </step>
246
+
247
+ <step name="discuss_areas">
248
+ 对每个选定的领域进行聚焦讨论循环。
249
+
250
+ **理念:4 个问题,然后检查。**
251
+
252
+ 每个领域问 4 个问题后再提供继续或转到下一个的选项。每个回答通常会引出下一个问题。
253
+
254
+ **对于每个领域:**
255
+
256
+ 1. **宣布领域:**
257
+ ```
258
+ 让我们谈谈 [领域]。
259
+ ```
260
+
261
+ 2. **使用 AskUserQuestion 问 4 个问题:**
262
+ - header: "[领域]"(最多 12 个字符——必要时缩写)
263
+ - question:此领域的具体决策
264
+ - options:2-3 个具体选项(AskUserQuestion 自动添加"其他"),推荐选项高亮并简要说明原因
265
+ - 合理时包含"你来决定"选项——记录 Claude 自行决定的内容
266
+
267
+ 3. **4 个问题后检查:**
268
+ - header: "[领域]"(最多 12 个字符)
269
+ - question: "关于 [领域] 还有更多问题,还是转到下一个?"
270
+ - options: "更多问题" / "下一个领域"
271
+
272
+ 如果"更多问题" → 再问 4 个,然后再次检查
273
+ 如果"下一个领域" → 进入下一个选定的领域
274
+ 如果"其他"(自由文本)→ 解读意图:继续类短语("继续聊"、"继续"、"是的"、"更多")映射到"更多问题";推进类短语("完成"、"下一个"、"跳过")映射到"下一个领域"。如果模糊,询问:"继续讨论 [领域] 的更多问题,还是转到下一个领域?"
275
+
276
+ 4. **所有初始选定的领域完成后:**
277
+ - 总结讨论中捕获的内容
278
+ - AskUserQuestion:
279
+ - header: "完成"
280
+ - question: "我们已经讨论了 [列出领域]。还有哪些灰色地带不清楚?"
281
+ - options: "探索更多灰色地带" / "准备好生成上下文了"
282
+ - 如果"探索更多灰色地带":
283
+ - 根据已学到的内容识别 2-4 个额外的灰色地带
284
+ - 返回 present_gray_areas 逻辑处理这些新领域
285
+ - 循环:讨论新领域,然后再次提示
286
+ - 如果"准备好生成上下文了":进入 write_context
287
+
288
+ **问题设计:**
289
+ - 选项应该是具体的,不是抽象的("卡片"而不是"选项 A")
290
+ - 每个回答应该为下一个问题提供信息
291
+ - 如果用户选择"其他",接收他们的输入,复述确认
292
+
293
+ **范围蔓延处理:**
294
+ 如果用户提到阶段领域之外的内容:
295
+ ```
296
+ "[功能] 听起来像是一个新功能——应该属于独立阶段。
297
+ 我会记录为延迟想法。
298
+
299
+ 回到 [当前领域]:[返回当前问题]"
300
+ ```
301
+
302
+ 在内部跟踪延迟想法。
303
+ </step>
304
+
305
+ <step name="write_context">
306
+ 创建 CONTEXT.md 捕获所做的决策。
307
+
308
+ **查找或创建阶段目录:**
309
+
310
+ 使用 init 返回的值:`phase_dir`、`phase_slug`、`padded_phase`。
311
+
312
+ 如果 `phase_dir` 为 null(阶段存在于路线图中但没有目录):
313
+ ```bash
314
+ mkdir -p ".planning/phases/${padded_phase}-${phase_slug}"
315
+ ```
316
+
317
+ **文件位置:** `${phase_dir}/${padded_phase}-CONTEXT.md`
318
+
319
+ **按讨论内容组织内容:**
320
+
321
+ ```markdown
322
+ # Phase [X]: [Name] - Context
323
+
324
+ **Gathered:** [date]
325
+ **Status:** Ready for planning
326
+
327
+ <domain>
328
+ ## Phase Boundary
329
+
330
+ [清晰陈述此阶段交付什么——范围锚点]
331
+
332
+ </domain>
333
+
334
+ <decisions>
335
+ ## Implementation Decisions
336
+
337
+ ### [讨论的类别 1]
338
+ - [捕获的决策或偏好]
339
+ - [如适用的另一个决策]
340
+
341
+ ### [讨论的类别 2]
342
+ - [捕获的决策或偏好]
343
+
344
+ ### Claude's Discretion
345
+ [用户说"你来决定"的领域——注明 Claude 在此有灵活性]
346
+
347
+ </decisions>
348
+
349
+ <specifics>
350
+ ## Specific Ideas
351
+
352
+ [讨论中的任何特定参考、示例或"我想要像 X 那样"的时刻]
353
+
354
+ [如果没有:"没有特定要求——对标准方法持开放态度"]
355
+
356
+ </specifics>
357
+
358
+ <deferred>
359
+ ## Deferred Ideas
360
+
361
+ [讨论中出现但属于其他阶段的想法。不要丢失它们。]
362
+
363
+ [如果没有:"无——讨论保持在阶段范围内"]
364
+
365
+ </deferred>
366
+
367
+ ---
368
+
369
+ *Phase: XX-name*
370
+ *Context gathered: [date]*
371
+ ```
372
+
373
+ 写入文件。
374
+ </step>
375
+
376
+ <step name="confirm_creation">
377
+ 展示摘要和后续步骤:
378
+
379
+ ```
380
+ 已创建:.planning/phases/${PADDED_PHASE}-${SLUG}/${PADDED_PHASE}-CONTEXT.md
381
+
382
+ ## 捕获的决策
383
+
384
+ ### [类别]
385
+ - [关键决策]
386
+
387
+ ### [类别]
388
+ - [关键决策]
389
+
390
+ [如果有延迟想法:]
391
+ ## 记录待后续处理
392
+ - [延迟想法] — 未来阶段
393
+
394
+ ---
395
+
396
+ ## ▶ 下一步
397
+
398
+ **Phase ${PHASE}: [Name]** — [ROADMAP.md 中的目标]
399
+
400
+ `/specops:plan-phase ${PHASE}`
401
+
402
+ <sub>`/clear` 先清理 → 全新上下文窗口</sub>
403
+
404
+ ---
405
+
406
+ **其他可用操作:**
407
+ - `/specops:plan-phase ${PHASE} --skip-research` — 不做研究直接规划
408
+ - 在继续之前审查/编辑 CONTEXT.md
409
+
410
+ ---
411
+ ```
412
+ </step>
413
+
414
+ <step name="git_commit">
415
+ 提交阶段上下文(内部使用 init 返回的 `commit_docs`):
416
+
417
+ ```bash
418
+ node .opencode/bin/specops-tools.cjs commit "docs(${padded_phase}): capture phase context" --files "${phase_dir}/${padded_phase}-CONTEXT.md"
419
+ ```
420
+
421
+ 确认:"已提交:docs(${padded_phase}): capture phase context"
422
+ </step>
423
+
424
+ <step name="update_state">
425
+ 更新 STATE.md 的会话信息:
426
+
427
+ ```bash
428
+ node .opencode/bin/specops-tools.cjs state record-session \
429
+ --stopped-at "Phase ${PHASE} context gathered" \
430
+ --resume-file "${phase_dir}/${padded_phase}-CONTEXT.md"
431
+ ```
432
+
433
+ 提交 STATE.md:
434
+
435
+ ```bash
436
+ node .opencode/bin/specops-tools.cjs commit "docs(state): record phase ${PHASE} context session" --files .planning/STATE.md
437
+ ```
438
+ </step>
439
+
440
+ <step name="auto_advance">
441
+ 检查自动推进触发条件:
442
+
443
+ 1. 从 $ARGUMENTS 解析 `--auto` 标志
444
+ 2. 从配置读取 `workflow.auto_advance`:
445
+ ```bash
446
+ AUTO_CFG=$(node .opencode/bin/specops-tools.cjs config-get workflow.auto_advance 2>/dev/null || echo "false")
447
+ ```
448
+
449
+ **如果存在 `--auto` 标志且 `AUTO_CFG` 不为 true:** 将自动推进持久化到配置(处理不通过 new-project 直接使用 `--auto` 的情况):
450
+ ```bash
451
+ node .opencode/bin/specops-tools.cjs config-set workflow.auto_advance true
452
+ ```
453
+
454
+ **如果存在 `--auto` 标志或 `AUTO_CFG` 为 true:**
455
+
456
+ 显示横幅:
457
+ ```
458
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
459
+ SpecOps ► 自动推进到规划
460
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
461
+
462
+ 上下文已捕获。正在生成 plan-phase...
463
+ ```
464
+
465
+ 将 plan-phase 作为 Task 生成,使用直接工作流文件引用(不要使用 Skill 工具——Skill 在 Task 子 Agent 中无法解析):
466
+ ```
467
+ Task(
468
+ prompt="
469
+ <objective>
470
+ 你是 plan-phase 编排器。为 Phase ${PHASE}: ${PHASE_NAME} 创建可执行计划,然后自动推进到执行。
471
+ </objective>
472
+
473
+ <execution_context>
474
+ @.opencode/workflows/plan-phase.md
475
+ @.opencode/references/ui-brand.md
476
+ @.opencode/references/model-profile-resolution.md
477
+ </execution_context>
478
+
479
+ <arguments>
480
+ PHASE=${PHASE}
481
+ ARGUMENTS='${PHASE} --auto'
482
+ </arguments>
483
+
484
+ <instructions>
485
+ 1. 从 execution_context 读取 plan-phase.md 获取完整工作流
486
+ 2. 遵循所有步骤:initialize、validate、load context、research、plan、verify、auto-advance
487
+ 3. 生成 Agent(specops-phase-researcher、specops-planner、specops-plan-checker)时,使用 Task 并指定 subagent_type 和 model
488
+ 4. 对于步骤 14(自动推进到执行):将 execute-phase 作为 Task 生成,使用直接文件引用——告诉它读取 execute-phase.md。包含 @file 引用 execute-phase.md、checkpoints.md、tdd.md、model-profile-resolution.md。传递 --no-transition 标志使 execute-phase 返回结果而不是继续链式调用。
489
+ 5. 不要使用 Skill 工具或 /specops: 命令。直接读取工作流 .md 文件。
490
+ 6. 返回:PHASE COMPLETE(完整流水线成功)、PLANNING COMPLETE(规划完成但执行失败/跳过)、PLANNING INCONCLUSIVE 或 GAPS FOUND
491
+ </instructions>
492
+ ",
493
+ subagent_type="general-purpose",
494
+ description="Plan Phase ${PHASE}"
495
+ )
496
+ ```
497
+
498
+ **处理 plan-phase 返回:**
499
+ - **PHASE COMPLETE** → 完整链成功。显示:
500
+ ```
501
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
502
+ SpecOps ► PHASE ${PHASE} 完成
503
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
504
+
505
+ 自动推进流水线完成:discuss → plan → execute
506
+
507
+ 下一步:/specops:discuss-phase ${NEXT_PHASE} --auto
508
+ <sub>先 /clear → 全新上下文窗口</sub>
509
+ ```
510
+ - **PLANNING COMPLETE** → 规划完成,执行未完成:
511
+ ```
512
+ 自动推进部分完成:规划完成,执行未完成。
513
+ 继续:/specops:execute-phase ${PHASE}
514
+ ```
515
+ - **PLANNING INCONCLUSIVE / CHECKPOINT** → 停止链:
516
+ ```
517
+ 自动推进已停止:规划需要输入。
518
+ 继续:/specops:plan-phase ${PHASE}
519
+ ```
520
+ - **GAPS FOUND** → 停止链:
521
+ ```
522
+ 自动推进已停止:执行过程中发现缺口。
523
+ 继续:/specops:plan-phase ${PHASE} --gaps
524
+ ```
525
+
526
+ **如果既没有 `--auto` 也没有配置启用:**
527
+ 路由到 `confirm_creation` 步骤(现有行为——显示手动后续步骤)。
528
+ </step>
529
+
530
+ </process>
531
+
532
+ <success_criteria>
533
+ - 阶段已根据路线图验证
534
+ - 通过智能分析识别灰色地带(不是通用问题)
535
+ - 用户选择了要讨论的领域
536
+ - 每个选定的领域探讨到用户满意为止
537
+ - 范围蔓延被重定向到延迟想法
538
+ - CONTEXT.md 捕获了实际决策,而不是模糊的愿景
539
+ - 延迟想法为未来阶段保留
540
+ - STATE.md 已更新会话信息
541
+ - 用户知道后续步骤
542
+ </success_criteria>