sillyspec 2.6.1 → 2.7.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.
@@ -18,7 +18,6 @@ $ARGUMENTS
18
18
 
19
19
  读取 `.sillyspec/changes/<change-name>/` 下所有必要文件,逐项检查:
20
20
 
21
- - [ ] **verify 状态:** 检查是否有验证记录,无则提示先执行 `/sillyspec:verify`
22
21
  - [ ] **文件完整性:** 检查 `proposal.md` 和 `design.md` 是否存在,缺失则警告
23
22
  - [ ] **任务完成度:** 读取 `tasks.md`,统计已完成/未完成任务数。**有未完成的 → 用 AskUserQuestion 询问:**
24
23
  - ① 继续归档(未完成任务将被标记完成)
@@ -1,8 +1,3 @@
1
- ---
2
- description: 需求探索 — 结构化头脑风暴,生成设计文档(创建性工作前必用)
3
- argument-hint: "[需求或想法描述]"
4
- ---
5
-
6
1
  ## 交互规范
7
2
  **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
8
3
 
@@ -15,7 +10,7 @@ argument-hint: "[需求或想法描述]"
15
10
  - ❌ 在 checklist 未完成前开始写设计文档
16
11
  - ❌ 编造不存在的表名、字段名、API 端点
17
12
  - ❌ 一次性抛出多个问题(必须逐个等待回答)
18
- - ❌ 用户确认前自行推进到 propose 或任何后续阶段
13
+ - ❌ 用户确认前自行推进到 plan 或任何后续阶段
19
14
 
20
15
  ## 状态检查(必须先执行)
21
16
 
@@ -42,9 +37,11 @@ $ARGUMENTS
42
37
  - [ ] **Step 5** — 分段展示设计,逐段确认
43
38
  - [ ] **Step 6** — 写设计文档并保存
44
39
  - [ ] **Step 7** — AI 自审(对照约束检查)
45
- - [ ] **Step 8** — 用户确认 → 调用 `/sillyspec:propose`
40
+ - [ ] **Step 8** — 用户确认设计方案
41
+ - [ ] **Step 9** — 输出 design.md
42
+ - [ ] **Step 10** — 更新 STATE.md
46
43
 
47
- **终态:** brainstorm 完成后唯一出口是 `/sillyspec:propose`。不允许直接进入 execute、plan 或任何代码操作。
44
+ **终态:** brainstorm 完成后唯一出口是 `/sillyspec:plan`。不允许直接进入 execute 或任何代码操作。
48
45
 
49
46
  ---
50
47
 
@@ -162,13 +159,20 @@ git commit -m "docs: master change plan for <变更名>"
162
159
  sillyspec status --json
163
160
  ```
164
161
 
165
- 展示设计方案,AskUserQuestion:确认进入 propose / 需要修改 / 推翻重来。
162
+ 展示设计方案,AskUserQuestion:确认 / 需要修改 / 推翻重来。
163
+
164
+ ### Step 9: 输出技术方案
166
165
 
167
- 用户确认 `sillyspec next`,将 CLI 返回命令推荐给用户。
166
+ 用户确认后,直接产出 `design.md` 写入 `.sillyspec/changes/<变更名>/design.md`。内容包含:
167
+ - 架构决策及理由
168
+ - 文件变更清单表格
169
+ - 数据模型
170
+ - API 设计
171
+ - 代码风格参照(参考已有 Controller/Service/Entity 源文件,标注返回值类型、异常类型、注解风格)
168
172
 
169
- ### Step 9: 更新 STATE.md
173
+ ### Step 10: 更新 STATE.md
170
174
 
171
- 自动更新 `.sillyspec/STATE.md`(不存在则创建):当前变更、阶段、下一步、关键决策、历史记录。不需要 Git 提交。
175
+ 自动更新 `.sillyspec/STATE.md`(不存在则创建):当前变更、阶段、下一步 `/sillyspec:plan`、关键决策、历史记录。不需要 Git 提交。
172
176
 
173
177
  ## 关键原则
174
178
  - YAGNI — 无情砍掉不需要的功能
@@ -36,7 +36,7 @@ cat .sillyspec/config.yaml 2>/dev/null
36
36
 
37
37
  **单项目模式:**
38
38
  ```bash
39
- PLAN=$(ls -t .sillyspec/changes/*/plan.md 2>/dev/null | head -1); cat "$PLAN"
39
+ PLAN=$(ls -t .sillyspec/changes/*/tasks.md 2>/dev/null | head -1); cat "$PLAN"
40
40
  LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
41
41
  cat "$LATEST"/{tasks,design}.md 2>/dev/null
42
42
  cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
@@ -81,9 +81,14 @@ cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
81
81
  ☑️ CHECK → 勾选 tasks.md 中对应的 checkbox
82
82
  ```
83
83
 
84
- **Git 提交:** 检查 Git 仓库 → `git add -A && git commit`。工作区模式下在子项目目录提交。跳过不可提交的情况但记录在报告中。
84
+ **Git 提交:** 检查 Git 仓库 → `git add -A` 生成 commit message → **用 AskUserQuestion 展示 commit message 给用户确认**:
85
+ 1. 确认提交 — 执行 `git commit`
86
+ 2. 修改提交信息 — 用户调整后重新确认
87
+ 3. 跳过提交 — 本任务不 commit(记录原因)
85
88
 
86
- **勾选 tasks:** 每个 Task 完成后,**必须立即**在 `.sillyspec/changes/<变更名>/tasks.md` 中将对应 checkbox 标记为 `[x]`。这是 Task 完成的最后一步,不允许跳过。
89
+ 用户确认后才执行 `git commit`。工作区模式下在子项目目录提交。
90
+
91
+ **勾选 tasks:** 每个 Task 完成后,**必须立即**在 `.sillyspec/changes/<变更名>/tasks.md` 中将对应 checkbox 标记为 `[x]`,并附上完成时间:`- [x] [YYYY-MM-DD HH:MM:SS] 任务描述`。这是 Task 完成的最后一步,不允许跳过。
87
92
 
88
93
  **测试文件必须保留:** 测试是产出物,不是草稿。写完的测试文件必须保留在项目中,随代码一起 commit,不能删除。
89
94
 
@@ -102,6 +107,16 @@ cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
102
107
  - 没有读过相关源文件,不允许写任何代码
103
108
  - 方法签名必须来自已有代码或 plan 中的明确定义,禁止凭空编造
104
109
  - 调用已有方法时,必须先 `cat` 源文件确认方法签名(参数、返回值、异常)
110
+ - **调用任何已有方法前,必须 grep 确认方法存在**:
111
+
112
+ ```bash
113
+ # 调用 userService.getById() 之前
114
+ 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
+ ```
118
+
119
+ grep 不到 → 方法不存在或名字不同 → 不许调用,先查清楚。
105
120
 
106
121
  ```bash
107
122
  cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
@@ -145,6 +160,11 @@ find . \( -name "*Service*" -o -name "*Manager*" -o -name "*UseCase*" -o -name "
145
160
 
146
161
  ## 完成后
147
162
 
163
+ 所有任务完成后,用 AskUserQuestion 询问用户下一步:
164
+ 1. **验证** — 执行 `/sillyspec:verify` 全面验证
165
+ 2. **归档** — 跳过 verify,执行 `/sillyspec:archive`
166
+ 3. **继续开发** — 不结束当前阶段
167
+
148
168
  ```bash
149
169
  sillyspec status --json
150
170
  sillyspec next
@@ -42,7 +42,7 @@ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
42
42
 
43
43
  ### 2. 逐任务展开
44
44
 
45
- 把 tasks.md 每个 checkbox 展开为详细步骤。工作区模式下每个 Task 标注所属项目。
45
+ 把 tasks.md 每个 checkbox 展开为详细步骤,按 Wave 分组组织。工作区模式下每个 Task 标注所属项目。
46
46
 
47
47
  **每个 Task 必须包含:**
48
48
  - 精确文件路径
@@ -57,20 +57,31 @@ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
57
57
 
58
58
  按 Wave 分组,标注依赖关系:
59
59
  ```markdown
60
- **Wave 1**(并行,无依赖):Task 1, Task 2
61
- **Wave 2**(依赖 Wave 1):Task 3
60
+ ### Wave 1(并行,无依赖)
61
+ - [ ] 添加用户创建接口
62
+ - 修改: `UserController.java`
63
+ - 方法签名: `public Result<UserVO> createUser(@RequestBody @Valid UserDTO dto)`
64
+ - 参考: `RoleController.createRole`
65
+ - TDD: 🔴 测试 → 🟢 实现 → 🔵 重构
66
+
67
+ - [ ] 添加角色创建接口
68
+ - ...
69
+
70
+ ### Wave 2(依赖 Wave 1)
71
+ - [ ] 添加用户列表查询(依赖用户创建完成)
72
+ - ...
62
73
  ```
63
74
 
64
75
  ### 4. 保存
65
76
 
66
- 保存到 `.sillyspec/changes/<变更名>/plan.md`
77
+ **直接覆盖** `.sillyspec/changes/<变更名>/tasks.md`。不再生成单独的 plan.md 文件。
67
78
 
68
79
  ### 5. 自检门控
69
80
 
70
81
  - [ ] 每个 task 有具体文件路径?
71
82
  - [ ] 每个 task 有验证命令和预期输出?
72
83
  - [ ] 标注了 Wave 和执行顺序?
73
- - [ ] plan 与 design.md 文件变更清单一致?
84
+ - [ ] 与 design.md 文件变更清单一致?
74
85
 
75
86
  ```bash
76
87
  bash scripts/validate-plan.sh .sillyspec/changes/<当前变更目录> 2>/dev/null
@@ -1,6 +1,8 @@
1
1
  ## 交互规范
2
2
  **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
3
3
 
4
+ > **提示:** 通常不需要单独执行 propose。brainstorm 阶段会自动产出 design.md。仅当需求已经明确、跳过 brainstorm 时才手动执行 propose。
5
+
4
6
  ## 核心约束(必须遵守)
5
7
  - ❌ 写实现代码
6
8
  - ❌ tasks.md 写具体步骤(只列任务名)
@@ -1,8 +1,3 @@
1
- ---
2
- description: 快速任务 — 跳过完整流程,直接做
3
- argument-hint: "[任务描述]"
4
- ---
5
-
6
1
  ## 交互规范
7
2
  **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
8
3
 
@@ -11,6 +6,11 @@ argument-hint: "[任务描述]"
11
6
  - ❌ 修改无关文件
12
7
  - ❌ 跳过测试因为"任务太简单"
13
8
 
9
+ ## 用法
10
+
11
+ - `/sillyspec:quick "修复用户创建接口漏了手机号校验"` — 独立记录到 QUICKLOG.md
12
+ - `/sillyspec:quick --change user-module "修复用户创建接口漏了手机号校验"` — 追加到 user-module 变更的 tasks.md
13
+
14
14
  ## 任务
15
15
  $ARGUMENTS
16
16
 
@@ -18,10 +18,39 @@ $ARGUMENTS
18
18
 
19
19
  ## 流程
20
20
 
21
- 1. **理解任务:** 模糊则问一个问题确认
22
- 2. **加载最小上下文:** `cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null`
23
- 3. **TDD 执行:** 🔴 写失败测试 → 🟢 写最少代码 → 🔵 重构
24
- 4. **运行相关测试:** `pnpm test 2>/dev/null || npm test 2>/dev/null || pytest 2>/dev/null`
25
- 5. **Git commit:** `git add -A && git commit -m "fix: $ARGUMENTS"`
21
+ 1. **解析参数:** 检查是否携带 `--change <变更名>`,确定记录方式
22
+ 2. **理解任务:** 模糊则问一个问题确认
23
+ 3. **加载上下文:** `cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null`
24
+ 4. **先读后写:** 调用已有方法前 `cat` 源文件确认签名,`grep` 确认方法存在
25
+ 5. **TDD 执行:**
26
+ ```
27
+ 🔴 RED → 先写测试,运行确认失败
28
+ 🟢 GREEN → 写最少代码让测试通过
29
+ 🔵 REFACTOR → 清理,保持测试通过
30
+ ✅ COMMIT → git 提交(测试文件必须包含在提交中)
31
+ ```
32
+ 测试文件必须保留在项目中,不能删除。违反 TDD → 删掉代码从测试重新开始。
33
+ - 纯配置/数据/文档可跳过 TDD
34
+ - 其他情况一律走 TDD
35
+ 6. **运行相关测试:** `pnpm test 2>/dev/null || npm test 2>/dev/null || pytest 2>/dev/null`
36
+ 7. **Git commit:** 展示 commit message 给用户确认后提交
37
+ 8. **记录:**
38
+ - **有 `--change`:** 在 `.sillyspec/changes/<变更名>/tasks.md` 追加 task 并勾选 `[x]`
39
+ - **无 `--change`:** 记录到 `.sillyspec/QUICKLOG.md`(见下方规则)
40
+ 9. **检查复杂度:** 任务比预期复杂 → 建议用完整流程
41
+
42
+ ### QUICKLOG.md 规则
43
+
44
+ 文件路径:`.sillyspec/QUICKLOG.md`
45
+
46
+ **追加记录格式:**
47
+ ```markdown
48
+ ## YYYY-MM-DD HH:MM:SS | fix: 任务描述
49
+ - 文件:`修改的文件列表`
50
+ - commit:`commit hash`
51
+ - 关联归档:`相关的已归档变更名`(如有)
52
+ ```
26
53
 
27
- 如果任务比预期复杂 停下来建议用完整流程。
54
+ **文件轮转:** 追加前检查文件大小,超过 500 行则:
55
+ 1. 将当前 `QUICKLOG.md` 重命名为 `QUICKLOG-YYYY-MM-DD.md`
56
+ 2. 创建新的空 `QUICKLOG.md`
@@ -23,7 +23,7 @@ cat .sillyspec/STATE.md 2>/dev/null
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
25
  ls .sillyspec/changes/*/stages/*/proposal.md 2>/dev/null
26
- ls .sillyspec/codebase/*.md .sillyspec/changes/*/plan.md .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
26
+ ls .sillyspec/codebase/*.md .sillyspec/changes/*/tasks.md .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
27
27
  ```
28
28
 
29
29
  **探测结果推断:**
@@ -33,7 +33,7 @@ ls .sillyspec/codebase/*.md .sillyspec/changes/*/plan.md .sillyspec/{REQUIREMENT
33
33
  | 无 .sillyspec/ 内容 | 未开始 | `/sillyspec:init` 或 `/sillyspec:scan` |
34
34
  | 有 SCAN-RAW.md 或 codebase 文档不全 | 扫描中断 | `/sillyspec:scan`(断点续扫) |
35
35
  | codebase 7 份齐全无 changes/ | 已扫描未开始需求 | `/sillyspec:brainstorm` |
36
- | 有 REQUIREMENTS.md 无 changes/ | 绿地有需求 | `/sillyspec:propose` |
36
+ | 有 REQUIREMENTS.md 无 changes/ | 绿地有需求 | `/sillyspec:brainstorm` |
37
37
  | changes/ 有 proposal 无 tasks | 待计划 | `/sillyspec:plan` |
38
38
  | tasks.md 有未完成 checkbox | 执行中 | `/sillyspec:execute` |
39
39
  | tasks.md 全完成 | 待验证 | `/sillyspec:verify` |
@@ -49,7 +49,7 @@ ls .sillyspec/codebase/ 2>/dev/null
49
49
 
50
50
  ### Step 3-5: 扫描模式、范围、排除目录
51
51
 
52
- AskUserQuestion 依次确认:快速⚡/深度🔍、扫描范围(留空全量)、排除目录。
52
+ AskUserQuestion 依次确认:快速⚡/深度🔍、扫描范围(留空全量)、排除目录(默认选中 `node_modules`、`.git`、`dist`、`build`、`vendor`、`target`、`__pycache__`、`.next`、`coverage`、`.nuxt`,用户可调整)。
53
53
 
54
54
  ### Step 6: 确认并开始
55
55
 
@@ -1,11 +1,8 @@
1
- ---
2
- description: 验证实现 — 对照规范检查 + 测试套件
3
- argument-hint: "[可选:指定验证范围]"
4
- ---
5
-
6
1
  ## 交互规范
7
2
  **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
8
3
 
4
+ > **可选阶段。** execute 完成后会询问是否需要 verify,也可以手动调用。
5
+
9
6
  ## 核心约束(必须遵守)
10
7
  - ❌ 修改任何代码(只做检查和报告)
11
8
  - ❌ 跳过状态检查
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sillyspec",
3
- "version": "2.6.1",
3
+ "version": "2.7.0",
4
4
  "description": "SillySpec CLI — 流程状态机,让 AI 严格按步骤来",
5
5
  "type": "module",
6
6
  "bin": {
package/src/init.js CHANGED
@@ -179,7 +179,7 @@ async function doInstall(projectDir, tools, isWorkspace, subprojects = []) {
179
179
  // .sillyspec/codebase/ → scan
180
180
  // .sillyspec/changes/ → brainstorm/propose
181
181
  // .sillyspec/changes/archive/ → archive
182
- // .sillyspec/plans/ → plan
182
+ // (plan 内容已合并到 tasks.md)
183
183
  // .sillyspec/specs/ → propose
184
184
  if (isWorkspace) {
185
185
  mkdirSync(join(projectDir, '.sillyspec', 'shared'), { recursive: true });
@@ -18,7 +18,6 @@ $ARGUMENTS
18
18
 
19
19
  读取 `.sillyspec/changes/<change-name>/` 下所有必要文件,逐项检查:
20
20
 
21
- - [ ] **verify 状态:** 检查是否有验证记录,无则提示先执行 `/sillyspec:verify`
22
21
  - [ ] **文件完整性:** 检查 `proposal.md` 和 `design.md` 是否存在,缺失则警告
23
22
  - [ ] **任务完成度:** 读取 `tasks.md`,统计已完成/未完成任务数。**有未完成的 → 用 AskUserQuestion 询问:**
24
23
  - ① 继续归档(未完成任务将被标记完成)
@@ -10,7 +10,7 @@
10
10
  - ❌ 在 checklist 未完成前开始写设计文档
11
11
  - ❌ 编造不存在的表名、字段名、API 端点
12
12
  - ❌ 一次性抛出多个问题(必须逐个等待回答)
13
- - ❌ 用户确认前自行推进到 propose 或任何后续阶段
13
+ - ❌ 用户确认前自行推进到 plan 或任何后续阶段
14
14
 
15
15
  ## 状态检查(必须先执行)
16
16
 
@@ -37,9 +37,11 @@ $ARGUMENTS
37
37
  - [ ] **Step 5** — 分段展示设计,逐段确认
38
38
  - [ ] **Step 6** — 写设计文档并保存
39
39
  - [ ] **Step 7** — AI 自审(对照约束检查)
40
- - [ ] **Step 8** — 用户确认 → 调用 `/sillyspec:propose`
40
+ - [ ] **Step 8** — 用户确认设计方案
41
+ - [ ] **Step 9** — 输出 design.md
42
+ - [ ] **Step 10** — 更新 STATE.md
41
43
 
42
- **终态:** brainstorm 完成后唯一出口是 `/sillyspec:propose`。不允许直接进入 execute、plan 或任何代码操作。
44
+ **终态:** brainstorm 完成后唯一出口是 `/sillyspec:plan`。不允许直接进入 execute 或任何代码操作。
43
45
 
44
46
  ---
45
47
 
@@ -157,13 +159,20 @@ git commit -m "docs: master change plan for <变更名>"
157
159
  sillyspec status --json
158
160
  ```
159
161
 
160
- 展示设计方案,AskUserQuestion:确认进入 propose / 需要修改 / 推翻重来。
162
+ 展示设计方案,AskUserQuestion:确认 / 需要修改 / 推翻重来。
161
163
 
162
- 用户确认 `sillyspec next`,将 CLI 返回命令推荐给用户。
164
+ ### Step 9: 输出技术方案
163
165
 
164
- ### Step 9: 更新 STATE.md
166
+ 用户确认后,直接产出 `design.md` 写入 `.sillyspec/changes/<变更名>/design.md`。内容包含:
167
+ - 架构决策及理由
168
+ - 文件变更清单表格
169
+ - 数据模型
170
+ - API 设计
171
+ - 代码风格参照(参考已有 Controller/Service/Entity 源文件,标注返回值类型、异常类型、注解风格)
165
172
 
166
- 自动更新 `.sillyspec/STATE.md`(不存在则创建):当前变更、阶段、下一步、关键决策、历史记录。不需要 Git 提交。
173
+ ### Step 10: 更新 STATE.md
174
+
175
+ 自动更新 `.sillyspec/STATE.md`(不存在则创建):当前变更、阶段、下一步 `/sillyspec:plan`、关键决策、历史记录。不需要 Git 提交。
167
176
 
168
177
  ## 关键原则
169
178
  - YAGNI — 无情砍掉不需要的功能
@@ -36,7 +36,7 @@ cat .sillyspec/config.yaml 2>/dev/null
36
36
 
37
37
  **单项目模式:**
38
38
  ```bash
39
- PLAN=$(ls -t .sillyspec/changes/*/plan.md 2>/dev/null | head -1); cat "$PLAN"
39
+ PLAN=$(ls -t .sillyspec/changes/*/tasks.md 2>/dev/null | head -1); cat "$PLAN"
40
40
  LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
41
41
  cat "$LATEST"/{tasks,design}.md 2>/dev/null
42
42
  cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
@@ -81,9 +81,14 @@ cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
81
81
  ☑️ CHECK → 勾选 tasks.md 中对应的 checkbox
82
82
  ```
83
83
 
84
- **Git 提交:** 检查 Git 仓库 → `git add -A && git commit`。工作区模式下在子项目目录提交。跳过不可提交的情况但记录在报告中。
84
+ **Git 提交:** 检查 Git 仓库 → `git add -A` 生成 commit message → **用 AskUserQuestion 展示 commit message 给用户确认**:
85
+ 1. 确认提交 — 执行 `git commit`
86
+ 2. 修改提交信息 — 用户调整后重新确认
87
+ 3. 跳过提交 — 本任务不 commit(记录原因)
85
88
 
86
- **勾选 tasks:** 每个 Task 完成后,**必须立即**在 `.sillyspec/changes/<变更名>/tasks.md` 中将对应 checkbox 标记为 `[x]`。这是 Task 完成的最后一步,不允许跳过。
89
+ 用户确认后才执行 `git commit`。工作区模式下在子项目目录提交。
90
+
91
+ **勾选 tasks:** 每个 Task 完成后,**必须立即**在 `.sillyspec/changes/<变更名>/tasks.md` 中将对应 checkbox 标记为 `[x]`,并附上完成时间:`- [x] [YYYY-MM-DD HH:MM:SS] 任务描述`。这是 Task 完成的最后一步,不允许跳过。
87
92
 
88
93
  **测试文件必须保留:** 测试是产出物,不是草稿。写完的测试文件必须保留在项目中,随代码一起 commit,不能删除。
89
94
 
@@ -102,6 +107,16 @@ cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
102
107
  - 没有读过相关源文件,不允许写任何代码
103
108
  - 方法签名必须来自已有代码或 plan 中的明确定义,禁止凭空编造
104
109
  - 调用已有方法时,必须先 `cat` 源文件确认方法签名(参数、返回值、异常)
110
+ - **调用任何已有方法前,必须 grep 确认方法存在**:
111
+
112
+ ```bash
113
+ # 调用 userService.getById() 之前
114
+ 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
+ ```
118
+
119
+ grep 不到 → 方法不存在或名字不同 → 不许调用,先查清楚。
105
120
 
106
121
  ```bash
107
122
  cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
@@ -145,6 +160,11 @@ find . \( -name "*Service*" -o -name "*Manager*" -o -name "*UseCase*" -o -name "
145
160
 
146
161
  ## 完成后
147
162
 
163
+ 所有任务完成后,用 AskUserQuestion 询问用户下一步:
164
+ 1. **验证** — 执行 `/sillyspec:verify` 全面验证
165
+ 2. **归档** — 跳过 verify,执行 `/sillyspec:archive`
166
+ 3. **继续开发** — 不结束当前阶段
167
+
148
168
  ```bash
149
169
  sillyspec status --json
150
170
  sillyspec next
package/templates/plan.md CHANGED
@@ -42,7 +42,7 @@ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
42
42
 
43
43
  ### 2. 逐任务展开
44
44
 
45
- 把 tasks.md 每个 checkbox 展开为详细步骤。工作区模式下每个 Task 标注所属项目。
45
+ 把 tasks.md 每个 checkbox 展开为详细步骤,按 Wave 分组组织。工作区模式下每个 Task 标注所属项目。
46
46
 
47
47
  **每个 Task 必须包含:**
48
48
  - 精确文件路径
@@ -57,20 +57,31 @@ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
57
57
 
58
58
  按 Wave 分组,标注依赖关系:
59
59
  ```markdown
60
- **Wave 1**(并行,无依赖):Task 1, Task 2
61
- **Wave 2**(依赖 Wave 1):Task 3
60
+ ### Wave 1(并行,无依赖)
61
+ - [ ] 添加用户创建接口
62
+ - 修改: `UserController.java`
63
+ - 方法签名: `public Result<UserVO> createUser(@RequestBody @Valid UserDTO dto)`
64
+ - 参考: `RoleController.createRole`
65
+ - TDD: 🔴 测试 → 🟢 实现 → 🔵 重构
66
+
67
+ - [ ] 添加角色创建接口
68
+ - ...
69
+
70
+ ### Wave 2(依赖 Wave 1)
71
+ - [ ] 添加用户列表查询(依赖用户创建完成)
72
+ - ...
62
73
  ```
63
74
 
64
75
  ### 4. 保存
65
76
 
66
- 保存到 `.sillyspec/changes/<变更名>/plan.md`
77
+ **直接覆盖** `.sillyspec/changes/<变更名>/tasks.md`。不再生成单独的 plan.md 文件。
67
78
 
68
79
  ### 5. 自检门控
69
80
 
70
81
  - [ ] 每个 task 有具体文件路径?
71
82
  - [ ] 每个 task 有验证命令和预期输出?
72
83
  - [ ] 标注了 Wave 和执行顺序?
73
- - [ ] plan 与 design.md 文件变更清单一致?
84
+ - [ ] 与 design.md 文件变更清单一致?
74
85
 
75
86
  ```bash
76
87
  bash scripts/validate-plan.sh .sillyspec/changes/<当前变更目录> 2>/dev/null
@@ -1,6 +1,8 @@
1
1
  ## 交互规范
2
2
  **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
3
3
 
4
+ > **提示:** 通常不需要单独执行 propose。brainstorm 阶段会自动产出 design.md。仅当需求已经明确、跳过 brainstorm 时才手动执行 propose。
5
+
4
6
  ## 核心约束(必须遵守)
5
7
  - ❌ 写实现代码
6
8
  - ❌ tasks.md 写具体步骤(只列任务名)
@@ -6,6 +6,11 @@
6
6
  - ❌ 修改无关文件
7
7
  - ❌ 跳过测试因为"任务太简单"
8
8
 
9
+ ## 用法
10
+
11
+ - `/sillyspec:quick "修复用户创建接口漏了手机号校验"` — 独立记录到 QUICKLOG.md
12
+ - `/sillyspec:quick --change user-module "修复用户创建接口漏了手机号校验"` — 追加到 user-module 变更的 tasks.md
13
+
9
14
  ## 任务
10
15
  $ARGUMENTS
11
16
 
@@ -13,10 +18,39 @@ $ARGUMENTS
13
18
 
14
19
  ## 流程
15
20
 
16
- 1. **理解任务:** 模糊则问一个问题确认
17
- 2. **加载最小上下文:** `cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null`
18
- 3. **TDD 执行:** 🔴 写失败测试 → 🟢 写最少代码 → 🔵 重构
19
- 4. **运行相关测试:** `pnpm test 2>/dev/null || npm test 2>/dev/null || pytest 2>/dev/null`
20
- 5. **Git commit:** `git add -A && git commit -m "fix: $ARGUMENTS"`
21
+ 1. **解析参数:** 检查是否携带 `--change <变更名>`,确定记录方式
22
+ 2. **理解任务:** 模糊则问一个问题确认
23
+ 3. **加载上下文:** `cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null`
24
+ 4. **先读后写:** 调用已有方法前 `cat` 源文件确认签名,`grep` 确认方法存在
25
+ 5. **TDD 执行:**
26
+ ```
27
+ 🔴 RED → 先写测试,运行确认失败
28
+ 🟢 GREEN → 写最少代码让测试通过
29
+ 🔵 REFACTOR → 清理,保持测试通过
30
+ ✅ COMMIT → git 提交(测试文件必须包含在提交中)
31
+ ```
32
+ 测试文件必须保留在项目中,不能删除。违反 TDD → 删掉代码从测试重新开始。
33
+ - 纯配置/数据/文档可跳过 TDD
34
+ - 其他情况一律走 TDD
35
+ 6. **运行相关测试:** `pnpm test 2>/dev/null || npm test 2>/dev/null || pytest 2>/dev/null`
36
+ 7. **Git commit:** 展示 commit message 给用户确认后提交
37
+ 8. **记录:**
38
+ - **有 `--change`:** 在 `.sillyspec/changes/<变更名>/tasks.md` 追加 task 并勾选 `[x]`
39
+ - **无 `--change`:** 记录到 `.sillyspec/QUICKLOG.md`(见下方规则)
40
+ 9. **检查复杂度:** 任务比预期复杂 → 建议用完整流程
41
+
42
+ ### QUICKLOG.md 规则
43
+
44
+ 文件路径:`.sillyspec/QUICKLOG.md`
45
+
46
+ **追加记录格式:**
47
+ ```markdown
48
+ ## YYYY-MM-DD HH:MM:SS | fix: 任务描述
49
+ - 文件:`修改的文件列表`
50
+ - commit:`commit hash`
51
+ - 关联归档:`相关的已归档变更名`(如有)
52
+ ```
21
53
 
22
- 如果任务比预期复杂 停下来建议用完整流程。
54
+ **文件轮转:** 追加前检查文件大小,超过 500 行则:
55
+ 1. 将当前 `QUICKLOG.md` 重命名为 `QUICKLOG-YYYY-MM-DD.md`
56
+ 2. 创建新的空 `QUICKLOG.md`
@@ -23,7 +23,7 @@ cat .sillyspec/STATE.md 2>/dev/null
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
25
  ls .sillyspec/changes/*/stages/*/proposal.md 2>/dev/null
26
- ls .sillyspec/codebase/*.md .sillyspec/changes/*/plan.md .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
26
+ ls .sillyspec/codebase/*.md .sillyspec/changes/*/tasks.md .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
27
27
  ```
28
28
 
29
29
  **探测结果推断:**
@@ -33,7 +33,7 @@ ls .sillyspec/codebase/*.md .sillyspec/changes/*/plan.md .sillyspec/{REQUIREMENT
33
33
  | 无 .sillyspec/ 内容 | 未开始 | `/sillyspec:init` 或 `/sillyspec:scan` |
34
34
  | 有 SCAN-RAW.md 或 codebase 文档不全 | 扫描中断 | `/sillyspec:scan`(断点续扫) |
35
35
  | codebase 7 份齐全无 changes/ | 已扫描未开始需求 | `/sillyspec:brainstorm` |
36
- | 有 REQUIREMENTS.md 无 changes/ | 绿地有需求 | `/sillyspec:propose` |
36
+ | 有 REQUIREMENTS.md 无 changes/ | 绿地有需求 | `/sillyspec:brainstorm` |
37
37
  | changes/ 有 proposal 无 tasks | 待计划 | `/sillyspec:plan` |
38
38
  | tasks.md 有未完成 checkbox | 执行中 | `/sillyspec:execute` |
39
39
  | tasks.md 全完成 | 待验证 | `/sillyspec:verify` |
package/templates/scan.md CHANGED
@@ -49,7 +49,7 @@ ls .sillyspec/codebase/ 2>/dev/null
49
49
 
50
50
  ### Step 3-5: 扫描模式、范围、排除目录
51
51
 
52
- AskUserQuestion 依次确认:快速⚡/深度🔍、扫描范围(留空全量)、排除目录。
52
+ AskUserQuestion 依次确认:快速⚡/深度🔍、扫描范围(留空全量)、排除目录(默认选中 `node_modules`、`.git`、`dist`、`build`、`vendor`、`target`、`__pycache__`、`.next`、`coverage`、`.nuxt`,用户可调整)。
53
53
 
54
54
  ### Step 6: 确认并开始
55
55
 
@@ -1,6 +1,8 @@
1
1
  ## 交互规范
2
2
  **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
3
3
 
4
+ > **可选阶段。** execute 完成后会询问是否需要 verify,也可以手动调用。
5
+
4
6
  ## 核心约束(必须遵守)
5
7
  - ❌ 修改任何代码(只做检查和报告)
6
8
  - ❌ 跳过状态检查