sillyspec 2.7.0 → 3.1.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.
package/SKILL.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: sillyspec
3
- description: "规范驱动开发工具包。绿地项目用 /sillyspec:init,棕地项目用 /sillyspec:scan。可用命令:init、scan、explore、brainstorm、propose、plan、execute、verify、archive、status、handoff、resume、continue、quick、workspace。"
3
+ description: "规范驱动开发工具包。绿地项目用 /sillyspec:init,棕地项目用 /sillyspec:scan。可用命令:init、scan、explore、brainstorm、plan、execute、verify、archive、status、resume、continue、quick、workspace。"
4
4
  version: "2.0.0"
5
5
  ---
6
6
 
@@ -20,8 +20,8 @@ version: "2.0.0"
20
20
  ## 完整工作流
21
21
 
22
22
  ```
23
- 绿地:init → brainstorm → propose → plan → execute → verify → archive
24
- 棕地:scan → brainstorm → propose → plan → execute → verify → archive
23
+ 绿地:init → brainstorm → plan → execute → [verify] → archive
24
+ 棕地:scan → brainstorm → plan → execute → [verify] → archive
25
25
  工作区:workspace → (init/scan per project) → brainstorm → ...
26
26
  ```
27
27
 
@@ -32,11 +32,10 @@ version: "2.0.0"
32
32
  | `/sillyspec:init` | 绿地项目初始化 |
33
33
  | `/sillyspec:scan` | 棕地项目扫描(7 份文档) |
34
34
  | `/sillyspec:explore` | 自由思考模式 |
35
- | `/sillyspec:brainstorm` | 需求探索 |
36
- | `/sillyspec:propose` | 生成规范 |
35
+ | `/sillyspec:brainstorm` | 需求探索+规范生成 |
37
36
  | `/sillyspec:plan` | 实现计划 |
38
37
  | `/sillyspec:execute` | TDD 执行 |
39
- | `/sillyspec:verify` | 验证 |
38
+ | `/sillyspec:verify` | 验证(可选) |
40
39
  | `/sillyspec:archive` | 归档 |
41
40
  | `/sillyspec:status` | 查看进度 |
42
41
  | `/sillyspec:continue` | 自动下一步 |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sillyspec",
3
- "version": "2.7.0",
3
+ "version": "3.1.0",
4
4
  "description": "SillySpec CLI — 流程状态机,让 AI 严格按步骤来",
5
5
  "type": "module",
6
6
  "bin": {
package/src/init.js CHANGED
@@ -175,27 +175,31 @@ function isTTY() {
175
175
 
176
176
  async function doInstall(projectDir, tools, isWorkspace, subprojects = []) {
177
177
  // 创建基础目录
178
- // 不预创建子目录,由各命令按需创建
179
178
  // .sillyspec/codebase/ → scan
179
+ // .sillyspec/codebase/details/ → scan (deep)
180
180
  // .sillyspec/changes/ → brainstorm/propose
181
181
  // .sillyspec/changes/archive/ → archive
182
+ // .sillyspec/quicklog/ → quick
183
+ // .sillyspec/knowledge/ → archive (spec 沉淀)
182
184
  // (plan 内容已合并到 tasks.md)
183
- // .sillyspec/specs/ → propose
184
185
  if (isWorkspace) {
185
186
  mkdirSync(join(projectDir, '.sillyspec', 'shared'), { recursive: true });
186
187
  mkdirSync(join(projectDir, '.sillyspec', 'workspace'), { recursive: true });
187
188
  }
188
189
 
189
- // .gitignore — 确保 STATE.md 被忽略
190
190
  const gitignorePath = join(projectDir, '.gitignore');
191
- const stateIgnoreRule = '.sillyspec/STATE.md';
191
+ const ignoreRules = ['.sillyspec/STATE.md', '.sillyspec/codebase/SCAN-RAW.md'];
192
192
  if (existsSync(gitignorePath)) {
193
193
  const content = readFileSync(gitignorePath, 'utf8');
194
- if (!content.includes(stateIgnoreRule)) {
195
- writeFileSync(gitignorePath, content.trimEnd() + '\n' + stateIgnoreRule + '\n');
194
+ let updated = content.trimEnd();
195
+ for (const rule of ignoreRules) {
196
+ if (!updated.includes(rule)) {
197
+ updated += '\n' + rule;
198
+ }
196
199
  }
200
+ writeFileSync(gitignorePath, updated + '\n');
197
201
  } else {
198
- writeFileSync(gitignorePath, stateIgnoreRule + '\n');
202
+ writeFileSync(gitignorePath, ignoreRules.join('\n') + '\n');
199
203
  }
200
204
 
201
205
  // 生成文件
@@ -18,7 +18,7 @@ $ARGUMENTS
18
18
 
19
19
  读取 `.sillyspec/changes/<change-name>/` 下所有必要文件,逐项检查:
20
20
 
21
- - [ ] **文件完整性:** 检查 `proposal.md` 和 `design.md` 是否存在,缺失则警告
21
+ - [ ] **文件完整性:** 检查 `design.md` 是否存在,缺失则警告
22
22
  - [ ] **任务完成度:** 读取 `tasks.md`,统计已完成/未完成任务数。**有未完成的 → 用 AskUserQuestion 询问:**
23
23
  - ① 继续归档(未完成任务将被标记完成)
24
24
  - ② 取消,回去完成任务
@@ -35,7 +35,7 @@ $ARGUMENTS
35
35
 
36
36
  ### 3. Spec 沉淀
37
37
 
38
- 将 `.sillyspec/changes/<change-name>/specs/` 下的设计文档**复制到 `.sillyspec/specs/` 主目录**,确保已完成的设计规范可被后续变更参考。如目标已存在同名文件则跳过并提示。
38
+ 将 `.sillyspec/changes/<change-name>/` 下的设计文档**复制到 `.sillyspec/knowledge/` 主目录**,确保已完成的设计规范可被后续变更参考。如目标已存在同名文件则跳过并提示。
39
39
 
40
40
  ### 4. 用户确认
41
41
 
@@ -53,14 +53,14 @@ $ARGUMENTS
53
53
  cat .sillyspec/config.yaml 2>/dev/null
54
54
  ```
55
55
 
56
- **工作区模式:** AskUserQuestion 选子项目,加载子项目上下文 + 共享规范 + 工作区概览,设计文档保存到子项目 `.sillyspec/specs/`。
56
+ **工作区模式:** AskUserQuestion 选子项目,加载子项目上下文 + 共享规范 + 工作区概览,设计文档保存到子项目 `.sillyspec/changes/`。
57
57
 
58
58
  **单项目模式:**
59
59
  ```bash
60
60
  cat .sillyspec/{PROJECT,REQUIREMENTS,ROADMAP}.md 2>/dev/null
61
61
  cat .sillyspec/codebase/{STRUCTURE,CONVENTIONS}.md 2>/dev/null
62
62
  ls .sillyspec/changes/ 2>/dev/null | grep -v archive
63
- ls .sillyspec/specs/ 2>/dev/null
63
+ ls .sillyspec/knowledge/ 2>/dev/null
64
64
  ```
65
65
 
66
66
  ### Step 1.5: 协作与复用检查
@@ -126,18 +126,24 @@ git commit -m "docs: master change plan for <变更名>"
126
126
 
127
127
  ### Step 6: 写设计文档
128
128
 
129
- 保存到 `.sillyspec/specs/YYYY-MM-DD-<topic>-design.md`:
129
+ 保存到 `.sillyspec/changes/<变更名>/design.md`:
130
130
 
131
131
  ```markdown
132
132
  # [Feature Name] 设计
133
133
 
134
- ## 概述
135
- ## 功能描述
134
+ ## 动机与范围
135
+ (为什么做、范围边界、成功标准)
136
+
137
+ ## 功能需求
138
+ (需求场景、验收标准)
139
+ - [ ] 标准 1
140
+
136
141
  ## 技术方案
137
142
  ## 约束和假设
138
143
  ## 不在范围内
139
- ## 验收标准
140
- - [ ] 标准 1
144
+ ## 文件变更
145
+ ## 代码风格参照
146
+ (参考已有源文件,标注返回值类型、异常类型、注解风格)
141
147
  ```
142
148
 
143
149
  **注意:** 引用的表名必须来自 ARCHITECTURE.md 数据模型或明确标注"新增"。必须先读取 `.sillyspec/codebase/ARCHITECTURE.md`。
@@ -163,12 +169,7 @@ sillyspec status --json
163
169
 
164
170
  ### Step 9: 输出技术方案
165
171
 
166
- 用户确认后,直接产出 `design.md` 写入 `.sillyspec/changes/<变更名>/design.md`。内容包含:
167
- - 架构决策及理由
168
- - 文件变更清单表格
169
- - 数据模型
170
- - API 设计
171
- - 代码风格参照(参考已有 Controller/Service/Entity 源文件,标注返回值类型、异常类型、注解风格)
172
+ 用户确认后,确认 design.md 已包含完整内容(动机、需求、方案、文件变更、代码风格参照)。如 Step 6 已保存则无需重复。
172
173
 
173
174
  ### Step 10: 更新 STATE.md
174
175
 
@@ -9,20 +9,16 @@
9
9
 
10
10
  ```
11
11
  1. 有进行中的变更?
12
- 1a. 无文件提示完善 proposal
13
- 1b. 无 design.md → 提示补充 design
14
- 1c. tasks.md → 执行 /sillyspec:propose
15
- 1d. tasks.md 有未完成项 + 有计划 → 执行 /sillyspec:execute
16
- 1e. tasks.md 全完成 + 未验证 → 执行 /sillyspec:verify
17
- 1f. 已验证通过 → 执行 /sillyspec:archive
12
+ 1a. design.md 提示补充设计(/sillyspec:brainstorm)
13
+ 1b. 无 tasks.md → 执行 /sillyspec:plan
14
+ 1c. tasks.md 有未完成项 + 有计划 → 执行 /sillyspec:execute
15
+ 1d. tasks.md 全完成 + 未验证 → 执行 /sillyspec:verify(可选)
16
+ 1e. 已验证通过 → 执行 /sillyspec:archive
18
17
 
19
- 2. 有设计文档但无对应变更?
20
- → /sillyspec:propose <name>
21
-
22
- 3. 有 .sillyspec/codebase/ 但无进行中工作?
18
+ 2. 有 .sillyspec/codebase/ 但无进行中工作?
23
19
  → /sillyspec:brainstorm "你的想法"
24
20
 
25
- 4. 什么都没有?
21
+ 3. 什么都没有?
26
22
  → /sillyspec:init(新项目)或 /sillyspec:scan(棕地项目)
27
23
  ```
28
24
 
@@ -5,9 +5,6 @@
5
5
  - ❌ 跳过状态检查,自行推断阶段
6
6
  - ❌ 跳步执行(不允许跳过 plan 直接 execute)
7
7
  - ❌ 先写代码后补测试
8
- - ❌ "先写草稿回头再测"
9
- - ❌ 跳过测试因为"太简单"
10
- - ❌ 测试意外通过时不重写
11
8
  - ❌ 编造不存在的方法/注解/路径/类/字段
12
9
  - ❌ 自行补全缺失的接口/方法(应报告给用户)
13
10
  - ❌ 意外修改了计划外的文件却不报告
@@ -42,121 +39,78 @@ cat "$LATEST"/{tasks,design}.md 2>/dev/null
42
39
  cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
43
40
  ```
44
41
 
45
- ### 锚定确认(必须完成)
46
-
47
- 确认实际存在的文件:
48
- ```
49
- 已读取并理解:
50
- - [x] plan — 实现计划和执行顺序
51
- - [x] tasks.md — 实现清单
52
- - [x] design.md — 技术方案和文件变更
53
- 所有可用上下文已加载,开始执行。
54
- ```
55
-
56
- 如果 `$ARGUMENTS` 指定范围(如 `wave-1`、`task-3`),只执行对应部分。
42
+ 确认实际存在的文件,不存在的标注跳过。如果 `$ARGUMENTS` 指定范围(如 `wave-1`、`task-3`),只执行对应部分。
57
43
 
58
44
  ---
59
45
 
60
46
  ## 执行策略
61
47
 
62
- 用 AskUserQuestion 询问用户选择执行模式:
63
- 1. 串行执行 — 当前会话逐任务执行,适合简单变更
64
- 2. 子代理并行 — 每个 Task 启动独立子代理,适合多任务独立变更(需要 subagent 能力)
48
+ 用 AskUserQuestion 询问用户选择:
49
+
50
+ **1. 执行模式:**
51
+ - 串行执行 — 当前会话逐任务执行,适合简单变更
52
+ - 子代理并行 — 每个 Task 启动独立子代理,适合多任务独立变更
53
+
54
+ **2. 确认频率:**
55
+ - 每个任务确认 — 每完成一个 task 展示结果,等用户确认后继续
56
+ - 每 N 个任务确认 — 每完成 N 个 task 汇总展示,用户一次性确认
57
+ - AI 自主判断 — AI 在遇到歧义、风险、计划外变更时才询问,其余自动推进
58
+ - 全自动 — 全部自动执行,不在中途打断用户
65
59
 
66
60
  选择子代理模式时:
67
61
  1. 按计划的 Wave 分组
68
62
  2. 每个 Task 启动独立子代理(不继承主 session 历史)
69
- 3. 子代理上下文:任务描述 + TDD 纪律 + 精确文件路径 + 相关约定 + **要修改文件的当前源码** + **被调用类的源码**
70
-
71
- 选择串行模式时:
72
- 当前会话逐任务串行执行,每完成一个任务展示结果并等待用户确认。
73
-
74
- ## 每个任务的 TDD 铁律
75
-
76
- ```
77
- 🔴 RED → 先写测试,运行确认失败
78
- 🟢 GREEN → 写最少代码让测试通过
79
- 🔵 REFACTOR → 清理,保持测试通过
80
- ✅ COMMIT → git 提交(测试文件必须包含在提交中)
81
- ☑️ CHECK → 勾选 tasks.md 中对应的 checkbox
82
- ```
83
-
84
- **Git 提交:** 检查 Git 仓库 → `git add -A` → 生成 commit message → **用 AskUserQuestion 展示 commit message 给用户确认**:
85
- 1. 确认提交 — 执行 `git commit`
86
- 2. 修改提交信息 — 用户调整后重新确认
87
- 3. 跳过提交 — 本任务不 commit(记录原因)
88
-
89
- 用户确认后才执行 `git commit`。工作区模式下在子项目目录提交。
90
-
91
- **勾选 tasks:** 每个 Task 完成后,**必须立即**在 `.sillyspec/changes/<变更名>/tasks.md` 中将对应 checkbox 标记为 `[x]`,并附上完成时间:`- [x] [YYYY-MM-DD HH:MM:SS] 任务描述`。这是 Task 完成的最后一步,不允许跳过。
92
-
93
- **测试文件必须保留:** 测试是产出物,不是草稿。写完的测试文件必须保留在项目中,随代码一起 commit,不能删除。
63
+ 3. 子代理上下文:任务描述 + 相关约定 + 要修改文件和被调用类的源码
94
64
 
95
- **哪些任务可以跳过 TDD(不需要人工确认):**
96
- - 纯配置文件(YAML、properties、.env、JSON 配置)
97
- - 纯数据文件(SQL seed、fixture)
98
- - 纯文档(README、注释)
65
+ ---
99
66
 
100
- **其他情况一律走 TDD:** Service、Controller、Mapper、组件、工具类、DTO(需要验证序列化/校验逻辑时)、API 接口 — 全部先写测试。
67
+ ## 每个任务的执行流程
101
68
 
102
- **违反 TDD → 删掉代码从测试重新开始。没有例外。**
69
+ ### 1. 先读后写
103
70
 
104
- ## 写代码前必须读取现有源码(先读后写)
71
+ 写代码前,读取相关源文件确认风格和方法签名:
105
72
 
106
- **⛔ 铁律:**
107
- - 没有读过相关源文件,不允许写任何代码
108
- - 方法签名必须来自已有代码或 plan 中的明确定义,禁止凭空编造
109
- - 调用已有方法时,必须先 `cat` 源文件确认方法签名(参数、返回值、异常)
110
- - **调用任何已有方法前,必须 grep 确认方法存在**:
73
+ ```bash
74
+ # 读取 CONVENTIONS
75
+ cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
76
+ # 读取要修改的文件和同模块参考文件
77
+ cat <要修改的文件路径>
78
+ cat <参考文件路径>
79
+ ```
111
80
 
81
+ **调用已有方法前,grep 确认存在:**
112
82
  ```bash
113
- # 调用 userService.getById() 之前
114
83
  grep -rn "public.*getById" --include="*.java" src/main/java/**/service/
115
- # 调用 result.success() 之前
116
- grep -rn "public.*success" --include="*.java" src/main/java/**/common/
117
84
  ```
85
+ grep 不到 → 不许调用,先查清楚或报告给用户。
118
86
 
119
- grep 不到 → 方法不存在或名字不同 → 不许调用,先查清楚。
87
+ ### 2. TDD
120
88
 
121
- ```bash
122
- cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
123
89
  ```
124
-
125
- 然后读取同模块已有代码(根据语言过滤):
126
- ```bash
127
- # Controller/Handler/Router
128
- find . \( -path "*/controller*" -o -path "*/handler*" -o -path "*/router*" -o -path "*/api*" \) \
129
- -type f \( -name "*.java" -o -name "*.ts" -o -name "*.py" -o -name "*.go" \) \
130
- -not -path "*/{node_modules,dist,.git,vendor,build}/*" | head -15
131
- # Service/Manager/Repository
132
- find . \( -name "*Service*" -o -name "*Manager*" -o -name "*UseCase*" -o -name "*Repository*" \) \
133
- -type f \( -name "*.java" -o -name "*.ts" -o -name "*.py" -o -name "*.go" \) \
134
- -not -path "*/{node_modules,dist,.git,vendor,build}/*" | head -15
90
+ 🔴 RED → 写测试,运行确认失败
91
+ 🟢 GREEN → 写最少代码让测试通过
92
+ 🔵 REFACTOR → 清理,保持测试通过
135
93
  ```
136
94
 
137
- **找不到相关代码时:**
138
- - 棕地项目 → 报告缺失,请用户提供参考路径
139
- - 绿地项目 → 靠 CONVENTIONS.md + ARCHITECTURE.md + brainstorm 设计方案驱动
95
+ TDD 中间步骤(RED→GREEN→REFACTOR)连续执行,不需要每步等用户确认。
140
96
 
141
- ## 两阶段审查
97
+ **测试文件必须保留**,随代码一起 commit。违反 TDD → 删代码重来。
142
98
 
143
- 每个任务完成后:
144
- - **A 规范合规:** tasks checkbox 完成?design 方案一致?测试有意义?
145
- - **B 代码质量:** DRY、YAGNI、死代码、错误处理、CONVENTIONS.md 合规?
99
+ **可跳过 TDD(不需要确认):** 纯配置(YAML/properties)、纯数据(SQL seed)、纯文档(README/注释)。
146
100
 
147
- **3 轮审查不通过 → 提交人工处理。**
101
+ ### 3. 勾选 tasks
148
102
 
149
- ## 偏差处理
103
+ 完成后在 `.sillyspec/changes/<变更名>/tasks.md` 勾选对应 checkbox:`- [x] [YYYY-MM-DD HH:MM:SS] 任务描述`
104
+
105
+ ### 4. Git commit
150
106
 
151
- 遇到问题:**停 报告等人工确认。** 代码缺失、方法不存在、权限注解未知先读已有代码确认风格,再问用户。
107
+ `git add -A`生成 commit message **根据用户选择的确认频率决定是否立即确认或批量确认**。
152
108
 
153
- ## 自检门控
109
+ ---
110
+
111
+ ## 偏差处理
154
112
 
155
- - [ ] 完成任务与 plan 一致?
156
- - [ ] tasks.md 所有 checkbox 都已勾选为 `[x]`?
157
- - [ ] 未意外修改计划外文件?
158
- - [ ] 每个任务有 git commit?
159
- - [ ] 测试全部通过?
113
+ 遇到问题:**停 报告 等人工确认。** 代码缺失、方法不存在、计划外变更 → 先读已有代码,再问用户。
160
114
 
161
115
  ## 完成后
162
116
 
@@ -166,8 +120,7 @@ find . \( -name "*Service*" -o -name "*Manager*" -o -name "*UseCase*" -o -name "
166
120
  3. **继续开发** — 不结束当前阶段
167
121
 
168
122
  ```bash
169
- sillyspec status --json
170
- sillyspec next
123
+ sillyspec status --json && sillyspec next
171
124
  ```
172
125
 
173
126
  更新 `.sillyspec/STATE.md`:阶段改为 `execute ✅` 或 `execute 🔄 (X/M)`,历史记录追加执行结果。
@@ -31,7 +31,7 @@ ls .sillyspec/changes/ 2>/dev/null | grep -v archive
31
31
  cat .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
32
32
  ```
33
33
 
34
- 有进行中变更时读取其 proposal/design/tasks,自然引用。发现重要决策时可提议保存(不自动保存)。
34
+ 有进行中变更时读取其 design/tasks,自然引用。发现重要决策时可提议保存(不自动保存)。
35
35
 
36
36
  ## 没有必需的结束
37
37
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  ## 流程
10
10
 
11
- 1. **读取变更文件:** `cat .sillyspec/changes/$ARGUMENTS/{proposal,design}.md specs/requirements.md 2>/dev/null`。不存在则报错。
11
+ 1. **读取变更文件:** `cat .sillyspec/changes/$ARGUMENTS/{design}.md 2>/dev/null`。不存在则报错。
12
12
  2. **清理为通用模板:** 移除项目特定信息,保留通用设计方案,添加 `notes.md` 使用建议。
13
13
  3. **导出:** `mkdir -p ~/.sillyspec/templates/<change-name>` 并复制文件。
14
14
  4. **确认:** 展示摘要和模板路径。
package/templates/plan.md CHANGED
@@ -30,28 +30,26 @@ cat .sillyspec/config.yaml 2>/dev/null
30
30
  **单项目模式:**
31
31
  ```bash
32
32
  LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
33
- cat "$LATEST"/{proposal,design,tasks}.md 2>/dev/null
34
- cat "$LATEST/specs/requirements.md" 2>/dev/null
35
- cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE,STACK}.md 2>/dev/null
33
+ cat "$LATEST"/{design,tasks}.md 2>/dev/null
34
+ cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
36
35
  cat .sillyspec/REQUIREMENTS.md 2>/dev/null
37
36
  ```
38
37
 
39
38
  ### 1.5 锚定确认(必须完成)
40
39
 
41
- 确认实际存在的文件(proposal / design / tasks / requirements),不存在的标注跳过。
40
+ 确认实际存在的文件(design / tasks),不存在的标注跳过。
42
41
 
43
42
  ### 2. 逐任务展开
44
43
 
45
- 把 tasks.md 每个 checkbox 展开为详细步骤,按 Wave 分组组织。工作区模式下每个 Task 标注所属项目。
44
+ 把 tasks.md 每个 checkbox 展开为任务描述,按 Wave 分组组织。工作区模式下每个 Task 标注所属项目。
46
45
 
47
- **每个 Task 必须包含:**
48
- - 精确文件路径
49
- - **精确方法签名**(参数类型、返回值类型、注解)— ❌ "实现用户创建接口" → ✅ `public Result<UserVO> createUser(@RequestBody @Valid UserDTO dto)`,参考 `RoleController.createRole`
50
- - 完整可运行的代码示例(不写"添加验证逻辑"这种模糊描述)
51
- - 涉及已有类调用时,标注"参考 `XxxService.java` 的 `xxx` 方法"
52
- - 新增方法必须列出方法签名,方法签名必须来自已有代码风格或 design.md
53
- - 运行命令和预期输出
54
- - TDD 步骤:🔴 写失败测试 → 🟢 写最少代码 → 🔵 重构 → ✅ commit
46
+ **每个 Task 包含:**
47
+ - 精确文件路径(修改哪个文件)
48
+ - 任务描述(做什么,一两句话说清楚)
49
+ - 涉及已有类调用时,标注参考文件(如"参考 `RoleController.createRole`)
50
+ - 依赖关系
51
+
52
+ **注意:不需要写精确方法签名和代码示例。** 方法签名和代码风格由 execute 阶段先读后写确认。plan 专注"做什么",execute 负责"怎么做"。
55
53
 
56
54
  ### 3. 标注执行顺序
57
55
 
@@ -59,10 +57,8 @@ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
59
57
  ```markdown
60
58
  ### Wave 1(并行,无依赖)
61
59
  - [ ] 添加用户创建接口
62
- - 修改: `UserController.java`
63
- - 方法签名: `public Result<UserVO> createUser(@RequestBody @Valid UserDTO dto)`
60
+ - 修改: `UserController.java`、`UserService.java`
64
61
  - 参考: `RoleController.createRole`
65
- - TDD: 🔴 测试 → 🟢 实现 → 🔵 重构
66
62
 
67
63
  - [ ] 添加角色创建接口
68
64
  - ...
@@ -79,13 +75,7 @@ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
79
75
  ### 5. 自检门控
80
76
 
81
77
  - [ ] 每个 task 有具体文件路径?
82
- - [ ] 每个 task 有验证命令和预期输出?
83
- - [ ] 标注了 Wave 和执行顺序?
84
- - [ ] 与 design.md 文件变更清单一致?
85
-
86
- ```bash
87
- bash scripts/validate-plan.sh .sillyspec/changes/<当前变更目录> 2>/dev/null
88
- ```
78
+ - [ ] 标注了 Wave 和依赖关系?
89
79
 
90
80
  ### 6. 完成
91
81
 
@@ -28,7 +28,7 @@ $ARGUMENTS
28
28
 
29
29
  ```bash
30
30
  cat .sillyspec/changes/*/MASTER.md 2>/dev/null # 子阶段变更
31
- ls -t .sillyspec/specs/*.md | head -1
31
+ ls -t .sillyspec/knowledge/*.md | head -1
32
32
  cat .sillyspec/{REQUIREMENTS}.md .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
33
33
  ls .sillyspec/changes/ | grep -v archive
34
34
  ```
@@ -49,23 +49,19 @@ ls .sillyspec/changes/ | grep -v archive
49
49
 
50
50
  创建 `.sillyspec/changes/$ARGUMENTS/`:
51
51
 
52
- **`proposal.md`:** 动机、变更范围、不在范围内、可量化成功标准
53
-
54
- **`specs/requirements.md`:** 功能需求(REQ-001 格式)、Given/When/Then 用户场景、非功能需求
55
-
56
- **`design.md`:** 架构决策及理由、文件变更清单表格、数据模型、API 设计、**代码风格参照**(参考已有的 Controller/Service/Entity 源文件,标注返回值类型、异常类型、注解风格)
52
+ **`design.md`:** 动机与范围、功能需求(REQ-001 格式、Given/When/Then 用户场景、非功能需求)、架构决策及理由、文件变更清单表格、数据模型、API 设计、**代码风格参照**(参考已有的 Controller/Service/Entity 源文件,标注返回值类型、异常类型、注解风格)
57
53
 
58
54
  **`tasks.md`:** 准备 → 实现 → 收尾的任务列表(每个 task 标注文件路径)
59
55
 
60
56
  ### 4. 展示关键文件
61
57
 
62
- 展示 proposal.md 和 design.md 给用户审阅。tasks.md 只展示任务列表。
58
+ 展示 design.md 给用户审阅。tasks.md 只展示任务列表。
63
59
 
64
60
  ### 5. 自检门控
65
61
 
66
- - [ ] proposal.md 含"动机、变更范围、不在范围内、成功标准"?
62
+ - [ ] design.md 含"动机、变更范围、功能需求"?
67
63
  - [ ] design.md 含"文件变更清单"表格?
68
- - [ ] requirements.md 含 Given/When/Then 用户场景?
64
+ - [ ] design.md 含 Given/When/Then 用户场景?
69
65
  - [ ] tasks.md 每个 task 有文件路径?
70
66
 
71
67
  ```bash
@@ -36,12 +36,12 @@ $ARGUMENTS
36
36
  7. **Git commit:** 展示 commit message 给用户确认后提交
37
37
  8. **记录:**
38
38
  - **有 `--change`:** 在 `.sillyspec/changes/<变更名>/tasks.md` 追加 task 并勾选 `[x]`
39
- - **无 `--change`:** 记录到 `.sillyspec/QUICKLOG.md`(见下方规则)
39
+ - **无 `--change`:** 记录到 `.sillyspec/quicklog/QUICKLOG.md`(见下方规则)
40
40
  9. **检查复杂度:** 任务比预期复杂 → 建议用完整流程
41
41
 
42
42
  ### QUICKLOG.md 规则
43
43
 
44
- 文件路径:`.sillyspec/QUICKLOG.md`
44
+ 文件路径:`.sillyspec/quicklog/QUICKLOG.md`
45
45
 
46
46
  **追加记录格式:**
47
47
  ```markdown
@@ -22,8 +22,7 @@ cat .sillyspec/STATE.md 2>/dev/null
22
22
  ```bash
23
23
  ls .sillyspec/changes/*/MASTER.md 2>/dev/null
24
24
  ls -d .sillyspec/changes/*/ | grep -v archive | grep -v stages | tail -1 2>/dev/null
25
- ls .sillyspec/changes/*/stages/*/proposal.md 2>/dev/null
26
- ls .sillyspec/codebase/*.md .sillyspec/changes/*/tasks.md .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
25
+ ls .sillyspec/codebase/*.md .sillyspec/codebase/details/*.md .sillyspec/changes/*/tasks.md .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
27
26
  ```
28
27
 
29
28
  **探测结果推断:**
@@ -32,9 +31,9 @@ ls .sillyspec/codebase/*.md .sillyspec/changes/*/tasks.md .sillyspec/{REQUIREMEN
32
31
  |---|---|---|
33
32
  | 无 .sillyspec/ 内容 | 未开始 | `/sillyspec:init` 或 `/sillyspec:scan` |
34
33
  | 有 SCAN-RAW.md 或 codebase 文档不全 | 扫描中断 | `/sillyspec:scan`(断点续扫) |
35
- | codebase 7 份齐全无 changes/ | 已扫描未开始需求 | `/sillyspec:brainstorm` |
34
+ | codebase 文档齐全无 changes/ | 已扫描未开始需求 | `/sillyspec:brainstorm` |
36
35
  | 有 REQUIREMENTS.md 无 changes/ | 绿地有需求 | `/sillyspec:brainstorm` |
37
- | changes/ 有 proposal 无 tasks | 待计划 | `/sillyspec:plan` |
36
+ | changes/ 有 design 无 tasks | 待计划 | `/sillyspec:plan` |
38
37
  | tasks.md 有未完成 checkbox | 执行中 | `/sillyspec:execute` |
39
38
  | tasks.md 全完成 | 待验证 | `/sillyspec:verify` |
40
39
 
package/templates/scan.md CHANGED
@@ -61,7 +61,7 @@ AskUserQuestion 依次确认:快速⚡/深度🔍、扫描范围(留空全
61
61
 
62
62
  **只读入口和配置文件,不读源码。** 生成 3 份文档到 `mkdir -p .sillyspec/codebase`:
63
63
 
64
- 1. `STACK.md` — 技术栈
64
+ 1. `ARCHITECTURE.md` — 架构 + 技术栈(合并原 STACK.md)
65
65
  2. `STRUCTURE.md` — 目录结构
66
66
  3. `PROJECT.md` — 项目概览
67
67
 
@@ -191,8 +191,8 @@ bash scripts/scan-preprocess.sh [扫描区域] 2>/dev/null
191
191
  ### Step 1: 断点续扫
192
192
 
193
193
  ```bash
194
- for f in STACK ARCHITECTURE STRUCTURE CONVENTIONS INTEGRATIONS TESTING CONCERNS; do
195
- [ -f ".sillyspec/codebase/${f}.md" ] && echo "✅ ${f}" || echo "⬜ ${f}"
194
+ for f in ARCHITECTURE STRUCTURE CONVENTIONS INTEGRATIONS TESTING CONCERNS; do
195
+ [ -f ".sillyspec/codebase/${f}.md" ] || [ -f ".sillyspec/codebase/details/${f}.md" ] && echo "✅ ${f}" || echo "⬜ ${f}"
196
196
  done
197
197
  ```
198
198
 
@@ -202,18 +202,19 @@ done
202
202
 
203
203
  **不直接读原始源码。** 读 SCAN-RAW.md,按需深挖相关文件。
204
204
 
205
- 按顺序生成 7 份文档(写完立即保存,中断不丢失):
205
+ 按顺序生成文档(写完立即保存,中断不丢失):
206
206
 
207
- 1. `STACK.md` — 技术栈
208
- 2. `ARCHITECTURE.md` — 架构(含数据模型摘要)
209
- 3. `STRUCTURE.md` — 目录结构
210
- 4. `CONVENTIONS.md` — 编码约定(含框架隐形规则、实体继承规范)
211
- 5. `INTEGRATIONS.md` — 集成
212
- 6. `TESTING.md` — 测试现状
213
- 7. `CONCERNS.md` — 技术债务和风险
207
+ 1. `ARCHITECTURE.md` — 架构 + 技术栈 + 数据模型摘要(合并原 STACK.md)
208
+ 2. `CONVENTIONS.md` — 编码约定(含框架隐形规则、实体继承规范)
209
+ 3. `codebase/details/STRUCTURE.md` — 目录结构(深扫详情)
210
+ 4. `codebase/details/INTEGRATIONS.md` — 集成(深扫详情)
211
+ 5. `codebase/details/TESTING.md` — 测试现状(深扫详情)
212
+ 6. `codebase/details/CONCERNS.md` — 技术债务和风险(深扫详情)
214
213
 
215
214
  同时更新 `.sillyspec/PROJECT.md`。
216
215
 
216
+ > **注意:** `SCAN-RAW.md` 是临时文件,扫描完成后可删除。
217
+
217
218
  ---
218
219
 
219
220
  ## 完成后
@@ -237,19 +238,19 @@ git commit -m "chore: sillyspec scan - codebase mapped"
237
238
  **路径校验:** 每份文档写完后检查必须在 `.sillyspec/codebase/` 下,误放则自动修正:
238
239
 
239
240
  ```bash
240
- for f in $(find . -maxdepth 2 -name "{ARCHITECTURE,STACK,STRUCTURE,CONVENTIONS,INTEGRATIONS,TESTING,CONCERNS,PROJECT,SCAN-RAW}.md" ! -path "./.sillyspec/codebase/*"); do
241
+ for f in $(find . -maxdepth 2 -name "{ARCHITECTURE,STRUCTURE,CONVENTIONS,INTEGRATIONS,TESTING,CONCERNS,PROJECT,SCAN-RAW}.md" ! -path "./.sillyspec/codebase/*" ! -path "./.sillyspec/codebase/details/*"); do
241
242
  [ -f "$f" ] && mkdir -p .sillyspec/codebase && mv "$f" ".sillyspec/codebase/$(basename $f)"
242
243
  done
243
244
  ```
244
245
 
245
246
  **自检门控:**
246
- - [ ] STACK.md 含主要语言和框架?
247
- - [ ] ARCHITECTURE.md 描述了整体架构?
248
- - [ ] STRUCTURE.md 含目录结构?
247
+ - [ ] ARCHITECTURE.md 含主要语言、框架和整体架构?
248
+ - [ ] ARCHITECTURE.md 含数据模型摘要?(深扫)
249
+ - [ ] STRUCTURE.md 含目录结构?(深扫,位于 details/)
249
250
  - [ ] CONVENTIONS.md 含编码约定?(深扫)
250
- - [ ] INTEGRATIONS.md 列出外部依赖?(深扫)
251
- - [ ] TESTING.md 描述测试状况?(深扫)
252
- - [ ] CONCERNS.md 列出技术债务?(深扫)
251
+ - [ ] INTEGRATIONS.md 列出外部依赖?(深扫,位于 details/)
252
+ - [ ] TESTING.md 描述测试状况?(深扫,位于 details/)
253
+ - [ ] CONCERNS.md 列出技术债务?(深扫,位于 details/)
253
254
  - [ ] PROJECT.md 已生成?
254
255
 
255
256
  ```bash
@@ -21,7 +21,7 @@ cat .sillyspec/config.yaml 2>/dev/null
21
21
  ### Step 2-5: 单项目检查
22
22
 
23
23
  1. **项目基础:** PROJECT.md、codebase 文档、REQUIREMENTS.md、ROADMAP.md
24
- 2. **进行中变更:** 对每个变更检查 proposal/design/requirements/tasks 完成度
24
+ 2. **进行中变更:** 对每个变更检查 design/tasks 完成度
25
25
  3. **归档历史:** `ls .sillyspec/changes/archive/ | wc -l`
26
26
  4. **代码库文档:** `ls .sillyspec/codebase/`
27
27
 
@@ -25,7 +25,7 @@ sillyspec status --json
25
25
 
26
26
  ```bash
27
27
  LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
28
- cat "$LATEST"/{proposal,design,tasks}.md "$LATEST/specs/requirements.md" 2>/dev/null
28
+ cat "$LATEST"/{design,tasks}.md 2>/dev/null
29
29
  ```
30
30
 
31
31
  锚定确认实际存在的文件。