sillyspec 3.20.2 → 3.20.3

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 (208) hide show
  1. package/.claude/skills/sillyspec-archive/SKILL.md +1 -5
  2. package/.claude/skills/sillyspec-auto/SKILL.md +2 -8
  3. package/.claude/skills/sillyspec-brainstorm/SKILL.md +1 -28
  4. package/.claude/skills/sillyspec-commit/SKILL.md +3 -4
  5. package/.claude/skills/sillyspec-continue/SKILL.md +4 -5
  6. package/.claude/skills/sillyspec-doctor/SKILL.md +3 -12
  7. package/.claude/skills/sillyspec-execute/SKILL.md +2 -15
  8. package/.claude/skills/sillyspec-explore/SKILL.md +1 -14
  9. package/.claude/skills/sillyspec-plan/SKILL.md +36 -5
  10. package/.claude/skills/sillyspec-propose/SKILL.md +0 -4
  11. package/.claude/skills/sillyspec-quick/SKILL.md +1 -5
  12. package/.claude/skills/sillyspec-resume/SKILL.md +66 -23
  13. package/.claude/skills/sillyspec-scan/SKILL.md +1 -5
  14. package/.claude/skills/sillyspec-state/SKILL.md +8 -8
  15. package/.claude/skills/sillyspec-status/SKILL.md +1 -5
  16. package/.claude/skills/sillyspec-verify/SKILL.md +1 -5
  17. package/.claude/skills/sillyspec-workspace/SKILL.md +3 -11
  18. package/.sillyspec/changes/archive/2026-04-08-derive-state/design.md +97 -0
  19. package/.sillyspec/changes/archive/2026-04-08-derive-state/plan.md +51 -0
  20. package/.sillyspec/changes/archive/2026-04-08-derive-state/proposal.md +29 -0
  21. package/.sillyspec/changes/archive/2026-04-08-derive-state/requirements.md +34 -0
  22. package/.sillyspec/changes/archive/2026-04-08-derive-state/tasks.md +13 -0
  23. package/.sillyspec/changes/archive/2026-04-08-derive-state/verify-result.md +43 -0
  24. package/.sillyspec/changes/auto-mode/design.md +50 -0
  25. package/.sillyspec/changes/auto-mode/proposal.md +19 -0
  26. package/.sillyspec/changes/auto-mode/requirements.md +21 -0
  27. package/.sillyspec/changes/auto-mode/tasks.md +7 -0
  28. package/.sillyspec/changes/brainstorm-archive/2026-04-05-dashboard-design.md +206 -0
  29. package/.sillyspec/changes/brainstorm-archive/2026-04-05-unified-docs-design.md +199 -0
  30. package/.sillyspec/changes/dashboard/design.md +219 -0
  31. package/.sillyspec/changes/dashboard/design.md.braindraft +206 -0
  32. package/.sillyspec/changes/run-command-design/design.md +1230 -0
  33. package/.sillyspec/changes/unified-docs-design/design.md +199 -0
  34. package/.sillyspec/docs/sillyspec/scan/.gitkeep +0 -0
  35. package/.sillyspec/knowledge/INDEX.md +8 -0
  36. package/.sillyspec/knowledge/uncategorized.md +3 -0
  37. package/.sillyspec/plans/2026-04-05-dashboard.md +737 -0
  38. package/.sillyspec/projects/sillyspec.yaml +3 -0
  39. package/README.md +11 -13
  40. package/SKILL.md +40 -44
  41. package/dist/steps/brainstorm/01-load-context.md +30 -0
  42. package/dist/steps/brainstorm/02-reuse-check.md +6 -0
  43. package/dist/steps/brainstorm/03-prototype-analysis.md +11 -0
  44. package/dist/steps/brainstorm/04-module-split.md +23 -0
  45. package/dist/steps/brainstorm/05-dialog-explore.md +8 -0
  46. package/dist/steps/brainstorm/06-propose-approaches.md +3 -0
  47. package/dist/steps/brainstorm/07-present-design.md +3 -0
  48. package/dist/steps/brainstorm/08-write-design.md +21 -0
  49. package/dist/steps/brainstorm/09-self-review.md +15 -0
  50. package/dist/steps/brainstorm/10-user-confirm.md +3 -0
  51. package/dist/steps/brainstorm/11-output-spec.md +7 -0
  52. package/dist/steps/brainstorm/manifest.yaml +26 -0
  53. package/dist/steps/execute/01-load-context.md +41 -0
  54. package/dist/steps/execute/02-scan-conventions.md +47 -0
  55. package/dist/steps/execute/03-skill-mcp.md +19 -0
  56. package/dist/steps/execute/04-assign-task.md +22 -0
  57. package/dist/steps/execute/04b-prompt-template.md +54 -0
  58. package/dist/steps/execute/05-write-test.md +7 -0
  59. package/dist/steps/execute/06-write-code.md +8 -0
  60. package/dist/steps/execute/07-run-test.md +26 -0
  61. package/dist/steps/execute/08-fix-issues.md +28 -0
  62. package/dist/steps/execute/09-next-task.md +33 -0
  63. package/dist/steps/execute/manifest.yaml +28 -0
  64. package/dist/steps/plan/01-load-context.md +22 -0
  65. package/dist/steps/plan/02-anchor-confirm.md +1 -0
  66. package/dist/steps/plan/03-expand-tasks.md +33 -0
  67. package/dist/steps/plan/04-mark-order.md +15 -0
  68. package/dist/steps/plan/05-e2e-planning.md +17 -0
  69. package/dist/steps/plan/06-self-check.md +16 -0
  70. package/dist/steps/plan/07-save.md +1 -0
  71. package/dist/steps/plan/manifest.yaml +18 -0
  72. package/dist/steps/scan/01-env-detect.md +51 -0
  73. package/dist/steps/scan/02-tech-stack.md +16 -0
  74. package/dist/steps/scan/03-conventions.md +16 -0
  75. package/dist/steps/scan/04-structure.md +19 -0
  76. package/dist/steps/scan/05-quality.md +18 -0
  77. package/dist/steps/scan/06-complete.md +49 -0
  78. package/dist/steps/scan/manifest.yaml +16 -0
  79. package/dist/steps/verify/01-load-specs.md +28 -0
  80. package/dist/steps/verify/02-check-tasks.md +1 -0
  81. package/dist/steps/verify/03-check-design.md +6 -0
  82. package/dist/steps/verify/04-run-tests.md +7 -0
  83. package/dist/steps/verify/05-e2e-tests.md +27 -0
  84. package/dist/steps/verify/05b-e2e-fix.md +33 -0
  85. package/dist/steps/verify/06-code-quality.md +25 -0
  86. package/dist/steps/verify/07-lint-check.md +27 -0
  87. package/dist/steps/verify/08-output-report.md +14 -0
  88. package/dist/steps/verify/manifest.yaml +22 -0
  89. package/package.json +1 -7
  90. package/packages/dashboard/dist/assets/{index-Bq_Z2hne.js → index-D1EVTLmc.js} +1264 -1264
  91. package/packages/dashboard/dist/assets/index-DGe8CqeP.css +1 -0
  92. package/packages/dashboard/dist/index.html +2 -2
  93. package/packages/dashboard/package-lock.json +6 -6
  94. package/packages/dashboard/server/executor.js +1 -1
  95. package/packages/dashboard/server/index.js +18 -98
  96. package/packages/dashboard/server/parser.js +71 -139
  97. package/packages/dashboard/server/watcher.js +6 -14
  98. package/packages/dashboard/src/App.vue +185 -418
  99. package/packages/dashboard/src/components/ActionBar.vue +1 -10
  100. package/packages/dashboard/src/components/CommandPalette.vue +1 -5
  101. package/packages/dashboard/src/components/DocPreview.vue +8 -105
  102. package/packages/dashboard/src/components/DocTree.vue +19 -75
  103. package/packages/dashboard/src/components/PipelineStage.vue +2 -22
  104. package/packages/dashboard/src/components/PipelineView.vue +5 -32
  105. package/packages/dashboard/src/components/ProjectOverview.vue +139 -113
  106. package/packages/dashboard/src/components/StageBadge.vue +3 -17
  107. package/packages/dashboard/src/components/StepCard.vue +2 -7
  108. package/packages/dashboard/src/composables/useDashboard.js +0 -28
  109. package/src/derive.js +147 -0
  110. package/src/index.js +40 -688
  111. package/src/init.js +63 -119
  112. package/src/migrate.js +7 -7
  113. package/src/progress.js +248 -1474
  114. package/src/run.js +302 -3008
  115. package/src/setup.js +64 -2
  116. package/src/stages/archive.js +17 -123
  117. package/src/stages/brainstorm.js +48 -454
  118. package/src/stages/doctor.js +46 -99
  119. package/src/stages/execute.js +59 -420
  120. package/src/stages/index.js +18 -12
  121. package/src/stages/plan.js +189 -492
  122. package/src/stages/propose.js +11 -70
  123. package/src/stages/quick.js +13 -52
  124. package/src/stages/scan.js +68 -485
  125. package/src/stages/status.js +1 -1
  126. package/src/stages/verify.js +16 -203
  127. package/src/step.js +543 -0
  128. package/.claude/skills/sillyspec-knowledge/SKILL.md +0 -270
  129. package/.husky/pre-push +0 -13
  130. package/CLAUDE.md +0 -18
  131. package/docs/brainstorm-plan-contract.md +0 -64
  132. package/docs/plan-execute-contract.md +0 -123
  133. package/docs/platform-scan-protocol.md +0 -298
  134. package/docs/revision-mode.md +0 -115
  135. package/docs/sillyspec/file-lifecycle/known-implementation-gaps.md +0 -99
  136. package/docs/sillyspec/file-lifecycle/platform-workflows-sync.md +0 -218
  137. package/docs/sillyspec/file-lifecycle/stage-artifacts.md +0 -167
  138. package/docs/sillyspec/file-lifecycle/storage-and-state.md +0 -148
  139. package/docs/sillyspec/file-lifecycle/worktree-and-guard.md +0 -193
  140. package/docs/sillyspec/file-lifecycle.md +0 -125
  141. package/docs/workflow-contract-regression.md +0 -106
  142. package/docs/worktree-isolation.md +0 -252
  143. package/packages/dashboard/dist/assets/index-O2W5RV4z.css +0 -1
  144. package/packages/dashboard/dist/prototype-dashboard.html +0 -836
  145. package/packages/dashboard/dist/prototype-overview.html +0 -256
  146. package/packages/dashboard/public/prototype-dashboard.html +0 -836
  147. package/packages/dashboard/public/prototype-overview.html +0 -256
  148. package/packages/dashboard/src/components/HResizeHandle.vue +0 -48
  149. package/packages/dashboard/src/components/ProjectCard.vue +0 -187
  150. package/packages/dashboard/src/components/VResizeHandle.vue +0 -61
  151. package/packages/dashboard/src/composables/useLayout.js +0 -131
  152. package/src/brainstorm-postcheck.js +0 -158
  153. package/src/change-list.js +0 -52
  154. package/src/change-risk-profile.js +0 -352
  155. package/src/classify-change.js +0 -73
  156. package/src/constants.js +0 -70
  157. package/src/contract-matrix.js +0 -278
  158. package/src/db.js +0 -201
  159. package/src/endpoint-extractor.js +0 -315
  160. package/src/hooks/claude-pre-tool-use.cjs +0 -125
  161. package/src/hooks/worktree-guard.js +0 -761
  162. package/src/knowledge-match.js +0 -130
  163. package/src/modules.js +0 -482
  164. package/src/scan-postcheck.js +0 -383
  165. package/src/stage-contract.js +0 -700
  166. package/src/stages/brainstorm-auto.js +0 -229
  167. package/src/stages/explore.js +0 -34
  168. package/src/stages/knowledge.js +0 -498
  169. package/src/stages/plan-postcheck.js +0 -513
  170. package/src/sync.js +0 -497
  171. package/src/task-review.js +0 -346
  172. package/src/workflow.js +0 -785
  173. package/src/worktree-apply.js +0 -549
  174. package/src/worktree.js +0 -932
  175. package/templates/workflows/archive-impact.yaml +0 -79
  176. package/templates/workflows/scan-docs.yaml +0 -132
  177. package/test/brainstorm-plan-contract.test.mjs +0 -273
  178. package/test/check-syntax.mjs +0 -26
  179. package/test/cli-top-level-aliases.test.mjs +0 -174
  180. package/test/contract-artifacts.test.mjs +0 -323
  181. package/test/decision-supersede.test.mjs +0 -277
  182. package/test/knowledge-match.test.mjs +0 -231
  183. package/test/plan-execute-contract.test.mjs +0 -330
  184. package/test/plan-optimization.test.mjs +0 -572
  185. package/test/platform-artifacts.test.mjs +0 -190
  186. package/test/platform-failure-samples.test.mjs +0 -199
  187. package/test/platform-recovery-chain.test.mjs +0 -179
  188. package/test/platform-recovery.test.mjs +0 -167
  189. package/test/platform-scan-p0.test.mjs +0 -175
  190. package/test/revision-v1.test.mjs +0 -1145
  191. package/test/run-sanitize-project-name.test.mjs +0 -51
  192. package/test/run-scan-postcheck-fail.test.mjs +0 -64
  193. package/test/run-scan-project-parse.test.mjs +0 -200
  194. package/test/run-tests.mjs +0 -48
  195. package/test/scan-docs-yaml-placeholders.test.mjs +0 -84
  196. package/test/scan-knowledge.test.mjs +0 -175
  197. package/test/scan-paths.test.mjs +0 -68
  198. package/test/scan-postcheck-project-priority.test.mjs +0 -85
  199. package/test/scan-postcheck.test.mjs +0 -197
  200. package/test/scan-workflow-anyfailed-block.test.mjs +0 -52
  201. package/test/spec-dir.test.mjs +0 -206
  202. package/test/stage-contract-failed-post-check.test.mjs +0 -102
  203. package/test/stage-contract.test.mjs +0 -299
  204. package/test/stage-definitions.test.mjs +0 -39
  205. package/test/wait-gates.test.mjs +0 -501
  206. package/test/workflow-spec-base.test.mjs +0 -142
  207. package/test/worktree-guard.test.mjs +0 -136
  208. package/test/worktree-native-overlay.test.mjs +0 -188
@@ -5,22 +5,20 @@ export const definition = {
5
5
  steps: [
6
6
  {
7
7
  name: '状态检查',
8
- prompt: `检查当前变更的进度状态(sillyspec.db)。
8
+ prompt: `检查 .sillyspec/.runtime/progress.json 确认当前状态。
9
9
 
10
10
  ### 操作
11
11
  1. 运行 \`sillyspec progress show\`
12
12
  2. 确认 currentStage 为 "brainstorm"
13
13
  3. 如果有进行中的 brainstorm,提示选择继续或重新开始
14
14
  4. 如果未初始化,提示先运行 sillyspec init
15
- 5. **检查变更名称是否有意义**:如果当前变更名是自动生成的(如 \`2026-06-02-new-change\`),询问用户确认实际变更名,然后运行 \`sillyspec change-rename <旧名> <新名>\` 重命名
16
15
 
17
16
  ### 输出
18
17
  当前状态摘要(1-2 句话)
19
18
 
20
19
  ### 注意
21
20
  - 以 CLI 返回为准,不要自行推断阶段
22
- - 如果阶段不对,输出正确提示并停止
23
- - **不要用 mv 命令重命名变更目录**,必须使用 \`sillyspec change-rename\`,否则 DB 和目录会脱节`,
21
+ - 如果阶段不对,输出正确提示并停止`,
24
22
  outputHint: '状态摘要',
25
23
  optional: false
26
24
  },
@@ -32,30 +30,16 @@ export const definition = {
32
30
  1. 读取 CODEBASE-OVERVIEW.md + 共享规范 + 子项目上下文
33
31
  2. 加载项目信息:\`cat .sillyspec/projects/*.yaml 2>/dev/null\`
34
32
  3. 加载本地配置:\`cat .sillyspec/local.yaml 2>/dev/null\`
35
- 4. 棕地项目:读取 .sillyspec/docs/<project>/scan/ 下的 STRUCTURE.md、CONVENTIONS.md、ARCHITECTURE.md
36
- 5. **加载模块索引**:读取 \`.sillyspec/docs/<project>/modules/_module-map.yaml\`(如存在)
37
- - 这一步是高频操作,_module-map.yaml 回答"哪个文件属于哪个模块、模块之间怎么依赖"
38
- - 用 tags/aliases 字段做需求关键词→模块的粗匹配
39
- - 用 entrypoints 字段快速了解模块对外能力
33
+ 4. 询问本次需求属于哪个子项目
34
+ 5. 棕地项目:读取 docs/<project>/scan/ 下的 STRUCTURE.md、CONVENTIONS.md、ARCHITECTURE.md
40
35
  6. 查看进行中的变更:\`ls .sillyspec/changes/ | grep -v archive\`
41
36
 
42
- ### 模块匹配方法
43
- 读取 _module-map.yaml 后,根据用户描述的需求关键词,匹配相关模块:
44
- - 需求中提到"登录""认证""token" → 匹配 tags/aliases 中含这些词的模块
45
- - 需求中提到特定文件路径 → 匹配 paths 字段
46
- - 匹配结果用于后续 design.md 的文件变更清单
47
-
48
- ### 子项目判定
49
- - 单项目:直接确认,不需要等待
50
- - 多项目且用户已指定:直接确认,不需要等待
51
- - 多项目且用户未指定:列出项目列表,需要用户确认本次需求属于哪个子项目
52
-
53
37
  ### 输出
54
- 项目现状理解摘要(3-5 句话,关键约定和架构决策)+ 可能涉及的模块列表 + 本次需求所属子项目
38
+ 项目现状理解摘要(3-5 句话,关键约定和架构决策)
55
39
 
56
40
  ### 注意
57
- - 棕地项目必须读取数据模型章节
58
- - 模块匹配只是粗筛,后续步骤会细化`,
41
+ - 始终询问本次需求属于哪个子项目
42
+ - 棕地项目必须读取数据模型章节`,
59
43
  outputHint: '上下文摘要',
60
44
  optional: false
61
45
  },
@@ -98,9 +82,6 @@ export const definition = {
98
82
  },
99
83
  {
100
84
  name: '需求范围评估',
101
- conditionalWait: true,
102
- waitReason: '等待用户确认拆分/批量模式方案',
103
- waitOptions: ['同意拆分', '不需要拆分', '走批量模式'],
104
85
  prompt: `评估需求复杂度,判断是否需要拆分或走批量模式。
105
86
 
106
87
  ### 操作
@@ -134,136 +115,45 @@ export const definition = {
134
115
  - 建议用「继承 + override」配置解决特殊任务,配置解决不了的才写定制代码
135
116
  - 架构设计时预留扩展点(hooks/overrides),让特殊任务能"挂上去"而不是"另起炉灶"
136
117
 
137
- ### 铁律 — 何时需要等待用户
138
- - **需要拆分或批量模式时**:列出方案并暂停等待用户确认
139
- - 调用:\`sillyspec run brainstorm --wait --reason "等待用户确认拆分方案" --options "同意拆分,不需要拆分" --output "拆分方案摘要"\`
140
- - **不需要拆分也不需要批量模式时**:正常完成即可
141
-
142
118
  ### 输出
143
119
  拆分方案 / 批量模式确认 / "无需拆分"确认
144
120
 
145
121
  ### 注意
146
- - 简单 CRUD 不拆`,
122
+ - 简单 CRUD 不拆
123
+ - 拆分方案需用户确认
124
+ - 批量模式需用户确认`,
147
125
  outputHint: '拆分方案或无需拆分确认',
148
126
  optional: true
149
127
  },
150
128
  {
151
129
  name: '对话式探索',
152
- requiresWait: true,
153
- repeatableWait: true,
154
- maxWaitRounds: 3,
155
- waitReason: '等待用户回答需求问题',
156
- waitOptions: ['继续补充', '信息够了,进入方案讨论'],
157
130
  prompt: `通过对话探索需求细节。
158
131
 
159
132
  ### 操作
160
133
  1. 从最核心的一个问题开始(用户到底想要什么?)
161
- 2. **提出问题后必须暂停等待用户回答**,不要替用户回答
162
- 3. 根据用户回答判断:信息够了正常完成 / 需要追问 → 暂停等待下一个回答
134
+ 2. 等待用户回答后再问下一个
135
+ 3. 根据回答判断:信息够了进入方案 / 需要追问 → 只问一个
163
136
  4. 探索顺序(按需):目的 → 约束 → 边界 → 成功标准
164
137
 
165
- ### 铁律 — 不要自问自答
166
- - **这是人机协作步骤,你必须暂停等待用户输入。**
167
- - 每次提出问题后,调用:
168
- \`sillyspec run brainstorm --wait --reason "等待用户回答需求问题" --options "回答见--answer" --output "你的问题"\`
169
- - **绝对禁止**:在自己输出中模拟用户的回答,然后说"需求已明确"
170
- - 2-3 轮问答就应进入方案讨论
171
- - 多选题优于开放式问题
172
- - YAGNI — 砍掉不需要的功能
173
-
174
138
  ### 输出
175
139
  需求理解摘要(用户确认的需求点列表)
176
140
 
177
- ### 注意
178
- - 第一次进入此步骤时,提出第一个问题并暂停
179
- - 用户通过 \`--continue --answer "回答"\` 回答后,本步骤会再次执行,此时检查是否需要追问或可以结束`,
141
+ ### 铁律
142
+ - 一次只问一个问题
143
+ - 2-3 轮问答就应进入方案讨论
144
+ - 多选题优于开放式问题
145
+ - YAGNI — 砍掉不需要的功能`,
180
146
  outputHint: '需求理解摘要',
181
147
  optional: false
182
148
  },
183
- {
184
- name: '需求澄清 Grill',
185
- conditionalWait: true,
186
- repeatableWait: true,
187
- maxWaitRounds: 8,
188
- waitReason: '等待用户回答需求澄清 Grill',
189
- waitOptions: ['回答见--answer', '信息够了,结束需求澄清'],
190
- prompt: `执行可选的需求澄清 Grill pass。
191
-
192
- ### 定位
193
- 这是 design.md 之前的需求澄清,不是设计后的 Design Grill。目标是把需求/术语/边界中仍需要人类判断的点问清楚;Design Grill 后续仍会默认执行,用来审查已经写出的 design.md 是否自洽。
194
-
195
- ### 入口判断
196
- 1. 汇总「对话式探索」后仍未稳定的歧义点,按类型列出:
197
- - 术语歧义:同一个词可能指向不同实体/角色/状态
198
- - 边界歧义:哪些场景做、哪些不做、失败怎么处理
199
- - 前提风险:这个需求是否不该存在,是否已有更简单的现有方案
200
- - 代码冲突:用户描述与现有代码/scan/module 文档不一致
201
- 2. 能通过代码或文档确认的不要问用户,先读取:
202
- - \`.sillyspec/docs/<project>/scan/ARCHITECTURE.md\`
203
- - \`.sillyspec/docs/<project>/scan/CONVENTIONS.md\`
204
- - \`.sillyspec/docs/<project>/modules/_module-map.yaml\`
205
- - 相关源码文件
206
- 3. 给每个未解决歧义分级:
207
- - P0:影响数据模型、权限边界、状态机/工作流、兼容策略、不可逆架构取舍、跨模块所有权
208
- - P1:影响用户场景、验收标准、错误处理、默认值
209
- - P2:文案、展示细节、低风险交互偏好
210
- 4. 执行规则:
211
- - P1/P2 歧义 0-2 个且无 P0:输出"需求澄清 Grill skipped",在后续设计中内联处理并记录依据
212
- - P1/P2 歧义 >= 3 个:进入本 pass,按优先级逐个澄清
213
- - 任意 P0 歧义:进入本 pass;如果需要用户判断,必须暂停问一个问题
214
- 5. 不要问用户"要不要 Grill"。本步骤由 AI 根据歧义风险决定是否执行;只在需要业务判断/取舍时等待用户回答。
215
-
216
- ### 追问策略
217
- 1. **一次只问一个问题**:按 P0 → P1 → P2 顺序,深度优先处理最关键歧义。
218
- 2. **能查代码就不问**:如果问题可由源码、scan 文档、模块文档回答,先查证并给出结论;只有业务判断/取舍才问用户。
219
- 3. **术语碰撞立即指出**:用户用词与 glossary/代码实体/模块文档冲突时,当场说明冲突并要求选择 canonical term。
220
- 4. **模糊词精化**:把"账户/任务/状态/会话/执行"这类多义词拆成明确实体或状态。
221
- 5. **场景压力测试**:用具体 case 逼出边界,例如失败重试、部分成功、历史数据、权限不足、并发修改、兼容旧配置。
222
- 6. **前提挑战优先**:如果现有设计或代码已有简单路径,先说明"可能不该新增",不要直接优化错误前提。
223
-
224
- ### 决策记录草稿
225
- 每解决一个有实现影响的问题,生成一个稳定 ID 的记录草稿。不要把闲聊都记录进去。
226
-
227
- \`\`\`markdown
228
- ## D-001@v1: <短标题>
229
- - type: term | boundary | premise | architecture | compatibility | risk
230
- - status: accepted | rejected | superseded
231
- - source: user | code | docs
232
- - question: <被解决的问题>
233
- - answer: <用户确认或代码查证结果>
234
- - normalized_requirement: <可测试的约束>
235
- - impacts: [FR-?, task-?, verify-?]
236
- - evidence: <文件路径/代码位置/用户回答轮次>
237
- \`\`\`
238
-
239
- ### 铁律 — 等待用户
240
- - 每轮最多提出一个问题,然后调用:
241
- \`sillyspec run brainstorm --wait --reason "等待用户回答需求澄清 Grill" --options "回答见--answer,信息够了,结束需求澄清" --output "你的单个问题或查证结论"\`
242
- - 用户通过 \`--continue --answer "回答"\` 回答后,本步骤会再次执行;继续处理下一个最关键歧义。
243
- - 达到 maxWaitRounds=8 后,必须总结已确认内容和剩余风险,不要无限追问。
244
-
245
- ### 输出
246
- 需求澄清结论摘要 + D-xxx@vN 决策记录草稿 + 剩余风险(如有)`,
247
- outputHint: '需求澄清和决策记录草稿',
248
- optional: true
249
- },
250
149
  {
251
150
  name: '提出 2-3 种方案',
252
- requiresWait: true,
253
- waitReason: '等待用户选择方案',
254
- waitOptions: ['方案A', '方案B', '方案C'],
255
- prompt: `基于需求理解和 Grill 结果,提出 2-3 种实现方案。
151
+ prompt: `基于需求理解,提出 2-3 种实现方案。
256
152
 
257
153
  ### 操作
258
154
  1. 每种方案列出:核心思路、优势、劣势
259
- 2. 如果 Grill 产生 D-xxx@vN 决策记录,方案必须说明覆盖/违反哪些当前版本决策
260
- 3. 给出推荐方案和理由
261
-
262
- ### 铁律 — 必须等待用户选择方案
263
- - **不要替用户选择方案。** 列出方案对比表和推荐后,必须暂停等待用户选择。
264
- - 列出方案后,调用:
265
- \`sillyspec run brainstorm --wait --reason "等待用户选择方案" --options "方案A,方案B,方案C" --output "方案对比摘要"\`
266
- - **绝对禁止**:在输出中自己说"推荐方案 A"然后当用户选了
155
+ 2. 给出推荐方案和理由
156
+ 3. 等待用户选择或调整
267
157
 
268
158
  ### 输出
269
159
  方案对比表 + 推荐方案
@@ -276,137 +166,38 @@ export const definition = {
276
166
  },
277
167
  {
278
168
  name: '分段展示设计',
279
- requiresWait: true,
280
- waitReason: '等待用户确认设计方案',
281
- waitOptions: ['确认', '需要修改', '推翻重来'],
282
- prompt: `展示完整设计方案供用户确认。
169
+ prompt: `按复杂度分段展示设计方案,逐段确认。
283
170
 
284
171
  ### 操作
285
172
  1. 简单项目:几句话整体描述
286
- 2. 复杂项目:按模块/Phase 分段展示,每段 200-300
287
- 3. 展示完整设计方案(不要逐段停顿,一次性展示)
288
- 4. 确认变更名(格式:\`YYYY-MM-DD-<简短描述>\`,例如 \`2026-05-13-user-auth\`)
289
- 5. 暂停等待用户确认或修改意见
290
-
291
- ### 铁律 — 必须等待用户确认设计
292
- - **不要替用户确认设计。** 展示完整设计方案后,必须暂停等待用户确认。
293
- - 列出设计后,调用:
294
- \`sillyspec run brainstorm --wait --reason "等待用户确认设计方案" --options "确认,需要修改,推翻重来" --output "设计方案摘要"\`
295
- - **绝对禁止**:在输出中自己说"设计已充分确认"然后推进
173
+ 2. 复杂项目:每段 200-300 字,逐段展示
174
+ 3. 每段展示后等待用户确认
175
+ 4. 收集修改意见,调整设计
296
176
 
297
177
  ### 输出
298
- 完整设计方案 + 变更名
178
+ 用户确认的完整设计方案
299
179
 
300
180
  ### 注意
301
- - 不要一次输出大段文字,按模块/Phase 分段
302
- - 变更名必须以当天日期开头(YYYY-MM-DD-),后跟英文短横线分隔的简短描述`,
181
+ - 不要一次输出大段文字
182
+ - 逐段确认,确保用户跟上`,
303
183
  outputHint: '用户确认的设计方案',
304
184
  optional: false
305
185
  },
306
- {
307
- name: 'HTML 原型生成',
308
- prompt: `为设计方案生成可交互的 HTML 原型,帮助用户可视化确认。
309
-
310
- ### 操作
311
- 1. 判断本次设计是否适合生成 HTML 原型:
312
- - 适合:有 UI 组件/布局/交互流程/状态转换/架构图
313
- - 不适合:纯后端逻辑/配置修改/无可视化意义
314
- 2. 如果适合,生成一个独立的 HTML 文件(内联 CSS + JS),保存到:
315
- \`.sillyspec/changes/<change-name>/prototype-<名称>.html\`(变更名格式:YYYY-MM-DD-<简短描述>)
316
- 3. 原型要求:
317
- - 单文件,浏览器直接打开
318
- - 展示关键布局结构和交互流程
319
- - 不需要完整功能,重点是让用户确认设计方向
320
- - 使用 ASCII/流程图/线框图风格,不需要精美 UI
321
- 4. 展示给用户确认设计方向
322
-
323
- ### 输出
324
- HTML 原型文件路径(或"跳过"如果不适合)`,
325
- outputHint: '原型文件路径或跳过',
326
- optional: true
327
- },
328
186
  {
329
187
  name: '写设计文档并自审',
330
188
  prompt: `撰写 design 文档并进行 AI 自审。
331
189
 
332
- ### design.md 必须包含的章节
333
- 1. **背景**:为什么做、解决什么问题
334
- 2. **设计目标**:要达成什么
335
- 3. **非目标**:明确不做的事(防止 scope creep)
336
- 4. **拆分判断**(如适用):为什么这样组织变更、为什么不走批量模式
337
- 5. **总体方案**:技术方案(分 Phase/Wave)
338
- 6. **文件变更清单**(必填):
339
-
340
- | 操作 | 文件路径 | 说明 |
341
- |---|---|---|
342
- | 新增 | src/xxx/NewFile.java | ... |
343
- | 修改 | src/xxx/ExistingFile.java | 新增 xx 方法 |
344
- | 删除 | src/xxx/OldFile.java | 已被 xx 替代 |
345
-
346
- 7. **接口定义**:方法签名、数据结构(代码类任务必填)
347
- 7.5. **生命周期契约表**(涉及以下关键词时必填,否则可省略):
348
-
349
- 如果本次变更涉及以下任何关键词:
350
- session / lease / agent_run / daemon / lifecycle / state transition / complete / end / claim / heartbeat
351
-
352
- 则必须在 design.md 中包含「生命周期契约表」章节,格式如下:
353
-
354
- | 事件 | 发起方 | 接收方 | 必需字段 | 状态变化 |
355
- |---|---|---|---|---|
356
- | claim lease | daemon | backend | leaseId, claimToken, agentRunId | pending → running |
357
- | create session | backend | daemon | sessionId, leaseId, claimToken | session active |
358
- | submit message | daemon | backend | leaseId, claimToken, agentRunId | append messages |
359
- | turn result | daemon | backend | runId, status, output | running → completed/failed |
360
- | session end | daemon | backend | sessionId, reason | active → ended |
361
-
362
- 判断规则:
363
- - design.md 或需求中出现上述关键词 → 必须生成此表
364
- - 表中的每个事件 → 必须有对应代码任务、接口任务、测试任务
365
- - 表中的必需字段 → 必须出现在相关 DTO/interface 定义中
366
- - 缺少任一事件 → 在 design.md 风险登记中明确记录
367
-
368
- **判定方法**:在自审阶段,如果检测到上述关键词但 design.md 中没有此表 → 自审不通过
369
- 8. **数据模型**(如涉及):表结构/字段变更
370
- 9. **兼容策略**(brownfield 必填):
371
- - 未配置新功能时行为不变
372
- - 新旧逻辑的回退路径
373
- - 不改变的 API / 表结构
374
- 10. **风险登记**:
375
-
376
- | 编号 | 风险 | 等级 | 应对策略 |
377
- |---|---|---|---|
378
- | R-01 | ... | P0/P1/P2 | ... |
379
-
380
- 11. **决策追踪**(如存在 Grill/重大决策):
381
- - 列出当前版本 D-xxx@vN 决策 ID
382
- - 说明每个 D-xxx@vN 被哪些 FR-xxx / 设计章节覆盖
383
- - 标注仍未解决的 D-xxx@vN 或剩余风险
384
- 12. **自审**(AI 对自身设计的校验)
385
-
386
190
  ### 操作
387
- 1. 确认变更目录存在:\`mkdir -p .sillyspec/changes/<change-name>\`(Windows 用 \`mkdir .sillyspec\\changes\\<变更名>\` 或 PowerShell \`New-Item -ItemType Directory -Force -Path .sillyspec/changes/<change-name>\`)
388
- - 变更名格式必须为 \`YYYY-MM-DD-<简短描述>\`(如 \`2026-05-13-user-auth\`)
389
- 2. 将确认的设计写入 \`.sillyspec/changes/<change-name>/design.md\`
390
- 3. 如果 Grill 或方案讨论产生了实现相关决策,写入 \`.sillyspec/changes/<change-name>/decisions.md\`:
391
- - decisions.md 是本次变更的决策台账,不是长期术语表
392
- - 只记录有实现/验收影响的决策,闲聊和低风险偏好不记录
393
- - 每条记录必须有稳定版本 ID:D-001@v1、D-002@v1 ...
394
- - 若后续 Design Grill 修正该决策,新记录使用 D-001@v2,并写明 supersedes: D-001@v1
395
- - 每条记录必须包含:type、status、source、question、answer、normalized_requirement、impacts、evidence、priority
396
- - 长期术语只在 archive/scan 时再提升到 \`.sillyspec/docs/<project>/glossary.md\`
397
- 4. 自审检查:
398
- - 需求覆盖:是否完整覆盖对话式探索中确认的需求
399
- - Grill 覆盖:如果存在 decisions.md,design.md 是否引用所有当前版本 D-xxx@vN
191
+ 1. 确认变更目录存在:\`mkdir -p .sillyspec/changes/<变更名>\`(Windows 用 \`mkdir .sillyspec\\changes\\<变更名>\` 或 PowerShell \`New-Item -ItemType Directory -Force -Path .sillyspec/changes/<变更名>\`)
192
+ 2. 将确认的设计写入 \`.sillyspec/changes/<变更名>/design.md\`
193
+ 3. 自审检查:
194
+ - 需求覆盖:是否完整覆盖 Step 6 确认的需求
400
195
  - 约束一致性:是否与 CONVENTIONS.md、ARCHITECTURE.md 一致
401
- - 真实性:表名/字段名/类名/方法名来自真实代码或标注"新增"
196
+ - 真实性:表名/字段名来自真实 schema 或标注"新增"
402
197
  - YAGNI:是否包含不必要功能
403
198
  - 验收标准:是否具体可测试
404
- - 非目标清晰:是否明确界定了不做的事
405
- - 兼容策略(brownfield):是否说明了回退路径
406
- - 风险识别:是否识别了关键技术风险和对策
407
- - **生命周期契约表**(如涉及 session/lease/agent_run/daemon/lifecycle/claim/heartbeat 等关键词):design.md 是否包含完整的生命周期契约表?每个事件是否有必需字段定义?字段是否出现在 DTO/interface 中?
408
- 5. 自审发现问题 → 修改后重新检查
409
- 6. 全部通过 → 进入下一步
199
+ 3. 自审发现问题 → 修改后重新检查
200
+ 4. 全部通过 → 进入下一步
410
201
 
411
202
  ### 输出
412
203
  design.md 文件路径 + 自审结果
@@ -414,232 +205,35 @@ design.md 文件路径 + 自审结果
414
205
  ### 注意
415
206
  - 自审不通过不要进入下一步
416
207
  - 不确定的问题标注「⚠️ 自审存疑」`,
417
- outputHint: 'design.md 文件路径 + 自审结果',
418
- optional: false
419
- },
420
- {
421
- name: 'Design Grill 交叉审查',
422
- conditionalWait: true,
423
- waitReason: '等待用户处理 Design Grill 发现的结构性问题',
424
- waitOptions: ['按推荐修正', '补充回答', '显式跳过'],
425
- prompt: `默认执行 Design Grill,对已经写出的 design.md 做交叉审查。
426
-
427
- ### 定位
428
- 这是设计完成后的质量门,不是需求探索。目标不是继续发散,而是找出 design.md 内部、四件套之间、文档与外部约束之间的结构性矛盾。
429
-
430
- ### 默认行为
431
- 1. 默认必须执行一次交叉审查;不要让用户凭主观判断决定"要不要 Grill"。
432
- 2. 只有以下情况可以轻量跳过,并必须记录原因:
433
- - 用户明确要求 no-grill / 显式跳过
434
- - 文档是一页以内、单模块、无状态流转、无 schema/API/兼容策略变更
435
- - plan_level 明确为 none,且只改 1-2 个文件
436
- 3. 即使跳过,也要输出"Design Grill skipped"和原因,不能静默跳过。
437
-
438
- ### 输入材料
439
- 1. 必须读取完整 \`.sillyspec/changes/<change-name>/design.md\`
440
- 2. 读取 proposal.md、requirements.md、tasks.md、decisions.md(如存在)
441
- 3. 读取 scan/module docs:
442
- - \`.sillyspec/docs/<project>/scan/ARCHITECTURE.md\`
443
- - \`.sillyspec/docs/<project>/scan/CONVENTIONS.md\`
444
- - \`.sillyspec/docs/<project>/modules/_module-map.yaml\`
445
- - 命中的模块文档
446
- 4. 按 design.md 文件变更清单读取相关源码、测试、配置、schema 或样例数据;矛盾经常藏在设计与外部约束交叉处,素材宁可多读,不要只读摘要。
447
-
448
- ### 交叉审查模型
449
- 按三层检查并输出 cross-check matrix:
450
- 1. **定义层**:模糊概念是否有可测试定义。例如"高可用""异常数据""本地缓存""重试"。
451
- 2. **一致性层**:跨章节/跨产物是否打架。例如数据流 vs 容错策略、schema vs 输入格式、非目标 vs tasks。
452
- 3. **可行性层**:关键假设是否有来源。例如 P99 延迟、上游 SLA、缓存 TTL、数据量、权限模型、兼容旧配置。
453
-
454
- ### 交叉点抽取
455
- 重点找这些交叉点:
456
- - 模块 A 依赖模块 B 的实体/状态/接口
457
- - requirements.md 的 FR 与 design.md 的数据模型/API/状态机
458
- - design.md 的容错策略与数据流、缓存、重试、回滚
459
- - tasks.md 的执行范围与 design.md 的非目标
460
- - decisions.md 的 D-xxx@vN 与 design.md 当前说法
461
- - scan/module docs 或源码中的真实约束与 design.md 假设
462
-
463
- ### 问答处理
464
- 1. 先自动交叉审查,不要一上来问用户。
465
- 2. 没有结构性问题:正常完成,输出"Design Grill passed",附 cross-check matrix。
466
- 3. 发现问题:
467
- - 对能从代码/文档确定的问题,直接给出推荐修正。
468
- - 对需要业务判断的问题,每次只问一个最关键问题,然后等待用户。
469
- - P0/P1 未决项必须进入 Unresolved Blockers,不能带着进入 plan。
470
- 4. 用户回答后,更新 design.md 和 decisions.md;如果推翻旧决策,新增版本 D-xxx@v2,而不是覆盖 D-xxx@v1。
471
-
472
- ### decisions.md 版本规则
473
- \`\`\`markdown
474
- ## D-001@v2: 缓存异常时的 fallback 语义
475
- - type: definition | consistency | feasibility | boundary | architecture | compatibility | risk
476
- - priority: P0 | P1 | P2
477
- - status: accepted | unresolved | rejected | superseded
478
- - supersedes: D-001@v1
479
- - source: design-grill
480
- - question: §3 数据流与 §7 容错策略冲突时以哪个为准?
481
- - answer: 采用 §7 的重试语义,缓存只作为只读 fallback。
482
- - normalized_requirement: TTL 过期且上游仍异常时返回 stale 标记,不刷新缓存。
483
- - impacts: [FR-02, task-03, verify-02]
484
- - evidence: design.md §3/§7, src/cache/...
485
- \`\`\`
486
-
487
- ### 输出格式
488
- \`\`\`markdown
489
- ## Design Grill Result
490
- status: passed | needs-user-input | blocked | skipped
491
-
492
- ## Cross-Check Matrix
493
- | ID | 层级 | 交叉点 | 证据 A | 证据 B | 结论 | 决策 |
494
- |---|---|---|---|---|---|---|
495
- | X-001 | consistency | 数据流 vs 容错 | design §3 | design §7 | conflict | D-001@v2 |
496
-
497
- ## Question Distribution
498
- | 分类 | 数量 | 含义 |
499
- |---|---|---|
500
- | immediately_answered | N | 心里清楚但文档缺失 |
501
- | needs_thinking | N | 需要用户判断 |
502
- | unresolved | N | 真正设计漏洞 |
503
-
504
- ## Unresolved Blockers
505
- | ID | priority | 问题 | 阻塞原因 | 下一步 |
506
- |---|---|---|---|---|
507
- \`\`\`
508
-
509
- ### 铁律 — 等待用户
510
- - 发现 P0/P1 结构性矛盾且需要用户判断时,调用:
511
- \`sillyspec run brainstorm --wait --reason "等待用户处理 Design Grill 发现的结构性问题" --options "按推荐修正,补充回答,显式跳过" --output "Design Grill 问题摘要"\`
512
- - 用户显式跳过时,必须在 decisions.md 记录 accepted risk;P0/P1 skip 仍必须写入 Unresolved Blockers。
513
- - 完成前必须确认:没有 P0/P1 unresolved blocker;否则不能进入 plan。`,
514
- outputHint: 'Design Grill 交叉审查结果',
208
+ outputHint: 'design.md 路径 + 自审结果',
515
209
  optional: false
516
210
  },
517
211
  {
518
212
  name: '用户确认并生成规范文件',
519
- requiresWait: true,
520
- waitReason: '等待用户最终确认设计方案',
521
- waitOptions: ['确认', '需要修改', '推翻重来'],
522
213
  prompt: `用户确认设计方案,生成规范文件。
523
214
 
524
215
  ### 操作
525
216
  1. 展示 design.md 摘要给用户
526
- 2. 暂停等待用户选择:✅ 确认 / ✏️ 修改 / ❌ 推翻重来
527
- 3. 确认后,在 \`.sillyspec/changes/<change-name>/\` 下生成所有规范文件:
528
- - **design.md**:架构决策、文件变更清单、数据模型、API 设计、兼容策略、风险登记、自审
529
- - **decisions.md**(可选):Grill/重大决策台账,使用 D-001@v1 稳定版本 ID
530
- - **proposal.md**:动机、关键问题(为什么现有方案不够)、变更范围、不在范围内(显式清单)、成功标准(可验证条件)
531
- - **requirements.md**:角色表 + FR 编号需求 + Given/When/Then 行为规格 + 非功能需求 + D-xxx@vN 覆盖关系
532
- - **tasks.md**:任务列表(只列名称、对应文件路径、覆盖的 FR-xxx/D-xxx@vN,细节在 plan 阶段展开)
533
- - \`git add .sillyspec/\` — 暂存规范文件(不要 commit)
534
-
535
- 所有规范文件头部必须包含 YAML frontmatter:
536
- \`\`\`\`yaml
537
- ---
538
- author: <git-user>
539
- created_at: <now-datetime>
540
- ---
541
- \`\`\`\`
542
-
543
- ### proposal.md 格式要求
544
- \`\`\`markdown
545
- # Proposal
546
-
547
- ## 动机
548
- 为什么做、解决什么核心问题
549
-
550
- ## 关键问题
551
- 为什么现有方案不够(展开 2-3 个具体痛点)
552
-
553
- ## 变更范围
554
- 本次做什么
555
-
556
- ## 不在范围内(显式清单)
557
- - 不做 X
558
- - 不做 Y
559
-
560
- ## 成功标准(可验证)
561
- - 旧配置默认行为不变
562
- - 新功能在配置后可用
563
- - ...
564
- \`\`\`
565
-
566
- ### requirements.md 格式要求
567
- \`\`\`markdown
568
- # Requirements
569
-
570
- ## 角色
571
- | 角色 | 说明 |
572
- |---|---|
573
- | 开发者 | ... |
574
-
575
- ## 功能需求
576
-
577
- ### FR-01: 需求名称
578
- 覆盖决策:D-001@v1, D-002@v1(如适用)
579
- Given 前提条件
580
- When 触发动作
581
- Then 期望结果
582
-
583
- (每个边界条件独立 GWT 块)
584
-
585
- ## 非功能需求
586
- - 兼容性:...
587
- - 可回退:...
588
- - 可测试:...
589
-
590
- ## 决策覆盖矩阵(如存在 decisions.md)
591
- | 决策 ID | 覆盖的 FR | 说明 |
592
- |---|---|---|
593
- | D-001@v1 | FR-01 | ... |
594
- \`\`\`
595
-
596
- ### decisions.md 格式要求(仅在有 Grill/重大决策时生成)
597
- \`\`\`markdown
598
- # Decisions
599
-
600
- ## D-001@v1: 决策短标题
601
- - type: definition | consistency | feasibility | term | boundary | premise | architecture | compatibility | risk
602
- - priority: P0 | P1 | P2
603
- - status: accepted | unresolved | rejected | superseded
604
- - supersedes:
605
- - source: user | code | docs
606
- - question: 被解决的问题
607
- - answer: 用户确认或代码查证结果
608
- - normalized_requirement: 可测试的约束
609
- - impacts: [FR-01, task-01, verify-01]
610
- - evidence: 用户回答轮次或代码/文档路径
611
- \`\`\`
612
-
613
- ### 后续变更包处理
614
- 如果 MASTER.md 中规划了后续变更包(拆分后的子阶段),**必须同时为每个后续包创建独立变更目录**:
615
- 1. 读取 MASTER.md 中的变更包列表(包名 + 边界描述)
616
- 2. 为每个后续包创建目录:\`mkdir -p .sillyspec/changes/<后续包名>\`
617
- 3. 每个目录生成骨架文件:
618
- - \`proposal.md\`:从 MASTER.md 中提取该包的动机和边界
619
- - \`design.md\`:从 MASTER.md 中提取该包的职责描述(标记为「待设计 - 本包 design 在该包进入 brainstorm 时完善」)
620
- - \`requirements.md\`:从 MASTER.md 中提取该包的需求范围(标记为「待完善」)
621
- - \`tasks.md\`:创建空任务列表,标记为「待 plan 阶段展开」
622
- 4. \`git add .sillyspec/\` — 暂存所有新增文件(不要 commit)
623
- 5. 后续变更包的骨架文件同样必须包含 \`author: <git-user>\` 和 \`created_at: <now-datetime>\`
624
-
625
- ### 铁律 — 必须等待用户最终确认
626
- - **展示 design.md 摘要后,暂停等待用户确认。** 不要替用户确认。
627
- - 调用:\`sillyspec run brainstorm --wait --reason "等待用户确认设计方案" --options "确认,需要修改,推翻重来" --output "design.md 摘要"\`
628
- - **绝对禁止**:在输出中自己说"用户已确认"然后生成文件
629
- - **只有用户通过 --continue --answer "确认" 后才生成规范文件**
217
+ 2. 请用户选择:✅ 确认 / ✏️ 修改 / ❌ 推翻重来
218
+ 3. 确认后,在 \`.sillyspec/changes/<变更名>/\` 下生成所有规范文件:
219
+ - **design.md**:架构决策、文件变更清单、数据模型、API 设计、代码风格参照
220
+ - **proposal.md**:动机、变更范围、不在范围内、成功标准
221
+ - **requirements.md**:功能需求、用户场景(Given/When/Then 格式)、非功能需求
222
+ - **tasks.md**:任务列表(只列名称和对应文件路径,细节在 plan 阶段展开)
223
+ - \`git add .sillyspec/\` **不要 commit**
630
224
 
631
225
  ### 输出
632
- 所有规范文件路径(含后续变更包目录列表)
226
+ 所有规范文件路径
633
227
 
634
228
  ### 注意
229
+ - 必须等待用户明确确认
635
230
  - 禁止在确认前推进到后续阶段
636
231
  - 禁止自动 commit
637
- - 推翻重来回到 Step 6(对话式探索)
638
- - 表名/字段名/类名必须来自真实代码或标注"新增"
639
- - 如果存在 decisions.md,requirements.md 必须引用全部当前版本 D-xxx@vN;没有覆盖的 D-xxx@vN 必须标注为剩余风险
640
- - 如果 Design Grill 产生 P0/P1 unresolved blocker,必须回到 design 修正,不能进入 plan
232
+ - 推翻重来回到 Step 6
233
+ - 表名/字段名必须来自真实 schema 或标注"新增"
641
234
  - tasks.md 只列任务名,细节在 plan 阶段展开`,
642
-
235
+ outputHint: '规范文件路径',
236
+ optional: false
643
237
  }
644
238
  ]
645
239
  }