sillyspec 3.7.1 → 3.7.3
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/package.json +1 -1
- package/src/index.js +11 -483
- package/src/setup.js +232 -64
- package/templates/brainstorm.md +2 -6
- package/templates/execute.md +79 -0
- package/templates/explore.md +24 -0
- package/templates/plan.md +30 -6
- package/templates/propose.md +3 -7
- package/templates/quick.md +9 -0
- package/templates/scan.md +17 -5
- package/templates/verify.md +113 -4
- package/.claude/commands/sillyspec/archive.md +0 -63
- package/.claude/commands/sillyspec/brainstorm.md +0 -182
- package/.claude/commands/sillyspec/continue.md +0 -32
- package/.claude/commands/sillyspec/execute.md +0 -133
- package/.claude/commands/sillyspec/explore.md +0 -43
- package/.claude/commands/sillyspec/export.md +0 -21
- package/.claude/commands/sillyspec/init.md +0 -64
- package/.claude/commands/sillyspec/plan.md +0 -112
- package/.claude/commands/sillyspec/propose.md +0 -77
- package/.claude/commands/sillyspec/quick.md +0 -76
- package/.claude/commands/sillyspec/resume.md +0 -53
- package/.claude/commands/sillyspec/scan-quick.md +0 -47
- package/.claude/commands/sillyspec/scan.md +0 -135
- package/.claude/commands/sillyspec/status.md +0 -72
- package/.claude/commands/sillyspec/verify.md +0 -87
- package/.claude/commands/sillyspec/workspace-sync.md +0 -89
- package/.claude/commands/sillyspec/workspace.md +0 -67
- package/.sillyspec/config.yaml +0 -13
package/templates/scan.md
CHANGED
|
@@ -11,10 +11,11 @@
|
|
|
11
11
|
## 流程控制(必须先执行)
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
sillyspec
|
|
14
|
+
cat .sillyspec/STATE.md 2>/dev/null
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
有 STATE.md 且 phase 为 `scan` 或未记录 → 继续。
|
|
18
|
+
其他 phase → STATE.md 中记录的下一步命令为准。
|
|
18
19
|
|
|
19
20
|
---
|
|
20
21
|
|
|
@@ -135,9 +136,20 @@ if [ ! -f ".sillyspec/knowledge/uncategorized.md" ]; then
|
|
|
135
136
|
EOF
|
|
136
137
|
fi
|
|
137
138
|
|
|
138
|
-
#
|
|
139
|
-
|
|
140
|
-
|
|
139
|
+
# 更新状态
|
|
140
|
+
cat > .sillyspec/STATE.md << 'EOF'
|
|
141
|
+
# 项目状态
|
|
142
|
+
|
|
143
|
+
## 当前阶段
|
|
144
|
+
- 阶段:scan ✅
|
|
145
|
+
- 下一步:/sillyspec:brainstorm
|
|
146
|
+
|
|
147
|
+
## 关键决策
|
|
148
|
+
- (扫描中发现的技术决策)
|
|
149
|
+
|
|
150
|
+
## 历史记录
|
|
151
|
+
- $(date '+%Y-%m-%d %H:%M:%S') scan 完成
|
|
152
|
+
EOF
|
|
141
153
|
|
|
142
154
|
# 清理
|
|
143
155
|
rm -f .sillyspec/codebase/_env-detect.md
|
package/templates/verify.md
CHANGED
|
@@ -47,6 +47,7 @@ else
|
|
|
47
47
|
CHANGE_DIR=$(ls -d .sillyspec/changes/*/ 2>/dev/null | grep -v archive | tail -1)
|
|
48
48
|
fi
|
|
49
49
|
cat "$CHANGE_DIR"/{design,tasks}.md 2>/dev/null
|
|
50
|
+
cat .sillyspec/local.yaml 2>/dev/null
|
|
50
51
|
```
|
|
51
52
|
|
|
52
53
|
锚定确认实际存在的文件。
|
|
@@ -97,9 +98,49 @@ npx vitest run 2>/dev/null || npx jest 2>/dev/null
|
|
|
97
98
|
> ⚠️ 使用 MCP 执行时 AI 判断可能不如测试框架精确。追求可靠性建议安装 Playwright。
|
|
98
99
|
|
|
99
100
|
**自动修复循环(选了策略 1 或 2 时):**
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
|
|
102
|
+
必须按以下流程严格执行,不可跳过:
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
ROUND = 1
|
|
106
|
+
MAX_ROUNDS = 策略1时为5,策略2时为50
|
|
107
|
+
|
|
108
|
+
while ROUND <= MAX_ROUNDS:
|
|
109
|
+
1. 运行失败测试,捕获完整输出(错误信息、堆栈、期望值 vs 实际值)
|
|
110
|
+
2. 如果全部通过 → 跳出循环,标记 ✅
|
|
111
|
+
3. 读取 .sillyspec/local.yaml 中当前变更的 fixAttempts
|
|
112
|
+
4. 对每个失败测试:
|
|
113
|
+
a. 如果 fixAttempts >= MAX_ROUNDS → 跳过,标记 ❌ MAX_REACHED
|
|
114
|
+
b. 否则 → 调 /sillyspec:quick 修复,prompt 必须包含:
|
|
115
|
+
- 失败的测试文件路径和测试名
|
|
116
|
+
- 完整错误信息(含期望值 vs 实际值)
|
|
117
|
+
- 相关源文件路径
|
|
118
|
+
- "只修复这个测试失败,不要改其他代码"
|
|
119
|
+
c. 修复后重跑该测试确认是否通过
|
|
120
|
+
d. 通过 → fixAttempts 保持不变;仍失败 → fixAttempts + 1
|
|
121
|
+
5. 写入 .sillyspec/local.yaml 更新 fixAttempts
|
|
122
|
+
6. ROUND++
|
|
123
|
+
7. 如果本轮无任何修复(所有失败都已 MAX_REACHED)→ 跳出循环
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**quick 修复 prompt 模板:**
|
|
127
|
+
```
|
|
128
|
+
/sillyspec:quick "修复测试失败:<测试文件路径>:<测试名>
|
|
129
|
+
|
|
130
|
+
错误信息:
|
|
131
|
+
<完整错误输出,包含期望值和实际值>
|
|
132
|
+
|
|
133
|
+
相关文件:
|
|
134
|
+
<被测源文件路径>
|
|
135
|
+
|
|
136
|
+
只修复这个测试失败,不要改其他代码。修完后运行该测试确认通过。"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**禁止行为:**
|
|
140
|
+
- ❌ 只看错误摘要就修复(必须看完整输出)
|
|
141
|
+
- ❌ 跳过 fixAttempts 计数
|
|
142
|
+
- ❌ 一次 quick 修复多个不相关的失败(逐个修复,每次修复后重跑确认)
|
|
143
|
+
- ❌ 主代理直接修改代码(verify 阶段禁止改代码,必须通过 /sillyspec:quick)
|
|
103
144
|
|
|
104
145
|
**更新测试结果到 `.sillyspec/local.yaml`(按变更名隔离,覆盖写入):**
|
|
105
146
|
```yaml
|
|
@@ -121,7 +162,73 @@ grep -r "TODO\|FIXME\|HACK\|XXX" src/ lib/ app/ --include="*.ts" --include="*.ts
|
|
|
121
162
|
|
|
122
163
|
审查 design.md「文件变更」中列出的文件:安全问题(输入校验、SQL拼接、硬编码敏感信息)、潜在 bug(空值、边界条件)、与 CONVENTIONS.md 一致性。每个问题标 🔴必须 / 🟡建议 / 🔵优化。
|
|
123
164
|
|
|
124
|
-
###
|
|
165
|
+
### 5.5 MCP 基础设施验证
|
|
166
|
+
|
|
167
|
+
检测已配置的 MCP 服务,利用它们做实际验证(不只查文档):
|
|
168
|
+
|
|
169
|
+
**MCP 能力检测:**
|
|
170
|
+
```bash
|
|
171
|
+
cat .claude/mcp.json .cursor/mcp.json 2>/dev/null
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**按检测结果执行对应验证:**
|
|
175
|
+
|
|
176
|
+
**数据库 MCP(postgres/sqlite/mysql/redis):**
|
|
177
|
+
- 对照 design.md 中的数据模型,验证表/集合是否存在
|
|
178
|
+
- 验证字段类型、约束(主键、外键、唯一索引)是否与设计一致
|
|
179
|
+
- 验证新增的 API 是否能正确读写对应数据
|
|
180
|
+
- ⚠️ 只执行 SELECT 查询,禁止任何写操作
|
|
181
|
+
|
|
182
|
+
**浏览器 MCP(chrome-devtools/puppeteer/playwright):**
|
|
183
|
+
- 验证页面能否正常加载(无 404/500 错误)
|
|
184
|
+
- 验证关键 UI 元素是否存在(导航、表单、按钮等)
|
|
185
|
+
- 验证基础交互(点击、提交、跳转)
|
|
186
|
+
|
|
187
|
+
**API MCP:**
|
|
188
|
+
- 验证新增接口是否可达
|
|
189
|
+
- 验证请求/响应格式是否与设计一致
|
|
190
|
+
|
|
191
|
+
**无 MCP → 跳过此步骤,不影响验证结论。**
|
|
192
|
+
|
|
193
|
+
将验证结果纳入验证报告。
|
|
194
|
+
|
|
195
|
+
### 6. Lint / Format 检查
|
|
196
|
+
|
|
197
|
+
自动检测并运行项目配置的 lint/format 工具,验证代码是否符合规范:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
# ESLint
|
|
201
|
+
if [ -f .eslintrc -o -f .eslintrc.js -o -f .eslintrc.cjs -o -f .eslintrc.json -o -f .eslintrc.yml ] || grep -q '"eslint"' package.json 2>/dev/null; then
|
|
202
|
+
echo "=== ESLint ==="
|
|
203
|
+
npx eslint . --max-warnings 0 2>&1 | tail -50
|
|
204
|
+
fi
|
|
205
|
+
|
|
206
|
+
# Prettier(检查而非修复)
|
|
207
|
+
if [ -f .prettierrc -o -f .prettierrc.js -o -f .prettierrc.json -o -f .prettierrc.yml ] || grep -q '"prettier"' package.json 2>/dev/null; then
|
|
208
|
+
echo "=== Prettier ==="
|
|
209
|
+
npx prettier --check . 2>&1 | tail -30
|
|
210
|
+
fi
|
|
211
|
+
|
|
212
|
+
# TypeScript 类型检查
|
|
213
|
+
if [ -f tsconfig.json ]; then
|
|
214
|
+
echo "=== TypeScript ==="
|
|
215
|
+
npx tsc --noEmit 2>&1 | tail -30
|
|
216
|
+
fi
|
|
217
|
+
|
|
218
|
+
# Stylelint
|
|
219
|
+
if [ -f .stylelintrc -o -f .stylelintrc.js -o -f .stylelintrc.json ] || grep -q '"stylelint"' package.json 2>/dev/null; then
|
|
220
|
+
echo "=== Stylelint ==="
|
|
221
|
+
npx stylelint "**/*.{css,scss,less}" 2>&1 | tail -30
|
|
222
|
+
fi
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**处理策略(AskUserQuestion):**
|
|
226
|
+
1. **自动修复** — 对支持 `--fix` 的工具(ESLint、Prettier、Stylelint)自动修复后重跑检查,同一问题最多修复 3 次
|
|
227
|
+
2. **只报告** — 仅列出所有 lint 错误,不修改代码
|
|
228
|
+
|
|
229
|
+
将 lint 结果纳入验证报告(步骤 7)。
|
|
230
|
+
|
|
231
|
+
### 7. 输出验证报告
|
|
125
232
|
|
|
126
233
|
```markdown
|
|
127
234
|
# SillySpec 验证报告
|
|
@@ -130,6 +237,8 @@ grep -r "TODO\|FIXME\|HACK\|XXX" src/ lib/ app/ --include="*.ts" --include="*.ts
|
|
|
130
237
|
## 测试结果:passed N, failed N
|
|
131
238
|
## 技术债务标记
|
|
132
239
|
## 代码审查:🔴 N / 🟡 N / 🔵 N
|
|
240
|
+
## Lint 检查:ESLint ✅/❌ | Prettier ✅/❌ | TypeScript ✅/❌ | Stylelint ✅/❌
|
|
241
|
+
## MCP 基础设施验证:数据库 ✅/❌/跳过 | 页面 ✅/❌/跳过 | API ✅/❌/跳过
|
|
133
242
|
## E2E 测试:passed N / failed N / fixAttempts 详情
|
|
134
243
|
## 结论:✅ PASS / ⚠️ PASS WITH NOTES / ❌ FAIL
|
|
135
244
|
```
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
## 交互规范
|
|
2
|
-
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
3
|
-
|
|
4
|
-
## 核心约束(必须遵守)
|
|
5
|
-
- ❌ 未经验证就归档(必须先确认验证通过)
|
|
6
|
-
- ❌ 未勾选的 checkbox 未告知用户就归档
|
|
7
|
-
- ❌ 归档后留下活跃变更的残留状态
|
|
8
|
-
- ❌ 覆盖已存在的归档目录
|
|
9
|
-
|
|
10
|
-
## 变更名称
|
|
11
|
-
$ARGUMENTS
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## 流程
|
|
16
|
-
|
|
17
|
-
### 1. 前置检查(门禁)
|
|
18
|
-
|
|
19
|
-
读取 `.sillyspec/changes/<change-name>/` 下所有必要文件,逐项检查:
|
|
20
|
-
|
|
21
|
-
- [ ] **文件完整性:** 检查 `design.md` 是否存在,缺失则警告
|
|
22
|
-
- [ ] **任务完成度:** 读取 `tasks.md`,统计已完成/未完成任务数。**有未完成的 → 用 AskUserQuestion 询问:**
|
|
23
|
-
- ① 继续归档(未完成任务将被标记完成)
|
|
24
|
-
- ② 取消,回去完成任务
|
|
25
|
-
|
|
26
|
-
> 任一门禁不通过且用户选择取消 → 终止流程。
|
|
27
|
-
|
|
28
|
-
### 2. 展示归档清单
|
|
29
|
-
|
|
30
|
-
展示即将归档的内容摘要:
|
|
31
|
-
- 变更目录名
|
|
32
|
-
- 包含的文件列表
|
|
33
|
-
- 任务完成统计(✅ 已完成 / ⬜ 未完成)
|
|
34
|
-
- 一句话总结本次变更
|
|
35
|
-
|
|
36
|
-
### 3. Spec 沉淀
|
|
37
|
-
|
|
38
|
-
将 `.sillyspec/changes/<change-name>/` 下的设计文档**复制到 `.sillyspec/knowledge/` 主目录**,确保已完成的设计规范可被后续变更参考。如目标已存在同名文件则跳过并提示。
|
|
39
|
-
|
|
40
|
-
### 4. 用户确认
|
|
41
|
-
|
|
42
|
-
用 AskUserQuestion 让用户确认:
|
|
43
|
-
- ① 确认归档
|
|
44
|
-
- ② 取消
|
|
45
|
-
|
|
46
|
-
### 5. 执行归档
|
|
47
|
-
|
|
48
|
-
- 目标路径:`.sillyspec/changes/archive/YYYY-MM-DD-<change-name>/`
|
|
49
|
-
- **检查目标路径是否已存在**,存在则中止并报错,防止覆盖
|
|
50
|
-
- 移动变更目录到归档路径
|
|
51
|
-
|
|
52
|
-
### 6. 归档后更新
|
|
53
|
-
|
|
54
|
-
- **tasks.md:** 确保所有 checkbox 都已勾选 `[x]`
|
|
55
|
-
- **ROADMAP.md**(如存在):标记对应 Phase 已完成
|
|
56
|
-
- **STATE.md:** 清除当前变更信息,历史记录追加归档完成(含精确到秒的时间戳)
|
|
57
|
-
- **Git 提交:** `git add .sillyspec/ && git commit -m "docs: archive sillyspec change <change-name>"`
|
|
58
|
-
|
|
59
|
-
**工作区模式下:** 如果变更属于某个子项目,cd 到子项目目录执行 git commit。工作区根目录无 git 则跳过。
|
|
60
|
-
|
|
61
|
-
### 最后说:
|
|
62
|
-
|
|
63
|
-
> ✅ 变更 `<change-name>` 已归档到 `archive/YYYY-MM-DD-<change-name>/`。继续:`/sillyspec:brainstorm "新想法"`
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
## 交互规范
|
|
2
|
-
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
3
|
-
|
|
4
|
-
## 核心约束(必须遵守)
|
|
5
|
-
- ❌ 写实现代码(任何语言)
|
|
6
|
-
- ❌ 修改任何源代码文件
|
|
7
|
-
- ❌ 安装依赖或执行构建命令
|
|
8
|
-
- ❌ 创建数据库迁移脚本
|
|
9
|
-
- ❌ 跳过 brainstorm 直接进入 execute/plan
|
|
10
|
-
- ❌ 在 checklist 未完成前开始写设计文档
|
|
11
|
-
- ❌ 编造不存在的表名、字段名、API 端点
|
|
12
|
-
- ❌ 一次性抛出多个问题(必须逐个等待回答)
|
|
13
|
-
- ❌ 用户确认前自行推进到 plan 或任何后续阶段
|
|
14
|
-
|
|
15
|
-
## 状态检查(必须先执行)
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
sillyspec status --json
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
- `phase: "brainstorm"` → ✅ 继续
|
|
22
|
-
- 其他 phase → 提示用户当前阶段,建议先完成
|
|
23
|
-
|
|
24
|
-
## 用户想法
|
|
25
|
-
$ARGUMENTS
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## Checklist(必须按顺序完成,不允许跳步或并行)
|
|
30
|
-
|
|
31
|
-
- [ ] **Step 1** — 加载项目上下文
|
|
32
|
-
- [ ] **Step 1.5** — 协作与复用检查(同名变更 + 全局模板)
|
|
33
|
-
- [ ] **Step 2** — 原型/设计图分析(如有)
|
|
34
|
-
- [ ] **Step 2b** — 评估需求范围,复杂需求拆分子项目/阶段,生成 MASTER.md
|
|
35
|
-
- [ ] **Step 3** — 对话式探索(一次一个问题,2-3 轮内完成)
|
|
36
|
-
- [ ] **Step 4** — 提出 2-3 个方案并推荐
|
|
37
|
-
- [ ] **Step 5** — 分段展示设计,逐段确认
|
|
38
|
-
- [ ] **Step 6** — 写设计文档并保存
|
|
39
|
-
- [ ] **Step 7** — AI 自审(对照约束检查)
|
|
40
|
-
- [ ] **Step 8** — 用户确认设计方案
|
|
41
|
-
- [ ] **Step 9** — 输出 design.md
|
|
42
|
-
- [ ] **Step 10** — 更新 STATE.md
|
|
43
|
-
|
|
44
|
-
**终态:** brainstorm 完成后唯一出口是 `/sillyspec:plan`。不允许直接进入 execute 或任何代码操作。
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
48
|
-
## 各步骤详解
|
|
49
|
-
|
|
50
|
-
### Step 1: 加载项目上下文
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
cat .sillyspec/config.yaml 2>/dev/null
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
**工作区模式:** AskUserQuestion 选子项目,**cd 到子项目目录执行**,加载子项目上下文 + 共享规范 + 工作区概览,设计文档保存到子项目 `.sillyspec/changes/`。git commit 在子项目目录执行。
|
|
57
|
-
|
|
58
|
-
**单项目模式:**
|
|
59
|
-
```bash
|
|
60
|
-
cat .sillyspec/{PROJECT,REQUIREMENTS,ROADMAP}.md 2>/dev/null
|
|
61
|
-
cat .sillyspec/codebase/{STRUCTURE,CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
|
|
62
|
-
ls .sillyspec/changes/ 2>/dev/null | grep -v archive
|
|
63
|
-
ls .sillyspec/knowledge/ 2>/dev/null
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### Step 1.5: 协作与复用检查
|
|
67
|
-
|
|
68
|
-
- **同名变更:** `ls .sillyspec/changes/ | grep -v archive` — 有相关变更则提示避免冲突
|
|
69
|
-
- **全局模板:** `ls ~/.sillyspec/templates/ 2>/dev/null` — 有匹配模板则建议复用
|
|
70
|
-
|
|
71
|
-
无匹配则跳过,不输出。
|
|
72
|
-
|
|
73
|
-
### Step 2: 原型/设计图分析(如有图片则必做)
|
|
74
|
-
|
|
75
|
-
**不要只看描述文字,图片包含布局、字段、交互等视觉信息。**
|
|
76
|
-
|
|
77
|
-
对每张图逐页分析(先主页面后子页面):
|
|
78
|
-
1. **页面结构** — 识别搜索区、操作栏、表格、表单等区块
|
|
79
|
-
2. **表单字段** — 字段名、类型、必填、选项
|
|
80
|
-
3. **交互流程** — 页面跳转、按钮行为、流程线
|
|
81
|
-
4. **标注备注** — 业务规则、状态说明、权限说明
|
|
82
|
-
|
|
83
|
-
展示分析结果,问用户确认有无遗漏。
|
|
84
|
-
|
|
85
|
-
### Step 2b: 大模块拆分
|
|
86
|
-
|
|
87
|
-
**满足以下任意 2 条就建议拆分:**
|
|
88
|
-
- 3+ 个可独立交付的功能模块
|
|
89
|
-
- 3+ 种角色有不同权限和视图
|
|
90
|
-
- 跨页面状态流转(审批流、多步表单)
|
|
91
|
-
- brainstorm 提问发现需求范围过大
|
|
92
|
-
|
|
93
|
-
确认拆分后生成 MASTER.md:
|
|
94
|
-
|
|
95
|
-
```bash
|
|
96
|
-
mkdir -p .sillyspec/changes/<变更名>/stages
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
`MASTER.md` 内容:概述、拆分计划表(阶段/范围/状态)、整体技术方向、阶段间依赖、原型分析摘要、经验记录。
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
git add .sillyspec/changes/<变更名>/MASTER.md
|
|
103
|
-
git commit -m "docs: master change plan for <变更名>"
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
提示用户:`/sillyspec:brainstorm <变更名>/stage-1`
|
|
107
|
-
|
|
108
|
-
**子阶段 brainstorm:** 读取 MASTER.md + 前序阶段经验 + 对应原型,设计文档保存到 `.sillyspec/changes/<变更名>/stages/<stage-N>/`。
|
|
109
|
-
|
|
110
|
-
### Step 3: 对话式探索
|
|
111
|
-
|
|
112
|
-
**核心规则:一次只问一个问题。**
|
|
113
|
-
|
|
114
|
-
1. 从最核心的问题开始(用户到底想做什么?)
|
|
115
|
-
2. 等待回答,根据信息量决定追问还是进入方案讨论
|
|
116
|
-
3. 探索顺序按需:目的 → 约束 → 边界 → 成功标准
|
|
117
|
-
4. **大多数 brainstorm 2-3 轮就应进入方案讨论**
|
|
118
|
-
|
|
119
|
-
### Step 4: 提出 2-3 种方案
|
|
120
|
-
|
|
121
|
-
每种方案列优劣,给出推荐和理由。
|
|
122
|
-
|
|
123
|
-
### Step 5: 分段展示设计
|
|
124
|
-
|
|
125
|
-
简单项目几句话;复杂项目每段 200-300 字逐段确认。
|
|
126
|
-
|
|
127
|
-
### Step 6: 写设计文档
|
|
128
|
-
|
|
129
|
-
保存到 `.sillyspec/changes/<变更名>/design.md`:
|
|
130
|
-
|
|
131
|
-
```markdown
|
|
132
|
-
# [Feature Name] 设计
|
|
133
|
-
|
|
134
|
-
## 动机与范围
|
|
135
|
-
(为什么做、范围边界、成功标准)
|
|
136
|
-
|
|
137
|
-
## 功能需求
|
|
138
|
-
(需求场景、验收标准)
|
|
139
|
-
- [ ] 标准 1
|
|
140
|
-
|
|
141
|
-
## 技术方案
|
|
142
|
-
## 约束和假设
|
|
143
|
-
## 不在范围内
|
|
144
|
-
## 文件变更
|
|
145
|
-
## 代码风格参照
|
|
146
|
-
(参考已有源文件,标注返回值类型、异常类型、注解风格)
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
**注意:** 引用的表名必须来自 ARCHITECTURE.md 数据模型或明确标注"新增"。必须先读取 `.sillyspec/codebase/ARCHITECTURE.md`。
|
|
150
|
-
|
|
151
|
-
### Step 7: AI 自审(必须执行)
|
|
152
|
-
|
|
153
|
-
- 需求覆盖:是否完整覆盖 Step 3 确认的需求点?
|
|
154
|
-
- 约束一致性:技术方案是否与 ARCHITECTURE.md、CONVENTIONS.md 一致?
|
|
155
|
-
- 表名/字段真实性:是否来自真实 schema?
|
|
156
|
-
- 范围控制:是否包含不必要功能(YAGNI)?
|
|
157
|
-
- 验收标准:是否具体、可测试?
|
|
158
|
-
- 变更冲突:是否与 Step 1.5 检测到的已有变更冲突?
|
|
159
|
-
|
|
160
|
-
发现问题 → 修改文档,重新自审。不确定的标注「⚠️ 自审存疑」让用户判断。
|
|
161
|
-
|
|
162
|
-
### Step 8: 用户确认(⛔ 门禁)
|
|
163
|
-
|
|
164
|
-
```bash
|
|
165
|
-
sillyspec status --json
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
展示设计方案,AskUserQuestion:确认 / 需要修改 / 推翻重来。
|
|
169
|
-
|
|
170
|
-
### Step 9: 输出技术方案
|
|
171
|
-
|
|
172
|
-
用户确认后,确认 design.md 已包含完整内容(动机、需求、方案、文件变更、代码风格参照)。如 Step 6 已保存则无需重复。
|
|
173
|
-
|
|
174
|
-
### Step 10: 更新 STATE.md
|
|
175
|
-
|
|
176
|
-
自动更新 `.sillyspec/STATE.md`(不存在则创建):当前变更、阶段、下一步 `/sillyspec:plan`、关键决策、历史记录。不需要 Git 提交。
|
|
177
|
-
|
|
178
|
-
## 关键原则
|
|
179
|
-
- YAGNI — 无情砍掉不需要的功能
|
|
180
|
-
- 总是探索替代方案
|
|
181
|
-
- 设计可以很短,但必须存在
|
|
182
|
-
- "简单"的项目更需要设计——未检视的假设造成最大浪费
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
## 核心约束(必须遵守)
|
|
2
|
-
- ❌ 跳过自动判断,直接执行某个阶段
|
|
3
|
-
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## 判断逻辑
|
|
7
|
-
|
|
8
|
-
**先检查是否工作区模式:**
|
|
9
|
-
```bash
|
|
10
|
-
cat .sillyspec/config.yaml 2>/dev/null | grep -q "projects"
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
**工作区模式:** 同时检查根目录和每个子项目,列出所有未完成的工作,让用户选择继续哪个。
|
|
14
|
-
|
|
15
|
-
**单项目模式:** 按顺序检查,第一个未完成的就执行:
|
|
16
|
-
|
|
17
|
-
```
|
|
18
|
-
1. 有进行中的变更?
|
|
19
|
-
1a. 无 design.md → 提示补充设计(/sillyspec:brainstorm)
|
|
20
|
-
1b. 无 tasks.md → 执行 /sillyspec:plan
|
|
21
|
-
1c. tasks.md 有未完成项 + 有计划 → 执行 /sillyspec:execute
|
|
22
|
-
1d. tasks.md 全完成 + 未验证 → 执行 /sillyspec:verify(可选)
|
|
23
|
-
1e. 已验证通过 → 执行 /sillyspec:archive
|
|
24
|
-
|
|
25
|
-
2. 有 .sillyspec/codebase/ 但无进行中工作?
|
|
26
|
-
→ /sillyspec:brainstorm "你的想法"
|
|
27
|
-
|
|
28
|
-
3. 什么都没有?
|
|
29
|
-
→ /sillyspec:init(新项目)或 /sillyspec:scan(棕地项目)
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
先报告检测结果,再执行。
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
## 交互规范
|
|
2
|
-
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
3
|
-
|
|
4
|
-
## 核心约束(必须遵守)
|
|
5
|
-
- ❌ 跳过状态检查,自行推断阶段
|
|
6
|
-
- ❌ 跳步执行(不允许跳过 plan 直接 execute)
|
|
7
|
-
- ❌ 先写代码后补测试
|
|
8
|
-
- ❌ 编造不存在的方法/注解/路径/类/字段
|
|
9
|
-
- ❌ 自行补全缺失的接口/方法(应报告 BLOCKED)
|
|
10
|
-
- ❌ 意外修改了计划外的文件却不报告
|
|
11
|
-
|
|
12
|
-
## 状态检查(必须先执行)
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
cat .sillyspec/STATE.md 2>/dev/null
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
有 STATE.md 且 phase 为 execute → 继续。无 STATE.md 或 phase 不对 → 检查是否有未完成的 tasks.md:
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
ls .sillyspec/changes/*/tasks.md 2>/dev/null | xargs grep -l '\- \[ \]' 2>/dev/null
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
有未完成的 tasks.md → 继续。没有 → 提示 `/sillyspec:continue`。
|
|
25
|
-
|
|
26
|
-
## 执行范围
|
|
27
|
-
$ARGUMENTS
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## 加载上下文
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
cat .sillyspec/config.yaml 2>/dev/null
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
**工作区模式:** 根据计划 Task 标注确定子项目,额外加载共享规范 + CODEBASE-OVERVIEW.md。所有代码修改、测试运行、git commit 都在子项目目录中执行。
|
|
38
|
-
|
|
39
|
-
**加载以下文件(主代理读取,后续注入子代理):**
|
|
40
|
-
```bash
|
|
41
|
-
PLAN=$(ls -t .sillyspec/changes/*/tasks.md 2>/dev/null | head -1); cat "$PLAN"
|
|
42
|
-
LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
|
|
43
|
-
cat "$LATEST"/{tasks,design}.md 2>/dev/null
|
|
44
|
-
cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
|
|
45
|
-
cat .sillyspec/local.yaml 2>/dev/null
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
如果 `$ARGUMENTS` 指定范围(如 `wave-1`、`task-3`),只执行对应部分。
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
## 确认频率
|
|
53
|
-
|
|
54
|
-
用 AskUserQuestion 询问用户选择:
|
|
55
|
-
- **每个 Wave 确认** — 每个 Wave 完成后展示结果,等用户确认后继续下一 Wave
|
|
56
|
-
- **AI 自主判断** — AI 在遇到 BLOCKED 或计划外变更时才询问,其余自动推进
|
|
57
|
-
- **全自动** — 全部自动执行,不在中途打断用户
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
## 子代理执行(强制模式)
|
|
62
|
-
|
|
63
|
-
**所有任务通过子代理执行,主代理负责调度和记录。**
|
|
64
|
-
|
|
65
|
-
### 执行流程
|
|
66
|
-
|
|
67
|
-
1. 解析 tasks.md,按 Wave 分组
|
|
68
|
-
2. 同一 Wave 内的任务**并行启动**子代理,不同 Wave **串行等待**
|
|
69
|
-
3. 每个 Wave 完成后,根据用户选择的确认频率决定是否暂停
|
|
70
|
-
4. 子代理返回结果后,主代理勾选 tasks.md、更新 STATE.md
|
|
71
|
-
|
|
72
|
-
### 子代理 Prompt 模板
|
|
73
|
-
|
|
74
|
-
主代理在 dispatch 子代理前,必须准备以下 prompt(所有内容**内联**,不让子代理自己读文件):
|
|
75
|
-
|
|
76
|
-
```
|
|
77
|
-
你正在执行任务:
|
|
78
|
-
|
|
79
|
-
## 任务描述
|
|
80
|
-
{tasks.md 中当前 task 的完整内容,包括步骤字段}
|
|
81
|
-
|
|
82
|
-
## 项目约定
|
|
83
|
-
{CONVENTIONS.md 全文}
|
|
84
|
-
|
|
85
|
-
## 项目架构
|
|
86
|
-
{ARCHITECTURE.md 全文}
|
|
87
|
-
|
|
88
|
-
## 构建命令
|
|
89
|
-
{local.yaml 中的 build 命令,如无则给默认命令}
|
|
90
|
-
|
|
91
|
-
## 工作目录
|
|
92
|
-
{子项目目录路径,工作区模式需要 cd 到此目录}
|
|
93
|
-
|
|
94
|
-
## 铁律(必须遵守)
|
|
95
|
-
1. **先读后写:** 先 cat 要修改的文件和参考文件,确认风格和方法签名后再写
|
|
96
|
-
2. **grep 确认:** 调用已有方法前必须 grep 确认存在,grep 不到 → 报告 BLOCKED
|
|
97
|
-
3. **不编造:** 不编造不存在的方法/注解/类/字段
|
|
98
|
-
4. **不自行补全:** 发现缺失接口/方法,不自己写,报告 BLOCKED
|
|
99
|
-
5. **TDD 不跳步:** 按任务步骤逐步执行,每步必须运行测试命令并确认结果
|
|
100
|
-
6. **测试直接通过 = 测了已有行为,重写测试**
|
|
101
|
-
7. **commit:** 完成后在工作目录执行 git add -A && git commit
|
|
102
|
-
8. **不修改计划外的文件**,如必须修改则在报告中说明
|
|
103
|
-
|
|
104
|
-
## 完成后报告(严格按此格式)
|
|
105
|
-
|
|
106
|
-
- **Status:** DONE / DONE_WITH_CONCERNS / BLOCKED
|
|
107
|
-
- **改动文件:** {列表}
|
|
108
|
-
- **测试结果:** {通过/失败/跳过及原因}
|
|
109
|
-
- **Commit:** {hash 或 "无"}
|
|
110
|
-
- **问题:** {BLOCKED 原因 / DONE_WITH_CONCERNS 描述 / 无}
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### 子代理结果处理
|
|
114
|
-
|
|
115
|
-
子代理返回后,主代理:
|
|
116
|
-
|
|
117
|
-
1. **DONE** → 勾选 tasks.md,记录精确到秒的时间戳
|
|
118
|
-
2. **DONE_WITH_CONCERNS** → 勾选 tasks.md,记录问题到报告
|
|
119
|
-
3. **BLOCKED** → 不勾选,报告给用户,AskUserQuestion 三选一:
|
|
120
|
-
- 重试(重新 dispatch 同一任务)
|
|
121
|
-
- 跳过(勾选并标注 SKIPPED)
|
|
122
|
-
- 停止(暂停执行,用户处理后继续)
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
## 完成后
|
|
127
|
-
|
|
128
|
-
所有任务完成后,用 AskUserQuestion 询问用户下一步:
|
|
129
|
-
1. **验证** — 执行 `/sillyspec:verify` 全面验证
|
|
130
|
-
2. **归档** — 跳过 verify,执行 `/sillyspec:archive`
|
|
131
|
-
3. **继续开发** — 不结束当前阶段
|
|
132
|
-
|
|
133
|
-
更新 `.sillyspec/STATE.md`:阶段改为 `execute ✅` 或 `execute 🔄 (X/M)`,历史记录追加执行结果(含精确到秒的时间戳)。
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: 自由思考模式 — 讨论、画图、调研,不写代码
|
|
3
|
-
argument-hint: "[探索主题]"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## 交互规范
|
|
7
|
-
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
8
|
-
|
|
9
|
-
## 核心约束(必须遵守)
|
|
10
|
-
- ❌ 写实现代码
|
|
11
|
-
- ❌ 安装依赖
|
|
12
|
-
- ❌ 修改文件(除非用户明确要求保存发现)
|
|
13
|
-
- ❌ 强行下结论或强行结构化
|
|
14
|
-
|
|
15
|
-
## 话题
|
|
16
|
-
$ARGUMENTS
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## 这是什么模式
|
|
21
|
-
|
|
22
|
-
**探索模式用于思考,不用于实现。** 读文件、搜代码、调查代码库,但绝对不能写代码。没有固定步骤、没有必需的输出。
|
|
23
|
-
|
|
24
|
-
## 姿态
|
|
25
|
-
|
|
26
|
-
- **好奇不说教** — 问自然产生的问题
|
|
27
|
-
- **开放式线程** — 展示多个有趣方向
|
|
28
|
-
- **可视化** — 大量使用 ASCII 图表
|
|
29
|
-
- **自适应** — 追随有趣线索随时转向
|
|
30
|
-
- **务实** — 探索实际代码库,不只纸上谈兵
|
|
31
|
-
|
|
32
|
-
## 上下文感知
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
ls .sillyspec/changes/ 2>/dev/null | grep -v archive
|
|
36
|
-
cat .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
有进行中变更时读取其 design/tasks,自然引用。发现重要决策时可提议保存(不自动保存)。
|
|
40
|
-
|
|
41
|
-
## 没有必需的结束
|
|
42
|
-
|
|
43
|
-
探索可以创建变更提案、产出文档、继续探索或结束。
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
## 核心约束(必须遵守)
|
|
2
|
-
- ❌ 修改任何文件(只读)
|
|
3
|
-
|
|
4
|
-
## 参数解析
|
|
5
|
-
`$ARGUMENTS`:变更名 + 可选 `--to` 输出路径(默认 `~/.sillyspec/templates/<change-name>/`)
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 流程
|
|
10
|
-
|
|
11
|
-
1. **读取变更文件:**
|
|
12
|
-
- 先检查根目录:`cat .sillyspec/changes/$ARGUMENTS/{design}.md 2>/dev/null`
|
|
13
|
-
- 根目录没有 → 检查子项目:遍历 config.yaml 中的子项目路径,查找 `$ARGUMENTS`
|
|
14
|
-
2. **清理为通用模板:** 移除项目特定信息,保留通用设计方案,添加 `notes.md` 使用建议。
|
|
15
|
-
3. **导出:** `mkdir -p ~/.sillyspec/templates/<change-name>` 并复制文件。
|
|
16
|
-
4. **确认:** 展示摘要和模板路径。
|
|
17
|
-
|
|
18
|
-
### 最后说:
|
|
19
|
-
|
|
20
|
-
> ✅ 已导出到 `~/.sillyspec/templates/<change-name>/`
|
|
21
|
-
> 其他项目使用:`/sillyspec:brainstorm` → AI 自动发现并建议复用
|