sillyspec 3.26.10 → 3.26.11

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 (97) hide show
  1. package/.claude/skills/sillyspec-archive/SKILL.md +85 -85
  2. package/.claude/skills/sillyspec-brainstorm/SKILL.md +114 -114
  3. package/.claude/skills/sillyspec-commit/SKILL.md +109 -109
  4. package/.claude/skills/sillyspec-continue/SKILL.md +45 -45
  5. package/.claude/skills/sillyspec-doctor/SKILL.md +76 -76
  6. package/.claude/skills/sillyspec-execute/SKILL.md +200 -200
  7. package/.claude/skills/sillyspec-explore/SKILL.md +95 -95
  8. package/.claude/skills/sillyspec-knowledge/SKILL.md +269 -269
  9. package/.claude/skills/sillyspec-plan/SKILL.md +148 -148
  10. package/.claude/skills/sillyspec-quick/SKILL.md +111 -111
  11. package/.claude/skills/sillyspec-resume/SKILL.md +68 -68
  12. package/.claude/skills/sillyspec-scan/SKILL.md +79 -79
  13. package/.claude/skills/sillyspec-state/SKILL.md +64 -64
  14. package/.claude/skills/sillyspec-status/SKILL.md +54 -54
  15. package/.claude/skills/sillyspec-verify/SKILL.md +83 -83
  16. package/.claude/skills/sillyspec-workspace/SKILL.md +169 -169
  17. package/.gitattributes +2 -0
  18. package/.husky/pre-push +20 -20
  19. package/.npmrc-publish +2 -0
  20. package/README.md +201 -201
  21. package/SKILL.md +90 -90
  22. package/package.json +39 -39
  23. package/packages/dashboard/dist/assets/index-Bq_Z2hne.js +7446 -7446
  24. package/packages/dashboard/dist/assets/index-O2W5RV4z.css +1 -1
  25. package/packages/dashboard/dist/index.html +16 -16
  26. package/packages/dashboard/package.json +25 -25
  27. package/packages/dashboard/server/executor.js +86 -86
  28. package/packages/dashboard/server/index.js +601 -601
  29. package/packages/dashboard/server/parser.js +526 -526
  30. package/src/change-risk-profile.js +254 -254
  31. package/src/classify-change.js +109 -109
  32. package/src/config-schema.js +310 -310
  33. package/src/contract-matrix.js +379 -379
  34. package/src/db.js +350 -350
  35. package/src/dispatch/backends/local-agent.js +155 -155
  36. package/src/dispatch/backends/sillyhub-mcp.js +245 -245
  37. package/src/dispatch/probe.js +210 -210
  38. package/src/dispatch/strategy.js +121 -121
  39. package/src/docs-check.js +131 -4
  40. package/src/doctor-diagnostics.js +711 -711
  41. package/src/endpoint-extractor.js +401 -401
  42. package/src/fs-atomic.js +69 -69
  43. package/src/git-helper.js +79 -79
  44. package/src/hooks/claude-pre-tool-use.cjs +125 -125
  45. package/src/hooks/worktree-guard.js +848 -848
  46. package/src/index.js +90 -8
  47. package/src/init.js +623 -623
  48. package/src/knowledge-match.js +130 -130
  49. package/src/local-detect.js +120 -120
  50. package/src/machine-interface.js +543 -543
  51. package/src/migrate.js +127 -127
  52. package/src/progress/change-registry.js +297 -260
  53. package/src/progress/consistency-doctor.js +355 -355
  54. package/src/progress/shared.js +36 -36
  55. package/src/progress/stage-machine.js +29 -1
  56. package/src/progress/step-store.js +261 -261
  57. package/src/progress.js +1131 -1127
  58. package/src/quicklog.js +693 -693
  59. package/src/review-tier.js +77 -77
  60. package/src/run/command.js +1385 -1364
  61. package/src/run/complete-handlers.js +1443 -1399
  62. package/src/run/complete.js +225 -24
  63. package/src/run/gates.js +755 -755
  64. package/src/run/prompt.js +761 -761
  65. package/src/run/quick-audit.js +155 -146
  66. package/src/run/shared.js +1268 -1215
  67. package/src/run/stage.js +487 -479
  68. package/src/scan-postcheck.js +371 -371
  69. package/src/setup.js +416 -416
  70. package/src/sillyhub-mcp/client.js +529 -529
  71. package/src/spec-sync.js +323 -319
  72. package/src/stage-contract.js +897 -897
  73. package/src/stage-review.js +549 -549
  74. package/src/stages/archive.js +155 -155
  75. package/src/stages/brainstorm-auto.js +236 -236
  76. package/src/stages/brainstorm.js +596 -597
  77. package/src/stages/cmd-existence.js +145 -145
  78. package/src/stages/doctor.js +371 -371
  79. package/src/stages/execute.js +1003 -1003
  80. package/src/stages/explore.js +34 -34
  81. package/src/stages/index.js +29 -29
  82. package/src/stages/knowledge.js +498 -498
  83. package/src/stages/plan-postcheck.js +1302 -1302
  84. package/src/stages/plan.js +625 -623
  85. package/src/stages/quick.js +151 -151
  86. package/src/stages/scan.js +607 -607
  87. package/src/stages/status.js +64 -64
  88. package/src/stages/verify.js +264 -264
  89. package/src/sync.js +1223 -1135
  90. package/src/task-review.js +1019 -1019
  91. package/src/verify-postcheck.js +1186 -1186
  92. package/src/workflow.js +600 -600
  93. package/src/worktree-apply.js +1213 -1136
  94. package/src/worktree-deps.js +353 -353
  95. package/src/worktree.js +1481 -1481
  96. package/templates/workflows/archive-impact.yaml +79 -79
  97. package/templates/workflows/scan-docs.yaml +132 -132
@@ -1,155 +1,155 @@
1
- export const definition = {
2
- name: 'archive',
3
- title: '归档变更',
4
- description: '规范沉淀,可追溯',
5
- steps: [
6
- {
7
- name: '任务完成度检查',
8
- prompt: `检查任务完成度,决定是否可归档。
9
-
10
- ### 客观完成度报告(CLI 已注入,勿自行数 checkbox)
11
- {TASK_COMPLETION_REPORT}
12
-
13
- ### 判定规则
14
- - **真相源 = review.json verdict**:上方报告由 CLI 从 .runtime/execute-runs/<runId>/tasks/task-NN/review.json 的 specVerdict + qualityVerdict 算出。
15
- - plan.md 的 - [x] checkbox **仅作显示态参考**:它依赖自动回填,runId marker / review 缺失时会停在未勾态,与客观 verdict 不一致时**以本报告为准**,不要被未勾 checkbox 误导。
16
- - 报告「未通过 / 缺失」= 0 且 source 为 review.json → 完成度合格,进入下一步。
17
- - 报告 source 为 plan-checkbox-fallback(客观源不可用)→ 完成度无法客观确认,**必须暂停**让用户交叉核对,不要直接放行。
18
- - 存在未完成任务 → **必须暂停等待用户决定**,不要自行判断"可以归档"。
19
- - 调用:sillyspec run archive --wait --reason "存在未完成任务,是否继续归档" --options "继续归档,回到execute完成剩余任务" --output "未完成任务列表"
20
-
21
- ### 输出
22
- 完成度报告(已通过/总数 + 数据源 + 未完成任务列表)`,
23
- outputHint: '完成度报告',
24
- optional: false
25
- },
26
- {
27
- name: 'extract-module-impact',
28
- prompt: `最终确认 changes/<change>/module-impact.md(本次变更的模块影响分析)。该文档由 plan review_plan 步生成首版、execute 各 Wave 更新、verify 核对——本步是归档前最后一次确认(module-impact 已非 archive 生成,改活文档终审)。
29
-
30
- ### 操作
31
- 1. 读取 changes/<change>/module-impact.md(应已存在;large 变更 plan 阶段产出首版)
32
- 2. 运行 git diff --name-only HEAD~1(或 git diff --name-only --cached)获取真实修改文件列表
33
- 3. 三重核对:module-impact.md 记录的受影响模块/文件 vs 真实 git diff 文件列表 vs .sillyspec/docs/<project>/modules/_module-map.yaml 模块映射(不存在则仅核 unmapped 部分)。以 git diff 为准(真实 > 记录)
34
- 4. 发现不一致(漏标受影响模块 / 影响类型错误 / 实际未触碰的模块被误标)→ 直接修正 module-impact.md,使其与实际变更一致
35
- 5. module-impact.md 第一行标题必须用中文:# 模块影响分析(Module Impact)— <变更简述>
36
-
37
- ### 降级(module-impact.md 不存在)
38
- 若缺失(如旧变更未经新 plan 流程,或 small 变更从未生成),按原生成逻辑补一份:读 .sillyspec/workflows/archive-impact.yaml 的 impact-analyzer 角色规则 + git diff + _module-map.yaml,生成模块影响矩阵(模块 × 影响类型 × 相关文件 × 更新摘要 × needs_review,未匹配文件归入 unmapped 表)落盘 module-impact.md。
39
-
40
- 确认完成后,下一步 sync-module-docs 会读 module-impact.md 更新模块卡片文档。`,
41
- outputHint: 'module-impact.md 终审结果 + 修正摘要',
42
- optional: false
43
- },
44
- {
45
- name: 'sync-module-docs',
46
- // 坑 verify-archive-flow-pitfalls 坑4:缺 requiresWait 时 --continue --answer 会直接标 completed、
47
- // agent 无机会按 module-impact.md 写入模块卡片。加 requiresWait 使 --continue 确认后回到本步执行写入
48
- requiresWait: true,
49
- prompt: `根据 module-impact.md 同步更新模块索引和卡片文档。
50
-
51
- ### ⚠️ 核心原则:结构化事实改 _module-map.yaml,语义解释改模块卡片
52
- - \`_module-map.yaml\` 是唯一的结构化索引源(paths/tags/entrypoints/depends_on/used_by/status/needs_review)
53
- - 模块卡片只负责语义说明(定位/契约摘要/关键逻辑/注意事项/人工备注)
54
- - 一个信息只维护一次,不要两边重复
55
-
56
- ### 操作
57
- 1. 读取 \`.sillyspec/changes/<change-name>/module-impact.md\`
58
- 2. 如果没有受影响模块(只有 unmapped)→ 提示用户,跳过同步
59
- 3. 对每个受影响模块,按影响类型分别更新:
60
-
61
- #### 更新 _module-map.yaml 的规则
62
- - **路径变化** → 更新对应模块的 paths
63
- - **依赖变化** → 更新 depends_on / used_by(同时更新反向模块的 used_by / depends_on)
64
- - **导出符号变化** → 更新 entrypoints / main_symbols
65
- - **新增模块** → 添加完整条目
66
- - **模块废弃** → status: deprecated
67
- - **不确定的影响** → needs_review: true, review_reasons 追加原因
68
- - 如果 _module-map.yaml 的 generated_at 已过时,更新为当前时间
69
-
70
- #### 更新模块卡片(modules/<module-id>.md)的规则
71
- - **契约语义变化**(新增/删除对外能力) → 更新"契约摘要"
72
- - **关键逻辑变化** → 更新"关键逻辑"
73
- - **边界变化**(模块职责扩大/缩小) → 更新"定位"
74
- - **注意事项变化** → 更新"注意事项"
75
- - **内部实现变化**(不影响对外接口) → 通常不更新卡片
76
- - **人工备注** → 永远保护,不覆盖
77
-
78
- #### 人工备注保护
79
- 1. 用正则提取 \`<!-- MANUAL_NOTES_START -->\` 到 \`<!-- MANUAL_NOTES_END -->\` 之间的内容
80
- 2. 生成新卡片后,原样回填到人工备注区域
81
- 3. 如果标记缺失或重复 → 在 _module-map.yaml 中标记 needs_review: true
82
-
83
- #### 新建模块卡片模板
84
- 一级标题格式 \`# <中文名>(<module-id>)\`——中文名从模块职责提炼 2-8 字,括号内保留 module-id 原样(sillyhub 平台解析识别用,与 scan 生成约定一致)。
85
- \`\`\`markdown
86
- ---
87
- schema_version: 1
88
- doc_type: module-card
89
- module_id: <module-id>
90
- ---
91
-
92
- # <中文名>(<module-id>)
93
-
94
- ## 定位
95
-
96
- ## 契约摘要
97
-
98
- ## 关键逻辑
99
-
100
- ## 注意事项
101
-
102
- ## 人工备注
103
-
104
- <!-- MANUAL_NOTES_START -->
105
-
106
- <!-- MANUAL_NOTES_END -->
107
- \`\`\`
108
-
109
- 4. 展示所有更新内容(diff 摘要),**必须暂停等待用户确认**
110
- - 调用:\`sillyspec run archive --wait --reason "等待用户确认模块文档同步" --options "确认写入,跳过同步" --output "diff 摘要"\`
111
- 5. **只有用户通过 --continue --answer "确认写入" 后才写入文件**
112
- - 写入 _module-map.yaml 和受影响的模块卡片
113
- 6. 用户拒绝时,不写入,但提示"module-impact.md 已保留,可稍后手动同步"
114
- 7. 回填 module-impact.md 的"更新结果"表格,区分目标:
115
- - 目标列写 "\`_module-map.yaml: <module-id>\`" 或 "\`modules/<module-id>.md\`"
116
- 8. **同步完成后**,如需刷新 \`_module-map.yaml\` 索引:\`sillyspec modules rebuild --force\`(默认 dry-run 只预览不写;\`--force\` 才覆盖,但会清空 tags/entrypoints/main_symbols/depends_on/used_by 等手动维护字段——与 archive-impact 的「人工备注保护」约束冲突,仅当手动字段已并入骨架或可接受覆盖时用;优先手动更新 dependencies.md / 模块卡片)
117
-
118
- ### 输出
119
- 已更新的文件路径列表 + 用户确认状态`,
120
- outputHint: '模块文档更新结果',
121
- optional: false
122
- },
123
- {
124
- name: '确认归档',
125
- prompt: `确认归档内容,由 CLI 执行目录移动。
126
-
127
- ### 操作
128
- 1. 展示:变更目录名、包含的文件列表(含 module-impact.md)、生成总结
129
- 2. 确保所有 checkbox 都已勾选
130
- 3. 让用户确认后,用 \`--confirm\` 完成本步骤:
131
- \`sillyspec run archive --done --confirm --output "确认归档"\`
132
- 4. CLI 会创建 \`.sillyspec/changes/archive/\`,并将变更目录移动到 \`.sillyspec/changes/archive/<归档日期>-<纯描述>(源名前导日期去重,避免双日期)/\`
133
-
134
- ### 输出
135
- 归档完成 + archive 目录路径`,
136
- outputHint: '归档确认',
137
- optional: false
138
- },
139
- {
140
- name: '更新路线图和提交',
141
- prompt: `更新路线图并暂存变更。
142
-
143
- ### 操作
144
- 1. 如果 \`.sillyspec/ROADMAP.md\` 存在,标记对应 Phase 为已完成
145
- 2. \`git add .sillyspec/changes/archive/\` — 暂存归档结果(archive/ 下仅本次归档新增,不会裹挟 changes/ 下其他活跃变更;不要 commit,由用户通过统一提交工具处理)
146
- 3. \`git add .sillyspec/docs/<project>/modules/\` — 暂存模块文档更新(如有;精确到本次同步的模块文档,勿 add 整个 .sillyspec/docs/)
147
- 4. 确认 sillyspec.db 中该变更已不再 active(确认归档步骤由 CLI 调用 unregisterChange)
148
-
149
- ### 输出
150
- 归档完成确认 + 累积规范统计`,
151
- outputHint: '归档完成',
152
- optional: false
153
- }
154
- ]
155
- }
1
+ export const definition = {
2
+ name: 'archive',
3
+ title: '归档变更',
4
+ description: '规范沉淀,可追溯',
5
+ steps: [
6
+ {
7
+ name: '任务完成度检查',
8
+ prompt: `检查任务完成度,决定是否可归档。
9
+
10
+ ### 客观完成度报告(CLI 已注入,勿自行数 checkbox)
11
+ {TASK_COMPLETION_REPORT}
12
+
13
+ ### 判定规则
14
+ - **真相源 = review.json verdict**:上方报告由 CLI 从 .runtime/execute-runs/<runId>/tasks/task-NN/review.json 的 specVerdict + qualityVerdict 算出。
15
+ - plan.md 的 - [x] checkbox **仅作显示态参考**:它依赖自动回填,runId marker / review 缺失时会停在未勾态,与客观 verdict 不一致时**以本报告为准**,不要被未勾 checkbox 误导。
16
+ - 报告「未通过 / 缺失」= 0 且 source 为 review.json → 完成度合格,进入下一步。
17
+ - 报告 source 为 plan-checkbox-fallback(客观源不可用)→ 完成度无法客观确认,**必须暂停**让用户交叉核对,不要直接放行。
18
+ - 存在未完成任务 → **必须暂停等待用户决定**,不要自行判断"可以归档"。
19
+ - 调用:sillyspec run archive --wait --reason "存在未完成任务,是否继续归档" --options "继续归档,回到execute完成剩余任务" --output "未完成任务列表"
20
+
21
+ ### 输出
22
+ 完成度报告(已通过/总数 + 数据源 + 未完成任务列表)`,
23
+ outputHint: '完成度报告',
24
+ optional: false
25
+ },
26
+ {
27
+ name: 'extract-module-impact',
28
+ prompt: `最终确认 changes/<change>/module-impact.md(本次变更的模块影响分析)。该文档由 plan review_plan 步生成首版、execute 各 Wave 更新、verify 核对——本步是归档前最后一次确认(module-impact 已非 archive 生成,改活文档终审)。
29
+
30
+ ### 操作
31
+ 1. 读取 changes/<change>/module-impact.md(应已存在;large 变更 plan 阶段产出首版)
32
+ 2. 运行 git diff --name-only HEAD~1(或 git diff --name-only --cached)获取真实修改文件列表
33
+ 3. 三重核对:module-impact.md 记录的受影响模块/文件 vs 真实 git diff 文件列表 vs .sillyspec/docs/<project>/modules/_module-map.yaml 模块映射(不存在则仅核 unmapped 部分)。以 git diff 为准(真实 > 记录)
34
+ 4. 发现不一致(漏标受影响模块 / 影响类型错误 / 实际未触碰的模块被误标)→ 直接修正 module-impact.md,使其与实际变更一致
35
+ 5. module-impact.md 第一行标题必须用中文:# 模块影响分析(Module Impact)— <变更简述>
36
+
37
+ ### 降级(module-impact.md 不存在)
38
+ 若缺失(如旧变更未经新 plan 流程,或 small 变更从未生成),按原生成逻辑补一份:读 .sillyspec/workflows/archive-impact.yaml 的 impact-analyzer 角色规则 + git diff + _module-map.yaml,生成模块影响矩阵(模块 × 影响类型 × 相关文件 × 更新摘要 × needs_review,未匹配文件归入 unmapped 表)落盘 module-impact.md。
39
+
40
+ 确认完成后,下一步 sync-module-docs 会读 module-impact.md 更新模块卡片文档。`,
41
+ outputHint: 'module-impact.md 终审结果 + 修正摘要',
42
+ optional: false
43
+ },
44
+ {
45
+ name: 'sync-module-docs',
46
+ // 坑 verify-archive-flow-pitfalls 坑4:缺 requiresWait 时 --continue --answer 会直接标 completed、
47
+ // agent 无机会按 module-impact.md 写入模块卡片。加 requiresWait 使 --continue 确认后回到本步执行写入
48
+ requiresWait: true,
49
+ prompt: `根据 module-impact.md 同步更新模块索引和卡片文档。
50
+
51
+ ### ⚠️ 核心原则:结构化事实改 _module-map.yaml,语义解释改模块卡片
52
+ - \`_module-map.yaml\` 是唯一的结构化索引源(paths/tags/entrypoints/depends_on/used_by/status/needs_review)
53
+ - 模块卡片只负责语义说明(定位/契约摘要/关键逻辑/注意事项/人工备注)
54
+ - 一个信息只维护一次,不要两边重复
55
+
56
+ ### 操作
57
+ 1. 读取 \`.sillyspec/changes/<change-name>/module-impact.md\`
58
+ 2. 如果没有受影响模块(只有 unmapped)→ 提示用户,跳过同步
59
+ 3. 对每个受影响模块,按影响类型分别更新:
60
+
61
+ #### 更新 _module-map.yaml 的规则
62
+ - **路径变化** → 更新对应模块的 paths
63
+ - **依赖变化** → 更新 depends_on / used_by(同时更新反向模块的 used_by / depends_on)
64
+ - **导出符号变化** → 更新 entrypoints / main_symbols
65
+ - **新增模块** → 添加完整条目
66
+ - **模块废弃** → status: deprecated
67
+ - **不确定的影响** → needs_review: true, review_reasons 追加原因
68
+ - 如果 _module-map.yaml 的 generated_at 已过时,更新为当前时间
69
+
70
+ #### 更新模块卡片(modules/<module-id>.md)的规则
71
+ - **契约语义变化**(新增/删除对外能力) → 更新"契约摘要"
72
+ - **关键逻辑变化** → 更新"关键逻辑"
73
+ - **边界变化**(模块职责扩大/缩小) → 更新"定位"
74
+ - **注意事项变化** → 更新"注意事项"
75
+ - **内部实现变化**(不影响对外接口) → 通常不更新卡片
76
+ - **人工备注** → 永远保护,不覆盖
77
+
78
+ #### 人工备注保护
79
+ 1. 用正则提取 \`<!-- MANUAL_NOTES_START -->\` 到 \`<!-- MANUAL_NOTES_END -->\` 之间的内容
80
+ 2. 生成新卡片后,原样回填到人工备注区域
81
+ 3. 如果标记缺失或重复 → 在 _module-map.yaml 中标记 needs_review: true
82
+
83
+ #### 新建模块卡片模板
84
+ 一级标题格式 \`# <中文名>(<module-id>)\`——中文名从模块职责提炼 2-8 字,括号内保留 module-id 原样(sillyhub 平台解析识别用,与 scan 生成约定一致)。
85
+ \`\`\`markdown
86
+ ---
87
+ schema_version: 1
88
+ doc_type: module-card
89
+ module_id: <module-id>
90
+ ---
91
+
92
+ # <中文名>(<module-id>)
93
+
94
+ ## 定位
95
+
96
+ ## 契约摘要
97
+
98
+ ## 关键逻辑
99
+
100
+ ## 注意事项
101
+
102
+ ## 人工备注
103
+
104
+ <!-- MANUAL_NOTES_START -->
105
+
106
+ <!-- MANUAL_NOTES_END -->
107
+ \`\`\`
108
+
109
+ 4. 展示所有更新内容(diff 摘要),**必须暂停等待用户确认**
110
+ - 调用:\`sillyspec run archive --wait --reason "等待用户确认模块文档同步" --options "确认写入,跳过同步" --output "diff 摘要"\`
111
+ 5. **只有用户通过 --continue --answer "确认写入" 后才写入文件**
112
+ - 写入 _module-map.yaml 和受影响的模块卡片
113
+ 6. 用户拒绝时,不写入,但提示"module-impact.md 已保留,可稍后手动同步"
114
+ 7. 回填 module-impact.md 的"更新结果"表格,区分目标:
115
+ - 目标列写 "\`_module-map.yaml: <module-id>\`" 或 "\`modules/<module-id>.md\`"
116
+ 8. **同步完成后**,如需刷新 \`_module-map.yaml\` 索引:\`sillyspec modules rebuild --force\`(默认 dry-run 只预览不写;\`--force\` 才覆盖,但会清空 tags/entrypoints/main_symbols/depends_on/used_by 等手动维护字段——与 archive-impact 的「人工备注保护」约束冲突,仅当手动字段已并入骨架或可接受覆盖时用;优先手动更新 dependencies.md / 模块卡片)
117
+
118
+ ### 输出
119
+ 已更新的文件路径列表 + 用户确认状态`,
120
+ outputHint: '模块文档更新结果',
121
+ optional: false
122
+ },
123
+ {
124
+ name: '确认归档',
125
+ prompt: `确认归档内容,由 CLI 执行目录移动。
126
+
127
+ ### 操作
128
+ 1. 展示:变更目录名、包含的文件列表(含 module-impact.md)、生成总结
129
+ 2. 确保所有 checkbox 都已勾选
130
+ 3. 让用户确认后,用 \`--confirm\` 完成本步骤:
131
+ \`sillyspec run archive --done --confirm --output "确认归档"\`
132
+ 4. CLI 会创建 \`.sillyspec/changes/archive/\`,并将变更目录移动到 \`.sillyspec/changes/archive/<归档日期>-<纯描述>(源名前导日期去重,避免双日期)/\`
133
+
134
+ ### 输出
135
+ 归档完成 + archive 目录路径`,
136
+ outputHint: '归档确认',
137
+ optional: false
138
+ },
139
+ {
140
+ name: '更新路线图和提交',
141
+ prompt: `更新路线图并暂存变更。
142
+
143
+ ### 操作
144
+ 1. 如果 \`.sillyspec/ROADMAP.md\` 存在,标记对应 Phase 为已完成
145
+ 2. \`git add .sillyspec/changes/archive/\` — 暂存归档结果(archive/ 下仅本次归档新增,不会裹挟 changes/ 下其他活跃变更;不要 commit,由用户通过统一提交工具处理)
146
+ 3. \`git add .sillyspec/docs/<project>/modules/\` — 暂存模块文档更新(如有;精确到本次同步的模块文档,勿 add 整个 .sillyspec/docs/)
147
+ 4. 确认 sillyspec.db 中该变更已不再 active(确认归档步骤由 CLI 调用 unregisterChange)
148
+
149
+ ### 输出
150
+ 归档完成确认 + 累积规范统计`,
151
+ outputHint: '归档完成',
152
+ optional: false
153
+ }
154
+ ]
155
+ }