sillyspec 3.20.3 → 3.20.4

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 (224) hide show
  1. package/.claude/skills/sillyspec-archive/SKILL.md +21 -17
  2. package/.claude/skills/sillyspec-auto/SKILL.md +83 -77
  3. package/.claude/skills/sillyspec-brainstorm/SKILL.md +44 -17
  4. package/.claude/skills/sillyspec-commit/SKILL.md +106 -105
  5. package/.claude/skills/sillyspec-continue/SKILL.md +45 -44
  6. package/.claude/skills/sillyspec-doctor/SKILL.md +31 -22
  7. package/.claude/skills/sillyspec-execute/SKILL.md +30 -17
  8. package/.claude/skills/sillyspec-explore/SKILL.md +109 -96
  9. package/.claude/skills/sillyspec-knowledge/SKILL.md +270 -0
  10. package/.claude/skills/sillyspec-plan/SKILL.md +21 -52
  11. package/.claude/skills/sillyspec-propose/SKILL.md +21 -17
  12. package/.claude/skills/sillyspec-quick/SKILL.md +21 -17
  13. package/.claude/skills/sillyspec-resume/SKILL.md +68 -111
  14. package/.claude/skills/sillyspec-scan/SKILL.md +21 -17
  15. package/.claude/skills/sillyspec-state/SKILL.md +54 -54
  16. package/.claude/skills/sillyspec-status/SKILL.md +21 -17
  17. package/.claude/skills/sillyspec-verify/SKILL.md +21 -17
  18. package/.claude/skills/sillyspec-workspace/SKILL.md +157 -149
  19. package/.husky/pre-push +13 -0
  20. package/CLAUDE.md +18 -0
  21. package/README.md +198 -186
  22. package/SKILL.md +90 -87
  23. package/bin/sillyspec.js +2 -2
  24. package/docs/brainstorm-plan-contract.md +64 -0
  25. package/docs/plan-execute-contract.md +123 -0
  26. package/docs/platform-scan-protocol.md +298 -0
  27. package/docs/revision-mode.md +115 -0
  28. package/docs/sillyspec/file-lifecycle/known-implementation-gaps.md +99 -0
  29. package/docs/sillyspec/file-lifecycle/platform-workflows-sync.md +218 -0
  30. package/docs/sillyspec/file-lifecycle/stage-artifacts.md +167 -0
  31. package/docs/sillyspec/file-lifecycle/storage-and-state.md +148 -0
  32. package/docs/sillyspec/file-lifecycle/worktree-and-guard.md +211 -0
  33. package/docs/sillyspec/file-lifecycle.md +125 -0
  34. package/docs/workflow-contract-regression.md +106 -0
  35. package/docs/worktree-isolation.md +252 -0
  36. package/package.json +40 -34
  37. package/packages/dashboard/dist/assets/{index-D1EVTLmc.js → index-Bq_Z2hne.js} +7446 -7446
  38. package/packages/dashboard/dist/assets/index-O2W5RV4z.css +1 -0
  39. package/packages/dashboard/dist/index.html +16 -16
  40. package/packages/dashboard/dist/prototype-dashboard.html +836 -0
  41. package/packages/dashboard/dist/prototype-overview.html +256 -0
  42. package/packages/dashboard/index.html +15 -15
  43. package/packages/dashboard/package-lock.json +2384 -2384
  44. package/packages/dashboard/package.json +25 -25
  45. package/packages/dashboard/public/prototype-dashboard.html +836 -0
  46. package/packages/dashboard/public/prototype-overview.html +256 -0
  47. package/packages/dashboard/server/executor.js +86 -86
  48. package/packages/dashboard/server/index.js +588 -508
  49. package/packages/dashboard/server/parser.js +526 -458
  50. package/packages/dashboard/server/watcher.js +350 -342
  51. package/packages/dashboard/src/App.vue +558 -325
  52. package/packages/dashboard/src/components/ActionBar.vue +93 -84
  53. package/packages/dashboard/src/components/CommandPalette.vue +96 -92
  54. package/packages/dashboard/src/components/DetailPanel.vue +137 -137
  55. package/packages/dashboard/src/components/DocPreview.vue +105 -8
  56. package/packages/dashboard/src/components/DocTree.vue +75 -19
  57. package/packages/dashboard/src/components/HResizeHandle.vue +48 -0
  58. package/packages/dashboard/src/components/LogStream.vue +65 -65
  59. package/packages/dashboard/src/components/PipelineStage.vue +95 -75
  60. package/packages/dashboard/src/components/PipelineView.vue +156 -129
  61. package/packages/dashboard/src/components/ProjectCard.vue +187 -0
  62. package/packages/dashboard/src/components/ProjectList.vue +210 -210
  63. package/packages/dashboard/src/components/ProjectOverview.vue +113 -139
  64. package/packages/dashboard/src/components/StageBadge.vue +67 -53
  65. package/packages/dashboard/src/components/StepCard.vue +94 -89
  66. package/packages/dashboard/src/components/VResizeHandle.vue +61 -0
  67. package/packages/dashboard/src/components/detail/DocsDetail.vue +48 -48
  68. package/packages/dashboard/src/components/detail/GitDetail.vue +61 -61
  69. package/packages/dashboard/src/components/detail/TechDetail.vue +43 -43
  70. package/packages/dashboard/src/composables/useDashboard.js +192 -164
  71. package/packages/dashboard/src/composables/useKeyboard.js +119 -119
  72. package/packages/dashboard/src/composables/useLayout.js +131 -0
  73. package/packages/dashboard/src/composables/useWebSocket.js +129 -129
  74. package/packages/dashboard/src/main.js +8 -8
  75. package/packages/dashboard/src/style.css +132 -132
  76. package/packages/dashboard/vite.config.js +18 -18
  77. package/src/brainstorm-postcheck.js +158 -0
  78. package/src/change-list.js +52 -0
  79. package/src/change-risk-profile.js +352 -0
  80. package/src/classify-change.js +73 -0
  81. package/src/constants.js +70 -0
  82. package/src/contract-matrix.js +278 -0
  83. package/src/db.js +201 -0
  84. package/src/endpoint-extractor.js +315 -0
  85. package/src/hooks/claude-pre-tool-use.cjs +125 -0
  86. package/src/hooks/worktree-guard.js +761 -0
  87. package/src/index.js +922 -252
  88. package/src/init.js +431 -375
  89. package/src/knowledge-match.js +130 -0
  90. package/src/migrate.js +117 -117
  91. package/src/modules.js +482 -0
  92. package/src/progress.js +1734 -508
  93. package/src/run.js +3465 -652
  94. package/src/scan-postcheck.js +387 -0
  95. package/src/setup.js +398 -460
  96. package/src/stage-contract.js +700 -0
  97. package/src/stages/archive.js +160 -54
  98. package/src/stages/brainstorm-auto.js +229 -0
  99. package/src/stages/brainstorm.js +645 -239
  100. package/src/stages/doctor.js +365 -312
  101. package/src/stages/execute.js +625 -264
  102. package/src/stages/explore.js +34 -0
  103. package/src/stages/index.js +29 -35
  104. package/src/stages/knowledge.js +498 -0
  105. package/src/stages/plan-postcheck.js +511 -0
  106. package/src/stages/plan.js +582 -279
  107. package/src/stages/propose.js +174 -115
  108. package/src/stages/quick.js +102 -63
  109. package/src/stages/scan.js +558 -141
  110. package/src/stages/status.js +65 -65
  111. package/src/stages/verify.js +322 -135
  112. package/src/sync.js +497 -0
  113. package/src/task-review.js +346 -0
  114. package/src/workflow.js +785 -0
  115. package/src/worktree-apply.js +549 -0
  116. package/src/worktree-deps.js +185 -0
  117. package/src/worktree.js +982 -0
  118. package/templates/workflows/archive-impact.yaml +79 -0
  119. package/templates/workflows/scan-docs.yaml +132 -0
  120. package/test/brainstorm-plan-contract.test.mjs +273 -0
  121. package/test/check-syntax.mjs +26 -0
  122. package/test/cli-top-level-aliases.test.mjs +174 -0
  123. package/test/contract-artifacts.test.mjs +323 -0
  124. package/test/decision-supersede.test.mjs +277 -0
  125. package/test/knowledge-match.test.mjs +231 -0
  126. package/test/plan-execute-contract.test.mjs +330 -0
  127. package/test/plan-optimization.test.mjs +572 -0
  128. package/test/platform-artifacts.test.mjs +190 -0
  129. package/test/platform-failure-samples.test.mjs +199 -0
  130. package/test/platform-recovery-chain.test.mjs +179 -0
  131. package/test/platform-recovery.test.mjs +167 -0
  132. package/test/platform-scan-p0.test.mjs +175 -0
  133. package/test/revision-v1.test.mjs +1145 -0
  134. package/test/run-sanitize-project-name.test.mjs +51 -0
  135. package/test/run-scan-postcheck-fail.test.mjs +64 -0
  136. package/test/run-scan-project-parse.test.mjs +200 -0
  137. package/test/run-tests.mjs +48 -0
  138. package/test/scan-docs-yaml-placeholders.test.mjs +84 -0
  139. package/test/scan-knowledge.test.mjs +175 -0
  140. package/test/scan-paths.test.mjs +68 -0
  141. package/test/scan-postcheck-project-priority.test.mjs +85 -0
  142. package/test/scan-postcheck.test.mjs +197 -0
  143. package/test/scan-workflow-anyfailed-block.test.mjs +52 -0
  144. package/test/spec-dir.test.mjs +206 -0
  145. package/test/stage-contract-failed-post-check.test.mjs +102 -0
  146. package/test/stage-contract.test.mjs +299 -0
  147. package/test/stage-definitions.test.mjs +39 -0
  148. package/test/wait-gates.test.mjs +501 -0
  149. package/test/workflow-spec-base.test.mjs +142 -0
  150. package/test/worktree-deps-provision.test.mjs +148 -0
  151. package/test/worktree-guard.test.mjs +136 -0
  152. package/test/worktree-native-overlay.test.mjs +188 -0
  153. package/.sillyspec/changes/archive/2026-04-08-derive-state/design.md +0 -97
  154. package/.sillyspec/changes/archive/2026-04-08-derive-state/plan.md +0 -51
  155. package/.sillyspec/changes/archive/2026-04-08-derive-state/proposal.md +0 -29
  156. package/.sillyspec/changes/archive/2026-04-08-derive-state/requirements.md +0 -34
  157. package/.sillyspec/changes/archive/2026-04-08-derive-state/tasks.md +0 -13
  158. package/.sillyspec/changes/archive/2026-04-08-derive-state/verify-result.md +0 -43
  159. package/.sillyspec/changes/auto-mode/design.md +0 -50
  160. package/.sillyspec/changes/auto-mode/proposal.md +0 -19
  161. package/.sillyspec/changes/auto-mode/requirements.md +0 -21
  162. package/.sillyspec/changes/auto-mode/tasks.md +0 -7
  163. package/.sillyspec/changes/brainstorm-archive/2026-04-05-dashboard-design.md +0 -206
  164. package/.sillyspec/changes/brainstorm-archive/2026-04-05-unified-docs-design.md +0 -199
  165. package/.sillyspec/changes/dashboard/design.md +0 -219
  166. package/.sillyspec/changes/dashboard/design.md.braindraft +0 -206
  167. package/.sillyspec/changes/run-command-design/design.md +0 -1230
  168. package/.sillyspec/changes/unified-docs-design/design.md +0 -199
  169. package/.sillyspec/docs/sillyspec/scan/.gitkeep +0 -0
  170. package/.sillyspec/knowledge/INDEX.md +0 -8
  171. package/.sillyspec/knowledge/uncategorized.md +0 -3
  172. package/.sillyspec/plans/2026-04-05-dashboard.md +0 -737
  173. package/.sillyspec/projects/sillyspec.yaml +0 -3
  174. package/dist/steps/brainstorm/01-load-context.md +0 -30
  175. package/dist/steps/brainstorm/02-reuse-check.md +0 -6
  176. package/dist/steps/brainstorm/03-prototype-analysis.md +0 -11
  177. package/dist/steps/brainstorm/04-module-split.md +0 -23
  178. package/dist/steps/brainstorm/05-dialog-explore.md +0 -8
  179. package/dist/steps/brainstorm/06-propose-approaches.md +0 -3
  180. package/dist/steps/brainstorm/07-present-design.md +0 -3
  181. package/dist/steps/brainstorm/08-write-design.md +0 -21
  182. package/dist/steps/brainstorm/09-self-review.md +0 -15
  183. package/dist/steps/brainstorm/10-user-confirm.md +0 -3
  184. package/dist/steps/brainstorm/11-output-spec.md +0 -7
  185. package/dist/steps/brainstorm/manifest.yaml +0 -26
  186. package/dist/steps/execute/01-load-context.md +0 -41
  187. package/dist/steps/execute/02-scan-conventions.md +0 -47
  188. package/dist/steps/execute/03-skill-mcp.md +0 -19
  189. package/dist/steps/execute/04-assign-task.md +0 -22
  190. package/dist/steps/execute/04b-prompt-template.md +0 -54
  191. package/dist/steps/execute/05-write-test.md +0 -7
  192. package/dist/steps/execute/06-write-code.md +0 -8
  193. package/dist/steps/execute/07-run-test.md +0 -26
  194. package/dist/steps/execute/08-fix-issues.md +0 -28
  195. package/dist/steps/execute/09-next-task.md +0 -33
  196. package/dist/steps/execute/manifest.yaml +0 -28
  197. package/dist/steps/plan/01-load-context.md +0 -22
  198. package/dist/steps/plan/02-anchor-confirm.md +0 -1
  199. package/dist/steps/plan/03-expand-tasks.md +0 -33
  200. package/dist/steps/plan/04-mark-order.md +0 -15
  201. package/dist/steps/plan/05-e2e-planning.md +0 -17
  202. package/dist/steps/plan/06-self-check.md +0 -16
  203. package/dist/steps/plan/07-save.md +0 -1
  204. package/dist/steps/plan/manifest.yaml +0 -18
  205. package/dist/steps/scan/01-env-detect.md +0 -51
  206. package/dist/steps/scan/02-tech-stack.md +0 -16
  207. package/dist/steps/scan/03-conventions.md +0 -16
  208. package/dist/steps/scan/04-structure.md +0 -19
  209. package/dist/steps/scan/05-quality.md +0 -18
  210. package/dist/steps/scan/06-complete.md +0 -49
  211. package/dist/steps/scan/manifest.yaml +0 -16
  212. package/dist/steps/verify/01-load-specs.md +0 -28
  213. package/dist/steps/verify/02-check-tasks.md +0 -1
  214. package/dist/steps/verify/03-check-design.md +0 -6
  215. package/dist/steps/verify/04-run-tests.md +0 -7
  216. package/dist/steps/verify/05-e2e-tests.md +0 -27
  217. package/dist/steps/verify/05b-e2e-fix.md +0 -33
  218. package/dist/steps/verify/06-code-quality.md +0 -25
  219. package/dist/steps/verify/07-lint-check.md +0 -27
  220. package/dist/steps/verify/08-output-report.md +0 -14
  221. package/dist/steps/verify/manifest.yaml +0 -22
  222. package/packages/dashboard/dist/assets/index-DGe8CqeP.css +0 -1
  223. package/src/derive.js +0 -147
  224. package/src/step.js +0 -543
@@ -1,54 +1,160 @@
1
- export const definition = {
2
- name: 'archive',
3
- title: '归档变更',
4
- description: '规范沉淀,可追溯',
5
- auxiliary: true,
6
- steps: [
7
- {
8
- name: '任务完成度检查',
9
- prompt: `检查 tasks.md 中所有 checkbox 是否已勾选。
10
-
11
- ### 操作
12
- 1. 读取 \`.sillyspec/changes/<change-name>/tasks.md\`
13
- 2. 检查所有 checkbox 是否已勾选
14
- 3. 如有遗漏 → 询问用户是否继续归档
15
-
16
- ### 输出
17
- 完成度报告`,
18
- outputHint: '完成度报告',
19
- optional: false
20
- },
21
- {
22
- name: '确认归档',
23
- prompt: `展示即将归档的内容,请用户确认。
24
-
25
- ### 操作
26
- 1. 展示:变更目录名、包含的文件列表、生成总结
27
- 2. 请用户确认是否执行归档
28
- 3. 确认后:将 \`.sillyspec/changes/<change-name>/\` 移动到 \`.sillyspec/changes/archive/YYYY-MM-DD-<change-name>/\`
29
- 4. 确保所有 checkbox 都已勾选
30
-
31
- ### 输出
32
- 归档确认`,
33
- outputHint: '归档确认',
34
- optional: false
35
- },
36
- {
37
- name: '更新路线图和提交',
38
- prompt: `更新路线图并暂存变更。
39
-
40
- ### 操作
41
- 1. 如果 \`.sillyspec/ROADMAP.md\` 存在,标记对应 Phase 为已完成
42
- 2. \`git add .sillyspec/\` — **不要 commit**,由用户通过统一提交工具处理
43
- 3. 更新 progress.json:
44
- - 清除当前变更信息(归档后不再活跃)
45
- - 如果是主变更(有 MASTER.md),标记所有阶段为 ✅,然后清除
46
- - 历史记录追加时间 + 归档完成
47
-
48
- ### 输出
49
- 归档完成确认 + 累积规范统计`,
50
- outputHint: '归档完成',
51
- optional: false
52
- }
53
- ]
54
- }
1
+ export const definition = {
2
+ name: 'archive',
3
+ title: '归档变更',
4
+ description: '规范沉淀,可追溯',
5
+ steps: [
6
+ {
7
+ name: '任务完成度检查',
8
+ prompt: `检查 plan.md 中所有任务 checkbox 是否已勾选(plan.md 是任务完成的唯一真相源)。
9
+
10
+ ### 操作
11
+ 1. 读取 \`.sillyspec/changes/<change-name>/plan.md\`
12
+ 2. 检查所有 \`- [x]\` checkbox 是否已勾选
13
+ 3. 如果 plan.md 不存在,回退读取 tasks.md 作为备选
14
+ 4. 如有遗漏 → **必须暂停等待用户决定**,不要自行判断"可以归档"
15
+ - 调用:\`sillyspec run archive --wait --reason "存在未完成任务,是否继续归档" --options "继续归档,回到execute完成剩余任务" --output "未完成任务列表"\`
16
+
17
+ ### 输出
18
+ 完成度报告(已勾选/总数 + 未完成任务列表)`,
19
+ outputHint: '完成度报告',
20
+ optional: false
21
+ },
22
+ {
23
+ name: 'extract-module-impact',
24
+ prompt: `按照 \`.sillyspec/workflows/archive-impact.yaml\` 中定义的 \`impact-analyzer\` 角色规则,分析本次变更影响的模块。
25
+
26
+ ### 操作
27
+ 1. 读取 \`.sillyspec/workflows/archive-impact.yaml\`,了解角色定义和检查规则
28
+ 2. 读取变更目录下的 proposal.md、design.md、tasks.md
29
+ 3. 运行 \`git diff --name-only HEAD~1\`(或 \`git diff --name-only --cached\`)获取真实修改文件列表
30
+ 4. 读取 \`.sillyspec/docs/<project>/modules/_module-map.yaml\`
31
+ - **如果不存在**:提示"建议运行 scan 生成模块映射",但继续执行。跳到步骤 7 生成只有 unmapped 部分的 module-impact.md
32
+ 5. 三重交叉验证:
33
+ - 声明范围:proposal.md / design.md 中的"变更范围"/"文件变更清单"
34
+ - 任务范围:tasks.md / plan.md 中的任务文件路径
35
+ - 真实变更:git diff 文件列表
36
+ - **以 git diff 为准**(真实 > 声明)
37
+ 6. 将 git diff 文件按 \`_module-map.yaml\` 的 paths glob 匹配到模块
38
+ 7. 生成模块影响矩阵:
39
+
40
+ | 模块 | 影响类型 | 相关文件 | 更新内容摘要 | needs_review |
41
+ |------|----------|----------|-------------|-------------|
42
+
43
+ 影响类型:逻辑变更 / 数据结构变更 / 接口变更 / 调用关系变更 / 配置变更 / 新增
44
+ needs_review:如果影响无法完全确定,标记为 true
45
+
46
+ 8. 未匹配到任何模块的文件归入"未匹配文件"表格
47
+ 9. 生成 \`.sillyspec/changes/<change-name>/module-impact.md\`
48
+ 10. 完成后运行 workflow 检查:
49
+ \`node -e "import('./src/workflow.js').then(w => { /* 用 loadWorkflow 加载 archive-impact,用 runPostCheck 检查 */ })\``,
50
+ outputHint: 'module-impact.md 路径 + 影响摘要',
51
+ optional: false
52
+ },
53
+ {
54
+ name: 'sync-module-docs',
55
+ prompt: `根据 module-impact.md 同步更新模块索引和卡片文档。
56
+
57
+ ### ⚠️ 核心原则:结构化事实改 _module-map.yaml,语义解释改模块卡片
58
+ - \`_module-map.yaml\` 是唯一的结构化索引源(paths/tags/entrypoints/depends_on/used_by/status/needs_review)
59
+ - 模块卡片只负责语义说明(定位/契约摘要/关键逻辑/注意事项/人工备注)
60
+ - 一个信息只维护一次,不要两边重复
61
+
62
+ ### 操作
63
+ 1. 读取 \`.sillyspec/changes/<change-name>/module-impact.md\`
64
+ 2. 如果没有受影响模块(只有 unmapped)→ 提示用户,跳过同步
65
+ 3. 对每个受影响模块,按影响类型分别更新:
66
+
67
+ #### 更新 _module-map.yaml 的规则
68
+ - **路径变化** → 更新对应模块的 paths
69
+ - **依赖变化** → 更新 depends_on / used_by(同时更新反向模块的 used_by / depends_on)
70
+ - **导出符号变化** → 更新 entrypoints / main_symbols
71
+ - **新增模块** → 添加完整条目
72
+ - **模块废弃** → status: deprecated
73
+ - **不确定的影响** → needs_review: true, review_reasons 追加原因
74
+ - 如果 _module-map.yaml 的 generated_at 已过时,更新为当前时间
75
+
76
+ #### 更新模块卡片(modules/<module-id>.md)的规则
77
+ - **契约语义变化**(新增/删除对外能力) → 更新"契约摘要"
78
+ - **关键逻辑变化** → 更新"关键逻辑"
79
+ - **边界变化**(模块职责扩大/缩小) → 更新"定位"
80
+ - **注意事项变化** → 更新"注意事项"
81
+ - **内部实现变化**(不影响对外接口) → 通常不更新卡片
82
+ - **人工备注** → 永远保护,不覆盖
83
+
84
+ #### 人工备注保护
85
+ 1. 用正则提取 \`<!-- MANUAL_NOTES_START -->\` 到 \`<!-- MANUAL_NOTES_END -->\` 之间的内容
86
+ 2. 生成新卡片后,原样回填到人工备注区域
87
+ 3. 如果标记缺失或重复 → 在 _module-map.yaml 中标记 needs_review: true
88
+
89
+ #### 新建模块卡片模板
90
+ \`\`\`markdown
91
+ ---
92
+ schema_version: 1
93
+ doc_type: module-card
94
+ module_id: <module-id>
95
+ ---
96
+
97
+ # <module-id>
98
+
99
+ ## 定位
100
+
101
+ ## 契约摘要
102
+
103
+ ## 关键逻辑
104
+
105
+ ## 注意事项
106
+
107
+ ## 人工备注
108
+
109
+ <!-- MANUAL_NOTES_START -->
110
+
111
+ <!-- MANUAL_NOTES_END -->
112
+ \`\`\`
113
+
114
+ 4. 展示所有更新内容(diff 摘要),**必须暂停等待用户确认**
115
+ - 调用:\`sillyspec run archive --wait --reason "等待用户确认模块文档同步" --options "确认写入,跳过同步" --output "diff 摘要"\`
116
+ 5. **只有用户通过 --continue --answer "确认写入" 后才写入文件**
117
+ - 写入 _module-map.yaml 和受影响的模块卡片
118
+ 6. 用户拒绝时,不写入,但提示"module-impact.md 已保留,可稍后手动同步"
119
+ 7. 回填 module-impact.md 的"更新结果"表格,区分目标:
120
+ - 目标列写 "\`_module-map.yaml: <module-id>\`" 或 "\`modules/<module-id>.md\`"
121
+ 8. **同步完成后**,运行 \`sillyspec modules rebuild\` 刷新索引(如果需要),或手动更新 dependencies.md
122
+
123
+ ### 输出
124
+ 已更新的文件路径列表 + 用户确认状态`,
125
+ outputHint: '模块文档更新结果',
126
+ optional: false
127
+ },
128
+ {
129
+ name: '确认归档',
130
+ prompt: `确认归档内容,由 CLI 执行目录移动。
131
+
132
+ ### 操作
133
+ 1. 展示:变更目录名、包含的文件列表(含 module-impact.md)、生成总结
134
+ 2. 确保所有 checkbox 都已勾选
135
+ 3. 让用户确认后,用 \`--confirm\` 完成本步骤:
136
+ \`sillyspec run archive --done --confirm --output "确认归档"\`
137
+ 4. CLI 会创建 \`.sillyspec/changes/archive/\`,并将变更目录移动到 \`.sillyspec/changes/archive/YYYY-MM-DD-<change-name>/\`
138
+
139
+ ### 输出
140
+ 归档完成 + archive 目录路径`,
141
+ outputHint: '归档确认',
142
+ optional: false
143
+ },
144
+ {
145
+ name: '更新路线图和提交',
146
+ prompt: `更新路线图并暂存变更。
147
+
148
+ ### 操作
149
+ 1. 如果 \`.sillyspec/ROADMAP.md\` 存在,标记对应 Phase 为已完成
150
+ 2. \`git add .sillyspec/changes/\` — 暂存归档结果(不要 commit,由用户通过统一提交工具处理)
151
+ 3. \`git add .sillyspec/docs/\` — 暂存模块文档更新(如有)
152
+ 4. 确认 sillyspec.db 中该变更已不再 active(确认归档步骤由 CLI 调用 unregisterChange)
153
+
154
+ ### 输出
155
+ 归档完成确认 + 累积规范统计`,
156
+ outputHint: '归档完成',
157
+ optional: false
158
+ }
159
+ ]
160
+ }
@@ -0,0 +1,229 @@
1
+ /**
2
+ * brainstorm-auto.js — auto/full 模式使用的 brainstorm 步骤定义
3
+ *
4
+ * 与 brainstorm.js 的区别:
5
+ * 1. artifact-first:直接写文件,对话只输出摘要
6
+ * 2. 自动决策:基于 AC-001~AC-010 checklist,不频繁请示
7
+ * 3. next-action.json:结构化产物,驱动下游推进
8
+ * 4. 只有 blocking questions 才 wait 用户
9
+ * 5. 步骤从 ~13 步精简为 4 步
10
+ */
11
+
12
+ export const definition = {
13
+ name: 'brainstorm',
14
+ title: '头脑风暴(自动模式)',
15
+ description: '探索需求、分析技术方案、识别风险 — artifact-first,自动决策优先',
16
+
17
+ steps: [
18
+ {
19
+ name: '状态检查与上下文加载',
20
+ prompt: `检查状态、加载项目上下文、匹配模块。
21
+
22
+ ### 操作
23
+ 1. 运行 \`sillyspec progress show\`,确认 currentStage 为 "brainstorm"
24
+ 2. 如果未初始化,提示先运行 sillyspec init
25
+ 3. **检查变更名称**:如果当前变更名是自动生成的(如 \`2026-06-02-new-change\`),直接重命名为有意义名称,然后运行 \`sillyspec change-rename <旧名> <新名>\`
26
+
27
+ ### 加载上下文
28
+ 4. 读取 CODEBASE-OVERVIEW.md + 共享规范 + 子项目上下文
29
+ 5. 加载项目信息:\`cat .sillyspec/projects/*.yaml 2>/dev/null\`
30
+ 6. 加载本地配置:\`cat .sillyspec/local.yaml 2>/dev/null\`
31
+ 7. 棕地项目:读取 scan 下的 STRUCTURE.md、CONVENTIONS.md、ARCHITECTURE.md
32
+ 8. 加载模块索引:读取 \`.sillyspec/docs/<project>/modules/_module-map.yaml\`(如存在)
33
+ 9. 查看进行中的变更:\`ls .sillyspec/changes/ | grep -v archive\`
34
+ 10. 检查同名变更或可复用模板
35
+
36
+ ### 模块匹配
37
+ 根据用户描述的需求关键词,匹配相关模块(用 _module-map.yaml 的 tags/aliases/paths)。
38
+
39
+ ### 子项目判定
40
+ - 单项目:直接确认
41
+ - 多项目且用户已指定:直接确认
42
+ - 多项目且用户未指定:列出项目列表,需要用户确认
43
+
44
+ ### 如果有用户提供的原型/截图
45
+ 分析提取:页面结构、表单字段、交互流程、业务规则。
46
+
47
+ ### 输出
48
+ 状态摘要 + 项目现状理解(3-5 句)+ 涉及模块列表 + 子项目 + 原型分析(如有)
49
+
50
+ ### 注意
51
+ - 以 CLI 返回为准,不要自行推断阶段
52
+ - 不要用 mv 命令重命名变更目录,必须用 \`sillyspec change-rename\``,
53
+ outputHint: '状态摘要 + 上下文 + 模块匹配',
54
+ optional: false
55
+ },
56
+ {
57
+ name: '需求分析与方案设计',
58
+ requiresWait: true,
59
+ repeatableWait: true,
60
+ maxWaitRounds: 5,
61
+ waitReason: '等待用户回答需求问题',
62
+ waitOptions: ['回答见--answer', '信息够了,进入设计'],
63
+ prompt: `分析需求,必要时追问,然后设计方案。
64
+
65
+ ### 操作
66
+
67
+ #### A. 需求评估
68
+ 1. 汇总上一步加载的上下文和用户需求
69
+ 2. 判断需求是否清晰:
70
+ - 目标明确、范围清楚、无歧义 → 跳过追问,直接进入方案设计
71
+ - 有歧义或不清楚 → 挑**一个最关键的**问题追问
72
+
73
+ #### B. 追问规则(只在需要时)
74
+ - 一次只问一个问题,不要一次性列出多个问题
75
+ - 能从代码/文档确认的不要问用户
76
+ - 多选题优于开放式问题
77
+ - YAGNI — 砍掉不需要的功能
78
+ - 2-3 轮问答就应进入方案设计
79
+ - 优先追问影响架构/数据/接口的问题,实现细节不要问
80
+
81
+ **如果需要追问:**调用 \`sillyspec run brainstorm --wait --reason "等待用户回答需求问题" --options "回答见--answer,信息够了,进入设计" --output "你的单个问题"\`
82
+
83
+ #### C. 复杂度评估(追问结束后或不需要追问时)
84
+ 1. 判断是否需要拆分或走批量模式:
85
+ - 3+ 个可独立交付的功能模块 → 建议拆分
86
+ - 任务 > 10 且有重复模式 → 建议批量模式
87
+ - 简单 CRUD → 不拆
88
+ 2. 如果需要拆分/批量模式:暂停等用户确认
89
+ - 调用:\`sillyspec run brainstorm --wait --reason "等待用户确认拆分方案" --options "同意拆分,不需要拆分,走批量模式" --output "拆分方案摘要"\`
90
+ 3. 不需要拆分 → 继续
91
+
92
+ #### D. 方案设计(自动决策优先)
93
+ 1. 基于需求理解和上下文,提出 1-3 种实现方案
94
+ 2. **使用自动决策 checklist(AC-001~AC-010)判断是否需要用户选择:**
95
+
96
+ \`\`\`
97
+ AC-001: 未修改公共 API
98
+ AC-002: 未修改数据库 schema
99
+ AC-003: 未涉及鉴权/权限
100
+ AC-004: 未扩大 allowed_paths
101
+ AC-005: 未引入新外部依赖
102
+ AC-006: 未修改核心模块(workflow/daemon/session/lifecycle)
103
+ AC-007: 已有项目约定可复用
104
+ AC-008: 不影响向后兼容
105
+ AC-009: 不涉及数据迁移
106
+ AC-010: 单模块范围内可完成
107
+ \`\`\`
108
+
109
+ 3. **自动决策判定:**
110
+ - 只有一个明显合理方案 + checklist 全部 ✅ → **自动选择,标记 AUTO_DECIDED**
111
+ - 有多个方案但影响不大(checklist 全部 ✅)→ **自动选推荐方案,标记 AUTO_DECIDED**
112
+ - 有多个方案且 checklist 有 ❌(影响架构/数据/接口/权限/兼容性)→ **只有这一种情况才暂停等用户选择**
113
+
114
+ 4. 如果需要用户选择方案:
115
+ - 调用:\`sillyspec run brainstorm --wait --reason "等待用户选择方案" --options "方案A,方案B,方案C" --output "方案对比摘要"\`
116
+
117
+ #### E. Design Grill(轻量交叉审查)
118
+ 对方案做快速交叉审查:
119
+ - 检查方案与 ARCHITECTURE.md / CONVENTIONS.md 的一致性
120
+ - 检查是否有术语歧义、边界遗漏
121
+ - 能自动解决的直接修正,只有需要业务判断的才问用户
122
+ - 跳过条件:单模块、无状态流转、< 3 个文件变更
123
+
124
+ ### 输出
125
+ 需求理解摘要 + 复杂度评估 + 方案决策(AUTO_DECIDED 或用户选择)
126
+
127
+ ### 注意
128
+ - **不要自问自答。** 不要在自己输出中模拟用户回答然后说"需求已明确"
129
+ - checklist 判定结果必须在 decisions.md 中记录依据`,
130
+ outputHint: '需求理解 + 方案决策',
131
+ optional: false
132
+ },
133
+ {
134
+ name: '生成设计产物',
135
+ prompt: `将设计方案写入文件(artifact-first),不回显正文。
136
+
137
+ ### 操作
138
+ 1. 确保变更目录存在:\`mkdir -p .sillyspec/changes/<change-name>/brainstorm\`
139
+ 2. **直接将设计方案写入文件,不要先在对话中输出完整内容再写文件。**
140
+
141
+ ### 产物文件
142
+
143
+ #### design.md(必填,写入 \`brainstorm/design.md\`)
144
+ 包含:背景、设计目标、非目标、总体方案、文件变更清单、接口定义、数据模型(如涉及)、兼容策略(brownfield)、风险登记、决策追踪。
145
+
146
+ #### decisions.md(必填,写入 \`brainstorm/decisions.md\`)
147
+ 记录所有决策:
148
+ \`\`\`markdown
149
+ ## D-001@v1: 决策短标题
150
+ - type: architecture | boundary | compatibility | ...
151
+ - priority: P0 | P1 | P2
152
+ - status: AUTO_DECIDED | NEEDS_REVIEW | USER_DECIDED
153
+ - source: user | code | docs
154
+ - question: 被解决的问题
155
+ - answer: 选择或结论
156
+ - checklist: AC-001 ✅, AC-007 ✅(AUTO_DECIDED 时必须列出)
157
+ - normalized_requirement: 可测试约束
158
+ - impacts: [FR-01, task-01]
159
+ - evidence: 代码/文档路径或用户回答轮次
160
+ \`\`\`
161
+
162
+ #### gaps.md(必填,写入 \`brainstorm/gaps.md\`)
163
+ 记录已识别的缺口。status=BLOCKER 的缺口会在 plan-postcheck 中触发回退。
164
+
165
+ #### assumptions.md(必填,写入 \`brainstorm/assumptions.md\`)
166
+ 记录隐含假设和验证方法。
167
+
168
+ #### next-action.json(必填,写入 \`brainstorm/next-action.json\`)
169
+ \`\`\`json
170
+ {
171
+ "status": "ready_for_plan" | "waiting_for_user",
172
+ "decision_level": "high" | "medium" | "low",
173
+ "has_blocking_questions": true | false,
174
+ "blocking_reasons": [],
175
+ "questions": [],
176
+ "auto_decisions": [
177
+ { "id": "D-001", "decision": "方案描述", "reason": "AC-007 ✅" }
178
+ ]
179
+ }
180
+ \`\`\`
181
+
182
+ ### 自审
183
+ 对 design.md 执行自审(需求覆盖、文件变更清单具体性、验收标准可测试、非目标清晰、兼容策略)。发现问题直接修改文件。
184
+
185
+ ### 如果有 blocking questions
186
+ 将问题写入 next-action.json.questions,在对话中输出问题列表和推荐选项,然后 --wait。
187
+
188
+ ### 输出(artifact-first)
189
+ 只输出摘要:
190
+ \`\`\`
191
+ 已生成设计产物(5 个文件):
192
+ - brainstorm/design.md — 采用 xxx 方案,涉及 N 个文件变更
193
+ - brainstorm/decisions.md — M 个决策,K 个 AUTO_DECIDED
194
+ - brainstorm/gaps.md — J 个缺口,0 个 BLOCKER
195
+ - brainstorm/assumptions.md — L 个假设
196
+ - brainstorm/next-action.json — ready_for_plan / waiting_for_user
197
+ \`\`\``,
198
+ outputHint: '产物摘要',
199
+ optional: false
200
+ },
201
+ {
202
+ name: '生成规范文件',
203
+ requiresWait: true,
204
+ waitReason: '等待用户最终确认',
205
+ waitOptions: ['确认', '需要修改', '推翻重来'],
206
+ prompt: `生成 proposal.md / requirements.md / tasks.md,让用户确认。
207
+
208
+ ### 操作
209
+ 1. 基于 brainstorm/ 下的设计产物,生成规范文件(直接写文件):
210
+ - **proposal.md**:动机、关键问题、变更范围、不在范围内、成功标准
211
+ - **requirements.md**:角色表 + FR 编号需求 + Given/When/Then + 非功能需求
212
+ - **tasks.md**:任务列表(只列名称,细节在 plan 阶段展开)
213
+ 2. 如果 brainstorm/decisions.md 有 AUTO_DECIDED 决策,在变更根目录也写一份 decisions.md
214
+ 3. 所有规范文件头部包含 YAML frontmatter
215
+ 4. \`git add .sillyspec/\` — 暂存规范文件(不要 commit)
216
+
217
+ ### 输出(摘要)
218
+ 规范文件路径列表(各一句话说明)
219
+
220
+ ### 铁律
221
+ - **直接写文件,不在对话中输出完整内容**
222
+ - 暂停等待用户确认:\`sillyspec run brainstorm --wait --reason "等待用户最终确认" --options "确认,需要修改,推翻重来" --output "规范文件摘要"\`
223
+ - 禁止自动 commit
224
+ - 禁止在确认前推进到后续阶段`,
225
+ outputHint: '规范文件摘要',
226
+ optional: false
227
+ }
228
+ ]
229
+ }