sillyspec 2.6.1 → 3.0.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/.claude/commands/sillyspec/archive.md +0 -1
- package/.claude/commands/sillyspec/brainstorm.md +16 -12
- package/.claude/commands/sillyspec/execute.md +23 -3
- package/.claude/commands/sillyspec/plan.md +16 -5
- package/.claude/commands/sillyspec/propose.md +2 -0
- package/.claude/commands/sillyspec/quick.md +40 -11
- package/.claude/commands/sillyspec/resume.md +2 -2
- package/.claude/commands/sillyspec/scan.md +1 -1
- package/.claude/commands/sillyspec/verify.md +2 -5
- package/package.json +1 -1
- package/src/init.js +1 -1
- package/templates/archive.md +0 -1
- package/templates/brainstorm.md +16 -7
- package/templates/execute.md +23 -3
- package/templates/plan.md +16 -5
- package/templates/propose.md +2 -0
- package/templates/quick.md +40 -6
- package/templates/resume.md +2 -2
- package/templates/scan.md +1 -1
- package/templates/verify.md +2 -0
|
@@ -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
|
-
- ❌ 用户确认前自行推进到
|
|
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** —
|
|
40
|
+
- [ ] **Step 8** — 用户确认设计方案
|
|
41
|
+
- [ ] **Step 9** — 输出 design.md
|
|
42
|
+
- [ ] **Step 10** — 更新 STATE.md
|
|
46
43
|
|
|
47
|
-
**终态:** brainstorm 完成后唯一出口是 `/sillyspec:
|
|
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
|
|
162
|
+
展示设计方案,AskUserQuestion:确认 / 需要修改 / 推翻重来。
|
|
163
|
+
|
|
164
|
+
### Step 9: 输出技术方案
|
|
166
165
|
|
|
167
|
-
|
|
166
|
+
用户确认后,直接产出 `design.md` 写入 `.sillyspec/changes/<变更名>/design.md`。内容包含:
|
|
167
|
+
- 架构决策及理由
|
|
168
|
+
- 文件变更清单表格
|
|
169
|
+
- 数据模型
|
|
170
|
+
- API 设计
|
|
171
|
+
- 代码风格参照(参考已有 Controller/Service/Entity 源文件,标注返回值类型、异常类型、注解风格)
|
|
168
172
|
|
|
169
|
-
### Step
|
|
173
|
+
### Step 10: 更新 STATE.md
|
|
170
174
|
|
|
171
|
-
自动更新 `.sillyspec/STATE.md
|
|
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/*/
|
|
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
|
|
84
|
+
**Git 提交:** 检查 Git 仓库 → `git add -A` → 生成 commit message → **用 AskUserQuestion 展示 commit message 给用户确认**:
|
|
85
|
+
1. 确认提交 — 执行 `git commit`
|
|
86
|
+
2. 修改提交信息 — 用户调整后重新确认
|
|
87
|
+
3. 跳过提交 — 本任务不 commit(记录原因)
|
|
85
88
|
|
|
86
|
-
|
|
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
|
|
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
|
-
|
|
61
|
-
|
|
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
|
-
|
|
77
|
+
**直接覆盖** `.sillyspec/changes/<变更名>/tasks.md`。不再生成单独的 plan.md 文件。
|
|
67
78
|
|
|
68
79
|
### 5. 自检门控
|
|
69
80
|
|
|
70
81
|
- [ ] 每个 task 有具体文件路径?
|
|
71
82
|
- [ ] 每个 task 有验证命令和预期输出?
|
|
72
83
|
- [ ] 标注了 Wave 和执行顺序?
|
|
73
|
-
- [ ]
|
|
84
|
+
- [ ] 与 design.md 文件变更清单一致?
|
|
74
85
|
|
|
75
86
|
```bash
|
|
76
87
|
bash scripts/validate-plan.sh .sillyspec/changes/<当前变更目录> 2>/dev/null
|
|
@@ -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.
|
|
23
|
-
3.
|
|
24
|
-
4.
|
|
25
|
-
5. **
|
|
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/*/
|
|
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:
|
|
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
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
|
-
// .
|
|
182
|
+
// (plan 内容已合并到 tasks.md)
|
|
183
183
|
// .sillyspec/specs/ → propose
|
|
184
184
|
if (isWorkspace) {
|
|
185
185
|
mkdirSync(join(projectDir, '.sillyspec', 'shared'), { recursive: true });
|
package/templates/archive.md
CHANGED
|
@@ -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
|
- ① 继续归档(未完成任务将被标记完成)
|
package/templates/brainstorm.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
- ❌ 在 checklist 未完成前开始写设计文档
|
|
11
11
|
- ❌ 编造不存在的表名、字段名、API 端点
|
|
12
12
|
- ❌ 一次性抛出多个问题(必须逐个等待回答)
|
|
13
|
-
- ❌ 用户确认前自行推进到
|
|
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** —
|
|
40
|
+
- [ ] **Step 8** — 用户确认设计方案
|
|
41
|
+
- [ ] **Step 9** — 输出 design.md
|
|
42
|
+
- [ ] **Step 10** — 更新 STATE.md
|
|
41
43
|
|
|
42
|
-
**终态:** brainstorm 完成后唯一出口是 `/sillyspec:
|
|
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
|
|
162
|
+
展示设计方案,AskUserQuestion:确认 / 需要修改 / 推翻重来。
|
|
161
163
|
|
|
162
|
-
|
|
164
|
+
### Step 9: 输出技术方案
|
|
163
165
|
|
|
164
|
-
|
|
166
|
+
用户确认后,直接产出 `design.md` 写入 `.sillyspec/changes/<变更名>/design.md`。内容包含:
|
|
167
|
+
- 架构决策及理由
|
|
168
|
+
- 文件变更清单表格
|
|
169
|
+
- 数据模型
|
|
170
|
+
- API 设计
|
|
171
|
+
- 代码风格参照(参考已有 Controller/Service/Entity 源文件,标注返回值类型、异常类型、注解风格)
|
|
165
172
|
|
|
166
|
-
|
|
173
|
+
### Step 10: 更新 STATE.md
|
|
174
|
+
|
|
175
|
+
自动更新 `.sillyspec/STATE.md`(不存在则创建):当前变更、阶段、下一步 `/sillyspec:plan`、关键决策、历史记录。不需要 Git 提交。
|
|
167
176
|
|
|
168
177
|
## 关键原则
|
|
169
178
|
- YAGNI — 无情砍掉不需要的功能
|
package/templates/execute.md
CHANGED
|
@@ -36,7 +36,7 @@ cat .sillyspec/config.yaml 2>/dev/null
|
|
|
36
36
|
|
|
37
37
|
**单项目模式:**
|
|
38
38
|
```bash
|
|
39
|
-
PLAN=$(ls -t .sillyspec/changes/*/
|
|
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
|
|
84
|
+
**Git 提交:** 检查 Git 仓库 → `git add -A` → 生成 commit message → **用 AskUserQuestion 展示 commit message 给用户确认**:
|
|
85
|
+
1. 确认提交 — 执行 `git commit`
|
|
86
|
+
2. 修改提交信息 — 用户调整后重新确认
|
|
87
|
+
3. 跳过提交 — 本任务不 commit(记录原因)
|
|
85
88
|
|
|
86
|
-
|
|
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
|
|
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
|
-
|
|
61
|
-
|
|
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
|
-
|
|
77
|
+
**直接覆盖** `.sillyspec/changes/<变更名>/tasks.md`。不再生成单独的 plan.md 文件。
|
|
67
78
|
|
|
68
79
|
### 5. 自检门控
|
|
69
80
|
|
|
70
81
|
- [ ] 每个 task 有具体文件路径?
|
|
71
82
|
- [ ] 每个 task 有验证命令和预期输出?
|
|
72
83
|
- [ ] 标注了 Wave 和执行顺序?
|
|
73
|
-
- [ ]
|
|
84
|
+
- [ ] 与 design.md 文件变更清单一致?
|
|
74
85
|
|
|
75
86
|
```bash
|
|
76
87
|
bash scripts/validate-plan.sh .sillyspec/changes/<当前变更目录> 2>/dev/null
|
package/templates/propose.md
CHANGED
package/templates/quick.md
CHANGED
|
@@ -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.
|
|
18
|
-
3.
|
|
19
|
-
4.
|
|
20
|
-
5. **
|
|
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`
|
package/templates/resume.md
CHANGED
|
@@ -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/*/
|
|
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:
|
|
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
|
|