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 +18 -0
- package/docs/sillyspec/file-lifecycle.md +9 -11
- package/package.json +1 -1
- package/src/run.js +7 -3
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
|
|
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
|
-
│ │ ├──
|
|
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`
|
|
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 阶段"确认归档"
|
|
759
|
+
**触发:** archive 阶段"确认归档"步骤(AI 直接执行 mkdir + mv 移动变更目录)
|
|
762
760
|
|
|
763
761
|
**操作:**
|
|
764
|
-
1.
|
|
765
|
-
2.
|
|
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
|
-
| `
|
|
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>/
|
|
1094
|
+
└─→ changes/<name>/verify-result.md
|
|
1097
1095
|
|
|
1098
1096
|
quick 阶段(辅助阶段,不走完整流程)
|
|
1099
1097
|
│
|
package/package.json
CHANGED
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 (
|
|
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
|