sillyspec 3.12.0 → 3.12.1

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.md ADDED
@@ -0,0 +1,18 @@
1
+ # Claude Code 指引
2
+
3
+ ## 文件生命周期文档同步
4
+ 每次修改 `src/stages/` 下的阶段定义(prompt、步骤、输出文件名等)或 `src/run.js`、`src/progress.js` 等影响文件生命周期的代码后,**必须同步更新** `docs/sillyspec/file-lifecycle.md`,确保文档与代码一致。
5
+
6
+ ### 触发更新的典型改动
7
+ - 新增/删除/重命名阶段步骤
8
+ - 修改步骤 prompt 中的输出文件名(如 verify-result.md)
9
+ - 修改阶段间的流转逻辑(如 archive 归档方式)
10
+ - 新增/删除运行时文件类型(如 gate-status.json)
11
+ - 修改 ProgressManager 的数据存储方式(如 SQLite 表结构变更)
12
+
13
+ ### 更新检查清单
14
+ - [ ] 文件名引用一致(prompt 输出的文件名 == validateFileLocations 期望的文件名)
15
+ - [ ] 阶段步骤描述与 `src/stages/*.js` 一致
16
+ - [ ] 归档/清理流程描述与实际代码逻辑一致
17
+ - [ ] 数据库 Schema 描述与 `src/db.js` 一致
18
+ - [ ] 更新文档头部 `updated_at` 时间戳
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  author: qinyi
3
3
  created_at: 2026-05-31 11:00:00
4
- updated_at: 2026-05-31 11:00:00
4
+ updated_at: 2026-05-31 21:35:00
5
5
  ---
6
6
 
7
7
  # SillySpec 文件生命周期描述
@@ -33,7 +33,7 @@ updated_at: 2026-05-31 11:00:00
33
33
  │ │ ├── tasks/ ← 单任务实现文档目录(plan 阶段创建)
34
34
  │ │ │ └── task-NN.md
35
35
  │ │ ├── module-impact.md ← 模块影响分析矩阵
36
- │ │ ├── verification.md ← 验证报告(⚠️ prompt 写 verification.md,validateFileLocations 期望 verify-result.md
36
+ │ │ ├── verify-result.md ← 验证报告(归档产物)
37
37
  │ │ ├── prototype-*.html ← HTML 原型(可选,brainstorm 判断)
38
38
  │ │ └── MASTER.md ← 大需求拆分主控(可选,brainstorm 判断拆分时)
39
39
  │ └── archive/ ← 已归档变更
@@ -472,9 +472,7 @@ created_at: <YYYY-MM-DD HH:mm:ss>
472
472
 
473
473
  ---
474
474
 
475
- ### `verify-result.md` / `verification.md` — 验证报告
476
-
477
- > ⚠️ **代码存在命名不一致**:verify 阶段 prompt 中输出文件名为 `verification.md`,但 `validateFileLocations()` 期望的文件名是 `verify-result.md`。实际运行时 AI 按照 prompt 写入 `verification.md`,但位置校验会报 `verify-result.md` 缺失。这是已知的不一致。
475
+ ### `verify-result.md` — 验证报告
478
476
 
479
477
  **创建时机:** verify 阶段"输出验证报告"步骤
480
478
 
@@ -758,12 +756,12 @@ test_strategy: module
758
756
 
759
757
  ### 变更归档流程
760
758
 
761
- **触发:** archive 阶段"确认归档"步骤 + `--confirm` 标志
759
+ **触发:** archive 阶段"确认归档"步骤(AI 直接执行 mkdir + mv 移动变更目录)
762
760
 
763
761
  **操作:**
764
- 1. `mkdirSync` 创建 `archive/` 目录
765
- 2. `renameSync` `changes/<name>/` 移动到 `changes/archive/YYYY-MM-DD-<name>/`
766
- 3. 校验:源目录不存在 + 目标目录存在
762
+ 1. AI 创建 `archive/` 目录:`mkdir -p .sillyspec/changes/archive`
763
+ 2. AI 移动变更目录:`mv .sillyspec/changes/<name> .sillyspec/changes/archive/<name>`
764
+ 3. AI 确认移动成功:`ls .sillyspec/changes/archive/<name>/`
767
765
  4. `unregisterChange()` 将 `changes.status` 更新为 `archived`(SQL UPDATE)
768
766
 
769
767
  ### Worktree 清理流程
@@ -1036,7 +1034,7 @@ graph LR
1036
1034
  | `AGENTS.md` 等 | 选了 codex/gemini/opencode 工具 | init | AI 工具读取 |
1037
1035
  | `projects/*.yaml` | init 自动创建 | init | 子项目上下文加载 |
1038
1036
  | `modules/_module-map.yaml` | scan 可选步骤 | scan | archive/plan/execute |
1039
- | `verification.md` | verify 阶段输出 | verify | 验证报告存档 |
1037
+ | `verify-result.md` | verify 阶段输出 | verify | 验证报告存档 |
1040
1038
 
1041
1039
 
1042
1040
  ```
@@ -1093,7 +1091,7 @@ execute 阶段
1093
1091
 
1094
1092
  verify 阶段
1095
1093
 
1096
- └─→ changes/<name>/verification.md (⚠️ prompt 输出 verification.md,validateFileLocations 期望 verify-result.md
1094
+ └─→ changes/<name>/verify-result.md
1097
1095
 
1098
1096
  quick 阶段(辅助阶段,不走完整流程)
1099
1097
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sillyspec",
3
- "version": "3.12.0",
3
+ "version": "3.12.1",
4
4
  "description": "SillySpec CLI — 流程状态机,让 AI 严格按步骤来",
5
5
  "icon": "logo.jpg",
6
6
  "homepage": "https://sillyspec.ppdmq.top/",
package/src/run.js CHANGED
@@ -267,7 +267,11 @@ export async function runCommand(args, cwd) {
267
267
  const autoChange = changeName || resolveChangeNameAuto(cwd)
268
268
  if (autoChange) {
269
269
  progress = await pm.initChange(cwd, autoChange)
270
- } else if (!isAuxiliary) {
270
+ } else if (isAuxiliary) {
271
+ // 辅助阶段(scan/explore/quick/doctor/status)不需要 currentChange
272
+ // 但仍然需要初始化一个空的 progress 对象以避免后续引用报错
273
+ progress = { currentStage: stageName, stages: {}, lastActive: new Date().toLocaleString('zh-CN', { hour12: false }) }
274
+ } else {
271
275
  // brainstorm / propose 作为流程入口,自动生成变更名并初始化
272
276
  if (stageName === 'brainstorm' || stageName === 'propose') {
273
277
  const date = new Date().toISOString().slice(0, 10)
@@ -304,10 +308,10 @@ export async function runCommand(args, cwd) {
304
308
 
305
309
  // 确保步骤已初始化
306
310
  const changed = await ensureStageSteps(progress, stageName, cwd)
307
- if (changed) {
311
+ if (changed && effectiveChange) {
308
312
  await pm._write(cwd, progress, effectiveChange)
309
313
  triggerSync(cwd, effectiveChange)
310
- progress = await pm.read(cwd, effectiveChange)
314
+ progress = await pm.read(cwd, effectiveChange) || progress
311
315
  }
312
316
 
313
317
  // --status