sillyspec 3.15.2 → 3.16.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/.husky/pre-push +13 -0
- package/README.md +1 -1
- package/docs/sillyspec/file-lifecycle/known-implementation-gaps.md +99 -0
- package/docs/sillyspec/file-lifecycle/platform-workflows-sync.md +218 -0
- package/docs/sillyspec/file-lifecycle/stage-artifacts.md +167 -0
- package/docs/sillyspec/file-lifecycle/storage-and-state.md +148 -0
- package/docs/sillyspec/file-lifecycle/worktree-and-guard.md +193 -0
- package/docs/sillyspec/file-lifecycle.md +106 -1167
- package/docs/worktree-isolation.md +57 -2
- package/package.json +5 -1
- package/src/db.js +17 -0
- package/src/hooks/worktree-guard.js +166 -47
- package/src/index.js +44 -3
- package/src/progress.js +79 -0
- package/src/run.js +447 -55
- package/src/stage-contract.js +347 -0
- package/src/stages/archive.js +6 -10
- package/src/stages/brainstorm.js +4 -1
- package/src/stages/doctor.js +43 -2
- package/src/stages/execute.js +32 -5
- package/src/stages/propose.js +4 -1
- package/src/stages/quick.js +3 -3
- package/src/stages/scan.js +18 -18
- package/src/workflow.js +6 -2
- package/src/worktree-apply.js +14 -0
- package/src/worktree.js +201 -11
- package/test/check-syntax.mjs +26 -0
- package/test/run-tests.mjs +20 -0
- package/test/scan-paths.test.mjs +68 -0
- package/test/stage-contract.test.mjs +128 -0
- package/test/stage-definitions.test.mjs +43 -0
- package/test/worktree-guard.test.mjs +78 -0
|
@@ -1,1177 +1,116 @@
|
|
|
1
1
|
---
|
|
2
2
|
author: qinyi
|
|
3
3
|
created_at: 2026-05-31 11:00:00
|
|
4
|
-
updated_at: 2026-06-
|
|
4
|
+
updated_at: 2026-06-04 16:55:00
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# SillySpec
|
|
7
|
+
# SillySpec 文件生命周期
|
|
8
8
|
|
|
9
|
-
>
|
|
9
|
+
> 本文档按当前代码重写。它描述的是仓库里已经实现或运行时会暴露的行为,不描述期望设计。
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## 文档拆分
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
.sillyspec/
|
|
15
|
-
├── .runtime/ ← 运行时目录(gitignore)
|
|
16
|
-
│ ├── sillyspec.db ← SQLite 数据库(替代 global.json + progress.json)
|
|
17
|
-
│ ├── gate-status.json ← execute 阶段门控状态(动态)
|
|
18
|
-
│ ├── user-inputs.md ← 用户输入记录(持续追加)
|
|
19
|
-
│ ├── artifacts/ ← 步骤输出 artifact(超长 output 截断存储)
|
|
20
|
-
│ ├── history/ ← 已完成阶段的历史快照
|
|
21
|
-
│ ├── logs/ ← 日志
|
|
22
|
-
│ ├── templates/ ← 模板
|
|
23
|
-
│ ├── workflow-runs/ ← workflow check 结果归档(JSON)
|
|
24
|
-
│ │ └── <timestamp>-<workflow>-<project>-<status>.json
|
|
25
|
-
│ └── worktrees/ ← git worktree 隔离环境
|
|
26
|
-
│ └── <change-name>/
|
|
27
|
-
│ └── meta.json ← worktree 元数据(含 baselineCommit/baselineHash)
|
|
28
|
-
├── changes/ ← 变更工作区(git tracked)
|
|
29
|
-
│ ├── <change-name>/ ← 活跃变更目录
|
|
30
|
-
│ │ ├── proposal.md ← 动机与变更范围
|
|
31
|
-
│ │ ├── design.md ← 技术方案与文件变更清单
|
|
32
|
-
│ │ ├── requirements.md ← 角色表 + GWT 行为规格
|
|
33
|
-
│ │ ├── tasks.md ← 任务列表
|
|
34
|
-
│ │ ├── plan.md ← Wave 分组 + 依赖图 + 验收标准
|
|
35
|
-
│ │ ├── tasks/ ← 单任务实现文档目录(plan 阶段创建)
|
|
36
|
-
│ │ │ └── task-NN.md
|
|
37
|
-
│ │ ├── module-impact.md ← 模块影响分析矩阵
|
|
38
|
-
│ │ ├── verify-result.md ← 验证报告(归档产物)
|
|
39
|
-
│ │ ├── prototype-*.html ← HTML 原型(可选,brainstorm 判断)
|
|
40
|
-
│ │ └── MASTER.md ← 大需求拆分主控(可选,brainstorm 判断拆分时)
|
|
41
|
-
│ └── archive/ ← 已归档变更
|
|
42
|
-
│ └── YYYY-MM-DD-<name>/ ← 归档后的变更目录
|
|
43
|
-
├── quicklog/ ← quick 阶段日志(git tracked)
|
|
44
|
-
│ └── QUICKLOG-<user>.md ← 持续追加的任务日志
|
|
45
|
-
├── projects/ ← 项目注册表
|
|
46
|
-
│ └── <project-name>.yaml ← 子项目配置
|
|
47
|
-
├── docs/ ← 统一文档中心
|
|
48
|
-
│ └── <project-name>/
|
|
49
|
-
│ ├── scan/ ← 代码扫描结果(7 份文档)
|
|
50
|
-
│ │ ├── ARCHITECTURE.md ← 技术架构 + 数据模型
|
|
51
|
-
│ │ ├── CONVENTIONS.md ← 代码约定 + 框架隐形规则
|
|
52
|
-
│ │ ├── STRUCTURE.md ← 目录结构
|
|
53
|
-
│ │ ├── INTEGRATIONS.md ← 外部集成
|
|
54
|
-
│ │ ├── TESTING.md ← 测试现状
|
|
55
|
-
│ │ ├── CONCERNS.md ← 技术债务
|
|
56
|
-
│ │ └── PROJECT.md ← 项目概览
|
|
57
|
-
│ ├── modules/ ← 模块设计文档
|
|
58
|
-
│ │ ├── _module-map.yaml ← 文件→模块映射
|
|
59
|
-
│ │ └── <module>.md ← 各模块当前状态描述
|
|
60
|
-
│ └── archive/ ← 归档的扫描/知识文件
|
|
61
|
-
├── knowledge/ ← 跨项目共享知识库
|
|
62
|
-
│ ├── INDEX.md ← 知识索引(关键词匹配)
|
|
63
|
-
│ └── uncategorized.md ← 待分类知识
|
|
64
|
-
├── workflows/ ← workflow 定义(init 自动生成,可自定义)
|
|
65
|
-
│ ├── scan-docs.yaml ← scan 阶段产物检查 workflow
|
|
66
|
-
│ └── archive-impact.yaml ← archive 阶段影响分析 workflow
|
|
67
|
-
├── shared/ ← 共享目录
|
|
68
|
-
├── workspace/ ← 工作区
|
|
69
|
-
├── ROADMAP.md ← 路线图(可选)
|
|
70
|
-
├── PROJECT.md ← 项目概览(可选,status/doctor 引用)
|
|
71
|
-
├── REQUIREMENTS.md ← 全局需求(可选,status 引用)
|
|
72
|
-
├── HANDOFF.json ← 交接信息(可选,status 引用)
|
|
73
|
-
├── STACK.md ← 技术栈描述(可选,plan/doctor 引用)
|
|
74
|
-
├── local.yaml ← 本地配置(构建/测试命令,gitignore)
|
|
75
|
-
└── codebase/SCAN-RAW.md ← 原始扫描数据(gitignore)
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
## 2. 全局状态文件
|
|
79
|
-
|
|
80
|
-
### `sillyspec.db` — SQLite 数据库(全局状态与变更进度)
|
|
81
|
-
|
|
82
|
-
**创建时机:** `sillyspec init` 时由 `DB.init()` 创建
|
|
83
|
-
|
|
84
|
-
**存储位置:** `.sillyspec/.runtime/sillyspec.db`
|
|
85
|
-
|
|
86
|
-
**写入方:**
|
|
87
|
-
- `ProgressManager` 各方法通过 SQL 写入(替代旧版 `writeGlobal()` / `_write()` 等文件操作)
|
|
88
|
-
- `DB.query()` / `DB.run()` — 所有状态变更通过 SQL 语句执行
|
|
89
|
-
|
|
90
|
-
**读取方:**
|
|
91
|
-
- `ProgressManager` 各方法通过 SQL 查询(替代旧版 `readGlobal()` / `read()` 等文件读取)
|
|
92
|
-
- `DB.all()` / `DB.get()` — 所有状态查询通过 SQL 语句执行
|
|
93
|
-
|
|
94
|
-
**Schema 概览:**
|
|
95
|
-
|
|
96
|
-
| 表 | 用途 | 对应旧版 |
|
|
97
|
-
|------|------|------|
|
|
98
|
-
| `project` | 项目名、schema 版本 | `global.json` 的 `_version` + `project` |
|
|
99
|
-
| `changes` | 变更注册表(名称、当前阶段、状态) | `global.json` 的 `activeChanges` + `progress.json` 的顶层字段 |
|
|
100
|
-
| `stages` | 阶段状态(status / startedAt / completedAt) | `progress.json` 的 `stages.*` |
|
|
101
|
-
| `steps` | 步骤状态(name / status / output) | `progress.json` 的 `stages.*.steps[]` |
|
|
102
|
-
| `batch_progress` | 批量进度统计 | `progress.json` 的 `batchProgress` |
|
|
103
|
-
| `approvals` | 审批状态 | 新增 |
|
|
104
|
-
|
|
105
|
-
> 完整 DDL 见 `design.md` 中的 Schema 章节。
|
|
106
|
-
|
|
107
|
-
**生命周期:** 项目初始化后持续存在,随状态变更实时更新。不兼容旧版 `global.json` / `progress.json` 数据(不做迁移)。
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
### `gate-status.json` — execute 阶段门控
|
|
112
|
-
|
|
113
|
-
**创建时机:** 当任意活跃变更进入 `execute` 或 `quick` 阶段时,由 `ProgressManager._updateGateStatus()` 自动创建
|
|
114
|
-
|
|
115
|
-
**删除时机:** 当所有活跃变更都不在 `execute`/`quick` 阶段时自动删除
|
|
116
|
-
|
|
117
|
-
**写入方:** `_updateGateStatus()` — 每次 `_write()` 写入 progress 时都会触发调用
|
|
118
|
-
|
|
119
|
-
**读取方:** `worktree-guard.js` hook — 在 `claude-pre-tool-use` 钩子中检查是否允许编辑
|
|
120
|
-
|
|
121
|
-
**数据结构:**
|
|
122
|
-
```json
|
|
123
|
-
{
|
|
124
|
-
"stage": "execute",
|
|
125
|
-
"changes": ["2026-05-28-agent-log-streaming"],
|
|
126
|
-
"updatedAt": "2026-05-28T14:30:00.000Z",
|
|
127
|
-
"noWorktree": false
|
|
128
|
-
}
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
**字段说明:**
|
|
132
|
-
| 字段 | 类型 | 说明 |
|
|
133
|
-
|------|------|------|
|
|
134
|
-
| `stage` | string | 当前门控阶段,值为 `"execute"` 或 `"quick"` |
|
|
135
|
-
| `changes` | string[] | 处于 execute/quick 阶段的变更名列表 |
|
|
136
|
-
| `updatedAt` | string | ISO 时间戳 |
|
|
137
|
-
| `noWorktree` | boolean? | 仅当 progress 中有 `noWorktree` 标记时出现 |
|
|
138
|
-
|
|
139
|
-
**生命周期:** 短暂存在,活跃变更不在 execute/quick 阶段时自动删除。
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
## 3. 变更级文件
|
|
144
|
-
|
|
145
|
-
### 变更级状态 — SQLite 表(`changes` / `stages` / `steps`)
|
|
146
|
-
|
|
147
|
-
**创建时机:** `ProgressManager.initChange()` 时通过 SQL INSERT 写入 `changes` 表,同时为该变更创建 `stages` 记录
|
|
148
|
-
|
|
149
|
-
**写入方:**
|
|
150
|
-
- `ProgressManager` 各方法通过 SQL 更新(如 `setStage()` 更新 `changes.current_stage`,`completeStage()` 更新 `stages.status` / `stages.completed_at`)
|
|
151
|
-
- `DB.run()` — 所有变更级状态变更通过 SQL 语句执行
|
|
152
|
-
|
|
153
|
-
**读取方:**
|
|
154
|
-
- `ProgressManager` 各方法通过 SQL 查询(如 `getCurrentChange()` 查询 `changes` 表,`getStage()` 关联查询 `stages` + `steps`)
|
|
155
|
-
- `DB.all()` / `DB.get()` — 所有变更级状态查询通过 SQL 语句执行
|
|
156
|
-
|
|
157
|
-
**数据模型说明:**
|
|
158
|
-
|
|
159
|
-
旧版 `progress.json` 的嵌套结构被拆解为关系型表:
|
|
160
|
-
|
|
161
|
-
| 旧版 progress.json 字段 | SQLite 表.列 | 说明 |
|
|
162
|
-
|------|------|------|
|
|
163
|
-
| `project` | `project.name` | 项目名 |
|
|
164
|
-
| `currentStage` | `changes.current_stage` | 当前活跃阶段 |
|
|
165
|
-
| `currentChange` | `changes.name` | 当前变更名 |
|
|
166
|
-
| `lastActive` | `changes.last_active` | 最后活跃时间 |
|
|
167
|
-
| `noWorktree` | `changes.no_worktree` | 跳过 worktree 标记 |
|
|
168
|
-
| `stages.<name>.status` | `stages.status` | 阶段状态 |
|
|
169
|
-
| `stages.<name>.startedAt` | `stages.started_at` | 阶段开始时间 |
|
|
170
|
-
| `stages.<name>.completedAt` | `stages.completed_at` | 阶段完成时间 |
|
|
171
|
-
| `stages.<name>.steps[]` | `steps` 表(关联 `stages.id`) | 步骤列表 |
|
|
172
|
-
| `stages.<name>.steps[].name` | `steps.name` | 步骤名 |
|
|
173
|
-
| `stages.<name>.steps[].status` | `steps.status` | 步骤状态 |
|
|
174
|
-
| `stages.<name>.steps[].output` | `steps.output` | 步骤输出 |
|
|
175
|
-
| `batchProgress` | `batch_progress` 表(关联 `changes.id`) | 批量进度统计 |
|
|
176
|
-
|
|
177
|
-
> 完整 DDL 见 `design.md` 中的 Schema 章节。
|
|
178
|
-
|
|
179
|
-
**生命周期:** 变更目录下不再生成 `progress.json` 文件,所有变更级状态存储在 `sillyspec.db` 中。`artifacts/`、`history/`、`user-inputs.md` 保持文件系统不变。
|
|
180
|
-
|
|
181
|
-
---
|
|
182
|
-
|
|
183
|
-
### `proposal.md` — 动机与变更范围
|
|
184
|
-
|
|
185
|
-
**创建时机:**
|
|
186
|
-
- brainstorm 阶段最后一步"用户确认并生成规范文件"(完整流程)
|
|
187
|
-
- propose 阶段"生成规范文件"步骤(跳过对话,直接生成四件套)
|
|
188
|
-
|
|
189
|
-
**大体结构:**
|
|
190
|
-
```markdown
|
|
191
|
-
# Proposal
|
|
192
|
-
|
|
193
|
-
## 动机
|
|
194
|
-
为什么做、解决什么核心问题
|
|
195
|
-
|
|
196
|
-
## 关键问题
|
|
197
|
-
为什么现有方案不够(展开 2-3 个具体痛点)
|
|
198
|
-
|
|
199
|
-
## 变更范围
|
|
200
|
-
本次做什么
|
|
201
|
-
|
|
202
|
-
## 不在范围内(显式清单)
|
|
203
|
-
- 不做 X
|
|
204
|
-
- 不做 Y
|
|
205
|
-
|
|
206
|
-
## 成功标准(可验证)
|
|
207
|
-
- 旧配置默认行为不变
|
|
208
|
-
- 新功能在配置后可用
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
**写入方:**
|
|
212
|
-
- brainstorm 阶段最后一步"用户确认并生成规范文件"
|
|
213
|
-
- propose 阶段"生成规范文件"步骤
|
|
214
|
-
|
|
215
|
-
**元数据要求:** 头部必须包含 `author`(git 用户名)和 `created_at`(精确到秒)。`validateMetadata()` 在每个阶段完成后检查 10 分钟内修改的 `.md/.yaml/.yml` 文件是否包含这两个字段,缺失时打印警告。
|
|
216
|
-
|
|
217
|
-
---
|
|
218
|
-
|
|
219
|
-
### `design.md` — 技术方案与文件变更清单
|
|
220
|
-
|
|
221
|
-
**创建时机:**
|
|
222
|
-
- brainstorm 阶段"写设计文档并自审"步骤(初版,含 AI 自审)
|
|
223
|
-
- brainstorm 阶段"用户确认并生成规范文件"步骤(终版,覆盖 Step 8 的初版)
|
|
224
|
-
- propose 阶段"生成规范文件"步骤(跳过自审,含自检门控)
|
|
225
|
-
|
|
226
|
-
> ⚠️ brainstorm 中 design.md 会被写入两次:Step 8 的自审版和最后一步的确认版。确认版会覆盖自审版,因此最终文件以用户确认后的版本为准。
|
|
227
|
-
|
|
228
|
-
**大体结构:**
|
|
229
|
-
```markdown
|
|
230
|
-
# <设计标题>
|
|
231
|
-
|
|
232
|
-
author: <git用户名>
|
|
233
|
-
created_at: <YYYY-MM-DD HH:mm:ss>
|
|
234
|
-
|
|
235
|
-
## 背景
|
|
236
|
-
为什么做、解决什么问题
|
|
237
|
-
|
|
238
|
-
## 设计目标
|
|
239
|
-
要达成什么
|
|
240
|
-
|
|
241
|
-
## 非目标
|
|
242
|
-
明确不做的事(防止 scope creep)
|
|
243
|
-
|
|
244
|
-
## 拆分判断(如适用)
|
|
245
|
-
为什么这样组织变更、为什么不走批量模式
|
|
246
|
-
|
|
247
|
-
## 总体方案
|
|
248
|
-
技术方案(分 Phase/Wave)
|
|
249
|
-
|
|
250
|
-
## 文件变更清单(必填)
|
|
251
|
-
| 操作 | 文件路径 | 说明 |
|
|
252
|
-
|---|---|---|
|
|
253
|
-
| 新增 | src/xxx/NewFile.java | ... |
|
|
254
|
-
| 修改 | src/xxx/ExistingFile.java | 新增 xx 方法 |
|
|
255
|
-
| 删除 | src/xxx/OldFile.java | 已被 xx 替代 |
|
|
256
|
-
|
|
257
|
-
## 接口定义(代码类任务必填)
|
|
258
|
-
方法签名、数据结构
|
|
259
|
-
|
|
260
|
-
## 数据模型(如涉及)
|
|
261
|
-
表结构/字段变更
|
|
262
|
-
|
|
263
|
-
## 兼容策略(brownfield 必填)
|
|
264
|
-
- 未配置新功能时行为不变
|
|
265
|
-
- 新旧逻辑的回退路径
|
|
266
|
-
- 不改变的 API / 表结构
|
|
267
|
-
|
|
268
|
-
## 风险登记
|
|
269
|
-
| 编号 | 风险 | 等级 | 应对策略 |
|
|
270
|
-
|---|---|---|---|
|
|
271
|
-
| R-01 | ... | P0/P1/P2 | ... |
|
|
272
|
-
|
|
273
|
-
## 自审
|
|
274
|
-
AI 对自身设计的校验结果
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
**特殊作用:** 包含"文件变更清单"表格,被 `change-list.js` 的 `parseFileChangeList()` 解析。
|
|
278
|
-
解析规则:定位 `## 文件变更清单` 标题 → 截取到下一个 `##` 标题 → 解析 markdown 表格行 → 提取第二列文件路径 → 排除空值/"—"/"-"/`.sillyspec/` 开头的路径。
|
|
279
|
-
|
|
280
|
-
**消费者:** verify 阶段逐项检查、archive 阶段模块影响分析、execute 阶段确认执行范围
|
|
281
|
-
|
|
282
|
-
---
|
|
283
|
-
|
|
284
|
-
### `requirements.md` — 行为规格
|
|
285
|
-
|
|
286
|
-
**创建时机:**
|
|
287
|
-
- brainstorm 阶段最后一步"用户确认并生成规范文件"
|
|
288
|
-
- propose 阶段"生成规范文件"步骤
|
|
289
|
-
|
|
290
|
-
**大体结构:**
|
|
291
|
-
```markdown
|
|
292
|
-
# Requirements
|
|
293
|
-
|
|
294
|
-
author: <git用户名>
|
|
295
|
-
created_at: <YYYY-MM-DD HH:mm:ss>
|
|
296
|
-
|
|
297
|
-
## 角色
|
|
298
|
-
| 角色 | 说明 |
|
|
13
|
+
| 文件 | 说明 |
|
|
299
14
|
|---|---|
|
|
300
|
-
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
-
|
|
313
|
-
-
|
|
314
|
-
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
## Spike 前置验证(如需要)
|
|
364
|
-
| Spike | 验证内容 | 不通过后果 |
|
|
365
|
-
|---|---|---|
|
|
366
|
-
| spike-01 | ... | task-XX 推翻重设计 |
|
|
367
|
-
|
|
368
|
-
## Wave 1(并行,无依赖)
|
|
369
|
-
- [ ] task-01: 添加用户创建接口
|
|
370
|
-
- [ ] task-02: 添加角色创建接口
|
|
371
|
-
|
|
372
|
-
## Wave 2(依赖 Wave 1)
|
|
373
|
-
- [ ] task-03: 用户创建接口联调
|
|
374
|
-
|
|
375
|
-
## 任务总表
|
|
376
|
-
| 编号 | 任务 | Wave | 优先级 | 估时 | 依赖 | 说明 |
|
|
377
|
-
|---|---|---|---|---|---|---|
|
|
378
|
-
| task-01 | 添加用户创建接口 | W1 | P0 | 4h | — | ... |
|
|
379
|
-
| task-02 | 添加角色创建接口 | W1 | P0 | 3h | — | ... |
|
|
380
|
-
| task-03 | 用户创建接口联调 | W2 | P0 | 4h | task-01,02 | ... |
|
|
381
|
-
|
|
382
|
-
## 依赖关系图
|
|
383
|
-
```mermaid
|
|
384
|
-
graph LR
|
|
385
|
-
task-01 --> task-03
|
|
386
|
-
task-02 --> task-03
|
|
387
|
-
```
|
|
388
|
-
|
|
389
|
-
## 关键路径
|
|
390
|
-
task-01 → task-03(最长路径,决定最短交付周期)
|
|
391
|
-
|
|
392
|
-
## 全局验收标准
|
|
393
|
-
- [ ] 所有单元测试通过
|
|
394
|
-
- [ ] (brownfield)未配置新功能时行为不变
|
|
395
|
-
```
|
|
396
|
-
|
|
397
|
-
**写入方:** AI 在 plan 阶段生成
|
|
398
|
-
|
|
399
|
-
**解析方:**
|
|
400
|
-
- `execute.js` 的 `buildExecuteSteps()` — 解析 `- [ ] task-XX:` 格式的 checkbox 生成执行步骤
|
|
401
|
-
- `plan.js` 的 `buildPlanSteps()` — 在"展开任务并分组"完成后动态插入任务蓝图协调器步骤
|
|
402
|
-
- `run.js` 的 `completeStep()` — plan 阶段"展开任务"完成后检测 plan.md 存在,触发动态步骤插入
|
|
403
|
-
|
|
404
|
-
**生命周期:** plan 阶段创建 → execute 阶段消费 → archive 阶段检查所有 checkbox 是否已勾选
|
|
405
|
-
|
|
406
|
-
---
|
|
407
|
-
|
|
408
|
-
### `tasks/task-NN.md` — 单任务实现文档
|
|
409
|
-
|
|
410
|
-
**创建时机:** plan 阶段的动态任务蓝图步骤(在"展开任务并分组"完成后由 `run.js` 插入)
|
|
411
|
-
|
|
412
|
-
**大体结构:**
|
|
413
|
-
```markdown
|
|
414
|
-
# task-01: 添加用户创建接口
|
|
415
|
-
|
|
416
|
-
author: <git用户名>
|
|
417
|
-
created_at: <YYYY-MM-DD HH:mm:ss>
|
|
418
|
-
|
|
419
|
-
## 任务描述
|
|
420
|
-
(从 plan.md 展开的任务详情)
|
|
421
|
-
|
|
422
|
-
## 实现要点
|
|
423
|
-
- 关键逻辑说明
|
|
424
|
-
- 注意事项
|
|
425
|
-
|
|
426
|
-
## 涉及文件
|
|
427
|
-
- src/xxx/NewFile.java
|
|
428
|
-
|
|
429
|
-
## 验收标准
|
|
430
|
-
- [ ] 接口可正常调用
|
|
431
|
-
- [ ] 单元测试通过
|
|
432
|
-
```
|
|
433
|
-
|
|
434
|
-
**写入方:** AI 在 plan 阶段逐个生成
|
|
435
|
-
|
|
436
|
-
**生命周期:** plan 阶段创建 → execute 阶段对应子代理读取执行
|
|
437
|
-
|
|
438
|
-
---
|
|
439
|
-
|
|
440
|
-
### `module-impact.md` — 模块影响分析
|
|
441
|
-
|
|
442
|
-
**创建时机:** archive 阶段"extract-module-impact"步骤
|
|
443
|
-
|
|
444
|
-
**大体结构:**
|
|
445
|
-
```markdown
|
|
446
|
-
# 模块影响分析
|
|
447
|
-
|
|
448
|
-
author: <git用户名>
|
|
449
|
-
created_at: <YYYY-MM-DD HH:mm:ss>
|
|
450
|
-
|
|
451
|
-
## 变更:<change-name>
|
|
452
|
-
|
|
453
|
-
## 模块影响矩阵
|
|
454
|
-
| 模块 | 影响类型 | 相关文件 | 更新内容摘要 |
|
|
455
|
-
|------|----------|----------|-------------|
|
|
456
|
-
| core | 接口变更 | src/core/api.js | 新增用户创建接口 |
|
|
457
|
-
|
|
458
|
-
## 未匹配文件
|
|
459
|
-
| 文件路径 | 说明 |
|
|
460
|
-
|----------|------|
|
|
461
|
-
| config.yaml | 配置文件 |
|
|
462
|
-
|
|
463
|
-
## 更新结果
|
|
464
|
-
| 模块文档 | 操作 | 状态 |
|
|
465
|
-
|----------|------|------|
|
|
466
|
-
| core.md | 更新 | ✅ |
|
|
467
|
-
```
|
|
468
|
-
|
|
469
|
-
**数据来源:** 三重交叉验证
|
|
470
|
-
1. `proposal.md` / `design.md` 的变更范围声明
|
|
471
|
-
2. `tasks.md` / `plan.md` 的任务文件路径
|
|
472
|
-
3. `git diff --name-only` 真实变更(**以 git diff 为准**)
|
|
473
|
-
|
|
474
|
-
**模块匹配:** 使用 `_module-map.yaml` 的 glob 路径匹配 git diff 文件到模块
|
|
475
|
-
|
|
476
|
-
**下游消费:** `sync-module-docs` 步骤读取此文件,更新 `.sillyspec/docs/<project>/modules/<module>.md`
|
|
477
|
-
|
|
478
|
-
---
|
|
479
|
-
|
|
480
|
-
### `verify-result.md` — 验证报告
|
|
481
|
-
|
|
482
|
-
**创建时机:** verify 阶段"输出验证报告"步骤
|
|
483
|
-
|
|
484
|
-
**大体结构:**
|
|
485
|
-
```markdown
|
|
486
|
-
# 验证报告
|
|
487
|
-
|
|
488
|
-
## 结论
|
|
489
|
-
PASS / PASS WITH NOTES / FAIL
|
|
490
|
-
|
|
491
|
-
## 任务完成度
|
|
492
|
-
(逐项检查任务的结果)
|
|
493
|
-
|
|
494
|
-
## 设计一致性
|
|
495
|
-
(对照 design.md 的检查结果)
|
|
496
|
-
|
|
497
|
-
## 探针结果
|
|
498
|
-
- 未实现标记扫描:...
|
|
499
|
-
- 关键词覆盖:...
|
|
500
|
-
- 测试覆盖:...
|
|
501
|
-
|
|
502
|
-
## 测试结果
|
|
503
|
-
(测试套件执行结果)
|
|
504
|
-
|
|
505
|
-
## 技术债务
|
|
506
|
-
(TODO/FIXME/HACK 统计)
|
|
507
|
-
|
|
508
|
-
## 代码审查
|
|
509
|
-
(问题列表 + 总体评价)
|
|
510
|
-
```
|
|
511
|
-
|
|
512
|
-
**位置验证:** `run.js` 的 `validateFileLocations()` 在 verify 阶段完成后检查此文件是否存在于正确的变更目录下。
|
|
513
|
-
|
|
514
|
-
---
|
|
515
|
-
|
|
516
|
-
## 4. 扫描文档(scan 阶段产物)
|
|
517
|
-
|
|
518
|
-
**创建时机:** scan 阶段的深度扫描步骤
|
|
519
|
-
|
|
520
|
-
**存储位置:** `.sillyspec/docs/<project>/scan/`
|
|
521
|
-
|
|
522
|
-
**七份文档:**
|
|
523
|
-
| 文件 | 生成步骤 | 内容 |
|
|
524
|
-
|------|---------|------|
|
|
525
|
-
| ARCHITECTURE.md | 深度扫描 — 技术架构 | 技术栈 + 数据库 Schema + 架构模式 |
|
|
526
|
-
| CONVENTIONS.md | 深度扫描 — 代码约定 | 框架隐形规则 + 实体继承 + 代码风格 |
|
|
527
|
-
| STRUCTURE.md | 深度扫描 — 目录结构和集成 | 目录树 + 模块说明 |
|
|
528
|
-
| INTEGRATIONS.md | 深度扫描 — 目录结构和集成 | 外部集成(API/MQ/缓存/SDK) |
|
|
529
|
-
| TESTING.md | 深度扫描 — 测试和债务 | 测试结构 |
|
|
530
|
-
| CONCERNS.md | 深度扫描 — 测试和债务 | 技术债务(按严重程度分组) |
|
|
531
|
-
| PROJECT.md | 深度扫描 — 测试和债务 | 项目概览 |
|
|
532
|
-
|
|
533
|
-
**临时文件:** `_env-detect.md`(环境探测中间产物,扫描完成后删除)
|
|
534
|
-
|
|
535
|
-
**断点续扫:** "检查已有扫描文档和子项目列表"步骤检查已有文档,**必须停下来问用户**选择「全部重新扫描」或「只补缺失文档」,不能自行决定跳过。
|
|
536
|
-
|
|
537
|
-
**Workflow 检查(post_check):** scan 阶段完成后(verify 步骤),`run.js` 自动加载 `workflows/scan-docs.yaml`,对每个项目的 7 份文档执行结构化产物校验。检查结果为结构化 JSON 对象,包含 `roles[].outputs[].checks[]` 和 `failures[]`。校验规则定义在 `scan-docs.yaml` 的各 role output checks 中(file_exists / min_lines / contains_sections / no_placeholder 等)。检查失败时自动生成 `retry_prompts`,精确到角色级别。
|
|
538
|
-
|
|
539
|
-
**生命周期:** scan 阶段生成 → 被后续所有阶段(brainstorm/propose/plan/execute/verify)作为上下文读取
|
|
540
|
-
|
|
541
|
-
---
|
|
542
|
-
|
|
543
|
-
## 5. 模块文档
|
|
544
|
-
|
|
545
|
-
### `_module-map.yaml` — 文件到模块的映射
|
|
546
|
-
|
|
547
|
-
**创建时机:** scan 阶段"生成模块映射"步骤(可选步骤)
|
|
548
|
-
|
|
549
|
-
**大体结构:**
|
|
550
|
-
```yaml
|
|
551
|
-
# 模块映射(自动生成,可手动修改)
|
|
552
|
-
# 用于 archive 阶段识别变更影响的模块
|
|
553
|
-
modules:
|
|
554
|
-
core:
|
|
555
|
-
paths:
|
|
556
|
-
- src/core/**
|
|
557
|
-
- src/utils/**
|
|
558
|
-
description: 核心工具和公共逻辑
|
|
559
|
-
|
|
560
|
-
stages:
|
|
561
|
-
paths:
|
|
562
|
-
- src/stages/**
|
|
563
|
-
description: 阶段定义(brainstorm/plan/execute/verify/archive等)
|
|
564
|
-
|
|
565
|
-
cli:
|
|
566
|
-
paths:
|
|
567
|
-
- bin/**
|
|
568
|
-
- src/index.js
|
|
569
|
-
- src/run.js
|
|
570
|
-
description: CLI 入口和命令路由
|
|
571
|
-
```
|
|
572
|
-
|
|
573
|
-
**字段说明:**
|
|
574
|
-
| 字段 | 类型 | 说明 |
|
|
575
|
-
|------|------|------|
|
|
576
|
-
| `modules` | object | 模块映射表 |
|
|
577
|
-
| `modules.<name>.paths` | string[] | glob 模式数组,匹配文件路径到模块 |
|
|
578
|
-
| `modules.<name>.description` | string | 模块一句话描述 |
|
|
579
|
-
|
|
580
|
-
**消费者:**
|
|
581
|
-
- archive 阶段 `extract-module-impact` — 将 git diff 文件匹配到模块
|
|
582
|
-
- plan/execute 阶段加载上下文时匹配受影响模块的文档
|
|
583
|
-
|
|
584
|
-
---
|
|
585
|
-
|
|
586
|
-
### `<module>.md` — 模块当前状态描述
|
|
587
|
-
|
|
588
|
-
**创建时机:**
|
|
589
|
-
- scan 阶段"生成模块核心文档"步骤(可选,首次全量生成,需用户确认)
|
|
590
|
-
- archive 阶段 `sync-module-docs` 步骤(首次受影响时创建,后续更新)
|
|
591
|
-
|
|
592
|
-
**大体结构:**
|
|
593
|
-
```markdown
|
|
594
|
-
# <module-name>
|
|
595
|
-
|
|
596
|
-
> 最后更新:YYYY-MM-DD
|
|
597
|
-
> 最近变更:<change-name>
|
|
598
|
-
> 模块路径:<glob patterns>
|
|
599
|
-
|
|
600
|
-
## 职责
|
|
601
|
-
(一句话说清这个模块做什么)
|
|
602
|
-
|
|
603
|
-
## 当前设计
|
|
604
|
-
(架构、数据流、关键逻辑 — 描述当前状态,不是历史)
|
|
605
|
-
|
|
606
|
-
## 对外接口
|
|
607
|
-
| 接口 | 说明 | 调用方 |
|
|
608
|
-
|------|------|--------|
|
|
609
|
-
|
|
610
|
-
## 关键数据流
|
|
611
|
-
```
|
|
612
|
-
调用方 → 模块.方法() → 依赖模块.方法() → 返回结果
|
|
613
|
-
```
|
|
614
|
-
|
|
615
|
-
## 设计决策
|
|
616
|
-
| 决策 | 理由 | 来源 |
|
|
617
|
-
|------|------|------|
|
|
618
|
-
|
|
619
|
-
## 依赖关系
|
|
620
|
-
### 依赖本模块
|
|
621
|
-
### 本模块依赖
|
|
622
|
-
|
|
623
|
-
## 注意事项
|
|
624
|
-
(维护提醒、已知限制、修改时需同步检查的模块)
|
|
625
|
-
|
|
626
|
-
## 变更索引
|
|
627
|
-
| 日期 | 变更 | 摘要 |
|
|
628
|
-
|------|------|------|
|
|
629
|
-
| 2026-05-28 | agent-log-streaming | 新增日志流式传输 |
|
|
630
|
-
```
|
|
631
|
-
|
|
632
|
-
**更新规则:**
|
|
633
|
-
- 正文描述当前状态(快照模式),不追加历史
|
|
634
|
-
- 底部"变更索引"追加变更记录
|
|
635
|
-
- 根据变更的"更新内容摘要"更新相关章节(archive 阶段读 module-impact.md,quick 阶段直接基于 git diff 判断)
|
|
636
|
-
- 更新头部元数据:`> 最后更新:YYYY-MM-DD` 和 `> 最近变更:<change-name>`
|
|
637
|
-
|
|
638
|
-
**更新时机:**
|
|
639
|
-
- scan 阶段"生成模块核心文档"步骤(首次全量生成,需用户确认)
|
|
640
|
-
- archive 阶段 `sync-module-docs` 步骤(通过 module-impact.md 驱动增量更新)
|
|
641
|
-
- quick 阶段"暂存和更新记录"步骤(直接匹配 git diff 文件到模块,同步更新)
|
|
642
|
-
|
|
643
|
-
**消费方:** brainstorm/propose/plan/execute 阶段"加载上下文"时读取,作为开发参考
|
|
644
|
-
|
|
645
|
-
---
|
|
646
|
-
|
|
647
|
-
## 6. Worktree 文件
|
|
648
|
-
|
|
649
|
-
### `meta.json` — worktree 元数据
|
|
650
|
-
|
|
651
|
-
**创建时机:** `WorktreeManager.create()` 调用 `git worktree add` 后写入
|
|
652
|
-
|
|
653
|
-
**存储位置:** `.sillyspec/.runtime/worktrees/<change-name>/meta.json`
|
|
654
|
-
|
|
655
|
-
**数据结构:**
|
|
656
|
-
```json
|
|
657
|
-
{
|
|
658
|
-
"changeName": "2026-05-28-agent-log-streaming",
|
|
659
|
-
"branch": "sillyspec/2026-05-28-agent-log-streaming",
|
|
660
|
-
"baseBranch": "main",
|
|
661
|
-
"baseHash": "abc123...",
|
|
662
|
-
"actualBaseHash": "def456...",
|
|
663
|
-
"createdAt": "2026-05-28T14:00:00.000Z",
|
|
664
|
-
"worktreePath": "/path/to/.sillyspec/.runtime/worktrees/..."
|
|
665
|
-
}
|
|
666
|
-
```
|
|
667
|
-
|
|
668
|
-
**字段说明:**
|
|
669
|
-
| 字段 | 类型 | 说明 |
|
|
670
|
-
|------|------|------|
|
|
671
|
-
| `changeName` | string | 变更名(禁止包含 `..`、`/`、`\`,创建时校验) |
|
|
672
|
-
| `branch` | string | worktree 分支名,格式 `sillyspec/<change-name>` |
|
|
673
|
-
| `baseBranch` | string | 基础分支,默认当前 HEAD |
|
|
674
|
-
| `baseHash` | string | 基础 commit hash(worktree add 时的) |
|
|
675
|
-
| `actualBaseHash` | string | fetch+merge 后的实际 HEAD(可能与 baseHash 不同) |
|
|
676
|
-
| `createdAt` | string | ISO 时间戳 |
|
|
677
|
-
| `worktreePath` | string | worktree 目录绝对路径 |
|
|
678
|
-
|
|
679
|
-
**特殊行为:** 创建后自动 `fetch origin` + `merge origin/main --ff-only` 同步远程最新代码,`actualBaseHash` 记录 merge 后的实际 HEAD。如果本地和远程没有共同祖先则跳过 merge。
|
|
680
|
-
|
|
681
|
-
**生命周期:** execute 阶段创建 → `WorktreeManager.cleanup()` 清理(git worktree remove → branch -D → rm 目录)
|
|
682
|
-
|
|
683
|
-
---
|
|
684
|
-
|
|
685
|
-
## 7. 临时 / 运行时文件
|
|
686
|
-
|
|
687
|
-
### `user-inputs.md`
|
|
688
|
-
|
|
689
|
-
**创建时机:** init 阶段创建初始骨架
|
|
690
|
-
|
|
691
|
-
**大体结构:**
|
|
692
|
-
```markdown
|
|
693
|
-
# 用户输入记录
|
|
694
|
-
|
|
695
|
-
> 每步完成时由 AI 自动追加,记录用户所有原话。
|
|
696
|
-
|
|
697
|
-
## 2026/5/28 14:30:00 | 2026-05-28-agent-log-streaming | execute: 状态检查
|
|
698
|
-
- 输入:用户原始需求/反馈
|
|
699
|
-
- 输出:AI 的输出摘要
|
|
700
|
-
|
|
701
|
-
## 2026/5/28 15:00:00 | 2026-05-28-agent-log-streaming | execute: 加载上下文
|
|
702
|
-
- 输出:上下文加载完成
|
|
703
|
-
```
|
|
704
|
-
|
|
705
|
-
**追加时机:** `run.js` 的 `completeStep()` 每次步骤完成时,如果有 `outputText`,追加一条记录。条目格式:`## <时间> | <变更名> | <阶段>: <步骤名>` + 输入/输出。
|
|
706
|
-
|
|
707
|
-
---
|
|
708
|
-
|
|
709
|
-
### `artifacts/` 下的文件
|
|
710
|
-
|
|
711
|
-
**创建时机:** `completeStep()` 中当 output 文本超过 200 字符时,截断存入 progress,完整内容写入 artifact 文件
|
|
712
|
-
|
|
713
|
-
**命名格式:** `<changeName>-<stageName>-step<当前步骤序号>-<YYYYMMDDHHmmss>.txt`
|
|
714
|
-
|
|
715
|
-
**内容:** 步骤输出的完整文本(未截断版本)
|
|
716
|
-
|
|
717
|
-
---
|
|
718
|
-
|
|
719
|
-
### `history/` 下的文件
|
|
720
|
-
|
|
721
|
-
**创建时机:** `ProgressManager.completeStage()` 阶段完成时写入
|
|
722
|
-
|
|
723
|
-
**命名格式:** `<changeName>-<stage>-<YYYYMMDDHHmmss>.json`
|
|
724
|
-
|
|
725
|
-
**内容结构:**
|
|
726
|
-
```json
|
|
727
|
-
{
|
|
728
|
-
"change": "2026-05-28-agent-log-streaming",
|
|
729
|
-
"stage": "brainstorm",
|
|
730
|
-
"data": { /* 阶段完整数据快照 */ },
|
|
731
|
-
"completedAt": "2026/5/28 12:00:00"
|
|
732
|
-
}
|
|
733
|
-
```
|
|
734
|
-
|
|
735
|
-
---
|
|
736
|
-
|
|
737
|
-
### `local.yaml`
|
|
738
|
-
|
|
739
|
-
**创建时机:** scan 阶段"生成本地配置"步骤
|
|
740
|
-
|
|
741
|
-
**大体结构:**
|
|
742
|
-
```yaml
|
|
743
|
-
# SillySpec 本地配置(自动生成,可手动修改)
|
|
744
|
-
project:
|
|
745
|
-
type: nodejs # nodejs/maven/gradle/generic
|
|
746
|
-
|
|
747
|
-
commands:
|
|
748
|
-
build: "npm run build"
|
|
749
|
-
test: "npm test"
|
|
750
|
-
lint: "npm run lint"
|
|
751
|
-
|
|
752
|
-
# 测试策略:full=全量测试, module=只测变更模块, skip=跳过测试
|
|
753
|
-
test_strategy: module
|
|
754
|
-
|
|
755
|
-
# 模块测试路径映射(可选)
|
|
756
|
-
# module_paths:
|
|
757
|
-
# user-service: "user/"
|
|
758
|
-
# order-service: "order/"
|
|
759
|
-
```
|
|
760
|
-
|
|
761
|
-
**作用:** 存储项目构建/测试/lint 命令,execute 阶段执行前读取。根据项目类型(package.json/pom.xml/build.gradle)自动识别并生成默认值。
|
|
762
|
-
|
|
763
|
-
---
|
|
764
|
-
|
|
765
|
-
### `workflow-runs/` — Workflow Check 结果归档
|
|
766
|
-
|
|
767
|
-
**创建时机:**
|
|
768
|
-
- `run.js` 在 scan/verify 步骤和 archive extract-module-impact 步骤执行 `runPostCheck()` 后自动归档
|
|
769
|
-
- CLI `sillyspec workflow check ... --save` 手动触发
|
|
770
|
-
|
|
771
|
-
**存储位置:** `.sillyspec/.runtime/workflow-runs/`
|
|
772
|
-
|
|
773
|
-
**命名格式:** `<YYYYMMDDHHmmss>-<workflow>-<project>-<status>.json`
|
|
774
|
-
|
|
775
|
-
**示例:** `20260603035731-scan-docs-dashboard-pass.json`
|
|
776
|
-
|
|
777
|
-
**内容结构(结构化结果对象):**
|
|
778
|
-
```json
|
|
779
|
-
{
|
|
780
|
-
"run_id": "20260603035731-scan-docs-dashboard",
|
|
781
|
-
"created_at": "2026-06-03T03:57:31.000Z",
|
|
782
|
-
"source": "run.js",
|
|
783
|
-
"stage": "verify",
|
|
784
|
-
"workflow": "scan-docs",
|
|
785
|
-
"project": "dashboard",
|
|
786
|
-
"status": "pass",
|
|
787
|
-
"spec_version": 1,
|
|
788
|
-
"roles": [
|
|
789
|
-
{ "id": "arch", "name": "技术架构", "status": "pass", "outputs": [...] }
|
|
790
|
-
],
|
|
791
|
-
"workflow_checks": [...],
|
|
792
|
-
"failures": [],
|
|
793
|
-
"retry_prompts": []
|
|
794
|
-
}
|
|
795
|
-
```
|
|
796
|
-
|
|
797
|
-
**写入方:**
|
|
798
|
-
- `run.js` — scan/verify 和 archive post_check 后自动调用 `saveWorkflowRun()`
|
|
799
|
-
- `index.js` — CLI `--save` 时调用 `saveWorkflowRun()`
|
|
800
|
-
|
|
801
|
-
**读取方:** 人工查阅 / 后续查询命令(待实现)
|
|
802
|
-
|
|
803
|
-
**注意:**
|
|
804
|
-
- 保存失败只输出 warning,不影响 workflow check 的 exit code
|
|
805
|
-
- CLI `--json --save` 时 stdout 仍为纯净 JSON,保存提示不混入
|
|
806
|
-
- 文件路径在 `.gitignore` 中(`.sillyspec/.runtime/`)
|
|
807
|
-
|
|
808
|
-
---
|
|
809
|
-
|
|
810
|
-
## 8. 文件销毁与归档
|
|
811
|
-
|
|
812
|
-
### 变更归档流程
|
|
813
|
-
|
|
814
|
-
**触发:** archive 阶段"确认归档"步骤(AI 直接执行 mkdir + mv 移动变更目录)
|
|
815
|
-
|
|
816
|
-
**操作:**
|
|
817
|
-
1. AI 创建 `archive/` 目录:`mkdir -p .sillyspec/changes/archive`
|
|
818
|
-
2. AI 移动变更目录:`mv .sillyspec/changes/<name> .sillyspec/changes/archive/<name>`
|
|
819
|
-
3. AI 确认移动成功:`ls .sillyspec/changes/archive/<name>/`
|
|
820
|
-
4. `unregisterChange()` 将 `changes.status` 更新为 `archived`(SQL UPDATE)
|
|
821
|
-
|
|
822
|
-
### Worktree 清理流程
|
|
823
|
-
|
|
824
|
-
**触发:** `WorktreeManager.cleanup()`
|
|
825
|
-
|
|
826
|
-
**操作:**
|
|
827
|
-
1. `git worktree remove <path> --force`
|
|
828
|
-
2. `git branch -D <branch>`(忽略分支不存在错误)
|
|
829
|
-
3. 确保目录已删除
|
|
830
|
-
|
|
831
|
-
### 数据存储迁移
|
|
832
|
-
|
|
833
|
-
**变更背景:** v4 版本将状态存储从 JSON 文件迁移到 SQLite 数据库。
|
|
834
|
-
|
|
835
|
-
| 方面 | 旧版(v3 JSON) | 新版(v4 SQLite) |
|
|
836
|
-
|------|------|------|
|
|
837
|
-
| 全局状态文件 | `global.json` | `sillyspec.db`(`project` 表) |
|
|
838
|
-
| 变更级状态文件 | `changes/<name>/progress.json` | `sillyspec.db`(`changes`/`stages`/`steps` 表) |
|
|
839
|
-
| 备份机制 | `.bak` 文件 + 原子写入 | SQLite 事务 + WAL 模式 |
|
|
840
|
-
| 进度备份 | `progress.json.bak` | 不再需要(SQLite 内置 ACID) |
|
|
841
|
-
| 运行时缓存 | `_migrateIfNeeded()` 迁移检测 | 不再需要 |
|
|
842
|
-
| 兼容性 | — | **不兼容旧版数据,不提供迁移路径** |
|
|
843
|
-
|
|
844
|
-
**保持不变的文件系统存储:**
|
|
845
|
-
- `artifacts/` — 步骤输出 artifact(超长 output 截断存储),保持文件系统不变
|
|
846
|
-
- `history/` — 已完成阶段的历史快照,保持文件系统不变
|
|
847
|
-
- `user-inputs.md` — 用户输入记录(持续追加),保持文件系统不变
|
|
848
|
-
- `gate-status.json` — 仍由 `_updateGateStatus()` 生成,保持文件系统不变
|
|
849
|
-
|
|
850
|
-
### 旧版迁移
|
|
851
|
-
|
|
852
|
-
> ⚠️ SQLite 迁移后,不再支持从旧版 JSON 文件迁移。v4(SQLite 版本)与 v3(JSON 版本)数据格式不兼容。如需从旧版升级,需重新执行 `sillyspec init`。
|
|
853
|
-
|
|
854
|
-
**历史说明(仅参考,不再生效):**
|
|
855
|
-
1. 旧版 `progress.json` → 复制到 `changes/<name>/progress.json`
|
|
856
|
-
2. 创建 `global.json`
|
|
857
|
-
3. 备份旧文件为 `.bak`
|
|
858
|
-
4. 删除旧文件
|
|
859
|
-
|
|
860
|
-
---
|
|
861
|
-
|
|
862
|
-
## 9. 可选 / 条件生成文件
|
|
863
|
-
|
|
864
|
-
以下文件不一定存在,在特定条件下才会生成。
|
|
865
|
-
|
|
866
|
-
### `MASTER.md` — 大需求拆分主控文档
|
|
867
|
-
|
|
868
|
-
**生成条件:** brainstorm 阶段"需求范围评估"步骤判断需要拆分(满足 2 条以上:3+ 独立模块、3+ 角色、跨页面流转、低耦合)
|
|
869
|
-
|
|
870
|
-
**存储位置:** `.sillyspec/changes/<主变更名>/MASTER.md`(在主变更目录下)
|
|
871
|
-
|
|
872
|
-
**大体结构:**
|
|
873
|
-
```markdown
|
|
874
|
-
# <大需求标题>
|
|
875
|
-
|
|
876
|
-
## 总体概述
|
|
877
|
-
(整体目标和范围)
|
|
878
|
-
|
|
879
|
-
## 拆分方案
|
|
880
|
-
| 变更包 | 名称 | 边界描述 | 依赖 |
|
|
881
|
-
|--------|------|----------|------|
|
|
882
|
-
| 2026-05-28-user-auth | 用户认证 | 登录/注册/JWT | — |
|
|
883
|
-
| 2026-05-29-permission | 权限管理 | RBAC 权限体系 | user-auth |
|
|
884
|
-
| 2026-05-30-audit-log | 审计日志 | 操作日志记录 | permission |
|
|
885
|
-
|
|
886
|
-
## 依赖关系
|
|
887
|
-
```mermaid
|
|
888
|
-
graph LR
|
|
889
|
-
user-auth --> permission
|
|
890
|
-
permission --> audit-log
|
|
891
|
-
```
|
|
892
|
-
```
|
|
893
|
-
|
|
894
|
-
**下游影响:** brainstorm 最后一步"用户确认并生成规范文件"中,读取 MASTER.md 变更包列表,为每个后续包创建独立变更目录及骨架文件(proposal.md/design.md/requirements.md/tasks.md),后续包的 design.md 标记为「待设计」。
|
|
895
|
-
|
|
896
|
-
**归档时:** archive 步骤检查主变更是否有 MASTER.md,如有则标记所有阶段为 ✅ 后清除。
|
|
897
|
-
|
|
898
|
-
---
|
|
899
|
-
|
|
900
|
-
### `prototype-<名称>.html` — HTML 原型
|
|
901
|
-
|
|
902
|
-
**生成条件:** brainstorm 阶段"HTML 原型生成"步骤,AI 判断设计适合可视化(有 UI 组件/布局/交互流程)。纯后端/配置修改类需求跳过。
|
|
903
|
-
|
|
904
|
-
**存储位置:** `.sillyspec/changes/<change-name>/prototype-<名称>.html`
|
|
905
|
-
|
|
906
|
-
**特点:** 单文件(内联 CSS + JS),浏览器直接打开,ASCII/线框风格,用于设计方向确认。
|
|
907
|
-
|
|
908
|
-
---
|
|
909
|
-
|
|
910
|
-
### ~~`progress.json.bak`~~ — 已废弃
|
|
911
|
-
|
|
912
|
-
> ⚠️ 此文件在 SQLite 迁移后不再生成。旧版用于 progress.json 的备份恢复机制已被 SQLite 事务替代。历史遗留的 `.bak` 文件可以安全删除。
|
|
913
|
-
|
|
914
|
-
---
|
|
915
|
-
|
|
916
|
-
### `_env-detect.md` — 环境探测临时文件
|
|
917
|
-
|
|
918
|
-
**生成条件:** scan 阶段"构建环境探测"步骤,探测构建环境和依赖后暂存。
|
|
919
|
-
|
|
920
|
-
**存储位置:** `.sillyspec/docs/<project>/scan/_env-detect.md`
|
|
921
|
-
|
|
922
|
-
**生命周期:** 探测步骤创建 → 后续深度扫描步骤读取参考 → "自检和提交"步骤删除(`rm -f`)
|
|
923
|
-
|
|
924
|
-
---
|
|
925
|
-
|
|
926
|
-
### `ROADMAP.md` — 项目路线图
|
|
927
|
-
|
|
928
|
-
**生成条件:** 用户自行创建,非 SillySpec 自动生成
|
|
929
|
-
|
|
930
|
-
**存储位置:** `.sillyspec/ROADMAP.md`
|
|
931
|
-
|
|
932
|
-
**作用:** archive 阶段"更新路线图和提交"步骤检查是否存在,如存在则标记对应 Phase 为已完成。
|
|
933
|
-
|
|
934
|
-
---
|
|
935
|
-
|
|
936
|
-
### `CODEBASE-OVERVIEW.md` — 代码库总览
|
|
937
|
-
|
|
938
|
-
**生成条件:** 用户自行创建或由其他工具生成,非 SillySpec 自动生成
|
|
939
|
-
|
|
940
|
-
**存储位置:** 项目根目录或 `.sillyspec/` 下
|
|
941
|
-
|
|
942
|
-
**消费者:** brainstorm/plan/execute 阶段的"加载上下文"步骤都会尝试读取。
|
|
943
|
-
|
|
944
|
-
---
|
|
945
|
-
|
|
946
|
-
### `STACK.md` — 技术栈描述
|
|
947
|
-
|
|
948
|
-
**生成条件:** 用户自行创建,非 SillySpec 自动生成
|
|
949
|
-
|
|
950
|
-
**消费者:** plan 阶段"加载上下文"步骤读取,作为上下文参考。
|
|
951
|
-
|
|
952
|
-
---
|
|
953
|
-
|
|
954
|
-
### `knowledge/INDEX.md` — 知识库索引
|
|
955
|
-
|
|
956
|
-
**生成条件:** `sillyspec init` 时自动创建骨架
|
|
957
|
-
|
|
958
|
-
**大体结构:**
|
|
959
|
-
```markdown
|
|
960
|
-
# Knowledge Index
|
|
961
|
-
|
|
962
|
-
> 子代理任务开始前查询此文件,按关键词匹配,只读命中的知识文件。
|
|
963
|
-
> execute/quick 执行中发现的坑自动追加到 uncategorized.md,经用户确认后归类到对应文件。
|
|
964
|
-
|
|
965
|
-
<!-- 格式:关键词1|关键词2|关键词3 → 文件路径 -->
|
|
966
|
-
<!-- 示例:mybatis-plus|分页|Page → pagination.md -->
|
|
967
|
-
```
|
|
968
|
-
|
|
969
|
-
**消费者:**
|
|
970
|
-
- execute 阶段"确认执行范围"步骤查询,匹配 Task 关键词到知识文件
|
|
971
|
-
- quick 阶段"理解任务"步骤查询
|
|
972
|
-
|
|
973
|
-
---
|
|
974
|
-
|
|
975
|
-
### `knowledge/uncategorized.md` — 未分类知识
|
|
976
|
-
|
|
977
|
-
**生成条件:** `sillyspec init` 时自动创建骨架
|
|
978
|
-
|
|
979
|
-
**大体结构:**
|
|
980
|
-
```markdown
|
|
981
|
-
# 未分类知识
|
|
982
|
-
|
|
983
|
-
> execute/quick 执行中发现的坑暂存于此,用户审阅后归类到对应文件并更新 INDEX.md。
|
|
984
|
-
```
|
|
985
|
-
|
|
986
|
-
**写入方:**
|
|
987
|
-
- execute 阶段 AI 发现技术坑时追加
|
|
988
|
-
- quick 阶段"暂存和更新记录"步骤,如果发现项目特有的坑也追加
|
|
989
|
-
|
|
990
|
-
**下游流程:** 用户审阅后归类到 `knowledge/<topic>.md` 并更新 `INDEX.md` 索引。
|
|
991
|
-
|
|
992
|
-
---
|
|
993
|
-
|
|
994
|
-
### 后续变更包目录(骨架)
|
|
995
|
-
|
|
996
|
-
**生成条件:** brainstorm 阶段生成了 MASTER.md 且规划了多个变更包
|
|
997
|
-
|
|
998
|
-
**创建时机:** brainstorm 阶段最后一步,一次性为所有后续包创建目录和骨架
|
|
999
|
-
|
|
1000
|
-
**目录结构:**
|
|
1001
|
-
```.sillyspec/changes/<后续包名>/
|
|
1002
|
-
├── proposal.md ← 从 MASTER.md 提取动机和边界
|
|
1003
|
-
├── design.md ← 标记「待设计 - 本包 design 在该包进入 brainstorm 时完善」
|
|
1004
|
-
├── requirements.md ← 标记「待完善」
|
|
1005
|
-
└── tasks.md ← 空任务列表,标记「待 plan 阶段展开」
|
|
1006
|
-
```
|
|
1007
|
-
|
|
1008
|
-
**与主变更的区别:** 主变更的四件套是完整的;后续包的 design.md 和 requirements.md 是占位符,需要在该包独立进入 brainstorm 时完善。
|
|
1009
|
-
|
|
1010
|
-
---
|
|
1011
|
-
|
|
1012
|
-
### `AGENTS.md` / `GEMINI.md` / `INSTRUCTIONS.md` — AI 工具指令注入
|
|
1013
|
-
|
|
1014
|
-
**生成条件:** `sillyspec init --tool codex` / `--tool gemini` / `--tool opencode`,或交互模式选中这些工具时
|
|
1015
|
-
|
|
1016
|
-
**注入规则:**
|
|
1017
|
-
- 文件不存在 → 直接创建
|
|
1018
|
-
- 已存在且无 SillySpec 标记 → 追加到末尾
|
|
1019
|
-
- 已存在且已有 SillySpec 内容 → 跳过
|
|
1020
|
-
|
|
1021
|
-
**注入内容:** 代码规范(读 CONVENTIONS.md/ARCHITECTURE.md)+ 工作流程(读 sillyspec.db 确认阶段)+ 产出路径说明
|
|
1022
|
-
|
|
1023
|
-
---
|
|
1024
|
-
|
|
1025
|
-
### `QUICKLOG-<user>.md` — quick 阶段任务日志
|
|
1026
|
-
|
|
1027
|
-
**生成条件:** quick 阶段"理解任务"步骤(无 `--change` 时创建)
|
|
1028
|
-
|
|
1029
|
-
**存储位置:** `.sillyspec/quicklog/QUICKLOG-<git用户名>.md`
|
|
1030
|
-
|
|
1031
|
-
**大体结构:**
|
|
1032
|
-
```markdown
|
|
1033
|
-
## ql-20260603-001-a3f2 | 2026-06-03 14:30:00 — 修复用户登录超时问题
|
|
1034
|
-
状态:进行中
|
|
1035
|
-
文件:src/auth/login.js, src/config/timeout.yaml
|
|
1036
|
-
|
|
1037
|
-
## ql-20260603-002-7b1c | 2026-06-03 15:00:00 — 修复用户登录超时问题
|
|
1038
|
-
状态:已完成
|
|
1039
|
-
文件:src/auth/login.js
|
|
1040
|
-
结果:调整超时配置为 30s,新增重试逻辑
|
|
1041
|
-
```
|
|
1042
|
-
|
|
1043
|
-
**ID 规则:** 每条记录以 `ql-YYYYMMDD-NNN-XXXX` 开头作为唯一 ID。`XXXX` 为 4 位随机十六进制,防止多文件或并发冲突。追加前扫描文件中已有 `ql-<当天日期>-` 前缀的最大序号 +1,每天从 001 重新开始。此 ID 可被 design.md / plan.md / archive / 模块变更索引引用。
|
|
1044
|
-
|
|
1045
|
-
**生命周期:** quick 步骤 1 创建("进行中")→ 步骤 5 按 ql-ID 找到条目更新为"已完成"并补充实际改动。超过 500 行轮转重命名为 `QUICKLOG-<USER>-YYYY-MM-DD.md`(日期取最后一条记录),新文件需扫描同目录所有 QUICKLOG 文件中当天最大序号 +1 以继承 ql-ID。
|
|
1046
|
-
|
|
1047
|
-
---
|
|
1048
|
-
|
|
1049
|
-
### `propose` 阶段 — 快速生成规范
|
|
1050
|
-
|
|
1051
|
-
> **说明:** propose 是独立的阶段,与 brainstorm 并列。brainstorm 通过多轮对话探索需求后生成四件套;propose 跳过对话,基于已有设计直接生成四件套。两者产出相同(proposal.md + design.md + requirements.md + tasks.md),但路径不同。
|
|
1052
|
-
|
|
1053
|
-
**阶段步骤:**
|
|
1054
|
-
1. 状态检查 → 2. 加载上下文(含模块文档加载 + 冲突检测)→ 3. 锚定确认 → 4. 探索现有代码 → 5. 生成规范文件 → 6. 自检门控 → 7. 展示并更新进度
|
|
1055
|
-
|
|
1056
|
-
**与 brainstorm 的区别:**
|
|
1057
|
-
- brainstorm:对话式探索(10+ 步骤),适合新需求
|
|
1058
|
-
- propose:快速生成(7 步),适合已有明确设计的场景
|
|
1059
|
-
- propose 的自检门控独立于 brainstorm 的自审,检查项更聚焦
|
|
1060
|
-
|
|
1061
|
-
---
|
|
1062
|
-
|
|
1063
|
-
### `PROJECT.md` / `REQUIREMENTS.md` / `HANDOFF.json` — 项目级信息文件
|
|
1064
|
-
|
|
1065
|
-
**生成条件:** 用户自行创建,非 SillySpec 自动生成
|
|
1066
|
-
|
|
1067
|
-
**存储位置:** `.sillyspec/PROJECT.md`、`.sillyspec/REQUIREMENTS.md`、`.sillyspec/HANDOFF.json`
|
|
1068
|
-
|
|
1069
|
-
**消费者:** status 阶段读取展示项目基础信息和变更状态
|
|
1070
|
-
|
|
1071
|
-
---
|
|
1072
|
-
|
|
1073
|
-
### 可选文件汇总表
|
|
1074
|
-
|
|
1075
|
-
| 文件 | 生成条件 | 生成者 | 消费者 |
|
|
1076
|
-
|------|---------|--------|--------|
|
|
1077
|
-
| `MASTER.md` | 大需求需要拆分(brainstorm 判断) | brainstorm | 后续变更包骨架生成、archive 归档 |
|
|
1078
|
-
| `prototype-*.html` | 需要可视化确认设计(brainstorm 判断) | brainstorm | 用户确认 |
|
|
1079
|
-
| `QUICKLOG-<user>.md` | quick 阶段(无 --change 时) | quick | 任务记录 + 轮转归档 |
|
|
1080
|
-
| ~~`progress.json.bak`~~ | ~~已废弃~~ | ~~ProgressManager._backup()~~ | ~~损坏恢复~~ |
|
|
1081
|
-
| `_env-detect.md` | scan 环境探测步骤 | scan | 深度扫描步骤参考后删除 |
|
|
1082
|
-
| `ROADMAP.md` | 用户自行创建 | 用户 | archive 标记 Phase 完成 |
|
|
1083
|
-
| `PROJECT.md` | 用户自行创建 | 用户 | status 展示项目信息 |
|
|
1084
|
-
| `REQUIREMENTS.md` | 用户自行创建 | 用户 | status 展示需求 |
|
|
1085
|
-
| `HANDOFF.json` | 用户自行创建 | 用户 | status 展示交接 |
|
|
1086
|
-
| `CODEBASE-OVERVIEW.md` | 用户/工具创建 | 用户 | brainstorm/plan/execute 加载 |
|
|
1087
|
-
| `STACK.md` | 用户自行创建 | 用户 | plan/doctor 加载 |
|
|
1088
|
-
| `knowledge/INDEX.md` | init 自动创建 | init | execute/quick 关键词匹配 |
|
|
1089
|
-
| `knowledge/uncategorized.md` | init 创建 + execute/quick 追加 | init/execute/quick | 用户审阅后归类 |
|
|
1090
|
-
| 后续包骨架目录 | MASTER.md 存在时 | brainstorm 末步 | 后续包独立 brainstorm |
|
|
1091
|
-
| `AGENTS.md` 等 | 选了 codex/gemini/opencode 工具 | init | AI 工具读取 |
|
|
1092
|
-
| `projects/*.yaml` | init 自动创建 | init | 子项目上下文加载 |
|
|
1093
|
-
| `modules/_module-map.yaml` | scan 可选步骤 | scan | archive/plan/execute |
|
|
1094
|
-
| `modules/<module>.md` | scan 可选步骤(全量生成)+ archive sync-module-docs | scan/archive | propose/plan/execute/verify/quick |
|
|
1095
|
-
| `verify-result.md` | verify 阶段输出 | verify | 验证报告存档 |
|
|
1096
|
-
| `workflows/*.yaml` | init 自动生成(scan-docs.yaml, archive-impact.yaml) | init | run.js post_check + CLI workflow check |
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
```
|
|
15
|
+
| [storage-and-state.md](file-lifecycle/storage-and-state.md) | `.sillyspec/.runtime/`、SQLite、gate、artifact、history、local 配置口径 |
|
|
16
|
+
| [stage-artifacts.md](file-lifecycle/stage-artifacts.md) | 各阶段的运行时步骤、变更目录产物、归档和 quicklog |
|
|
17
|
+
| [worktree-and-guard.md](file-lifecycle/worktree-and-guard.md) | `sillyspec worktree`、`meta.json`、apply、cleanup、Claude hook 门禁 |
|
|
18
|
+
| [platform-workflows-sync.md](file-lifecycle/platform-workflows-sync.md) | 平台模式、workflow check、manifest、SillyHub sync |
|
|
19
|
+
| [known-implementation-gaps.md](file-lifecycle/known-implementation-gaps.md) | 当前代码与提示文案/旧文档不一致的地方 |
|
|
20
|
+
|
|
21
|
+
## 代码依据
|
|
22
|
+
|
|
23
|
+
本组文档主要对照以下实现:
|
|
24
|
+
|
|
25
|
+
- `src/init.js`
|
|
26
|
+
- `src/db.js`
|
|
27
|
+
- `src/progress.js`
|
|
28
|
+
- `src/run.js`
|
|
29
|
+
- `src/stages/*.js`
|
|
30
|
+
- `src/worktree.js`
|
|
31
|
+
- `src/worktree-apply.js`
|
|
32
|
+
- `src/hooks/worktree-guard.js`
|
|
33
|
+
- `src/workflow.js`
|
|
34
|
+
- `src/sync.js`
|
|
35
|
+
- `src/modules.js`
|
|
36
|
+
- `src/index.js`
|
|
37
|
+
|
|
38
|
+
运行时阶段列表以导入 `src/stages/index.js` 后得到的对象为准。当前导入结果:
|
|
39
|
+
|
|
40
|
+
| 阶段 | 当前步骤数 | 备注 |
|
|
41
|
+
|---|---:|---|
|
|
42
|
+
| scan | 10 | 辅助阶段;step 2 后会按项目动态展开 `perProject` 步骤 |
|
|
43
|
+
| brainstorm | 11 | 独立包含“写设计文档并自审”和“用户确认并生成规范文件” |
|
|
44
|
+
| propose | 7 | 包含“生成规范文件”与“自检门控”,四件套是该阶段预期产物 |
|
|
45
|
+
| plan | 动态 | 默认 8 步;`plan.md` 解析到任务后插入任务蓝图协调器 |
|
|
46
|
+
| execute | 动态 | 默认 12 步;Wave 来自 `plan.md`,解析失败时默认 3 个 Wave |
|
|
47
|
+
| verify | 7 | 只读校验 + 写 `verify-result.md` |
|
|
48
|
+
| archive | 5 | 辅助阶段;第 4 步必须带 `--confirm`,由 `run.js` 移动目录并注销 active change |
|
|
49
|
+
| quick | 3 | 辅助阶段;直接在主工作区实现,不创建 worktree |
|
|
50
|
+
| explore | 1 | 只读探索 |
|
|
51
|
+
| status | 3 | 状态展示 |
|
|
52
|
+
| doctor | 5 | 环境和项目自检 |
|
|
53
|
+
|
|
54
|
+
## 顶层目录口径
|
|
55
|
+
|
|
56
|
+
当前 `sillyspec init` 会创建或维护以下目录:
|
|
57
|
+
|
|
58
|
+
| 路径 | tracked | 创建/维护方 | 当前生命周期 |
|
|
59
|
+
|---|---|---|---|
|
|
60
|
+
| `.sillyspec/projects/` | 是 | `init.js`、scan prompt 人工确认后 | 项目注册表,`*.yaml` 描述项目名、路径、状态 |
|
|
61
|
+
| `.sillyspec/docs/<project>/scan/` | 是 | `init.js` 建目录;scan 阶段生成文档 | 代码扫描产物,workflow `scan-docs` 会检查 |
|
|
62
|
+
| `.sillyspec/docs/<project>/modules/` | 是 | scan 可选步骤、archive sync、`modules` 子命令 | 模块索引和模块卡片 |
|
|
63
|
+
| `.sillyspec/changes/<change>/` | 是 | `ProgressManager.initChange()` 确保目录;阶段 prompt 写入 | 单个变更包文档和验收产物 |
|
|
64
|
+
| `.sillyspec/changes/archive/` | 是 | archive `确认归档 --confirm` 分支 | 已归档变更目录 |
|
|
65
|
+
| `.sillyspec/knowledge/` | 是 | `init.js` | `INDEX.md` 和 `uncategorized.md` |
|
|
66
|
+
| `.sillyspec/workflows/` | 是 | `init.js` 从模板复制 | workflow check 定义 |
|
|
67
|
+
| `.sillyspec/quicklog/` | 是 | quick prompt | 无 `--change` quick 任务记录 |
|
|
68
|
+
| `.sillyspec/shared/` | 是 | `init.js` | 共享目录,当前无核心生命周期逻辑 |
|
|
69
|
+
| `.sillyspec/workspace/` | 是 | `init.js` | 工作区目录,当前无核心生命周期逻辑 |
|
|
70
|
+
| `.sillyspec/.runtime/` | 否 | `init.js`、`ProgressManager`、运行时命令 | DB、gate、artifacts、history、workflow-runs、worktrees |
|
|
71
|
+
|
|
72
|
+
`init.js` 会把 `.sillyspec/.runtime/`、`.sillyspec/local.yaml`、`.sillyspec/codebase/SCAN-RAW.md` 追加到 `.gitignore`。
|
|
73
|
+
|
|
74
|
+
## 主要文件流
|
|
75
|
+
|
|
76
|
+
```text
|
|
1100
77
|
sillyspec init
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
├─→ changes/<name>/proposal.md
|
|
1141
|
-
├─→ changes/<name>/design.md
|
|
1142
|
-
├─→ changes/<name>/requirements.md
|
|
1143
|
-
└─→ changes/<name>/tasks.md
|
|
1144
|
-
|
|
1145
|
-
plan 阶段
|
|
1146
|
-
│
|
|
1147
|
-
├─→ changes/<name>/plan.md
|
|
1148
|
-
└─→ changes/<name>/tasks/task-NN.md
|
|
1149
|
-
|
|
1150
|
-
execute 阶段
|
|
1151
|
-
│
|
|
1152
|
-
├─→ .sillyspec/.runtime/worktrees/<name>/meta.json
|
|
1153
|
-
├─→ .sillyspec/.runtime/gate-status.json
|
|
1154
|
-
└─→ (代码变更在 worktree 中,不在 .sillyspec/ 下)
|
|
1155
|
-
|
|
1156
|
-
verify 阶段
|
|
1157
|
-
│
|
|
1158
|
-
└─→ changes/<name>/verify-result.md
|
|
1159
|
-
|
|
1160
|
-
quick 阶段(辅助阶段,不走完整流程,完成后重置)
|
|
1161
|
-
│
|
|
1162
|
-
├─→ .sillyspec/quicklog/QUICKLOG-<user>.md (无 --change 时)
|
|
1163
|
-
├─→ .sillyspec/.runtime/worktrees/<name>/meta.json
|
|
1164
|
-
├─→ .sillyspec/.runtime/gate-status.json
|
|
1165
|
-
└─→ docs/<name>/modules/<module>.md (直接同步,不经过 module-impact.md)
|
|
1166
|
-
|
|
1167
|
-
> quick 阶段"理解任务"步骤会加载模块文档作为上下文参考。
|
|
1168
|
-
|
|
1169
|
-
archive 阶段
|
|
1170
|
-
│
|
|
1171
|
-
├─→ changes/<name>/module-impact.md
|
|
1172
|
-
├─→ docs/<name>/modules/<module>.md (通过 module-impact.md 同步)
|
|
1173
|
-
└─→ changes/<name>/ → changes/archive/YYYY-MM-DD-<name>/
|
|
1174
|
-
|
|
1175
|
-
[archive extract-module-impact 后 run.js 自动执行 workflow check]
|
|
1176
|
-
└─→ .sillyspec/.runtime/workflow-runs/<ts>-archive-impact-<project>-<status>.json
|
|
1177
|
-
```
|
|
78
|
+
-> .sillyspec/projects/<project>.yaml
|
|
79
|
+
-> .sillyspec/docs/<project>/scan/.gitkeep
|
|
80
|
+
-> .sillyspec/workflows/*.yaml
|
|
81
|
+
-> .sillyspec/knowledge/{INDEX.md,uncategorized.md}
|
|
82
|
+
-> .sillyspec/.runtime/{sillyspec.db,user-inputs.md,artifacts,history,logs,templates}
|
|
83
|
+
|
|
84
|
+
sillyspec run scan
|
|
85
|
+
-> .sillyspec/docs/<project>/scan/*.md
|
|
86
|
+
-> .sillyspec/docs/<project>/modules/_module-map.yaml (optional prompt)
|
|
87
|
+
-> .sillyspec/docs/<project>/modules/<module>.md (optional prompt)
|
|
88
|
+
-> .sillyspec/.runtime/scan-projects.json (step expansion state)
|
|
89
|
+
|
|
90
|
+
brainstorm / propose / plan / execute / verify / archive
|
|
91
|
+
-> .sillyspec/changes/<change>/...
|
|
92
|
+
-> .sillyspec/.runtime/sillyspec.db
|
|
93
|
+
-> .sillyspec/.runtime/user-inputs.md
|
|
94
|
+
-> .sillyspec/.runtime/artifacts/*.txt (long step output)
|
|
95
|
+
|
|
96
|
+
execute
|
|
97
|
+
-> .sillyspec/.runtime/worktrees/<change>/meta.json
|
|
98
|
+
-> worktree branch sillyspec/<change>
|
|
99
|
+
-> apply patch back to main workspace, then cleanup
|
|
100
|
+
|
|
101
|
+
quick
|
|
102
|
+
-> .sillyspec/quicklog/QUICKLOG-<git-user>.md (without --change)
|
|
103
|
+
-> or append checkbox to .sillyspec/changes/<change>/tasks.md
|
|
104
|
+
-> code changes are made in the main workspace
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## 核心修正
|
|
108
|
+
|
|
109
|
+
这版文档相对旧版长文档做了几项关键修正:
|
|
110
|
+
|
|
111
|
+
- `quick` 不走 worktree 生命周期。hook 在 quick 阶段对写文件放行,只拦截危险 Bash 命令。
|
|
112
|
+
- `scan` 当前定义是 10 步,并且 step 2 后会动态展开项目级步骤,不是固定 12 步。
|
|
113
|
+
- `brainstorm` 和 `propose` 的重复 object key 已拆成独立步骤,运行时步骤数分别是 11 和 7。
|
|
114
|
+
- `.sillyspec/local.yaml` 是当前主配置口径;scan prompt 写这里,sync 读写这里,hook 优先读这里并兼容根目录 fallback。
|
|
115
|
+
- 平台模式的 `manifest.json` 已接入 scan 完成回调;`workflow-runs` 的 runtimeRoot 路径支持在 `workflow.js` 中存在,但 `run.js` 当前调用没有传入 `runtimeRoot`。
|
|
116
|
+
- `archive` 的目录移动已经由 `run.js` 在第 4 步 `--confirm` 时执行;未带 `--confirm` 会回退该步骤并提示补参。
|