sillyspec 3.0.0 → 3.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/sillyspec/archive.md +4 -2
- package/.claude/commands/sillyspec/brainstorm.md +14 -13
- package/.claude/commands/sillyspec/continue.md +7 -11
- package/.claude/commands/sillyspec/execute.md +88 -81
- package/.claude/commands/sillyspec/explore.md +1 -1
- package/.claude/commands/sillyspec/export.md +7 -1
- package/.claude/commands/sillyspec/plan.md +13 -23
- package/.claude/commands/sillyspec/propose.md +5 -9
- package/.claude/commands/sillyspec/quick.md +3 -3
- package/.claude/commands/sillyspec/resume.md +3 -4
- package/.claude/commands/sillyspec/scan.md +115 -25
- package/.claude/commands/sillyspec/status.md +32 -7
- package/.claude/commands/sillyspec/verify.md +27 -14
- package/.claude/commands/sillyspec/workspace.md +11 -0
- package/README.md +9 -10
- package/SKILL.md +5 -6
- package/package.json +1 -1
- package/src/init.js +94 -43
- package/templates/archive.md +4 -2
- package/templates/brainstorm.md +14 -13
- package/templates/continue.md +7 -11
- package/templates/execute.md +88 -81
- package/templates/explore.md +1 -1
- package/templates/export.md +1 -1
- package/templates/plan.md +13 -23
- package/templates/propose.md +5 -9
- package/templates/quick.md +3 -3
- package/templates/resume.md +3 -4
- package/templates/scan.md +115 -25
- package/templates/status.md +32 -2
- package/templates/verify.md +27 -14
|
@@ -18,7 +18,7 @@ $ARGUMENTS
|
|
|
18
18
|
|
|
19
19
|
读取 `.sillyspec/changes/<change-name>/` 下所有必要文件,逐项检查:
|
|
20
20
|
|
|
21
|
-
- [ ] **文件完整性:** 检查 `
|
|
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
|
|
38
|
+
将 `.sillyspec/changes/<change-name>/` 下的设计文档**复制到 `.sillyspec/knowledge/` 主目录**,确保已完成的设计规范可被后续变更参考。如目标已存在同名文件则跳过并提示。
|
|
39
39
|
|
|
40
40
|
### 4. 用户确认
|
|
41
41
|
|
|
@@ -56,6 +56,8 @@ $ARGUMENTS
|
|
|
56
56
|
- **STATE.md:** 清除当前变更信息,历史记录追加归档完成
|
|
57
57
|
- **Git 提交:** `git add .sillyspec/ && git commit -m "docs: archive sillyspec change <change-name>"`
|
|
58
58
|
|
|
59
|
+
**工作区模式下:** 如果变更属于某个子项目,cd 到子项目目录执行 git commit。工作区根目录无 git 则跳过。
|
|
60
|
+
|
|
59
61
|
### 最后说:
|
|
60
62
|
|
|
61
63
|
> ✅ 变更 `<change-name>` 已归档到 `archive/YYYY-MM-DD-<change-name>/`。继续:`/sillyspec:brainstorm "新想法"`
|
|
@@ -53,14 +53,14 @@ $ARGUMENTS
|
|
|
53
53
|
cat .sillyspec/config.yaml 2>/dev/null
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
-
**工作区模式:** AskUserQuestion
|
|
56
|
+
**工作区模式:** AskUserQuestion 选子项目,**cd 到子项目目录执行**,加载子项目上下文 + 共享规范 + 工作区概览,设计文档保存到子项目 `.sillyspec/changes/`。git commit 在子项目目录执行。
|
|
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/
|
|
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/
|
|
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
|
-
|
|
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
|
-
|
|
167
|
-
- 架构决策及理由
|
|
168
|
-
- 文件变更清单表格
|
|
169
|
-
- 数据模型
|
|
170
|
-
- API 设计
|
|
171
|
-
- 代码风格参照(参考已有 Controller/Service/Entity 源文件,标注返回值类型、异常类型、注解风格)
|
|
172
|
+
用户确认后,确认 design.md 已包含完整内容(动机、需求、方案、文件变更、代码风格参照)。如 Step 6 已保存则无需重复。
|
|
172
173
|
|
|
173
174
|
### Step 10: 更新 STATE.md
|
|
174
175
|
|
|
@@ -14,20 +14,16 @@ argument-hint: ""
|
|
|
14
14
|
|
|
15
15
|
```
|
|
16
16
|
1. 有进行中的变更?
|
|
17
|
-
1a.
|
|
18
|
-
1b. 无
|
|
19
|
-
1c.
|
|
20
|
-
1d. tasks.md
|
|
21
|
-
1e.
|
|
22
|
-
1f. 已验证通过 → 执行 /sillyspec:archive
|
|
17
|
+
1a. 无 design.md → 提示补充设计(/sillyspec:brainstorm)
|
|
18
|
+
1b. 无 tasks.md → 执行 /sillyspec:plan
|
|
19
|
+
1c. tasks.md 有未完成项 + 有计划 → 执行 /sillyspec:execute
|
|
20
|
+
1d. tasks.md 全完成 + 未验证 → 执行 /sillyspec:verify(可选)
|
|
21
|
+
1e. 已验证通过 → 执行 /sillyspec:archive
|
|
23
22
|
|
|
24
|
-
2.
|
|
25
|
-
→ /sillyspec:propose <name>
|
|
26
|
-
|
|
27
|
-
3. 有 .sillyspec/codebase/ 但无进行中工作?
|
|
23
|
+
2. 有 .sillyspec/codebase/ 但无进行中工作?
|
|
28
24
|
→ /sillyspec:brainstorm "你的想法"
|
|
29
25
|
|
|
30
|
-
|
|
26
|
+
3. 什么都没有?
|
|
31
27
|
→ /sillyspec:init(新项目)或 /sillyspec:scan(棕地项目)
|
|
32
28
|
```
|
|
33
29
|
|
|
@@ -5,9 +5,6 @@
|
|
|
5
5
|
- ❌ 跳过状态检查,自行推断阶段
|
|
6
6
|
- ❌ 跳步执行(不允许跳过 plan 直接 execute)
|
|
7
7
|
- ❌ 先写代码后补测试
|
|
8
|
-
- ❌ "先写草稿回头再测"
|
|
9
|
-
- ❌ 跳过测试因为"太简单"
|
|
10
|
-
- ❌ 测试意外通过时不重写
|
|
11
8
|
- ❌ 编造不存在的方法/注解/路径/类/字段
|
|
12
9
|
- ❌ 自行补全缺失的接口/方法(应报告给用户)
|
|
13
10
|
- ❌ 意外修改了计划外的文件却不报告
|
|
@@ -32,7 +29,7 @@ $ARGUMENTS
|
|
|
32
29
|
cat .sillyspec/config.yaml 2>/dev/null
|
|
33
30
|
```
|
|
34
31
|
|
|
35
|
-
**工作区模式:** 根据计划 Task 标注确定子项目,额外加载共享规范 + CODEBASE-OVERVIEW.md
|
|
32
|
+
**工作区模式:** 根据计划 Task 标注确定子项目,额外加载共享规范 + CODEBASE-OVERVIEW.md,**执行前必须 cd 到对应子项目目录**。所有代码修改、测试运行、git commit 都在子项目目录中执行。一个 Task 属于哪个子项目,就 cd 到哪个子项目。
|
|
36
33
|
|
|
37
34
|
**单项目模式:**
|
|
38
35
|
```bash
|
|
@@ -42,121 +39,132 @@ 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
|
-
|
|
64
|
-
|
|
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. 子代理上下文:任务描述 +
|
|
63
|
+
3. 子代理上下文:任务描述 + 相关约定 + 要修改文件和被调用类的源码
|
|
64
|
+
|
|
65
|
+
---
|
|
70
66
|
|
|
71
|
-
|
|
72
|
-
当前会话逐任务串行执行,每完成一个任务展示结果并等待用户确认。
|
|
67
|
+
## 每个任务的执行流程
|
|
73
68
|
|
|
74
|
-
|
|
69
|
+
### 1. 先读后写
|
|
75
70
|
|
|
71
|
+
写代码前,读取相关源文件确认风格和方法签名:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# 读取 CONVENTIONS
|
|
75
|
+
cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
|
|
76
|
+
# 读取要修改的文件和同模块参考文件
|
|
77
|
+
cat <要修改的文件路径>
|
|
78
|
+
cat <参考文件路径>
|
|
76
79
|
```
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
☑️ CHECK → 勾选 tasks.md 中对应的 checkbox
|
|
80
|
+
|
|
81
|
+
**调用已有方法前,grep 确认存在:**
|
|
82
|
+
```bash
|
|
83
|
+
grep -rn "public.*getById" --include="*.java" src/main/java/**/service/
|
|
82
84
|
```
|
|
85
|
+
grep 不到 → 不许调用,先查清楚或报告给用户。
|
|
83
86
|
|
|
84
|
-
|
|
85
|
-
1. 确认提交 — 执行 `git commit`
|
|
86
|
-
2. 修改提交信息 — 用户调整后重新确认
|
|
87
|
-
3. 跳过提交 — 本任务不 commit(记录原因)
|
|
87
|
+
### 2. TDD(强制执行,不可跳过)
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
#### 🔴 RED — 写失败测试
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
先写测试文件,再写实现代码。写代码前测试必须先存在。
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
**写完测试后,立即运行确认失败:**
|
|
94
94
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
95
|
+
先检查 local.yaml 是否有构建命令配置:
|
|
96
|
+
```bash
|
|
97
|
+
cat .sillyspec/local.yaml 2>/dev/null 2>/dev/null
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
如果有,使用 local.yaml 中的命令(含 `-s` 等参数);否则使用默认命令:
|
|
99
101
|
|
|
100
|
-
|
|
102
|
+
```bash
|
|
103
|
+
mvn test -pl <模块> -Dtest=<测试类> 2>/dev/null || ./gradlew test --tests <测试类> 2>/dev/null || npm test -- --testPathPattern=<测试文件> 2>/dev/null || pytest <测试文件> 2>/dev/null
|
|
104
|
+
```
|
|
101
105
|
|
|
102
|
-
|
|
106
|
+
确认:
|
|
107
|
+
- 测试失败(不是编译错误)
|
|
108
|
+
- 失败原因是功能未实现(不是语法错误)
|
|
103
109
|
|
|
104
|
-
|
|
110
|
+
**测试直接通过?** 你在测试已有行为,重写测试。**测试编译报错?** 先修测试语法。
|
|
105
111
|
|
|
106
|
-
|
|
107
|
-
- 没有读过相关源文件,不允许写任何代码
|
|
108
|
-
- 方法签名必须来自已有代码或 plan 中的明确定义,禁止凭空编造
|
|
109
|
-
- 调用已有方法时,必须先 `cat` 源文件确认方法签名(参数、返回值、异常)
|
|
110
|
-
- **调用任何已有方法前,必须 grep 确认方法存在**:
|
|
112
|
+
#### 🟢 GREEN — 写最少代码
|
|
111
113
|
|
|
114
|
+
写刚好让测试通过的最少代码。不加额外功能。
|
|
115
|
+
|
|
116
|
+
**写完后立即运行确认通过:**
|
|
117
|
+
|
|
118
|
+
先检查 local.yaml 是否有构建命令配置:
|
|
112
119
|
```bash
|
|
113
|
-
|
|
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/
|
|
120
|
+
cat .sillyspec/local.yaml 2>/dev/null 2>/dev/null
|
|
117
121
|
```
|
|
118
122
|
|
|
119
|
-
|
|
123
|
+
如果有,使用 local.yaml 中的命令;否则使用默认命令:
|
|
120
124
|
|
|
121
125
|
```bash
|
|
122
|
-
|
|
126
|
+
mvn test -pl <模块> -Dtest=<测试类> 2>/dev/null || ./gradlew test --tests <测试类> 2>/dev/null || npm test -- --testPathPattern=<测试文件> 2>/dev/null || pytest <测试文件> 2>/dev/null
|
|
123
127
|
```
|
|
124
128
|
|
|
125
|
-
|
|
129
|
+
确认:
|
|
130
|
+
- 测试通过
|
|
131
|
+
- 其他已有测试没有因此失败
|
|
132
|
+
- 无编译错误、无 warnings
|
|
133
|
+
|
|
134
|
+
**编译不通过或测试失败?** 修代码,不是改测试。**其他测试被破坏?** 立即修复。
|
|
135
|
+
|
|
136
|
+
#### 🔵 REFACTOR — 清理
|
|
137
|
+
|
|
138
|
+
在测试全绿的前提下清理:提取重复、改善命名、简化逻辑。重构后重新运行测试确认仍然通过。
|
|
139
|
+
|
|
140
|
+
**TDD 中间步骤(RED→GREEN→REFACTOR)连续执行,不需要每步等用户确认。但每一步都必须运行测试命令并确认结果,不可省略。**
|
|
141
|
+
|
|
142
|
+
**测试文件必须保留**,随代码一起 commit。违反 TDD(先写代码后补测试)→ 删代码重来。
|
|
143
|
+
|
|
144
|
+
**可跳过 TDD(不需要确认):** 纯配置(YAML/properties)、纯数据(SQL seed)、纯文档(README/注释)。
|
|
145
|
+
|
|
146
|
+
### 3. 勾选 tasks
|
|
147
|
+
|
|
148
|
+
完成后在 `.sillyspec/changes/<变更名>/tasks.md` 勾选对应 checkbox:`- [x] [YYYY-MM-DD HH:MM:SS] 任务描述`
|
|
149
|
+
|
|
150
|
+
### 4. Git commit
|
|
151
|
+
|
|
152
|
+
**先确认当前在 git 仓库中:**
|
|
126
153
|
```bash
|
|
127
|
-
|
|
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
|
|
154
|
+
git rev-parse --is-inside-work-tree 2>/dev/null
|
|
135
155
|
```
|
|
136
156
|
|
|
137
|
-
|
|
138
|
-
- 棕地项目 → 报告缺失,请用户提供参考路径
|
|
139
|
-
- 绿地项目 → 靠 CONVENTIONS.md + ARCHITECTURE.md + brainstorm 设计方案驱动
|
|
157
|
+
如果不在 git 仓库中,提示用户当前目录没有 git 管理,跳过 commit 或让用户指定仓库路径。
|
|
140
158
|
|
|
141
|
-
|
|
159
|
+
`git add -A` → 生成 commit message → **根据用户选择的确认频率决定是否立即确认或批量确认**。
|
|
142
160
|
|
|
143
|
-
|
|
144
|
-
- **A 规范合规:** tasks checkbox 完成?design 方案一致?测试有意义?
|
|
145
|
-
- **B 代码质量:** DRY、YAGNI、死代码、错误处理、CONVENTIONS.md 合规?
|
|
161
|
+
**工作区模式下,每个子项目的 commit 独立执行,不要跨子项目 commit。**
|
|
146
162
|
|
|
147
|
-
|
|
163
|
+
---
|
|
148
164
|
|
|
149
165
|
## 偏差处理
|
|
150
166
|
|
|
151
|
-
遇到问题:**停 → 报告 → 等人工确认。**
|
|
152
|
-
|
|
153
|
-
## 自检门控
|
|
154
|
-
|
|
155
|
-
- [ ] 完成任务与 plan 一致?
|
|
156
|
-
- [ ] tasks.md 所有 checkbox 都已勾选为 `[x]`?
|
|
157
|
-
- [ ] 未意外修改计划外文件?
|
|
158
|
-
- [ ] 每个任务有 git commit?
|
|
159
|
-
- [ ] 测试全部通过?
|
|
167
|
+
遇到问题:**停 → 报告 → 等人工确认。** 代码缺失、方法不存在、计划外变更 → 先读已有代码,再问用户。
|
|
160
168
|
|
|
161
169
|
## 完成后
|
|
162
170
|
|
|
@@ -166,8 +174,7 @@ find . \( -name "*Service*" -o -name "*Manager*" -o -name "*UseCase*" -o -name "
|
|
|
166
174
|
3. **继续开发** — 不结束当前阶段
|
|
167
175
|
|
|
168
176
|
```bash
|
|
169
|
-
sillyspec status --json
|
|
170
|
-
sillyspec next
|
|
177
|
+
sillyspec status --json && sillyspec next
|
|
171
178
|
```
|
|
172
179
|
|
|
173
180
|
更新 `.sillyspec/STATE.md`:阶段改为 `execute ✅` 或 `execute 🔄 (X/M)`,历史记录追加执行结果。
|
|
@@ -9,11 +9,17 @@ argument-hint: "<change-name> [--to <path>]"
|
|
|
9
9
|
## 参数解析
|
|
10
10
|
`$ARGUMENTS`:变更名 + 可选 `--to` 输出路径(默认 `~/.sillyspec/templates/<change-name>/`)
|
|
11
11
|
|
|
12
|
+
## 核心约束(必须遵守)
|
|
13
|
+
- ❌ 修改任何文件(只读)
|
|
14
|
+
|
|
15
|
+
## 参数解析
|
|
16
|
+
`$ARGUMENTS`:变更名 + 可选 `--to` 输出路径(默认 `~/.sillyspec/templates/<change-name>/`)
|
|
17
|
+
|
|
12
18
|
---
|
|
13
19
|
|
|
14
20
|
## 流程
|
|
15
21
|
|
|
16
|
-
1. **读取变更文件:** `cat .sillyspec/changes/$ARGUMENTS/{
|
|
22
|
+
1. **读取变更文件:** `cat .sillyspec/changes/$ARGUMENTS/{design}.md 2>/dev/null`。不存在则报错。
|
|
17
23
|
2. **清理为通用模板:** 移除项目特定信息,保留通用设计方案,添加 `notes.md` 使用建议。
|
|
18
24
|
3. **导出:** `mkdir -p ~/.sillyspec/templates/<change-name>` 并复制文件。
|
|
19
25
|
4. **确认:** 展示摘要和模板路径。
|
|
@@ -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"/{
|
|
34
|
-
cat
|
|
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
|
-
确认实际存在的文件(
|
|
40
|
+
确认实际存在的文件(design / tasks),不存在的标注跳过。
|
|
42
41
|
|
|
43
42
|
### 2. 逐任务展开
|
|
44
43
|
|
|
45
|
-
把 tasks.md 每个 checkbox
|
|
44
|
+
把 tasks.md 每个 checkbox 展开为任务描述,按 Wave 分组组织。工作区模式下每个 Task 标注所属项目。
|
|
46
45
|
|
|
47
|
-
**每个 Task
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
-
|
|
52
|
-
|
|
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
|
-
- [ ]
|
|
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/
|
|
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
|
-
**`
|
|
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
|
-
展示
|
|
58
|
+
展示 design.md 给用户审阅。tasks.md 只展示任务列表。
|
|
63
59
|
|
|
64
60
|
### 5. 自检门控
|
|
65
61
|
|
|
66
|
-
- [ ]
|
|
62
|
+
- [ ] design.md 含"动机、变更范围、功能需求"?
|
|
67
63
|
- [ ] design.md 含"文件变更清单"表格?
|
|
68
|
-
- [ ]
|
|
64
|
+
- [ ] design.md 含 Given/When/Then 用户场景?
|
|
69
65
|
- [ ] tasks.md 每个 task 有文件路径?
|
|
70
66
|
|
|
71
67
|
```bash
|
|
@@ -33,15 +33,15 @@ $ARGUMENTS
|
|
|
33
33
|
- 纯配置/数据/文档可跳过 TDD
|
|
34
34
|
- 其他情况一律走 TDD
|
|
35
35
|
6. **运行相关测试:** `pnpm test 2>/dev/null || npm test 2>/dev/null || pytest 2>/dev/null`
|
|
36
|
-
7. **Git commit:** 展示 commit message
|
|
36
|
+
7. **Git commit:** 展示 commit message 给用户确认后提交。**工作区模式下,确认当前在正确的子项目目录中执行 commit。**
|
|
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/*/
|
|
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
|
|
34
|
+
| codebase 文档齐全无 changes/ | 已扫描未开始需求 | `/sillyspec:brainstorm` |
|
|
36
35
|
| 有 REQUIREMENTS.md 无 changes/ | 绿地有需求 | `/sillyspec:brainstorm` |
|
|
37
|
-
| changes/ 有
|
|
36
|
+
| changes/ 有 design 无 tasks | 待计划 | `/sillyspec:plan` |
|
|
38
37
|
| tasks.md 有未完成 checkbox | 执行中 | `/sillyspec:execute` |
|
|
39
38
|
| tasks.md 全完成 | 待验证 | `/sillyspec:verify` |
|
|
40
39
|
|