sillyspec 3.28.3 → 3.28.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.
- package/.claude/skills/sillyspec-auto/SKILL.md +54 -54
- package/.claude/skills/sillyspec-brainstorm/SKILL.md +114 -114
- package/.claude/skills/sillyspec-continue/SKILL.md +17 -17
- package/.claude/skills/sillyspec-execute/SKILL.md +222 -222
- package/.claude/skills/sillyspec-knowledge/SKILL.md +40 -40
- package/.claude/skills/sillyspec-plan/SKILL.md +156 -156
- package/.claude/skills/sillyspec-propose/SKILL.md +16 -16
- package/.claude/skills/sillyspec-resume/SKILL.md +21 -21
- package/.claude/skills/sillyspec-state/SKILL.md +25 -25
- package/.claude/skills/sillyspec-workspace/SKILL.md +33 -33
- package/AGENTS.md +25 -0
- package/INSTRUCTIONS.md +12 -0
- package/package.json +1 -1
- package/results-review-tier.md +18 -0
- package/src/agent-session-log.js +4 -3
- package/src/archive-delta.js +82 -0
- package/src/change-delete.js +2 -1
- package/src/change-list.js +18 -3
- package/src/change-risk-profile.js +77 -6
- package/src/commit-suggest.js +52 -1
- package/src/config-cat.js +17 -1
- package/src/constants.js +3 -1
- package/src/decision-distill.js +45 -5
- package/src/decisions-io.js +96 -0
- package/src/design-facts.js +3 -0
- package/src/dispatch/probe.js +31 -8
- package/src/docs-check.js +102 -3
- package/src/doctor-diagnostics.js +441 -5
- package/src/foreign-declared.js +53 -2
- package/src/index.js +606 -22
- package/src/mcp-server.js +144 -0
- package/src/module-impact.js +84 -12
- package/src/modules.js +46 -34
- package/src/plan-adopt-waves.js +13 -5
- package/src/progress/change-registry.js +34 -0
- package/src/progress.js +75 -2
- package/src/quick-recommend.js +6 -1
- package/src/quicklog.js +70 -8
- package/src/review-dispatch.js +377 -0
- package/src/run/archive-distill.js +48 -0
- package/src/run/command.js +48 -13
- package/src/run/complete-handlers.js +215 -9
- package/src/run/complete.js +184 -2
- package/src/run/gate-snapshot.js +88 -0
- package/src/run/gates.js +206 -58
- package/src/run/prompt.js +150 -14
- package/src/run/quick-audit.js +38 -13
- package/src/run/shared.js +183 -12
- package/src/run/stage.js +52 -2
- package/src/run/verify-quality-scan.js +336 -0
- package/src/runtime-hygiene.js +84 -0
- package/src/scope-audit.js +735 -0
- package/src/sillyhub-mcp/client.js +58 -3
- package/src/spec-sync.js +63 -8
- package/src/stage-contract.js +83 -3
- package/src/stage-review-checklist.js +44 -0
- package/src/stage-review.js +125 -4
- package/src/stages/archive.js +60 -167
- package/src/stages/brainstorm.js +7 -17
- package/src/stages/doctor.js +41 -515
- package/src/stages/execute.js +13 -10
- package/src/stages/plan-postcheck.js +191 -7
- package/src/stages/plan.js +7 -35
- package/src/stages/quick.js +11 -11
- package/src/stages/verify.js +24 -39
- package/src/sync-noise.js +158 -0
- package/src/sync.js +93 -27
- package/src/task-review.js +133 -17
- package/src/taskcard.js +46 -3
- package/src/validate-artifacts.js +163 -0
- package/src/verify-facts-schema.js +141 -0
- package/src/verify-postcheck.js +347 -29
- package/src/verify-probes.js +275 -24
- package/src/workflow.js +6 -0
- package/src/worktree-apply.js +167 -24
- package/src/worktree.js +5 -1
- package/templates/agents-instruction.md +1 -0
package/src/stages/archive.js
CHANGED
|
@@ -4,163 +4,65 @@ export const definition = {
|
|
|
4
4
|
description: '规范沉淀,可追溯',
|
|
5
5
|
steps: [
|
|
6
6
|
{
|
|
7
|
-
name: '
|
|
8
|
-
prompt
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
- 存在未完成任务 → **必须暂停等待用户决定**,不要自行判断"可以归档"。
|
|
20
|
-
- 调用:sillyspec run archive --wait --reason "存在未完成任务,是否继续归档" --options "继续归档,回到execute完成剩余任务" --output "未完成任务列表"
|
|
21
|
-
|
|
22
|
-
### 输出
|
|
23
|
-
完成度报告(已通过/总数 + 数据源 + 未完成任务列表)`,
|
|
24
|
-
outputHint: '完成度报告',
|
|
25
|
-
optional: false
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
name: 'extract-module-impact',
|
|
29
|
-
prompt: `最终确认 changes/<change>/module-impact.md(本次变更的模块影响分析)。该文档由 plan review_plan 步生成首版、execute 各 Wave 更新、verify 核对——本步是归档前最后一次确认(module-impact 已非 archive 生成,改活文档终审)。
|
|
30
|
-
|
|
31
|
-
### 操作
|
|
32
|
-
1. 读取 changes/<change>/module-impact.md(应已存在;large 变更 plan 阶段产出首版)
|
|
33
|
-
2. 运行 git diff --name-only HEAD~1(或 git diff --name-only --cached)获取真实修改文件列表
|
|
34
|
-
3. 三重核对:module-impact.md 记录的受影响模块/文件 vs 真实 git diff 文件列表 vs .sillyspec/docs/<project>/modules/_module-map.yaml 模块映射(不存在则仅核 unmapped 部分)。以 git diff 为准(真实 > 记录)
|
|
35
|
-
4. 发现不一致(漏标受影响模块 / 影响类型错误 / 实际未触碰的模块被误标)→ 直接修正 module-impact.md,使其与实际变更一致
|
|
36
|
-
5. module-impact.md 第一行标题必须用中文:# 模块影响分析(Module Impact)— <变更简述>
|
|
37
|
-
|
|
38
|
-
### 降级(module-impact.md 不存在)
|
|
39
|
-
若缺失(如旧变更未经新 plan 流程,或 small 变更从未生成):先跑 \`sillyspec module-impact --change <change-name>\`——CLI 按 _module-map.yaml paths 前缀匹配预填「模块影响矩阵」骨架(文件×模块归属 + 未匹配文件清单,机械部分全代算),你只需逐行填「影响类型」(逻辑变更/数据结构变更/接口变更/调用关系变更/配置变更/新增)与 needs_review 标记,补首行中文标题 \`# 模块影响分析(Module Impact)— <变更简述>\`。骨架无从生成(无 module-map / 无 diff)时才按 archive-impact.yaml 的 impact-analyzer 角色规则全手写。
|
|
40
|
-
|
|
41
|
-
确认完成后,下一步 sync-module-docs 会读 module-impact.md 更新模块卡片文档。`,
|
|
42
|
-
outputHint: 'module-impact.md 终审结果 + 修正摘要',
|
|
43
|
-
optional: false
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
name: 'sync-module-docs',
|
|
47
|
-
// conditionalWait(坑 archive-subconfirm-redundant,2026-08-23 实证:requiresWait 硬门强制
|
|
48
|
-
// 三段式 --wait → --continue --answer → --done,与 verify 文档同步阻断门、归档移动前死信
|
|
49
|
-
// 校验、下一步「确认归档 --confirm」四层确认重复,交互碎。改 conditionalWait(brainstorm-auto
|
|
50
|
-
// 同款先例):常规同步直接写入 + --done(agent 写入动作在 --done 前完成,坑 verify-archive-
|
|
51
|
-
// flow-pitfalls 坑4 的「无机会写入」不回归);仅异常(needs_review/未映射/标记缺失)才 --wait
|
|
52
|
-
// 请用户裁决。用户确认收敛到「确认归档 --confirm」一处。
|
|
53
|
-
conditionalWait: true,
|
|
54
|
-
repeatableWait: true,
|
|
55
|
-
maxWaitRounds: 3,
|
|
56
|
-
waitReason: '等待用户裁决模块文档同步异常',
|
|
57
|
-
waitOptions: ['确认写入', '跳过同步'],
|
|
58
|
-
prompt: `根据 module-impact.md 同步更新模块索引和卡片文档。
|
|
59
|
-
|
|
60
|
-
### ⚠️ 核心原则:结构化事实改 _module-map.yaml,语义解释改模块卡片
|
|
61
|
-
- \`_module-map.yaml\` 是唯一的结构化索引源(paths/tags/entrypoints/depends_on/used_by/status/needs_review)
|
|
62
|
-
- 模块卡片只负责语义说明(定位/契约摘要/关键逻辑/注意事项/人工备注)
|
|
63
|
-
- 一个信息只维护一次,不要两边重复
|
|
64
|
-
|
|
65
|
-
### 操作
|
|
66
|
-
1. 读取 \`.sillyspec/changes/<change-name>/module-impact.md\`
|
|
67
|
-
2. 如果没有受影响模块(只有 unmapped)→ 提示用户,跳过同步
|
|
68
|
-
3. 对每个受影响模块,按影响类型分别更新:
|
|
69
|
-
|
|
70
|
-
#### 更新 _module-map.yaml 的规则
|
|
71
|
-
- **路径变化** → 更新对应模块的 paths
|
|
72
|
-
- **依赖变化** → 更新 depends_on / used_by(同时更新反向模块的 used_by / depends_on)
|
|
73
|
-
- **导出符号变化** → 更新 entrypoints / main_symbols
|
|
74
|
-
- **新增模块** → 添加完整条目
|
|
75
|
-
- **模块废弃** → status: deprecated
|
|
76
|
-
- **不确定的影响** → needs_review: true, review_reasons 追加原因
|
|
77
|
-
- 如果 _module-map.yaml 的 generated_at 已过时,更新为当前时间
|
|
78
|
-
|
|
79
|
-
#### 更新模块卡片(modules/<module-id>.md)的规则
|
|
80
|
-
- **契约语义变化**(新增/删除对外能力) → 更新"契约摘要"
|
|
81
|
-
- **关键逻辑变化** → 更新"关键逻辑"
|
|
82
|
-
- **边界变化**(模块职责扩大/缩小) → 更新"定位"
|
|
83
|
-
- **注意事项变化** → 更新"注意事项"
|
|
84
|
-
- **内部实现变化**(不影响对外接口) → 通常不更新卡片
|
|
85
|
-
- **人工备注** → 永远保护,不覆盖
|
|
86
|
-
|
|
87
|
-
#### 人工备注保护
|
|
88
|
-
1. 用正则提取 \`<!-- MANUAL_NOTES_START -->\` 到 \`<!-- MANUAL_NOTES_END -->\` 之间的内容
|
|
89
|
-
2. 生成新卡片后,原样回填到人工备注区域
|
|
90
|
-
3. 如果标记缺失或重复 → 在 _module-map.yaml 中标记 needs_review: true
|
|
91
|
-
|
|
92
|
-
#### 新建模块卡片模板
|
|
93
|
-
一级标题格式 \`# <中文名>(<module-id>)\`——中文名从模块职责提炼 2-8 字,括号内保留 module-id 原样(sillyhub 平台解析识别用,与 scan 生成约定一致)。frontmatter 已带 author/created_at 真值(<git-user>/<now-datetime> 占位符由 CLI 每步替换),照抄即过元数据校验、勿删。
|
|
94
|
-
\`\`\`markdown
|
|
95
|
-
---
|
|
96
|
-
schema_version: 1
|
|
97
|
-
doc_type: module-card
|
|
98
|
-
module_id: <module-id>
|
|
99
|
-
author: <git-user>
|
|
100
|
-
created_at: <now-datetime>
|
|
101
|
-
---
|
|
102
|
-
|
|
103
|
-
# <中文名>(<module-id>)
|
|
104
|
-
|
|
105
|
-
## 定位
|
|
106
|
-
|
|
107
|
-
## 契约摘要
|
|
108
|
-
|
|
109
|
-
## 关键逻辑
|
|
110
|
-
|
|
111
|
-
## 注意事项
|
|
112
|
-
|
|
113
|
-
## 人工备注
|
|
114
|
-
|
|
115
|
-
<!-- MANUAL_NOTES_START -->
|
|
116
|
-
|
|
117
|
-
<!-- MANUAL_NOTES_END -->
|
|
118
|
-
\`\`\`
|
|
119
|
-
|
|
120
|
-
4. 展示所有更新内容(diff 摘要),按同步状态分流:
|
|
121
|
-
- **常规**(无 needs_review 影响、无 unmapped 模块、人工备注标记齐全)→ **直接写入** _module-map.yaml 和受影响的模块卡片,diff 摘要写入 --output 后 --done(本步不单独弹确认——用户确认收敛到下一步「确认归档 --confirm」,该步展示同一 diff 摘要)
|
|
122
|
-
- **异常**(含 needs_review 影响项 / unmapped 模块 / 人工备注标记缺失或重复 / 覆盖会丢失手动维护字段)→ 暂停请用户裁决:
|
|
123
|
-
\`sillyspec run archive --wait --reason "等待用户裁决模块文档同步异常" --options "确认写入,跳过同步" --output "diff 摘要 + 异常说明"\`
|
|
124
|
-
用户 --continue --answer "确认写入" 后写入;"跳过同步" 则不写入,提示 "module-impact.md 已保留,可稍后手动同步"
|
|
125
|
-
5. 回填 module-impact.md 的"更新结果"表格,区分目标:
|
|
126
|
-
- 目标列写 "\`_module-map.yaml: <module-id>\`" 或 "\`modules/<module-id>.md\`"
|
|
127
|
-
6. **同步完成后**,如需刷新 \`_module-map.yaml\` 索引:\`sillyspec modules rebuild --force\`(默认 dry-run 只预览不写;\`--force\` 才覆盖,但会清空 tags/entrypoints/main_symbols/depends_on/used_by 等手动维护字段——与 archive-impact 的「人工备注保护」约束冲突,仅当手动字段已并入骨架或可接受覆盖时用;优先手动更新 dependencies.md / 模块卡片)
|
|
128
|
-
|
|
129
|
-
### 输出
|
|
130
|
-
已更新的文件路径列表 + diff 摘要(异常时附裁决结果)`,
|
|
131
|
-
outputHint: '模块文档更新结果',
|
|
7
|
+
name: 'decision-distill 决策提炼',
|
|
8
|
+
// noAI 化(P0-4 安全变体,noai-ir-roadmap §3):旧 prompt 本身就是「调用 CLI 纯函数
|
|
9
|
+
// distillIntoKnowledge 并转述返回」——全流程最纯的中继步,LLM 零判断增量。提炼本体
|
|
10
|
+
// 改由 _cliAction(run/archive-distill.js)机械执行:written 逐条打印 / skipped 零输出
|
|
11
|
+
// 注记 / needsWait(rejected 缺字段)打印裁决指引——人工裁决从本步 conditionalWait
|
|
12
|
+
// 三段式收敛到「确认归档 --confirm」的用户确认点(归档用户裁决本就归那里)。全路径
|
|
13
|
+
// 不抛(裁决是确认步输入,非本步阻断条件);异常降级跳过不阻断归档(旧步第 4 点
|
|
14
|
+
// best-effort 语义)。步骤名不变(存量进度库按名匹配零漂移)。
|
|
15
|
+
noAI: true,
|
|
16
|
+
_cliAction: 'archiveDistill',
|
|
17
|
+
prompt: '',
|
|
18
|
+
outputHint: '决策提炼结果(CLI 机械执行输出)',
|
|
132
19
|
optional: false
|
|
133
20
|
},
|
|
134
21
|
{
|
|
135
|
-
name: '
|
|
136
|
-
//
|
|
137
|
-
//
|
|
138
|
-
//
|
|
139
|
-
//
|
|
22
|
+
name: 'extract-module-impact 与归档语义收尾',
|
|
23
|
+
// P0-4 全量并步(noai-ir-roadmap §3,含 §2 砍步取证):吸收旧「任务完成度检查 /
|
|
24
|
+
// extract-module-impact / sync-module-docs / 更新路线图和提交」四步——取证结论:
|
|
25
|
+
// 三处注视点(完成度暂停判定 / 模块文档同步异常裁决 / 确认归档 diff 注视)全部保留,
|
|
26
|
+
// 合并只砍仪式性 --done 往返(6 步 6 次 → 3 步 2 次人工 --done + 1 次 noAI)。
|
|
27
|
+
// 步骤名保留「extract-module-impact」子串:complete-handlers 的 workflow post_check
|
|
28
|
+
// 按名内含匹配本步,零改动。conditionalWait 合并 sync-module-docs 先例(坑
|
|
29
|
+
// archive-subconfirm-redundant):常规直接写入 + --done,异常才 --wait。
|
|
30
|
+
migratedFrom: ['任务完成度检查', 'extract-module-impact', 'sync-module-docs', '更新路线图和提交'],
|
|
140
31
|
conditionalWait: true,
|
|
141
32
|
repeatableWait: true,
|
|
142
33
|
maxWaitRounds: 3,
|
|
143
|
-
waitReason: '
|
|
144
|
-
waitOptions: ['
|
|
145
|
-
prompt:
|
|
34
|
+
waitReason: '等待用户裁决归档语义收尾异常(模块文档同步/完成度存疑)',
|
|
35
|
+
waitOptions: ['确认继续', '跳过该项'],
|
|
36
|
+
prompt: `归档语义收尾:完成度判定 → module-impact 终审 → 模块文档同步 → 路线图更新,一次完成。
|
|
146
37
|
|
|
147
|
-
###
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
38
|
+
### ① 任务完成度判定(真相源 = review.json)
|
|
39
|
+
#### 客观完成度报告(CLI 已注入,勿自行数 checkbox)
|
|
40
|
+
{TASK_COMPLETION_REPORT}
|
|
41
|
+
- tasks.md 的 - [x] checkbox 仅作显示态参考(自动回填可能停在未勾态,与客观 verdict 不一致时以报告为准)。
|
|
42
|
+
- 报告「未通过 / 缺失」= 0 且 source 为 review.json → 完成度合格,继续 ②。
|
|
43
|
+
- 「cannot_verify 草稿(未真正复核)」计数 > 0 → 先确认 verify 阶段已兑现其 requiredEvidence;缺证据的派独立子代理对照 task brief + git diff 补真实复核(升级 pass/fail),勿静默放行。
|
|
44
|
+
- source 为 plan-checkbox-fallback(客观源不可用)或存在未完成任务 → --wait 请用户裁决,勿自行放行。
|
|
45
|
+
|
|
46
|
+
### ② module-impact 终审(机械核对已由 CLI 代算——不要重跑 git diff 手工比对,直接消费报告)
|
|
47
|
+
{ARCHIVE_IMPACT_AUDIT}
|
|
48
|
+
- 报告标「不一致」的项才需裁决修正 module-impact.md(以 git diff 为准——真实 > 记录);「一致 ✓」跳过。
|
|
49
|
+
- module-impact.md 缺失时先跑 \`sillyspec module-impact --change <change-name>\` 生成骨架(含「## 模块影响矩阵」「## 未匹配文件」「## 更新结果」三章节——workflow contains_sections 契约同源,勿删章节;归属列 CLI 预填),逐行填「影响类型」与 review 标记,未命中文件归「未匹配文件」章节;首行标题用中文 \`# 模块影响分析(Module Impact)— <变更简述>\`。
|
|
50
|
+
|
|
51
|
+
### ③ 模块文档同步(结构化事实改 _module-map.yaml,语义解释改模块卡片,一个信息只维护一次)
|
|
52
|
+
- 按 module-impact 影响类型更新 _module-map.yaml(paths/depends_on/used_by/entrypoints/status/needs_review)与受影响模块卡片(契约摘要/关键逻辑/定位/注意事项;内部实现变化通常不更新卡片)。
|
|
53
|
+
- 人工备注(MANUAL_NOTES 标记区间)永远保护回填;标记缺失/重复 → needs_review: true。
|
|
54
|
+
- 新建卡片用骨架模板(frontmatter \`author: <git-user>\` / \`created_at: <now-datetime>\` 占位符由 CLI 每步替换真值,照抄即过元数据校验);一级标题 \`# <中文名>(<module-id>)\`。
|
|
55
|
+
- 常规(无 needs_review 影响/无 unmapped/人工备注标记齐全)→ 直接写入 + --done;异常(needs_review/unmapped/备注标记缺失/覆盖丢手动字段)→ --wait 请用户裁决。
|
|
56
|
+
- 回填 module-impact.md「更新结果」表(目标列 \`_module-map.yaml: <module-id>\` 或 \`modules/<module-id>.md\`,区分 done/skipped)——verify 已硬校验无 pending 死信,此处保持清零。
|
|
57
|
+
- 如需 rebuild 索引:\`sillyspec modules rebuild --force\` 会清空手动维护字段,仅当可接受时用(优先手动更新)。
|
|
58
|
+
|
|
59
|
+
### ④ 路线图更新
|
|
60
|
+
- \`.sillyspec/ROADMAP.md\` 存在 → 标记对应 Phase 为已完成。
|
|
61
|
+
- DB 注销由「确认归档」--confirm 时 CLI 完成(unregisterChange),无需手动。
|
|
160
62
|
|
|
161
63
|
### 输出
|
|
162
|
-
|
|
163
|
-
outputHint: '
|
|
64
|
+
完成度判定结论 + module-impact 修正摘要 + 已同步文件列表 + 路线图更新(异常时附裁决结果)`,
|
|
65
|
+
outputHint: '归档语义收尾结果',
|
|
164
66
|
optional: false
|
|
165
67
|
},
|
|
166
68
|
{
|
|
@@ -169,10 +71,17 @@ created_at: <now-datetime>
|
|
|
169
71
|
|
|
170
72
|
### 操作
|
|
171
73
|
1. 展示:变更目录名、包含的文件列表(含 module-impact.md)、生成总结
|
|
172
|
-
2.
|
|
173
|
-
|
|
74
|
+
2. 展示变更范围对账表(计划改动 × 实际改动三态全表 + 行数——CLI 机械注入如下,勿手算勿手改;⚠️ 计划外文件补 design.md 声明或 --output 注明原因,计划未动文件确认是否遗漏;advisory 对账不阻断归档,注入异常时该区置换单行降级指引,回退手跑 \`sillyspec scope-audit --change <变更名>\`):
|
|
75
|
+
|
|
76
|
+
{SCOPE_AUDIT_TABLE}
|
|
77
|
+
|
|
78
|
+
3. 确保任务清单(tasks.md)所有 task checkbox 都已勾选;对照下方完成度快照做归档前最后注视(未完成/存疑 → 停下勿确认):
|
|
79
|
+
{TASK_COMPLETION_REPORT}
|
|
80
|
+
4. 若上一步机械决策提炼输出「⚠️ rejected 决策缺否决理由/复潮条件(needsWait)」:先按其指引处理——补录 decisions.md 缺失字段后重跑提炼命令(幂等),或经用户裁决跳过该条;处理结果写进本步 --output
|
|
81
|
+
5. **git 暂存已由 CLI 自动完成**(归档完成时自动 add:\`.sillyspec/changes/archive/\`、本次同步的模块文档、\`.sillyspec/knowledge/decisions/\`——未提交,由用户通过统一提交工具处理)——你不需要也不应该手动 git add
|
|
82
|
+
6. 让用户确认后,用 \`--confirm\` 完成本步骤:
|
|
174
83
|
\`sillyspec run archive --done --confirm --output "确认归档"\`
|
|
175
|
-
|
|
84
|
+
7. CLI 会创建 \`.sillyspec/changes/archive/\`,并将变更目录移动到 \`.sillyspec/changes/archive/<原变更名>/\`
|
|
176
85
|
|
|
177
86
|
### 输出
|
|
178
87
|
归档完成 + archive 目录路径`,
|
|
@@ -184,21 +93,5 @@ created_at: <now-datetime>
|
|
|
184
93
|
requiresConfirm: true,
|
|
185
94
|
optional: false
|
|
186
95
|
},
|
|
187
|
-
{
|
|
188
|
-
name: '更新路线图和提交',
|
|
189
|
-
prompt: `更新路线图并确认归档。
|
|
190
|
-
|
|
191
|
-
### 操作
|
|
192
|
-
1. 如果 \`.sillyspec/ROADMAP.md\` 存在,标记对应 Phase 为已完成
|
|
193
|
-
2. 确认 sillyspec.db 中该变更已不再 active(确认归档步骤由 CLI 调用 unregisterChange)
|
|
194
|
-
|
|
195
|
-
### 说明
|
|
196
|
-
- **git 暂存已由 CLI 自动完成**(归档完成时自动 add:\`.sillyspec/changes/archive/\`、本次同步的模块文档、\`.sillyspec/knowledge/decisions/\`——未提交,由用户通过统一提交工具处理)——你不需要也不应该手动 git add
|
|
197
|
-
|
|
198
|
-
### 输出
|
|
199
|
-
归档完成确认 + 累积规范统计`,
|
|
200
|
-
outputHint: '归档完成',
|
|
201
|
-
optional: false
|
|
202
|
-
}
|
|
203
96
|
]
|
|
204
97
|
}
|
package/src/stages/brainstorm.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { REVIEW_CHECKLISTS } from '../stage-review-checklist.js'
|
|
2
|
+
|
|
1
3
|
export const definition = {
|
|
2
4
|
name: 'brainstorm',
|
|
3
5
|
title: '头脑风暴',
|
|
@@ -156,6 +158,7 @@ export const definition = {
|
|
|
156
158
|
|
|
157
159
|
**决策记录(增量落盘,防会话中断丢失)**:每解决一个有实现影响的问题(不要把闲聊都记录进去),**当场追加**写入 \`{SPEC_ROOT}/changes/<change-name>/decisions.md\`——不要只在对话里留草稿等「写设计文档」步统一落盘:会话随时可能中断,未落盘的决策无法跨会话恢复。落盘规则:
|
|
158
160
|
|
|
161
|
+
- **优先跑 \`sillyspec fourpiece-init --change <change-name>\` 生成骨架再填语义**(2026-09-09 起:proposal/requirements/decisions 的 frontmatter/章节标题由 CLI 预生成,已存在不覆盖——手写 frontmatter/章节漏项是格式返工根源);design.md 骨架归 \`sillyspec design-init\`
|
|
159
162
|
- 文件不存在则先创建:变更目录缺失先 \`mkdir -p {SPEC_ROOT}/changes/<change-name>\`;文件头部写 YAML frontmatter(\`author: <git-user>\` / \`created_at: <now-datetime>\`)+ 标题 \`# 决策记录(Decisions)\`
|
|
160
163
|
- 每条记录追加到文件末尾,格式如下:
|
|
161
164
|
|
|
@@ -354,14 +357,7 @@ design.md 第一行标题必须用中文:# 设计文档(Design)— <变更
|
|
|
354
357
|
- 否决理由:一句话说明为何否决(status=rejected 时必填)
|
|
355
358
|
- 复潮条件:什么前提下可重新考虑该决策(status=rejected 时必填)
|
|
356
359
|
- 长期术语只在 archive/scan 时再提升到 \`{SPEC_ROOT}/docs/<project>/glossary.md\`
|
|
357
|
-
4.
|
|
358
|
-
- design.md 含全部必填章节(背景/设计目标/非目标/总体方案/文件变更清单/接口定义/风险登记)
|
|
359
|
-
- design.md 头部 YAML frontmatter 字段齐全(author/created_at/scale 等)——「生成规范文件」步完成契约硬要求,审查前就补齐避免后续 docHash 漂移
|
|
360
|
-
- design.md 含「自审」字面命中章节(自审 / Self-Review / Self-review)——「生成规范文件」步完成契约 brainstorm.design.self-review 硬要求,写在本步自审段即可
|
|
361
|
-
- 如存在 decisions.md,design.md 是否引用所有当前版本 D-xxx@vN
|
|
362
|
-
- 涉及 session/lease/agent_run/daemon/lifecycle 等关键词时,是否含「生命周期契约表」
|
|
363
|
-
- UI 原型核对:文件清单含前端文件(.vue/.tsx/.jsx/.svelte/.html/.css 等)且改动达到「必须生成/建议生成」原型级别(分级见「分段展示设计」步)时,变更目录应已有 \`prototype-*.html\`——没有则本步补生成;确不生成时把跳过原因记入 design.md 风险登记,不得静默缺位
|
|
364
|
-
5. 缺章节 → 补齐后重检;章节齐全 → 进入下一步(Design Grill 做语义层交叉审查)
|
|
360
|
+
4. **格式自检不做 agent 侧复刻**(2026-09-09 刀批:章节齐全/frontmatter/自审章节/D-xxx@vN 引用/生命周期豁免/UI 原型六项全部由 CLI 硬校验承担——「生成规范文件」步 --done 的 brainstorm.design.* 规则 + plan 阶段 validateDesignForPlan 同款字面检查,漏项门禁会逐条点名,复检是浪费轮)。design.md 骨架用 \`sillyspec design-init\` 生成(章节/frontmatter 已就位)即天然合规
|
|
365
361
|
|
|
366
362
|
### 输出
|
|
367
363
|
design.md 文件路径 + 自审结果
|
|
@@ -386,6 +382,7 @@ design.md 文件路径 + 自审结果
|
|
|
386
382
|
tier: {REVIEW_TIER}({REVIEW_TIER_REASON})
|
|
387
383
|
- tier=self:当前 agent 直接执行下方交叉审查(小变更)
|
|
388
384
|
- tier=independent:必须用 Agent tool 启动一个独立的设计审查子代理(独立上下文,不共享你的分析与倾向),子代理按下方"交叉审查模型"审查 design.md 并输出 review.json。review.json 产物契约(CLI Stage Review Gate 将硬校验,schema + 完整示例 + docHash 算法如下,照抄改值):
|
|
385
|
+
宿主环境无 Agent tool 可用(调用报 Unknown agent / Available agents: none)→ 不卡死:主代理切换为审查者角色自审替代,reviewerNotes 首行记录「降级:环境无子代理可用」,逐条结论附源码锚点(file:line 或 grep/read 证据)补偿独立性。
|
|
389
386
|
{REVIEW_JSON_CONTRACT}
|
|
390
387
|
子代理只产出 review + Unresolved Blockers,**是否调用 sillyspec run brainstorm --wait 仍由你(主 agent)根据其 verdict 决定**(子代理不直接操作 CLI 状态机)。
|
|
391
388
|
|
|
@@ -409,18 +406,11 @@ tier: {REVIEW_TIER}({REVIEW_TIER_REASON})
|
|
|
409
406
|
|
|
410
407
|
### 交叉审查模型
|
|
411
408
|
按三层检查并输出 cross-check matrix:
|
|
412
|
-
1.
|
|
413
|
-
2. **一致性层**:跨章节/跨产物是否打架。例如数据流 vs 容错策略、schema vs 输入格式、非目标 vs tasks。
|
|
414
|
-
3. **可行性层**:关键假设是否有来源。例如 P99 延迟、上游 SLA、缓存 TTL、数据量、权限模型、兼容旧配置。
|
|
409
|
+
${REVIEW_CHECKLISTS.brainstorm.slice(0, 3).map((item, index) => (index + 1) + '. ' + item).join('\n')}
|
|
415
410
|
|
|
416
411
|
### 交叉点抽取
|
|
417
412
|
重点找这些交叉点:
|
|
418
|
-
|
|
419
|
-
- requirements.md 的 FR 与 design.md 的数据模型/API/状态机
|
|
420
|
-
- design.md 的容错策略与数据流、缓存、重试、回滚
|
|
421
|
-
- tasks.md 的执行范围与 design.md 的非目标
|
|
422
|
-
- decisions.md 的 D-xxx@vN 与 design.md 当前说法
|
|
423
|
-
- scan/module docs 或源码中的真实约束与 design.md 假设
|
|
413
|
+
${REVIEW_CHECKLISTS.brainstorm.slice(3).map((item) => '- ' + item).join('\n')}
|
|
424
414
|
|
|
425
415
|
### 问答处理
|
|
426
416
|
1. 先自动交叉审查,不要一上来问用户。
|