sillyspec 3.20.3 → 3.20.5

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 (225) 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 +131 -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 +470 -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 +634 -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 +518 -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 +357 -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/runtime-cleanup-keeps-worktree.test.mjs +107 -0
  139. package/test/scan-docs-yaml-placeholders.test.mjs +84 -0
  140. package/test/scan-knowledge.test.mjs +175 -0
  141. package/test/scan-paths.test.mjs +68 -0
  142. package/test/scan-postcheck-project-priority.test.mjs +85 -0
  143. package/test/scan-postcheck.test.mjs +197 -0
  144. package/test/scan-workflow-anyfailed-block.test.mjs +52 -0
  145. package/test/spec-dir.test.mjs +206 -0
  146. package/test/stage-contract-failed-post-check.test.mjs +102 -0
  147. package/test/stage-contract.test.mjs +299 -0
  148. package/test/stage-definitions.test.mjs +39 -0
  149. package/test/wait-gates.test.mjs +501 -0
  150. package/test/workflow-spec-base.test.mjs +142 -0
  151. package/test/worktree-deps-provision.test.mjs +148 -0
  152. package/test/worktree-guard.test.mjs +136 -0
  153. package/test/worktree-native-overlay.test.mjs +188 -0
  154. package/.sillyspec/changes/archive/2026-04-08-derive-state/design.md +0 -97
  155. package/.sillyspec/changes/archive/2026-04-08-derive-state/plan.md +0 -51
  156. package/.sillyspec/changes/archive/2026-04-08-derive-state/proposal.md +0 -29
  157. package/.sillyspec/changes/archive/2026-04-08-derive-state/requirements.md +0 -34
  158. package/.sillyspec/changes/archive/2026-04-08-derive-state/tasks.md +0 -13
  159. package/.sillyspec/changes/archive/2026-04-08-derive-state/verify-result.md +0 -43
  160. package/.sillyspec/changes/auto-mode/design.md +0 -50
  161. package/.sillyspec/changes/auto-mode/proposal.md +0 -19
  162. package/.sillyspec/changes/auto-mode/requirements.md +0 -21
  163. package/.sillyspec/changes/auto-mode/tasks.md +0 -7
  164. package/.sillyspec/changes/brainstorm-archive/2026-04-05-dashboard-design.md +0 -206
  165. package/.sillyspec/changes/brainstorm-archive/2026-04-05-unified-docs-design.md +0 -199
  166. package/.sillyspec/changes/dashboard/design.md +0 -219
  167. package/.sillyspec/changes/dashboard/design.md.braindraft +0 -206
  168. package/.sillyspec/changes/run-command-design/design.md +0 -1230
  169. package/.sillyspec/changes/unified-docs-design/design.md +0 -199
  170. package/.sillyspec/docs/sillyspec/scan/.gitkeep +0 -0
  171. package/.sillyspec/knowledge/INDEX.md +0 -8
  172. package/.sillyspec/knowledge/uncategorized.md +0 -3
  173. package/.sillyspec/plans/2026-04-05-dashboard.md +0 -737
  174. package/.sillyspec/projects/sillyspec.yaml +0 -3
  175. package/dist/steps/brainstorm/01-load-context.md +0 -30
  176. package/dist/steps/brainstorm/02-reuse-check.md +0 -6
  177. package/dist/steps/brainstorm/03-prototype-analysis.md +0 -11
  178. package/dist/steps/brainstorm/04-module-split.md +0 -23
  179. package/dist/steps/brainstorm/05-dialog-explore.md +0 -8
  180. package/dist/steps/brainstorm/06-propose-approaches.md +0 -3
  181. package/dist/steps/brainstorm/07-present-design.md +0 -3
  182. package/dist/steps/brainstorm/08-write-design.md +0 -21
  183. package/dist/steps/brainstorm/09-self-review.md +0 -15
  184. package/dist/steps/brainstorm/10-user-confirm.md +0 -3
  185. package/dist/steps/brainstorm/11-output-spec.md +0 -7
  186. package/dist/steps/brainstorm/manifest.yaml +0 -26
  187. package/dist/steps/execute/01-load-context.md +0 -41
  188. package/dist/steps/execute/02-scan-conventions.md +0 -47
  189. package/dist/steps/execute/03-skill-mcp.md +0 -19
  190. package/dist/steps/execute/04-assign-task.md +0 -22
  191. package/dist/steps/execute/04b-prompt-template.md +0 -54
  192. package/dist/steps/execute/05-write-test.md +0 -7
  193. package/dist/steps/execute/06-write-code.md +0 -8
  194. package/dist/steps/execute/07-run-test.md +0 -26
  195. package/dist/steps/execute/08-fix-issues.md +0 -28
  196. package/dist/steps/execute/09-next-task.md +0 -33
  197. package/dist/steps/execute/manifest.yaml +0 -28
  198. package/dist/steps/plan/01-load-context.md +0 -22
  199. package/dist/steps/plan/02-anchor-confirm.md +0 -1
  200. package/dist/steps/plan/03-expand-tasks.md +0 -33
  201. package/dist/steps/plan/04-mark-order.md +0 -15
  202. package/dist/steps/plan/05-e2e-planning.md +0 -17
  203. package/dist/steps/plan/06-self-check.md +0 -16
  204. package/dist/steps/plan/07-save.md +0 -1
  205. package/dist/steps/plan/manifest.yaml +0 -18
  206. package/dist/steps/scan/01-env-detect.md +0 -51
  207. package/dist/steps/scan/02-tech-stack.md +0 -16
  208. package/dist/steps/scan/03-conventions.md +0 -16
  209. package/dist/steps/scan/04-structure.md +0 -19
  210. package/dist/steps/scan/05-quality.md +0 -18
  211. package/dist/steps/scan/06-complete.md +0 -49
  212. package/dist/steps/scan/manifest.yaml +0 -16
  213. package/dist/steps/verify/01-load-specs.md +0 -28
  214. package/dist/steps/verify/02-check-tasks.md +0 -1
  215. package/dist/steps/verify/03-check-design.md +0 -6
  216. package/dist/steps/verify/04-run-tests.md +0 -7
  217. package/dist/steps/verify/05-e2e-tests.md +0 -27
  218. package/dist/steps/verify/05b-e2e-fix.md +0 -33
  219. package/dist/steps/verify/06-code-quality.md +0 -25
  220. package/dist/steps/verify/07-lint-check.md +0 -27
  221. package/dist/steps/verify/08-output-report.md +0 -14
  222. package/dist/steps/verify/manifest.yaml +0 -22
  223. package/packages/dashboard/dist/assets/index-DGe8CqeP.css +0 -1
  224. package/src/derive.js +0 -147
  225. package/src/step.js +0 -543
@@ -1,65 +1,65 @@
1
- export const definition = {
2
- name: 'status',
3
- title: '状态查看',
4
- description: '查看项目进度和状态',
5
- auxiliary: true,
6
- steps: [
7
- {
8
- name: '项目基础信息',
9
- prompt: `收集项目基础信息。
10
-
11
- ### 操作
12
- 1. \`cat .sillyspec/PROJECT.md 2>/dev/null || echo "未初始化"\`
13
- 2. 获取 project 名
14
- 3. \`ls docs/<project>/scan/ 2>/dev/null | head -10\`
15
- 4. \`cat .sillyspec/REQUIREMENTS.md 2>/dev/null | head -20\`
16
- 5. \`cat .sillyspec/ROADMAP.md 2>/dev/null\`
17
-
18
- ### 输出
19
- 项目基础信息摘要`,
20
- outputHint: '项目基础信息',
21
- optional: false
22
- },
23
- {
24
- name: '变更状态',
25
- prompt: `检查进行中的变更和归档历史。
26
-
27
- ### 操作
28
- 1. \`ls .sillyspec/changes/ 2>/dev/null | grep -v archive\`
29
- 2. 对每个进行中的变更:检查 proposal.md ✅/❌、design.md ✅/❌、requirements.md ✅/❌、tasks.md — X/Y 完成
30
- 3. \`ls .sillyspec/changes/archive/ 2>/dev/null | wc -l\`
31
- 4. \`cat .sillyspec/HANDOFF.json 2>/dev/null\`
32
-
33
- ### 输出
34
- 变更状态列表`,
35
- outputHint: '变更状态',
36
- optional: false
37
- },
38
- {
39
- name: '输出状态报告',
40
- prompt: `生成完整状态报告。
41
-
42
- ### 输出格式:
43
- \`\`\`
44
- 📊 SillySpec 状态
45
-
46
- 📋 项目:xxx(已初始化 / 未初始化)
47
- 📂 代码库:已扫描(7 份文档)/ 未扫描
48
-
49
- 🔄 进行中:N 个变更
50
- - [change-1] Phase 3 (Execute) — tasks 5/8
51
-
52
- ✅ 已归档:N 个变更
53
- 📝 设计文档:N 份
54
- 📝 实现计划:N 份
55
-
56
- 💡 下一步:/sillyspec:continue
57
- \`\`\`
58
-
59
- ### 注意
60
- - 不修改任何文件`,
61
- outputHint: '状态报告',
62
- optional: false
63
- }
64
- ]
65
- }
1
+ export const definition = {
2
+ name: 'status',
3
+ title: '状态查看',
4
+ description: '查看项目进度和状态',
5
+ auxiliary: true,
6
+ steps: [
7
+ {
8
+ name: '项目基础信息',
9
+ prompt: `收集项目基础信息。
10
+
11
+ ### 操作
12
+ 1. \`cat .sillyspec/PROJECT.md 2>/dev/null || echo "未初始化"\`
13
+ 2. 获取 project 名
14
+ 3. \`ls .sillyspec/docs/<project>/scan/ 2>/dev/null | head -10\`
15
+ 4. \`cat .sillyspec/REQUIREMENTS.md 2>/dev/null | head -20\`
16
+ 5. \`cat .sillyspec/ROADMAP.md 2>/dev/null\`
17
+
18
+ ### 输出
19
+ 项目基础信息摘要`,
20
+ outputHint: '项目基础信息',
21
+ optional: false
22
+ },
23
+ {
24
+ name: '变更状态',
25
+ prompt: `检查进行中的变更和归档历史。
26
+
27
+ ### 操作
28
+ 1. \`ls .sillyspec/changes/ 2>/dev/null | grep -v archive\`
29
+ 2. 对每个进行中的变更:检查 proposal.md ✅/❌、design.md ✅/❌、requirements.md ✅/❌、tasks.md — X/Y 完成
30
+ 3. \`ls .sillyspec/changes/archive/ 2>/dev/null | wc -l\`
31
+ 4. \`cat .sillyspec/HANDOFF.json 2>/dev/null\`
32
+
33
+ ### 输出
34
+ 变更状态列表`,
35
+ outputHint: '变更状态',
36
+ optional: false
37
+ },
38
+ {
39
+ name: '输出状态报告',
40
+ prompt: `生成完整状态报告。
41
+
42
+ ### 输出格式:
43
+ \`\`\`
44
+ 📊 SillySpec 状态
45
+
46
+ 📋 项目:xxx(已初始化 / 未初始化)
47
+ 📂 代码库:已扫描(7 份文档)/ 未扫描
48
+
49
+ 🔄 进行中:N 个变更
50
+ - [change-1] Phase 3 (Execute) — tasks 5/8
51
+
52
+ ✅ 已归档:N 个变更
53
+ 📝 设计文档:N 份
54
+ 📝 实现计划:N 份
55
+
56
+ 💡 下一步:/sillyspec:continue
57
+ \`\`\`
58
+
59
+ ### 注意
60
+ - 不修改任何文件`,
61
+ outputHint: '状态报告',
62
+ optional: false
63
+ }
64
+ ]
65
+ }
@@ -1,135 +1,322 @@
1
- export const definition = {
2
- name: 'verify',
3
- title: '验证确认',
4
- description: '对照规范检查 + 测试套件',
5
- steps: [
6
- {
7
- name: '状态检查',
8
- prompt: `检查当前状态,确认可以执行 verify。
9
-
10
- ### 操作
11
- 1. 运行 \`sillyspec progress show\`
12
- 2. 确认 currentStage 为 "verify"
13
-
14
- ### 输出
15
- 当前状态摘要`,
16
- outputHint: '状态摘要',
17
- optional: false
18
- },
19
- {
20
- name: '加载规范并锚定',
21
- prompt: `加载规范文件并确认。
22
-
23
- ### 操作
24
- 1. 读取 proposal.md、design.md、tasks.md、requirements.md
25
- 2. 加载项目信息:\`cat .sillyspec/projects/*.yaml 2>/dev/null\`
26
- 3. 加载本地配置:\`cat .sillyspec/local.yaml 2>/dev/null\`(构建命令、测试命令、lint 命令等)
27
- 4. 加载代码规范:\`cat .sillyspec/docs/<project>/scan/CONVENTIONS.md 2>/dev/null\`
28
- 5. 标注每个文件的存在/不存在状态
29
-
30
- ### 输出
31
- 文件加载确认清单`,
32
- outputHint: '文件确认清单',
33
- optional: false
34
- },
35
- {
36
- name: '逐项检查任务',
37
- prompt: `对照 tasks.md 检查每个任务完成状态。
38
-
39
- ### 操作
40
- 对每个 checkbox:
41
- 1. 检查相关文件是否存在
42
- 2. 检查代码是否实现了描述的功能
43
- 3. 标记:✅ 已完成 / ❌ 未完成 / ⚠️ 部分完成
44
-
45
- ### 批量模式验证指引
46
- 如果 tasks.md 中有批量特征(引擎/模板/配置/批量生成),采用分层验证:
47
- - **L1 自动化(100%)**:运行验证脚本(如有),检查所有实例的文件存在、格式正确、Schema 校验通过
48
- - **L2 AI 抽查(5-10 个)**:选择最复杂的 3 个 + 最简单的 2 个 + 有特殊逻辑的,检查业务逻辑正确性
49
- - **L3 模式性 bug 检测**:L2 发现 bug → 判断是否为系统性问题 → 系统性 bug 则回退修复引擎并重新生成所有实例
50
-
51
- ### 输出
52
- 任务完成度列表 + 完成率
53
-
54
- ### 注意
55
- - 不修改任何代码,只做检查和报告`,
56
- outputHint: '任务完成度报告',
57
- optional: false
58
- },
59
- {
60
- name: '对照设计检查',
61
- prompt: `对照 design.md 检查实现一致性。**design.md 是唯一 truth source,不符合 design.md 的实现 = Bug。**
62
-
63
- ### 操作
64
- 1. 架构决策是否遵循
65
- 2. 文件变更清单是否一致
66
- 3. 数据模型是否符合
67
- 4. API 设计是否符合
68
- 5. **Reverse Sync 检查**:如果发现实现合理但 design.md 未覆盖,先更新 design.md 补充遗漏
69
-
70
- ### 输出
71
- 一致性检查结果`,
72
- outputHint: '设计一致性报告',
73
- optional: false
74
- },
75
- {
76
- name: '任务蓝图验收',
77
- prompt: `检查每个 task-N.md 的验收标准是否全部满足。
78
-
79
- ### 操作
80
- 1. 检查变更目录下 tasks/ 是否存在
81
- 2. 如果存在:
82
- - 逐个读取 tasks/task-NN.md
83
- - 检查每个文件的「验收标准」checkbox 是否全部勾选
84
- - 未勾选的项列为不通过
85
- 3. 如果不存在:跳过此步骤
86
-
87
- ### 输出
88
- 验收结果:通过/不通过 + 未通过的项`,
89
- outputHint: '验收结果',
90
- optional: false
91
- },
92
- {
93
- name: '运行测试和质量扫描',
94
- prompt: `运行测试和代码质量扫描。
95
-
96
- ### 操作
97
- 1. 读取 \`.sillyspec/local.yaml\` 获取构建和测试命令
98
- 2. 如果 local.yaml test 命令,使用它(仅测试变更涉及的模块,非全量)
99
- 3. 如果 local.yaml 无 test 命令,根据项目类型选择:
100
- - Maven:\`mvn test -pl <变更模块> -am\`(仅编译变更模块及其依赖)
101
- - Gradle:\`./gradlew :<模块>:test\`
102
- - npm/pnpm:\`pnpm test --filter=<包名>\` 或 \`npm test -- --testPathPattern=<相关文件>\`
103
- - Python:\`pytest <变更模块路径>/\`
104
- 4. 记录通过/失败数量,分析失败原因
105
- 5. 搜索技术债务:grep TODO/FIXME/HACK/XXX(仅限变更文件)
106
- 6. 如果 local.yaml lint 命令,运行 lint 检查
107
-
108
- ### 注意
109
- - 不要全量编译/测试整个项目,只测变更涉及的模块
110
- - 如果变更模块不确定,优先使用 local.yaml 中的命令
111
-
112
- ### 输出
113
- 测试结果 + 技术债务标记`,
114
- outputHint: '测试结果 + 技术债务',
115
- optional: false
116
- },
117
- {
118
- name: '输出验证报告',
119
- prompt: `生成完整验证报告。
120
-
121
- ### 操作
122
- 1. 汇总以上所有检查结果
123
- 2. 给出结论:PASS / PASS WITH NOTES / FAIL
124
-
125
- ### 输出
126
- 验证报告 markdown + 下一步命令
127
-
128
- ### 注意
129
- - PASS → 下一步 archive
130
- - FAIL 修复后重新 verify`,
131
- outputHint: '验证报告',
132
- optional: false
133
- }
134
- ]
135
- }
1
+ export const definition = {
2
+ name: 'verify',
3
+ title: '验证确认',
4
+ description: '对照规范检查 + 测试套件',
5
+
6
+ // ⛔ 全局护栏:verify 阶段禁止一切破坏性操作
7
+ // 子代理只能「读」和「写报告」,不能「改代码」或「改 git 状态」。
8
+ _globalGuardrails: `
9
+ ## ⛔ verify 阶段绝对禁止的操作
10
+
11
+ 以下操作在 verify 阶段**绝对禁止**,无论出于任何原因(包括「恢复文件」「修复问题」「清理目录」):
12
+
13
+ ### 禁止的 Git 操作
14
+ - git checkout(覆盖文件)
15
+ - git restore(覆盖文件)
16
+ - git reset(回滚提交)
17
+ - git revert(撤销提交)
18
+ - git clean(删除未跟踪文件)
19
+ - git stash drop(删除 stash)
20
+ - git branch -D(强制删除分支)
21
+
22
+ ### 禁止的文件操作
23
+ - 删除任何源码文件(rm、trash)
24
+ - 覆盖任何源码文件(cp 覆盖、echo > 覆盖)
25
+ - 修改任何源码文件(除了 .sillyspec/ 下的报告文件)
26
+
27
+ ### 只允许的操作
28
+ - git status / git diff / git show / git log / git stash list(只读)
29
+ - cat / head / grep / find / wc(只读检查)
30
+ - 写入 .sillyspec/changes/ 下的报告文件(verify-result.md)
31
+ - 运行测试命令(不修改源码)
32
+ - 运行 lint 命令(不自动修复)
33
+
34
+ 如果发现文件缺失或异常,**只报告问题,不尝试修复**。
35
+ `,
36
+
37
+ steps: [
38
+ {
39
+ name: '状态检查',
40
+ prompt: `检查当前状态,确认可以执行 verify。
41
+
42
+ ### 操作
43
+ 1. 运行 \`sillyspec progress show\`
44
+ 2. 确认 currentStage 为 "verify"
45
+
46
+ ### 输出
47
+ 当前状态摘要`,
48
+ outputHint: '状态摘要',
49
+ optional: false
50
+ },
51
+ {
52
+ name: '加载规范并锚定',
53
+ prompt: `加载规范文件并确认。
54
+
55
+ ### 操作
56
+ 1. 读取 proposal.md、design.md、tasks.md、requirements.md、plan.md
57
+ 2. 如果存在 decisions.md,必须读取并提取所有当前版本 D-xxx@vN 决策 ID
58
+ - 如果存在 P0/P1 unresolved/blocking 决策,验证结论不能为 PASS
59
+ - 如果发现 superseded 决策被下游引用,标记为 ⚠️ stale decision reference
60
+ 3. 加载项目信息:\`cat .sillyspec/projects/*.yaml 2>/dev/null\`
61
+ 4. 加载本地配置:\`cat .sillyspec/local.yaml 2>/dev/null\`(构建命令、测试命令、lint 命令等)
62
+ 5. 加载代码规范:\`cat .sillyspec/docs/<project>/scan/CONVENTIONS.md 2>/dev/null\`
63
+ 6. 标注每个文件的存在/不存在状态
64
+
65
+ ### Execute Evidence 传递检查
66
+ 7. 检查 verify-required-evidence.json 是否存在(由 execute 阶段 Task Review Gate 写入)
67
+ - 路径:变更目录下的 verify-required-evidence.json
68
+ - 如果存在 读取其中的 requiredEvidence 列表,逐条验证是否已满足
69
+ - 每条 evidence 必须在 verify-result.md 中给出明确结论(satisfied / missing / partial)
70
+ - 如果有任何 evidence 为 missing → verify 结论不能为 PASS
71
+ - 如果文件不存在 → 表示 execute 阶段无 cannot_verify 任务,正常继续
72
+
73
+ ### 模块文档加载
74
+ 7. 读取 \`.sillyspec/docs/<project>/modules/_module-map.yaml\`(不存在则跳过以下步骤)
75
+ 8. 根据 design.md 的文件变更清单匹配 _module-map.yaml 中的模块
76
+ 9. 读取匹配到的 \`.sillyspec/docs/<project>/modules/<module>.md\`
77
+ 10. **检查模块索引可信度**:如果相关模块的 needs_review 为 true,提示"该模块索引可能不可信,需要回看模块卡片或源码"
78
+
79
+ ### 输出
80
+ 文件加载确认清单(含 decisions.md 当前版本/未决项状态、模块文档 + 索引可信度)`,
81
+ outputHint: '文件确认清单',
82
+ optional: false
83
+ },
84
+ {
85
+ name: '逐项检查任务',
86
+ prompt: `对照 tasks.md 检查每个任务完成状态。
87
+
88
+ ### 操作
89
+ 对每个 checkbox:
90
+ 1. 检查相关文件是否存在
91
+ 2. 检查代码是否实现了描述的功能
92
+ 3. 标记:✅ 已完成 / ❌ 未完成 / ⚠️ 部分完成
93
+
94
+ ### 批量模式验证指引
95
+ 如果 tasks.md 中有批量特征(引擎/模板/配置/批量生成),采用分层验证:
96
+ - **L1 自动化(100%)**:运行验证脚本(如有),检查所有实例的文件存在、格式正确、Schema 校验通过
97
+ - **L2 AI 抽查(5-10 个)**:选择最复杂的 3 个 + 最简单的 2 个 + 有特殊逻辑的,检查业务逻辑正确性
98
+ - **L3 模式性 bug 检测**:L2 发现 bug → 判断是否为系统性问题 → 系统性 bug 则回退修复引擎并重新生成所有实例
99
+
100
+ ### 输出
101
+ 任务完成度列表 + 完成率
102
+
103
+ ### 红线提醒
104
+ - **绝对禁止** git checkout/restore/reset 或删除/覆盖任何文件
105
+ - 发现文件缺失只报告,不尝试恢复
106
+ - verify 阶段的唯一职责是「检查 + 报告」,不是「修复」`,
107
+ outputHint: '任务完成度报告',
108
+ optional: false
109
+ },
110
+ {
111
+ name: '对照设计检查',
112
+ prompt: `先运行自动探针,再对照 design.md 检查实现一致性。**design.md 是唯一 truth source,不符合 design.md 的实现 = Bug。**
113
+
114
+ ### 自动探针(必须先执行)
115
+ 在检查前,依次运行以下三个探针,将结果作为验证输入:
116
+
117
+ **探针 1:未实现标记扫描**
118
+ 在项目源码目录中搜索未实现标记:
119
+ \`\`\`bash
120
+ grep -rn "尚未实现\|TODO\|FIXME\|HACK\|XXX" <源码目录>/ --include="*.java" --include="*.js" --include="*.ts" --include="*.jsx" --include="*.tsx" --include="*.py"
121
+ \`\`\`
122
+ 记录每个匹配的文件、行号和内容。
123
+
124
+ **探针 2:设计关键词覆盖探针**
125
+ 1. 读取 design.md,从中提取所有能力关键词(如"登录"、"导出"、"批量"、"删除"、"搜索"等动作词)
126
+ 2. 对每个关键词,在源码目录中 grep 确认是否有对应的实现代码:
127
+ \`\`\`bash
128
+ grep -rl "<关键词>" <源码目录>/ --include="*.java" --include="*.js" --include="*.ts" --include="*.jsx" --include="*.tsx" --include="*.py"
129
+ \`\`\`
130
+ 3. 如果某个关键词在源码中完全没有匹配,标记为 ⚠️ 可能未实现
131
+
132
+ **探针 3:验收标准测试覆盖探针**
133
+ 1. 读取变更目录下的 tasks.md,提取所有 checkbox 任务
134
+ 2. 对每个 task,检查对应模块目录下是否存在测试文件(*test*、*spec*、*Test*、*Spec*)
135
+ 3. 没有测试文件的 task 标记为 ⚠️ 缺少测试
136
+
137
+ **探针 4:决策追踪覆盖探针(如存在 decisions.md)**
138
+ 1. 从 decisions.md 提取所有当前版本 D-xxx@vN
139
+ 2. 检查 requirements.md 是否引用每个 D-xxx@vN,并映射到 FR-xxx
140
+ 3. 检查 plan.md 或 tasks/task-NN.md 是否引用每个 FR-xxx/D-xxx@vN
141
+ 4. 检查本步骤收集的实现证据是否能回指到对应 D-xxx@vN/FR-xxx
142
+ 5. 任意 D-xxx@vN 无下游覆盖时标记为 ⚠️ 决策未闭环
143
+ 6. 任意 P0/P1 unresolved/blocking 决策标记为 FAIL blocker
144
+
145
+ **探针 5:API Contract Parity Check(跨前后端契约对账)**
146
+ 此探针仅在以下条件满足时执行:
147
+ - 存在 \.sillyspec/.runtime/contract-artifacts/ 目录(说明 execute 阶段生成了 endpoint artifact)
148
+ - 或者项目同时有 backend/ 和 frontend/ 目录
149
+
150
+ 执行步骤:
151
+ 1. 收集所有 provider endpoint artifacts:
152
+ - 读取 .sillyspec/.runtime/contract-artifacts/*/endpoints.json
153
+ - 汇总为 backend 端点清单
154
+ 2. 扫描前端 API 调用:
155
+ - 在 frontend/ 目录中搜索 apiFetch/request/axios/fetch 调用
156
+ - 提取所有 API 路径(归一化动态参数为 {param})
157
+ 3. Diff 对账:
158
+ - 前端调用路径在 backend 端点清单中找不到 → **❌ Missing backend endpoint**(FAIL blocker)
159
+ - backend 端点在前端无调用 → ⚠️ Unused backend endpoint(warning,不阻断)
160
+ 4. 输出对账结果表格:
161
+ \
162
+ \
163
+ | 状态 | 前端调用 | 后端端点 | 文件 |
164
+ |---|---|---|---|
165
+ | ❌ missing | GET /api/ppm/project-plan/{param}/plan-nodes | — | frontend/src/lib/ppm/plan.ts |
166
+ \
167
+ \
168
+ 如果发现 Missing backend endpoint,必须在验证报告中标记为 ❌ contract gap。
169
+
170
+ ### 探针结果处理
171
+ - 将四个探针的结果汇总为「探针报告」
172
+ - 如果探针发现问题(未实现标记、关键词缺失、测试缺失、决策未闭环),在最终验证报告中明确标注
173
+ - 探针发现的问题不等同于验证失败,但必须在报告中列出
174
+
175
+ ### 设计一致性检查
176
+ 基于探针结果,继续检查:
177
+ 1. 架构决策是否遵循
178
+ 2. 文件变更清单是否一致
179
+ 3. 数据模型是否符合
180
+ 4. API 设计是否符合
181
+ 5. **Reverse Sync 检查**:如果发现实现合理但 design.md 未覆盖,先更新 design.md 补充遗漏
182
+ 6. **模块文档一致性检查**:如果在"加载规范并锚定"步骤中加载了模块文档,检查实现是否符合模块文档描述的当前设计(特别关注接口签名、数据流、依赖关系)。不符合时标记 ⚠️(不阻断,模块文档可能未及时更新)
183
+ 7. **决策链路检查**:如果存在 decisions.md,输出 D-xxx@vN → FR-xxx → task-xx → evidence 的追踪矩阵;缺失项必须列为风险
184
+
185
+ ### 输出
186
+ 探针报告 + 设计一致性检查结果 + 模块文档一致性检查结果 + 决策追踪矩阵(如有)`,
187
+ outputHint: '设计一致性报告',
188
+ optional: false
189
+ },
190
+ {
191
+ name: '任务蓝图验收',
192
+ prompt: `检查每个 task-N.md 的验收标准是否全部满足。
193
+
194
+ ### 操作
195
+ 1. 检查变更目录下 tasks/ 是否存在
196
+ 2. 如果存在:
197
+ - 逐个读取 tasks/task-NN.md
198
+ - 检查每个文件的「验收标准」checkbox 是否全部勾选
199
+ - 未勾选的项列为不通过
200
+ 3. 如果不存在:跳过此步骤
201
+
202
+ ### 输出
203
+ 验收结果:通过/不通过 + 未通过的项`,
204
+ outputHint: '验收结果',
205
+ optional: false
206
+ },
207
+ {
208
+ name: '运行测试和质量扫描',
209
+ prompt: `运行测试和代码质量扫描。
210
+
211
+ ### 操作
212
+ 1. 读取 \`.sillyspec/local.yaml\` 获取构建和测试命令
213
+ 2. 如果 local.yaml 有 test 命令,使用它(仅测试变更涉及的模块,非全量)
214
+ 3. 如果 local.yaml 无 test 命令,根据项目类型选择:
215
+ - Maven:\`mvn test -pl <变更模块> -am\`(仅编译变更模块及其依赖)
216
+ - Gradle:\`./gradlew :<模块>:test\`
217
+ - npm/pnpm:\`pnpm test --filter=<包名>\` 或 \`npm test -- --testPathPattern=<相关文件>\`
218
+ - Python:\`pytest <变更模块路径>/\`
219
+ 4. 记录通过/失败数量,分析失败原因
220
+ 5. 搜索技术债务:grep TODO/FIXME/HACK/XXX(仅限变更文件)
221
+ 6. 如果 local.yaml 有 lint 命令,运行 lint 检查
222
+
223
+ ### 注意
224
+ - 不要全量编译/测试整个项目,只测变更涉及的模块
225
+ - 如果变更模块不确定,优先使用 local.yaml 中的命令
226
+
227
+ ### 输出
228
+ 测试结果 + 技术债务标记`,
229
+ outputHint: '测试结果 + 技术债务',
230
+ optional: false
231
+ },
232
+ {
233
+ name: '输出验证报告',
234
+ prompt: `生成完整验证报告,并写入 verify-result.md。
235
+
236
+ ### 操作
237
+ 1. 汇总以上所有检查结果
238
+ 2. **判定变更风险等级(change_risk_profile)**:
239
+
240
+ ### 变更风险分级规则
241
+ 扫描 design.md 和 plan.md 的关键词,自动判定 verify 强度:
242
+
243
+ | 触发条件 | verify 要求 |
244
+ |---|---|
245
+ | 只改文案/文档 | 静态检查即可 |
246
+ | 单模块纯函数 | 单测即可 |
247
+ | API contract / DTO / client | 单测 + contract test |
248
+ | daemon/backend 跨进程 | **必须真实集成** |
249
+ | session/lease/run 状态机 | **必须生命周期端到端验证** |
250
+ | 部署启动路径 | **必须真实启动一次** |
251
+
252
+ 触发关键词:daemon, backend, session, lease, agent_run, lifecycle, state_transition, claim, heartbeat, cross-process, cli.ts, main.ts, server.ts, bootstrap, entrypoint
253
+
254
+ ### 风险门控规则
255
+ - **integration-critical** 或 **deployment-critical** 变更:
256
+ - 结论为 PASS WITH NOTES → **降级为 FAIL**
257
+ - mock 单测通过但没有真实集成证据 → **FAIL**
258
+ - 必须在 verify-result.md 中包含 **Runtime Evidence** section
259
+ - **contract-required** 变更:需要 contract test 证据
260
+ - **unit-sufficient** 变更:单测即可
261
+
262
+ 3. 生成 verify-result.md 文件,保存到 \`.sillyspec/changes/<change-name>/verify-result.md\`
263
+ 4. 给出结论:PASS / PASS WITH NOTES / FAIL(受风险门控约束)
264
+
265
+ ### verify-result.md 格式
266
+ \`\`\`markdown
267
+ # 验证报告
268
+
269
+ ## 结论
270
+ PASS / PASS WITH NOTES / FAIL
271
+
272
+ ## 任务完成度
273
+ (逐项检查任务的结果)
274
+
275
+ ## 设计一致性
276
+ (对照 design.md 的检查结果)
277
+
278
+ ## 探针结果
279
+ - 未实现标记扫描:...
280
+ - 关键词覆盖:...
281
+ - 测试覆盖:...
282
+ - 决策追踪覆盖:...
283
+
284
+ ## 决策追踪矩阵(如存在 decisions.md)
285
+ | 决策 ID | FR | Task | Evidence | 状态 |
286
+ |---|---|---|---|---|
287
+ | D-001@v1 | FR-01 | task-01 | test/file/path | PASS/PARTIAL/MISSING |
288
+
289
+ ## 测试结果
290
+ (测试套件执行结果)
291
+
292
+ ## 技术债务
293
+ (TODO/FIXME/HACK 统计)
294
+
295
+ ## 变更风险等级
296
+ (自动检测的 change_risk_profile: doc-only / unit-sufficient / contract-required / integration-critical / deployment-critical)
297
+
298
+ ## Runtime Evidence(integration-critical / deployment-critical 必填)
299
+ - daemon 启动命令:
300
+ - backend 地址:
301
+ - 创建 session / 调用核心 API 的请求:
302
+ - daemon 日志关键片段(不能出现 session_control_no_manager / fallback to task_runner / submitMessages agent_run_id empty / 422):
303
+ - backend 状态(AgentRun running -> completed/failed):
304
+ - session / lease end 状态:
305
+ - 失败模式排除:
306
+
307
+ ## 代码审查
308
+ (问题列表 + 总体评价)
309
+ \`\`\`
310
+
311
+ ### 输出
312
+ verify-result.md 路径 + 验证报告摘要 + 下一步命令
313
+
314
+ ### 注意
315
+ - PASS → 运行 \`sillyspec run archive\` 归档
316
+ - FAIL → 修复后运行 \`sillyspec run verify\` 重新验证
317
+ - verify-result.md 是变更包的正式验收记录,归档后保留`,
318
+ outputHint: '验证报告',
319
+ optional: false
320
+ }
321
+ ]
322
+ }