sillyspec 3.12.8 → 3.14.0

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.
@@ -37,117 +37,104 @@ export const definition = {
37
37
  optional: false
38
38
  },
39
39
  {
40
- name: '检查已有扫描文档和子项目列表',
41
- prompt: `检查已有扫描文档和子项目列表。
40
+ name: '构建扫描项目列表',
41
+ prompt: `确定本次要扫描的项目列表。
42
42
 
43
43
  ### 操作
44
- 1. \`ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .\` 检查已有文档
45
- 1. \`ls .sillyspec/docs/*/scan/ 2>/dev/null\` — 检查已有文档
46
- 2. \`wc -l .sillyspec/docs/*/scan/*.md 2>/dev/null\` — 文档行数
47
- 3. 显示子项目列表供选择扫描范围
48
-
49
- ### ⛔ 重要:已有文档时的处理
50
- 如果发现已有 scan 文档(如 7 份齐全),**必须停下来问用户**:
51
- - 列出已有文档状态(哪些存在、哪些缺失)
52
- - 明确提供两个选项:**重新扫描(全部覆盖)** 或 **只补扫描缺失的文档**
44
+ 1. \`ls .sillyspec/projects/*.yaml 2>/dev/null\`列出所有已注册项目
45
+ 2. 对每个项目,检查已有的 scan 文档状态:\`ls .sillyspec/docs/<project>/scan/*.md 2>/dev/null\`
46
+ 3. 按以下格式展示:
47
+
48
+ \`\`\`
49
+ 扫描项目列表:
50
+ 1. sillyspec(主项目)— scan 文档:0/7 已存在
51
+ 2. dashboard(子项目)— scan 文档:0/7 已存在
52
+ \`\`\`
53
+
54
+ 4. **必须停下来问用户**:
55
+ - 选择要扫描的项目(默认全部)
56
+ - 每个项目的扫描策略:**重新扫描(全部覆盖)** / **只补扫描缺失的文档** / **跳过**
57
+
58
+ ### ⛔ 重要
53
59
  - **不要自行决定跳过**,等用户选择后再继续
60
+ - 最终确定的项目列表将用于后续所有步骤
61
+ - **后续每个需要生成文档的步骤,都必须对列表中的每个项目分别执行**
54
62
 
55
63
  ### 输出
56
- 已有文档状态 + 等待用户选择`,
57
- outputHint: '工作区和文档状态',
64
+ 确认后的扫描项目列表(项目名 + 扫描策略)`,
65
+ outputHint: '扫描项目列表',
58
66
  optional: false
59
67
  },
60
68
  {
61
69
  name: '构建环境探测',
62
- prompt: `探测项目的构建环境和依赖。
70
+ perProject: true,
71
+ prompt: `探测当前项目的构建环境和依赖。
63
72
 
64
73
  ### 操作
65
- 1. \`cat package.json pom.xml build.gradle go.mod Cargo.toml requirements.txt pyproject.toml Gemfile composer.json 2>/dev/null\`
66
- 2. \`find . -maxdepth 2 -name "*.config.*" -not -path "*/node_modules/*" -not -path "*/.git/*" | head -20 | xargs cat 2>/dev/null\`
67
- 3. 结果保存到 \`.sillyspec/docs/<project>/scan/_env-detect.md\`(临时文件,扫描完删除)
74
+ 对扫描列表中的每个项目重复以下操作:
75
+ 1. 进入项目目录(子项目用其 path,如 \`packages/dashboard/\`)
76
+ 2. \`cat package.json pom.xml build.gradle go.mod Cargo.toml requirements.txt pyproject.toml Gemfile composer.json 2>/dev/null\`
77
+ 3. \`find <project-dir> -maxdepth 2 -name "*.config.*" -not -path "*/node_modules/*" -not -path "*/.git/*" | head -20 | xargs cat 2>/dev/null\`
78
+ 4. 结果保存到 \`.sillyspec/docs/<project>/scan/_env-detect.md\`(临时文件,扫描完删除)
68
79
 
69
80
  ### 输出
70
- 环境探测结果摘要`,
81
+ 每个项目的环境探测结果摘要`,
71
82
  outputHint: '环境探测摘要',
72
83
  optional: false
73
84
  },
74
85
  {
75
86
  name: '断点续扫检测',
76
- prompt: `检测已有扫描文档,只生成缺失的。
87
+ perProject: true,
88
+ prompt: `检测当前项目已有扫描文档,列出缺失的。
77
89
 
78
90
  ### 操作
79
- 1. \`PROJECT=$(sqlite3 -json '.sillyspec/.runtime/sillyspec.db' "SELECT name FROM project WHERE id=1" 2>/dev/null | node -e "const r=JSON.parse(require('fs').readFileSync(0,'utf8'));console.log(r.length>0?r[0].name:'')" 2>/dev/null || basename "$(pwd)")\`
80
- 2. 检查 7 份文档是否存在:ARCHITECTURE、STRUCTURE、CONVENTIONS、INTEGRATIONS、TESTING、CONCERNS、PROJECT
81
- 3. 列出已有 ✅ 和缺失 ⬜
82
- 4. 只生成缺失的文档
91
+ 对扫描列表中的每个项目分别执行:
92
+ 1. 检查 7 份文档是否存在:ARCHITECTURE、STRUCTURE、CONVENTIONS、INTEGRATIONS、TESTING、CONCERNS、PROJECT
93
+ 路径:\`.sillyspec/docs/<project>/scan/<DOC>.md\`
94
+ 2. 列出已有 ✅ 和缺失 ⬜
83
95
 
84
96
  ### 输出
85
- 已有/缺失文档列表`,
97
+ 每个项目的已有/缺失文档列表`,
86
98
  outputHint: '断点续扫状态',
87
99
  optional: false
88
100
  },
89
101
  {
90
102
  name: '深度扫描 — 7 份文档(子代理并行)',
91
- prompt: `使用子代理并行生成 7 份扫描文档。**你必须使用子代理执行,不要自己写文档。**
92
-
93
- ### 执行方式
94
- 1. 为每个扫描任务启动独立子代理(可并行),每个子代理负责 1-2 份文档
95
- 2. 子代理直接用 grep/rg 搜索源码并写入文件,结果不回传到你的上下文
96
- 3. 等待所有子代理完成后,验证文件是否生成且非空
97
-
98
- ### 子代理任务分配
99
-
100
- **子代理 A 技术架构**
101
- 目标文件:\`.sillyspec/docs/<project>/scan/ARCHITECTURE.md\`
102
- 搜索范围:技术栈 + 数据库 Schema + 架构模式
103
- - grep/rg 搜索(\`@Entity\`、\`schema.prisma\`、\`models.py\` 等),**禁止读源码全文**
104
- - Schema 只记表名+说明+字段数
105
- - 包含 \`## 技术栈\` \`## 架构概览\` \`## 数据模型(摘要)\`
106
- - 参考 _env-detect.md(如存在)
107
-
108
- **子代理 B — 代码约定**
109
- 目标文件:\`.sillyspec/docs/<project>/scan/CONVENTIONS.md\`
110
- 搜索范围:框架隐形规则 + 实体继承 + 代码风格
111
- - 用 grep 搜索拦截器/插件/逻辑删除/基类/审计字段,**禁止读源码全文**
112
- - 根据检测到的语言/框架自行决定搜索什么模式
113
- - 提取 3-5 个典型示例
114
- - 包含 \`## 框架隐形规则\` \`## 实体继承规范\` \`## 代码风格\`
115
- - 参考 _env-detect.md(如存在)
116
-
117
- **子代理 C — 目录结构 + 外部集成**
118
- 目标文件:\`.sillyspec/docs/<project>/scan/STRUCTURE.md\` + \`.sillyspec/docs/<project>/scan/INTEGRATIONS.md\`
119
- 搜索范围:目录树 + 模块说明 + 外部集成
120
- - 用 find/ls/tree 和 grep,**禁止读源码全文**
121
- - 搜索 API 调用、MQ 配置、缓存、第三方 SDK
122
- - STRUCTURE.md:目录树+模块说明
123
- - INTEGRATIONS.md:外部集成(按类型分组)
124
- - 参考 _env-detect.md(如存在)
125
-
126
- **子代理 D — 测试 + 债务 + 项目概览**
127
- 目标文件:\`.sillyspec/docs/<project>/scan/TESTING.md\` + \`.sillyspec/docs/<project>/scan/CONCERNS.md\` + \`.sillyspec/docs/<project>/scan/PROJECT.md\`
128
- 搜索范围:测试文件 + TODO/FIXME + 过时依赖 + 项目信息
129
- - 用 grep 搜索测试文件、TODO/FIXME、过时依赖,**禁止读源码全文**
130
- - TESTING.md:测试结构
131
- - CONCERNS.md:技术债务(按严重程度分组)
132
- - PROJECT.md:项目概览
133
- - 参考 _env-detect.md(如存在)
134
-
135
- ### 每个子代理的共同要求
136
- - **上下文注入**:主 agent 在启动子代理前,必须将以下信息拼入子代理 prompt:
137
- - 项目名(直接用本次 prompt 中的实际项目名)
138
- - 断点续扫步骤列出的缺失文档列表(哪些要生成、哪些跳过)
139
- - 环境探测结果摘要(构建工具、语言框架、关键依赖)
140
- - _env-detect.md 内容(如存在,直接贴入)
141
- - 路径用反引号,不编造
142
- - 目标文件不存在则创建,已存在则覆盖
143
- - 只生成缺失文档(根据断点续扫结果)
103
+ perProject: true,
104
+ prompt: `按照 \`.sillyspec/workflows/scan-docs.yaml\` 中定义的角色和检查规则,使用子代理并行生成当前项目的 7 份扫描文档。
105
+
106
+ **你必须使用子代理执行,不要自己写文档。**
107
+ **对扫描列表中的每个项目分别执行以下流程。**
108
+
109
+ ### 操作
110
+ 1. 读取 \`.sillyspec/workflows/scan-docs.yaml\`,了解角色定义、输出要求和检查规则
111
+ 2. 对每个项目(扫描列表中标记为需生成/覆盖的项目):
112
+ a. \`<project>\` 替换为实际项目名,得到该项目的目标文件路径
113
+ b. 为每个角色启动独立子代理(可并行),每个子代理负责 1-2 份文档
114
+ c. 子代理的搜索范围限定在该项目目录内(子项目如 \`packages/dashboard/\`,不要搜索主项目源码)
115
+ d. 子代理直接用 grep/rg 搜索源码并写入文件,结果不回传到你的上下文
116
+ e. 等待该项目所有子代理完成后,验证文件是否生成且非空
117
+ f. 该项目完成后,继续下一个项目
118
+ 3. 所有项目完成后,运行以下命令检查产物:
119
+ \`node -e "import('./src/workflow.js').then(w => { const r = w.runPostCheck(w.loadWorkflow('.', 'scan-docs'), '.', '<project>'); console.log(w.formatCheckReport(r)) })\`
120
+ 对每个项目分别执行(将 \`<project>\` 替换为实际项目名)
121
+ 4. 如果检查报告有失败项,按报告中的角色和文件重试失败的部分
122
+
123
+ ### 子代理上下文注入
124
+ 启动每个子代理前,将以下信息拼入子代理 prompt:
125
+ - 项目名(直接用实际项目名)
126
+ - 目标文件路径(从 workflow YAML \`<project>\` 替换后的路径)
127
+ - 检查要求(从 workflow YAML 中该角色的 checks)
128
+ - 断点续扫步骤列出的缺失文档列表
129
+ - 环境探测结果摘要(如有 _env-detect.md,直接贴入)
130
+ - **⚠️ 必须强调:子代理必须用 write 工具将文件写入磁盘**
144
131
 
145
132
  ### 完成后
146
- 验证 7 份文档全部生成且非空,列出结果:
133
+ 列出每个项目的 7 份文档状态:
147
134
  - ✅ ARCHITECTURE.md / ❌ 缺失
148
135
  - ✅ CONVENTIONS.md / ❌ 缺失
149
136
  - ...`,
150
- outputHint: '7 份文档生成状态',
137
+ outputHint: '7 份文档生成状态(含 workflow 检查报告)',
151
138
  optional: false
152
139
  },
153
140
  {
@@ -191,54 +178,133 @@ local.yaml 生成结果(已存在/已生成)`,
191
178
  },
192
179
  {
193
180
  name: '生成模块映射',
194
- prompt: `生成模块映射配置文件,建立"文件路径 → 模块"的稳定映射。
181
+ perProject: true,
182
+ prompt: `生成当前项目的模块索引文件 \`_module-map.yaml\`。
183
+
184
+ ### ⚠️ 重要:这个文件是唯一的结构化索引源
185
+ 所有结构化事实(paths/tags/entrypoints/depends_on/used_by)只维护在这个文件里。
186
+ 模块卡片(modules/*.md)只负责人类语义说明,不重复索引信息。
195
187
 
196
188
  ### 操作
197
- 1. 检查 \.sillyspec/docs/<project>/modules/_module-map.yaml\` 是否已存在,已存在则跳过
198
- 2. 分析项目 src/ 目录结构(或主代码目录),识别模块划分:
199
- - 用 \`find . -maxdepth 2 -type d -not -path "*/node_modules/*" -not -path "*/.git/*"\` 查看目录结构
200
- - 每个独立目录(有明确职责的)识别为一个模块
201
- - 路径用 glob 模式(如 \`src/auth/**\`)
202
- 3. 生成 \.sillyspec/docs/<project>/modules/_module-map.yaml\`
203
- 4. 如果 modules/ 目录不存在,先创建
204
- 5. 原子写入(先写 tmp 文件再 rename
189
+ 对扫描列表中的每个项目分别执行:
190
+ 1. 检查 \`.sillyspec/docs/<project>/modules/_module-map.yaml\` 是否已存在,已存在则跳过
191
+ 2. 分析项目源码目录结构,识别模块划分:
192
+ - 用 \`find . -maxdepth 3 -type d -not -path "*/node_modules/*" -not -path "*/.git/*"\` 查看目录结构
193
+ - 每个有明确职责的独立目录识别为一个模块
194
+ - 路径用 glob 模式
195
+ 3. grep/rg 分析每个模块:
196
+ - \`main_symbols\`:模块导出的主要函数/类/常量(grep export / module.exports / def / class
197
+ - \`entrypoints\`:对外 API 端点或命令入口(grep route / router / @Controller / @GetMapping 等)
198
+ - \`tags\`:模块相关关键词标签
199
+ - \`aliases\`:模块的别名(其他开发者可能怎么称呼这个模块)
200
+ 4. 分析跨模块依赖关系:
201
+ - 用 grep import/require 分析模块间的引用链
202
+ - 填充 depends_on(本模块依赖谁)和 used_by(谁依赖本模块)
203
+ 5. 生成 \`.sillyspec/docs/<project>/modules/_module-map.yaml\`
204
+ 6. 如果 modules/ 目录不存在,先创建
205
+ 7. 原子写入(先写 tmp 文件再 rename)
205
206
 
206
207
  ### YAML 格式
207
208
  \`\`\`yaml
208
- # 模块映射(自动生成,可手动修改)
209
- # 用于 archive 阶段识别变更影响的模块
209
+ schema_version: 1
210
+ project: <project-name>
211
+ source_commit: <git-head-short>
212
+ generated_at: <now-datetime>
213
+ generator: sillyspec-scan
214
+
210
215
  modules:
211
- <module-name>:
216
+ <module-id>:
217
+ status: active
218
+ doc: modules/<module-id>.md
212
219
  paths:
213
220
  - <glob-pattern>
214
- description: <一句话描述>
221
+ tags:
222
+ - <tag1>
223
+ - <tag2>
224
+ aliases:
225
+ - <alias1>
226
+ entrypoints:
227
+ - <exported-symbol-or-api-endpoint>
228
+ main_symbols:
229
+ - <exported-class-or-function>
230
+ depends_on:
231
+ - <other-module-id>
232
+ used_by:
233
+ - <other-module-id>
234
+ needs_review: false
235
+ concerns: []
236
+ review_reasons: []
215
237
  \`\`\`
216
238
 
217
239
  ### 示例
218
240
  \`\`\`yaml
219
- modules:
220
- core:
221
- paths:
222
- - src/core/**
223
- - src/utils/**
224
- description: 核心工具和公共逻辑
241
+ schema_version: 1
242
+ project: multi-agent-platform
243
+ source_commit: abc1234
244
+ generated_at: 2026-06-02 22:00:00
245
+ generator: sillyspec-scan
225
246
 
226
- stages:
247
+ modules:
248
+ auth-service:
249
+ status: active
250
+ doc: modules/auth-service.md
227
251
  paths:
228
- - src/stages/**
229
- description: 阶段定义(brainstorm/plan/execute/verify/archive等)
252
+ - src/modules/auth/**
253
+ - src/middleware/auth.js
254
+ tags:
255
+ - auth
256
+ - jwt
257
+ - rbac
258
+ - middleware
259
+ aliases:
260
+ - login
261
+ - token
262
+ - authentication
263
+ entrypoints:
264
+ - authenticate
265
+ - authorize
266
+ - signToken
267
+ - refreshToken
268
+ main_symbols:
269
+ - AuthService
270
+ - AuthController
271
+ - hashPassword
272
+ - verifyPassword
273
+ depends_on:
274
+ - users
275
+ - redis
276
+ used_by:
277
+ - api-routes
278
+ - admin-routes
279
+ needs_review: false
280
+ concerns: []
281
+ review_reasons: []
230
282
  \`\`\`
231
283
 
284
+ ### 关键规则
285
+ - module-id 用 kebab-case(如 auth-service)
286
+ - depends_on / used_by 引用其他模块的 module-id
287
+ - tags 和 aliases 用于 brainstorm 阶段的需求→模块匹配,尽量覆盖开发者可能用的词
288
+ - entrypoints 和 main_symbols 用于 execute 阶段快速定位源码
289
+ - 不要编造无法从源码 grep 到的符号
290
+ - 如果无法确定依赖关系,depends_on/used_by 留空列表,不要猜
291
+
232
292
  ### 输出
233
293
  _module-map.yaml 生成结果(已存在/已生成/模块列表)`,
234
294
  outputHint: '_module-map.yaml 生成状态',
235
295
  optional: true
236
296
  },
237
297
  {
238
- name: '生成模块核心文档',
239
- prompt: `根据 _module-map.yaml 中的模块划分,为每个模块生成核心文档(用于后续归档和开发上下文)。
298
+ name: '生成模块卡片文档',
299
+ perProject: true,
300
+ prompt: `根据当前项目的 \`_module-map.yaml\` 生成模块卡片文档。
301
+
302
+ ### ⚠️ 重要:模块卡片只负责人类语义说明
303
+ 结构化索引(paths/tags/entrypoints/depends_on/used_by)已经在 _module-map.yaml 里维护。
304
+ 卡片里不要重复这些信息,只写 _module-map.yaml 无法表达的语义内容。
240
305
 
241
306
  ### 操作
307
+ 对扫描列表中的每个项目分别执行:
242
308
  1. 读取 \`.sillyspec/docs/<project>/modules/_module-map.yaml\`,获取模块列表和路径
243
309
  2. 检查 \`.sillyspec/docs/<project>/modules/\` 下已有的模块文档(<module>.md)
244
310
  3. 列出每个模块的状态:已有文档 / 缺失
@@ -255,32 +321,48 @@ _module-map.yaml 生成结果(已存在/已生成/模块列表)`,
255
321
  - 环境探测结果摘要(构建工具、语言框架)
256
322
  - scan 文档关键信息摘要(ARCHITECTURE.md 的技术栈、CONVENTIONS.md 的代码风格要点,如已生成)
257
323
  \`\`\`
258
- 模块名:<module-name>
324
+ 模块名:<module-id>
259
325
  模块路径:<glob patterns>
260
- 目标文件:.sillyspec/docs/<project>/modules/<module>.md
326
+ 目标文件:.sillyspec/docs/<project>/modules/<module-id>.md
261
327
 
262
328
  操作:
263
329
  1. 用 grep/rg 搜索模块路径范围内的源码(禁止读源码全文)
264
- 2. 提取:模块职责、对外接口(导出函数/API)、关键依赖、设计要点
330
+ 2. 提取:模块职责、对外接口、关键逻辑、注意事项
265
331
  3. 按以下模板写入目标文件:
266
332
 
267
- # <module-name>
268
- > 最后更新:<now-date>
269
- > 最近变更:scan(初始生成)
270
- > 模块路径:<glob patterns>
271
-
272
- ## 职责
273
- ## 当前设计
274
- ## 对外接口(表格)
275
- ## 关键数据流
276
- ## 设计决策(表格)
277
- ## 依赖关系
333
+ ---
334
+ schema_version: 1
335
+ doc_type: module-card
336
+ module_id: <module-id>
337
+ ---
338
+
339
+ # <module-id>
340
+
341
+ ## 定位
342
+ (负责什么,不负责什么 — 明确边界)
343
+
344
+ ## 契约摘要
345
+ (核心能力列表,具体导出符号以 _module-map.yaml 的 entrypoints/main_symbols 为准)
346
+
347
+ ## 关键逻辑
348
+ (最核心的流程摘要,用 text 伪代码,不超过 3-5 行)
349
+
278
350
  ## 注意事项
279
- ## 变更索引(表格,初始为空)
351
+ (维护提醒、已知限制、修改时需同步检查的模块)
352
+
353
+ ## 人工备注
354
+
355
+ <!-- MANUAL_NOTES_START -->
356
+
357
+ <!-- MANUAL_NOTES_END -->
280
358
 
281
359
  规则:
282
360
  - 不要编造接口或依赖,只写 grep/rg 能搜到的
283
- - 模板与 archive 阶段格式一致
361
+ - 目标长度:500-1000 / 80-150 行
362
+ - 如果模块特别复杂(状态机、多角色交互、复杂领域规则),可以在 modules/details/ 下生成扩展文档(如 details/<module-id>-flow.md),agent 默认不读
363
+ - 不要重复 _module-map.yaml 中的索引信息
364
+ - 不要写设计决策表、完整依赖表、变更索引长表
365
+ - 人工备注区域保持空标记,留给用户填写
284
366
  \`\`\`
285
367
 
286
368
  等待所有子代理完成,验证文件是否生成且非空。
@@ -290,19 +372,89 @@ _module-map.yaml 生成结果(已存在/已生成/模块列表)`,
290
372
  outputHint: '模块文档生成状态',
291
373
  optional: true
292
374
  },
375
+ {
376
+ name: '生成业务流程和术语表(可选)',
377
+ perProject: true,
378
+ prompt: `根据当前项目的模块依赖关系和源码,生成跨模块业务流程文档和术语表。
379
+
380
+ ⚠️ 这一步是可选的。如果项目模块简单、流程不明显,可以跳过。
381
+
382
+ ### flows/ 目录
383
+ 目标目录:\`.sillyspec/docs/<project>/flows/\`
384
+
385
+ 根据 _module-map.yaml 中的模块依赖关系,识别跨模块业务流程:
386
+ 1. 读取 \`_module-map.yaml\`,分析 used_by 链条
387
+ 2. 用 grep/rg 搜索路由定义、API 端点、事件处理
388
+ 3. 识别跨模块的完整业务流程(如登录→下单→支付)
389
+ 4. 每个流程生成一个文件:\`flows/<flow-name>.md\`
390
+
391
+ 文件格式:
392
+ \`\`\`markdown
393
+ # <flow-name>
394
+
395
+ ## 目标
396
+ (一句话描述这个流程的业务目的)
397
+
398
+ ## 参与模块
399
+ - module-a:做什么
400
+ - module-b:做什么
401
+
402
+ ## 流程摘要
403
+ \`\`\`text
404
+ step1 → step2 → step3
405
+ \`\`\`
406
+
407
+ ## 失败回滚
408
+ | 失败点 | 处理 |
409
+ |---|---|
410
+ \`\`\`
411
+
412
+ ### glossary.md
413
+ 目标文件:\`.sillyspec/docs/<project>/glossary.md\`
414
+
415
+ 提取项目专有术语:
416
+ 1. 用 grep 搜索 TODO/FIXME 注释中的术语定义
417
+ 2. 从数据库表注释提取
418
+ 3. 从 README 和文档中提取定义段落
419
+
420
+ 文件格式:
421
+ \`\`\`markdown
422
+ # Glossary
423
+
424
+ ## Session
425
+ 在本项目中,session 指...(项目内特殊含义)
426
+
427
+ ## Order
428
+ 订单主实体,代表...(业务定义)
429
+ \`\`\`
430
+
431
+ ### 操作
432
+ 1. 分析模块依赖关系,识别可能的业务流程
433
+ 2. 如果发现 2+ 个跨模块流程,生成 flows/ 文档
434
+ 3. 提取术语生成 glossary.md
435
+ 4. 如果没有明显的流程或术语,跳过此步
436
+
437
+ ### 输出
438
+ 生成的文件路径列表(或"已跳过")`,
439
+ outputHint: '流程和术语表生成状态',
440
+ optional: true
441
+ },
293
442
  {
294
443
  name: '自检和提交',
295
- prompt: `验证扫描完整性,清理并提交。
444
+ perProject: true,
445
+ prompt: `验证当前项目的扫描完整性,清理并提交。
296
446
 
297
447
  ### 操作
298
- 1. 检查 7 份 scan 文档是否全部生成
299
- 2. 检查模块文档状态(如有)
448
+ 对扫描列表中的每个项目分别执行:
449
+ 1. 检查 7 份 scan 文档是否全部生成(\`.sillyspec/docs/<project>/scan/\`)
450
+ 2. 检查模块文档状态(\`.sillyspec/docs/<project>/modules/\`)
300
451
  3. 自检门控:ARCHITECTURE(技术栈+Schema摘要)、CONVENTIONS(隐形规则+代码风格)、STRUCTURE(目录结构)、INTEGRATIONS(外部依赖)、TESTING(测试现状)、CONCERNS(技术债务)、PROJECT(项目概览)
301
- 4. 清理:\`rm -f .sillyspec/docs/<project>/scan/_env-detect.md\`
302
- 5. \`git add .sillyspec/\` — 暂存扫描结果(不要 commit,由用户通过统一提交工具处理)
452
+ 4. 检查 flows/ 和 glossary.md 是否已生成(如有)
453
+ 5. 清理:\`rm -f .sillyspec/docs/<project>/scan/_env-detect.md\`
454
+ 6. \`git add .sillyspec/\` — 暂存扫描结果(不要 commit,由用户通过统一提交工具处理)
303
455
 
304
456
  ### 输出
305
- 扫描完整性报告
457
+ 每个项目的扫描完整性报告
306
458
 
307
459
  ### 注意
308
460
  - ❌ 修改代码 / 编造路径 / 读源码全文`,
@@ -63,9 +63,10 @@ export const definition = {
63
63
  6. 读取 \`.sillyspec/docs/<project>/modules/_module-map.yaml\`(不存在则跳过以下步骤)
64
64
  7. 根据 design.md 的文件变更清单匹配 _module-map.yaml 中的模块
65
65
  8. 读取匹配到的 \`.sillyspec/docs/<project>/modules/<module>.md\`
66
+ 9. **检查模块索引可信度**:如果相关模块的 needs_review 为 true,提示"该模块索引可能不可信,需要回看模块卡片或源码"
66
67
 
67
68
  ### 输出
68
- 文件加载确认清单(含模块文档)`,
69
+ 文件加载确认清单(含模块文档 + 索引可信度)`,
69
70
  outputHint: '文件确认清单',
70
71
  optional: false
71
72
  },