sillyspec 2.4.2 → 2.4.4
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 +11 -5
- package/.claude/commands/sillyspec/brainstorm.md +132 -21
- package/.claude/commands/sillyspec/continue.md +0 -5
- package/.claude/commands/sillyspec/execute.md +0 -5
- package/.claude/commands/sillyspec/explore.md +14 -11
- package/.claude/commands/sillyspec/export.md +0 -5
- package/.claude/commands/sillyspec/init.md +9 -9
- package/.claude/commands/sillyspec/plan.md +0 -5
- package/.claude/commands/sillyspec/propose.md +0 -5
- package/.claude/commands/sillyspec/quick.md +0 -5
- package/.claude/commands/sillyspec/resume.md +9 -5
- package/.claude/commands/sillyspec/scan.md +23 -40
- package/.claude/commands/sillyspec/status.md +0 -5
- package/.claude/commands/sillyspec/verify.md +0 -5
- package/.claude/commands/sillyspec/workspace.md +15 -7
- package/package.json +1 -1
- package/templates/archive.md +7 -0
- package/templates/brainstorm.md +124 -16
- package/templates/explore.md +7 -0
- package/templates/init.md +7 -0
- package/templates/resume.md +9 -2
- package/templates/scan.md +17 -14
- package/templates/workspace.md +9 -2
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
## 交互规范
|
|
2
|
+
|
|
3
|
+
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
4
|
+
|
|
5
|
+
不要用编号列表让用户手动输入数字。
|
|
6
|
+
如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
|
|
5
7
|
|
|
6
8
|
你现在是 SillySpec 的归档器。
|
|
7
9
|
|
|
@@ -23,7 +25,11 @@ $ARGUMENTS
|
|
|
23
25
|
- 包含的文件列表
|
|
24
26
|
- 生成总结
|
|
25
27
|
|
|
26
|
-
|
|
28
|
+
**归档前确认:**
|
|
29
|
+
|
|
30
|
+
请确认是否执行归档:
|
|
31
|
+
1. 确认归档
|
|
32
|
+
2. 取消
|
|
27
33
|
|
|
28
34
|
将 `.sillyspec/changes/<change-name>/` 移动到 `.sillyspec/changes/archive/YYYY-MM-DD-<change-name>/`。
|
|
29
35
|
|
|
@@ -1,21 +1,104 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
## 交互规范
|
|
2
|
+
|
|
3
|
+
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
4
|
+
|
|
5
|
+
不要用编号列表让用户手动输入数字。
|
|
6
|
+
如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
|
|
5
7
|
|
|
6
8
|
你现在是 SillySpec 的需求探索器。
|
|
7
9
|
|
|
8
10
|
## 用户想法
|
|
9
11
|
$ARGUMENTS
|
|
10
12
|
|
|
13
|
+
## 流程总览
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
┌─────────────────────────────────────────────────┐
|
|
17
|
+
│ BRAINSTORM 流程 │
|
|
18
|
+
├─────────────────────────────────────────────────┤
|
|
19
|
+
│ │
|
|
20
|
+
│ ┌─── Step 0: 状态检查 ───┐ │
|
|
21
|
+
│ └────────────┬───────────┘ │
|
|
22
|
+
│ ▼ │
|
|
23
|
+
│ ┌─── Step 1: 加载项目上下文 ──┐ │
|
|
24
|
+
│ └────────────┬───────────────┘ │
|
|
25
|
+
│ ▼ │
|
|
26
|
+
│ ┌─── Step 1.5: 协作与复用检查 ─┐ │
|
|
27
|
+
│ └────────────┬────────────────┘ │
|
|
28
|
+
│ ▼ │
|
|
29
|
+
│ ┌─── Step 2: 原型/设计图分析 ─┐ ← 如有原型 │
|
|
30
|
+
│ └────────────┬────────────────┘ │
|
|
31
|
+
│ ▼ │
|
|
32
|
+
│ ┌─── Step 3: 对话式探索 ──┐ │
|
|
33
|
+
│ │ (一次一个问题,2-3轮) │ │
|
|
34
|
+
│ └────────────┬───────────┘ │
|
|
35
|
+
│ ▼ │
|
|
36
|
+
│ ┌─── Step 4: 提出 2-3 种方案 ─┐ │
|
|
37
|
+
│ └────────────┬───────────────┘ │
|
|
38
|
+
│ ▼ │
|
|
39
|
+
│ ┌─── Step 5: 分段展示设计 ──┐ │
|
|
40
|
+
│ │ (逐段确认) │ │
|
|
41
|
+
│ └────────────┬─────────────┘ │
|
|
42
|
+
│ ▼ │
|
|
43
|
+
│ ┌─── Step 6: 写设计文档 ────┐ │
|
|
44
|
+
│ └────────────┬─────────────┘ │
|
|
45
|
+
│ ▼ │
|
|
46
|
+
│ ┌─── Step 7: AI 自审 ──────┐ │
|
|
47
|
+
│ └────────────┬─────────────┘ │
|
|
48
|
+
│ ▼ │
|
|
49
|
+
│ ┌─── Step 8: 用户确认 ────┐ │
|
|
50
|
+
│ │ ⛔ 必须等用户明确确认 │ │
|
|
51
|
+
│ └────────────┬───────────┘ │
|
|
52
|
+
│ ▼ │
|
|
53
|
+
│ /sillyspec:propose │
|
|
54
|
+
│ (唯一出口 ✅) │
|
|
55
|
+
│ │
|
|
56
|
+
│ ❌ 禁止跳转:propose → execute(无此路径) │
|
|
57
|
+
│ ❌ 禁止跳转:brainstorm → 任何代码操作 │
|
|
58
|
+
└─────────────────────────────────────────────────┘
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**终态明确:** brainstorm 完成后,必须且只能调用 `/sillyspec:propose` 进入下一阶段。不允许直接进入 execute、plan 或任何代码操作。
|
|
62
|
+
|
|
63
|
+
## 结构化 Checklist(必须按顺序完成)
|
|
64
|
+
|
|
65
|
+
> ⚠️ AI 必须逐项完成以下清单,每步有明确产出后再进入下一步。
|
|
66
|
+
> 不允许跳步。不允许并行。不允许在完成当前步骤前开始下一步。
|
|
67
|
+
|
|
68
|
+
- [ ] **Step 0** — 检查 CLI 状态,确认当前处于 brainstorm 阶段
|
|
69
|
+
- [ ] **Step 1** — 加载项目上下文,理解现有代码结构和约定
|
|
70
|
+
- [ ] **Step 1.5** — 检查同名变更和全局模板,避免重复劳动
|
|
71
|
+
- [ ] **Step 2** — 分析原型/设计图(如有),提取页面结构和字段
|
|
72
|
+
- [ ] **Step 2b** — 评估需求范围,复杂需求先拆分子项目/阶段,生成 MASTER.md
|
|
73
|
+
- [ ] **Step 3** — 对话式探索需求,一次一个问题,2-3 轮内完成
|
|
74
|
+
- [ ] **Step 4** — 提出 2-3 个方案并给出推荐
|
|
75
|
+
- [ ] **Step 5** — 分段展示设计,逐段用户确认
|
|
76
|
+
- [ ] **Step 6** — 撰写 design 文档并保存
|
|
77
|
+
- [ ] **Step 7** — AI 自审 design 文档(对照约束检查)
|
|
78
|
+
- [ ] **Step 8** — 用户确认设计 → 调用 `/sillyspec:propose`
|
|
79
|
+
|
|
11
80
|
## 核心原则
|
|
12
81
|
|
|
13
82
|
**创建性工作前必须经过此流程。** 不管需求多简单,都必须先探索再动手。
|
|
14
83
|
|
|
15
84
|
<HARD-GATE>
|
|
16
85
|
在用户确认设计之前,不得调用任何实现技能、不写任何代码、不做任何脚手架、不安装任何依赖。
|
|
86
|
+
brainstorm 的唯一出口是 /sillyspec:propose。没有其他路径可以离开 brainstorm。
|
|
17
87
|
</HARD-GATE>
|
|
18
88
|
|
|
89
|
+
## 🚫 禁止事项
|
|
90
|
+
|
|
91
|
+
- ❌ 写实现代码(Java/JS/Python/任何语言)
|
|
92
|
+
- ❌ 修改任何源代码文件
|
|
93
|
+
- ❌ 安装依赖或执行构建命令
|
|
94
|
+
- ❌ 创建数据库迁移脚本
|
|
95
|
+
- ❌ 直接实现功能而不是先讨论设计
|
|
96
|
+
- ❌ 跳过 brainstorm 直接进入 execute 或 plan
|
|
97
|
+
- ❌ 在 checklist 未完成前开始写设计文档
|
|
98
|
+
- ❌ 编造不存在的表名、字段名、API 端点
|
|
99
|
+
|
|
100
|
+
如果用户在头脑风暴阶段要求写代码,提醒他们:先完成 brainstorm 确认设计方案,再进入 propose → plan → execute 流程写代码。
|
|
101
|
+
|
|
19
102
|
## 反模式:"这个太简单了不需要设计"
|
|
20
103
|
|
|
21
104
|
每个项目都走这个流程。Todo 列表、单函数工具、配置修改——都一样。"简单"的项目才是未检视的假设造成最大浪费的地方。设计可以很短,但必须呈现并获批准。
|
|
@@ -47,11 +130,9 @@ cat .sillyspec/config.yaml 2>/dev/null
|
|
|
47
130
|
|
|
48
131
|
**如果是工作区模式:**
|
|
49
132
|
1. 询问本次需求属于哪个子项目:
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
2) backend — 后端 - Node.js + PostgreSQL
|
|
54
|
-
```
|
|
133
|
+
请选择需求所属的子项目:
|
|
134
|
+
1. frontend — 前端 - Vue3 + TypeScript
|
|
135
|
+
2. backend — 后端 - Node.js + PostgreSQL
|
|
55
136
|
2. 加载该子项目的上下文 + 工作区共享规范:
|
|
56
137
|
|
|
57
138
|
```bash
|
|
@@ -197,11 +278,11 @@ ls ~/.sillyspec/templates/ 2>/dev/null
|
|
|
197
278
|
将以上分析结果展示给用户,补充遗漏:
|
|
198
279
|
|
|
199
280
|
> 📐 原型分析完成。提取到 3 个页面、15 个字段、4 个交互流程。
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
281
|
+
|
|
282
|
+
请确认:
|
|
283
|
+
1. 有没有漏掉的字段或功能?
|
|
284
|
+
2. 图中的流程线我理解得对吗?
|
|
285
|
+
3. 有没有业务规则只在口头说、没画在原型里的?
|
|
205
286
|
|
|
206
287
|
**2f. 如果原型页面太多**
|
|
207
288
|
|
|
@@ -391,14 +472,34 @@ git commit -m "docs: master change plan for <变更名>"
|
|
|
391
472
|
- [ ] 标准 2
|
|
392
473
|
```
|
|
393
474
|
|
|
394
|
-
### 7.
|
|
475
|
+
### 7. AI 自审
|
|
476
|
+
|
|
477
|
+
写完设计文档后,**立即进行自审**,不要等用户来挑问题。
|
|
478
|
+
|
|
479
|
+
自审检查项:
|
|
480
|
+
|
|
481
|
+
1. **需求覆盖**:design 是否完整覆盖了用户在 Step 3 中确认的所有需求点?
|
|
482
|
+
2. **约束一致性**:design 中的技术方案是否与 ARCHITECTURE.md、CONVENTIONS.md 一致?
|
|
483
|
+
3. **表名/字段真实性**:是否所有引用的表名和字段都来自真实 schema?新增的是否明确标注?
|
|
484
|
+
4. **范围控制**:是否包含了不必要的功能(违反 YAGNI)?
|
|
485
|
+
5. **验收标准**:验收标准是否具体、可测试?
|
|
486
|
+
6. **与已有变更冲突**:是否与 Step 1.5 中检测到的已有变更冲突?
|
|
487
|
+
|
|
488
|
+
**自审结果处理:**
|
|
489
|
+
- 全部通过 → 进入 Step 8
|
|
490
|
+
- 发现问题 → 修改 design 文档,重新自审,全部通过后再进入 Step 8
|
|
491
|
+
- 不确定的问题 → 在 Step 8 展示给用户时标注「⚠️ 自审存疑」,请用户判断
|
|
492
|
+
|
|
493
|
+
**不要跳过自审。** 这是保证设计质量的关键环节。
|
|
494
|
+
|
|
495
|
+
### 8. 提交 Git
|
|
395
496
|
|
|
396
497
|
```bash
|
|
397
498
|
git add .sillyspec/specs/
|
|
398
499
|
git commit -m "docs: design for <topic>"
|
|
399
500
|
```
|
|
400
501
|
|
|
401
|
-
###
|
|
502
|
+
### 9. 用户确认(⛔ 门禁)
|
|
402
503
|
|
|
403
504
|
**设计保存后,用 CLI 验证状态:**
|
|
404
505
|
|
|
@@ -408,10 +509,15 @@ sillyspec status --json
|
|
|
408
509
|
|
|
409
510
|
CLI 应返回 `phase: "propose"`。
|
|
410
511
|
|
|
411
|
-
展示给用户:
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
512
|
+
**⛔ 必须等待用户明确确认后才能进入下一阶段。** 展示给用户:
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
请确认设计方案:
|
|
516
|
+
1. ✅ 确认,进入 propose
|
|
517
|
+
2. ✏️ 需要修改(请说明要改什么)
|
|
518
|
+
3. ❌ 推翻重来
|
|
519
|
+
|
|
520
|
+
**用户选择 1** → 推荐下一步命令:
|
|
415
521
|
|
|
416
522
|
```bash
|
|
417
523
|
sillyspec next
|
|
@@ -419,7 +525,12 @@ sillyspec next
|
|
|
419
525
|
|
|
420
526
|
将 CLI 返回的命令推荐给用户。**不要自己编建议。**
|
|
421
527
|
|
|
422
|
-
|
|
528
|
+
**用户选择 2** → 修改 design 文档,重新自审,再次进入确认门禁。
|
|
529
|
+
**用户选择 3** → 回到 Step 3 或 Step 4 重新探索。
|
|
530
|
+
|
|
531
|
+
**不允许在用户确认前自行推进到 propose 或任何后续阶段。**
|
|
532
|
+
|
|
533
|
+
### 10. 更新 STATE.md
|
|
423
534
|
|
|
424
535
|
每次 brainstorm 完成后,**必须自动更新** `.sillyspec/STATE.md`。
|
|
425
536
|
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
## 交互规范
|
|
2
|
+
|
|
3
|
+
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
4
|
+
|
|
5
|
+
不要用编号列表让用户手动输入数字。
|
|
6
|
+
如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
|
|
5
7
|
|
|
6
8
|
---
|
|
7
9
|
|
|
@@ -66,18 +68,19 @@ cat .sillyspec/ROADMAP.md 2>/dev/null
|
|
|
66
68
|
读取变更的 proposal、design、tasks,自然地引用它们。
|
|
67
69
|
|
|
68
70
|
当发现重要的决策时,**提议保存**(不自动保存):
|
|
69
|
-
> "这是一个设计决策,要写到 design.md 里吗?"
|
|
70
|
-
> "这是新需求,要加到 specs 里吗?"
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
请选择:
|
|
73
|
+
1. 写入 design.md
|
|
74
|
+
2. 加入 specs
|
|
75
|
+
3. 暂不保存
|
|
73
76
|
|
|
74
77
|
## 没有必需的结束
|
|
75
78
|
|
|
76
79
|
探索可以:
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
1. 创建变更提案 — 流入 proposal
|
|
81
|
+
2. 产出文档更新
|
|
82
|
+
3. 继续探索
|
|
83
|
+
4. 结束探索
|
|
81
84
|
|
|
82
85
|
## 禁止事项
|
|
83
86
|
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
## 交互规范
|
|
2
|
+
|
|
3
|
+
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
4
|
+
|
|
5
|
+
不要用编号列表让用户手动输入数字。
|
|
6
|
+
如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
|
|
5
7
|
|
|
6
8
|
---
|
|
7
9
|
|
|
@@ -22,12 +24,10 @@ cat .sillyspec/config.yaml 2>/dev/null
|
|
|
22
24
|
|
|
23
25
|
如果 config.yaml 存在且包含 `projects` → 工作区模式:
|
|
24
26
|
1. 列出所有子项目:
|
|
25
|
-
```
|
|
26
27
|
检测到工作区模式,请选择要初始化的子项目:
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
```
|
|
28
|
+
> 1. frontend — 前端 - Vue3 + TypeScript
|
|
29
|
+
> 2. backend — 后端 - Node.js + PostgreSQL
|
|
30
|
+
> 3. 新建子项目(先运行 /sillyspec:workspace add)
|
|
31
31
|
2. 用户选择后,**切换到该子项目目录**执行后续所有步骤
|
|
32
32
|
3. 后续步骤中的所有文件路径相对于子项目目录
|
|
33
33
|
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
## 交互规范
|
|
2
|
+
|
|
3
|
+
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
4
|
+
|
|
5
|
+
不要用编号列表让用户手动输入数字。
|
|
6
|
+
如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
|
|
5
7
|
|
|
6
8
|
你现在是 SillySpec 的恢复管理器。
|
|
7
9
|
|
|
@@ -38,7 +40,9 @@ cat .sillyspec/STATE.md 2>/dev/null
|
|
|
38
40
|
|
|
39
41
|
**不需要执行 Git 操作或文件探测。** STATE.md 已经包含所有信息。
|
|
40
42
|
|
|
41
|
-
|
|
43
|
+
然后问用户:
|
|
44
|
+
1. 直接继续执行下一步
|
|
45
|
+
2. 查看更多细节
|
|
42
46
|
|
|
43
47
|
### 3. 如果没有 STATE.md
|
|
44
48
|
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
## 交互规范
|
|
2
|
+
|
|
3
|
+
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
4
|
+
|
|
5
|
+
不要用编号列表让用户手动输入数字。
|
|
6
|
+
如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
|
|
5
7
|
|
|
6
8
|
|
|
7
9
|
你现在是 SillySpec 的代码库扫描器。
|
|
@@ -47,12 +49,6 @@ cat .sillyspec/config.yaml 2>/dev/null
|
|
|
47
49
|
如果 config.yaml 存在且包含 `projects` → 工作区模式:
|
|
48
50
|
|
|
49
51
|
询问用户:
|
|
50
|
-
```
|
|
51
|
-
检测到工作区模式,请选择扫描范围:
|
|
52
|
-
1) 全部子项目(逐个扫描后生成汇总)
|
|
53
|
-
2) 指定某个子项目
|
|
54
|
-
3) 取消
|
|
55
|
-
```
|
|
56
52
|
|
|
57
53
|
根据选择:
|
|
58
54
|
- 选 1 → 逐个扫描,最后生成 `.sillyspec/workspace/CODEBASE-OVERVIEW.md`
|
|
@@ -74,12 +70,10 @@ wc -l .sillyspec/codebase/*.md 2>/dev/null
|
|
|
74
70
|
→ 不提示,直接进入 Step 2 选择扫描模式。
|
|
75
71
|
|
|
76
72
|
**已有 3 份(STACK + STRUCTURE + PROJECT):**
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
→ 输入 3 跳过,直接开始开发
|
|
82
|
-
```
|
|
73
|
+
> 检测到上次的快速扫描结果。
|
|
74
|
+
1. 升级为完整扫描(补充 4 份文档)
|
|
75
|
+
2. 重新快速扫描(覆盖现有文档)
|
|
76
|
+
3. 跳过,直接开始开发
|
|
83
77
|
|
|
84
78
|
**已有 7 份完整文档:**
|
|
85
79
|
先检查距上次扫描过了多久:
|
|
@@ -88,29 +82,23 @@ git log -1 --format="%ci" .sillyspec/codebase/ 2>/dev/null
|
|
|
88
82
|
git log --oneline --since="上次扫描时间" | wc -l
|
|
89
83
|
```
|
|
90
84
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
→ 输入 2 跳过,直接开始开发
|
|
95
|
-
```
|
|
85
|
+
> 上次扫描距今 X 天,期间有 Y 个新提交。
|
|
86
|
+
1. 刷新(重新扫描全部)
|
|
87
|
+
2. 跳过,直接开始开发
|
|
96
88
|
|
|
97
89
|
**用户选跳过** → 输出"可以开始开发了。建议下一步:`/sillyspec:brainstorm '你的需求'`"然后结束。
|
|
98
90
|
|
|
99
91
|
### Step 2: 选择扫描模式
|
|
100
92
|
|
|
101
|
-
```
|
|
102
93
|
请选择扫描模式:
|
|
103
94
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
3. 取消
|
|
113
|
-
```
|
|
95
|
+
1. 快速扫描 ⚡
|
|
96
|
+
> 读取配置文件和目录结构,约 30 秒
|
|
97
|
+
> 生成 3 份文档:技术栈 + 目录结构 + 项目概览
|
|
98
|
+
2. 深度扫描 🔍
|
|
99
|
+
> 读取全部源代码并分析,约 2-3 分钟
|
|
100
|
+
> 生成 7 份文档:技术栈 + 架构 + 目录结构 + 编码约定 + 集成 + 测试 + 技术债务
|
|
101
|
+
3. 取消
|
|
114
102
|
|
|
115
103
|
根据选择进入对应的扫描流程。
|
|
116
104
|
|
|
@@ -145,14 +133,9 @@ git log --oneline --since="上次扫描时间" | wc -l
|
|
|
145
133
|
|
|
146
134
|
把以上选择汇总,让用户最后确认:
|
|
147
135
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
范围:整个项目
|
|
152
|
-
排除:node_modules, dist, .git, vendor, build, __pycache__, .next, coverage, .nuxt, target
|
|
153
|
-
|
|
154
|
-
开始扫描?(输入 y 确认,或修改以上选项)
|
|
155
|
-
```
|
|
136
|
+
开始扫描?
|
|
137
|
+
1. 确认,开始扫描
|
|
138
|
+
2. 修改选项
|
|
156
139
|
|
|
157
140
|
用户确认 → 执行扫描。用户想改 → 回到对应步骤。
|
|
158
141
|
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
## 交互规范
|
|
2
|
+
|
|
3
|
+
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
4
|
+
|
|
5
|
+
不要用编号列表让用户手动输入数字。
|
|
6
|
+
如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
|
|
5
7
|
|
|
6
8
|
---
|
|
7
9
|
|
|
@@ -18,7 +20,9 @@ $ARGUMENTS
|
|
|
18
20
|
cat .sillyspec/config.yaml 2>/dev/null
|
|
19
21
|
```
|
|
20
22
|
|
|
21
|
-
如果不存在 →
|
|
23
|
+
如果不存在 → 这是一个尚未配置工作区的项目。询问用户:
|
|
24
|
+
1. 初始化工作区
|
|
25
|
+
2. 跳过
|
|
22
26
|
|
|
23
27
|
### Step 2: 解析指令
|
|
24
28
|
|
|
@@ -40,7 +44,9 @@ cat .sillyspec/config.yaml 2>/dev/null
|
|
|
40
44
|
- 询问子项目路径(相对于工作区根目录,如 `./frontend`)
|
|
41
45
|
- 询问子项目角色描述(如 `前端 - Vue3 + TypeScript`)
|
|
42
46
|
- 验证路径存在
|
|
43
|
-
|
|
47
|
+
添加完后询问:
|
|
48
|
+
> 1. 继续添加子项目
|
|
49
|
+
> 2. 完成,配置共享规范
|
|
44
50
|
3. 询问共享规范文件
|
|
45
51
|
4. 生成 `.sillyspec/config.yaml`
|
|
46
52
|
5. 创建 `.sillyspec/shared/` 目录
|
|
@@ -55,7 +61,9 @@ cat .sillyspec/config.yaml 2>/dev/null
|
|
|
55
61
|
#### 3c. 移除子项目(`remove`)
|
|
56
62
|
|
|
57
63
|
1. 显示当前所有子项目列表
|
|
58
|
-
2.
|
|
64
|
+
2. 询问要移除哪个:
|
|
65
|
+
> 1. (列出子项目名称)
|
|
66
|
+
> 2. 取消
|
|
59
67
|
3. 从 config.yaml 中删除对应条目
|
|
60
68
|
4. Git 提交
|
|
61
69
|
|
package/package.json
CHANGED
package/templates/archive.md
CHANGED
package/templates/brainstorm.md
CHANGED
|
@@ -1,14 +1,89 @@
|
|
|
1
|
+
## 交互规范
|
|
2
|
+
|
|
3
|
+
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
4
|
+
|
|
5
|
+
不要用编号列表让用户手动输入数字。
|
|
6
|
+
如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
|
|
7
|
+
|
|
1
8
|
你现在是 SillySpec 的需求探索器。
|
|
2
9
|
|
|
3
10
|
## 用户想法
|
|
4
11
|
$ARGUMENTS
|
|
5
12
|
|
|
13
|
+
## 流程总览
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
┌─────────────────────────────────────────────────┐
|
|
17
|
+
│ BRAINSTORM 流程 │
|
|
18
|
+
├─────────────────────────────────────────────────┤
|
|
19
|
+
│ │
|
|
20
|
+
│ ┌─── Step 0: 状态检查 ───┐ │
|
|
21
|
+
│ └────────────┬───────────┘ │
|
|
22
|
+
│ ▼ │
|
|
23
|
+
│ ┌─── Step 1: 加载项目上下文 ──┐ │
|
|
24
|
+
│ └────────────┬───────────────┘ │
|
|
25
|
+
│ ▼ │
|
|
26
|
+
│ ┌─── Step 1.5: 协作与复用检查 ─┐ │
|
|
27
|
+
│ └────────────┬────────────────┘ │
|
|
28
|
+
│ ▼ │
|
|
29
|
+
│ ┌─── Step 2: 原型/设计图分析 ─┐ ← 如有原型 │
|
|
30
|
+
│ └────────────┬────────────────┘ │
|
|
31
|
+
│ ▼ │
|
|
32
|
+
│ ┌─── Step 3: 对话式探索 ──┐ │
|
|
33
|
+
│ │ (一次一个问题,2-3轮) │ │
|
|
34
|
+
│ └────────────┬───────────┘ │
|
|
35
|
+
│ ▼ │
|
|
36
|
+
│ ┌─── Step 4: 提出 2-3 种方案 ─┐ │
|
|
37
|
+
│ └────────────┬───────────────┘ │
|
|
38
|
+
│ ▼ │
|
|
39
|
+
│ ┌─── Step 5: 分段展示设计 ──┐ │
|
|
40
|
+
│ │ (逐段确认) │ │
|
|
41
|
+
│ └────────────┬─────────────┘ │
|
|
42
|
+
│ ▼ │
|
|
43
|
+
│ ┌─── Step 6: 写设计文档 ────┐ │
|
|
44
|
+
│ └────────────┬─────────────┘ │
|
|
45
|
+
│ ▼ │
|
|
46
|
+
│ ┌─── Step 7: AI 自审 ──────┐ │
|
|
47
|
+
│ └────────────┬─────────────┘ │
|
|
48
|
+
│ ▼ │
|
|
49
|
+
│ ┌─── Step 8: 用户确认 ────┐ │
|
|
50
|
+
│ │ ⛔ 必须等用户明确确认 │ │
|
|
51
|
+
│ └────────────┬───────────┘ │
|
|
52
|
+
│ ▼ │
|
|
53
|
+
│ /sillyspec:propose │
|
|
54
|
+
│ (唯一出口 ✅) │
|
|
55
|
+
│ │
|
|
56
|
+
│ ❌ 禁止跳转:propose → execute(无此路径) │
|
|
57
|
+
│ ❌ 禁止跳转:brainstorm → 任何代码操作 │
|
|
58
|
+
└─────────────────────────────────────────────────┘
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**终态明确:** brainstorm 完成后,必须且只能调用 `/sillyspec:propose` 进入下一阶段。不允许直接进入 execute、plan 或任何代码操作。
|
|
62
|
+
|
|
63
|
+
## 结构化 Checklist(必须按顺序完成)
|
|
64
|
+
|
|
65
|
+
> ⚠️ AI 必须逐项完成以下清单,每步有明确产出后再进入下一步。
|
|
66
|
+
> 不允许跳步。不允许并行。不允许在完成当前步骤前开始下一步。
|
|
67
|
+
|
|
68
|
+
- [ ] **Step 0** — 检查 CLI 状态,确认当前处于 brainstorm 阶段
|
|
69
|
+
- [ ] **Step 1** — 加载项目上下文,理解现有代码结构和约定
|
|
70
|
+
- [ ] **Step 1.5** — 检查同名变更和全局模板,避免重复劳动
|
|
71
|
+
- [ ] **Step 2** — 分析原型/设计图(如有),提取页面结构和字段
|
|
72
|
+
- [ ] **Step 2b** — 评估需求范围,复杂需求先拆分子项目/阶段,生成 MASTER.md
|
|
73
|
+
- [ ] **Step 3** — 对话式探索需求,一次一个问题,2-3 轮内完成
|
|
74
|
+
- [ ] **Step 4** — 提出 2-3 个方案并给出推荐
|
|
75
|
+
- [ ] **Step 5** — 分段展示设计,逐段用户确认
|
|
76
|
+
- [ ] **Step 6** — 撰写 design 文档并保存
|
|
77
|
+
- [ ] **Step 7** — AI 自审 design 文档(对照约束检查)
|
|
78
|
+
- [ ] **Step 8** — 用户确认设计 → 调用 `/sillyspec:propose`
|
|
79
|
+
|
|
6
80
|
## 核心原则
|
|
7
81
|
|
|
8
82
|
**创建性工作前必须经过此流程。** 不管需求多简单,都必须先探索再动手。
|
|
9
83
|
|
|
10
84
|
<HARD-GATE>
|
|
11
85
|
在用户确认设计之前,不得调用任何实现技能、不写任何代码、不做任何脚手架、不安装任何依赖。
|
|
86
|
+
brainstorm 的唯一出口是 /sillyspec:propose。没有其他路径可以离开 brainstorm。
|
|
12
87
|
</HARD-GATE>
|
|
13
88
|
|
|
14
89
|
## 🚫 禁止事项
|
|
@@ -18,8 +93,11 @@ $ARGUMENTS
|
|
|
18
93
|
- ❌ 安装依赖或执行构建命令
|
|
19
94
|
- ❌ 创建数据库迁移脚本
|
|
20
95
|
- ❌ 直接实现功能而不是先讨论设计
|
|
96
|
+
- ❌ 跳过 brainstorm 直接进入 execute 或 plan
|
|
97
|
+
- ❌ 在 checklist 未完成前开始写设计文档
|
|
98
|
+
- ❌ 编造不存在的表名、字段名、API 端点
|
|
21
99
|
|
|
22
|
-
如果用户在头脑风暴阶段要求写代码,提醒他们:先完成 brainstorm 确认设计方案,再进入 execute
|
|
100
|
+
如果用户在头脑风暴阶段要求写代码,提醒他们:先完成 brainstorm 确认设计方案,再进入 propose → plan → execute 流程写代码。
|
|
23
101
|
|
|
24
102
|
## 反模式:"这个太简单了不需要设计"
|
|
25
103
|
|
|
@@ -52,9 +130,9 @@ cat .sillyspec/config.yaml 2>/dev/null
|
|
|
52
130
|
|
|
53
131
|
**如果是工作区模式:**
|
|
54
132
|
1. 询问本次需求属于哪个子项目:
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
133
|
+
请选择需求所属的子项目:
|
|
134
|
+
1. frontend — 前端 - Vue3 + TypeScript
|
|
135
|
+
2. backend — 后端 - Node.js + PostgreSQL
|
|
58
136
|
2. 加载该子项目的上下文 + 工作区共享规范:
|
|
59
137
|
|
|
60
138
|
```bash
|
|
@@ -200,11 +278,11 @@ ls ~/.sillyspec/templates/ 2>/dev/null
|
|
|
200
278
|
将以上分析结果展示给用户,补充遗漏:
|
|
201
279
|
|
|
202
280
|
> 📐 原型分析完成。提取到 3 个页面、15 个字段、4 个交互流程。
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
281
|
+
|
|
282
|
+
请确认:
|
|
283
|
+
1. 有没有漏掉的字段或功能?
|
|
284
|
+
2. 图中的流程线我理解得对吗?
|
|
285
|
+
3. 有没有业务规则只在口头说、没画在原型里的?
|
|
208
286
|
|
|
209
287
|
**2f. 如果原型页面太多**
|
|
210
288
|
|
|
@@ -394,14 +472,34 @@ git commit -m "docs: master change plan for <变更名>"
|
|
|
394
472
|
- [ ] 标准 2
|
|
395
473
|
```
|
|
396
474
|
|
|
397
|
-
### 7.
|
|
475
|
+
### 7. AI 自审
|
|
476
|
+
|
|
477
|
+
写完设计文档后,**立即进行自审**,不要等用户来挑问题。
|
|
478
|
+
|
|
479
|
+
自审检查项:
|
|
480
|
+
|
|
481
|
+
1. **需求覆盖**:design 是否完整覆盖了用户在 Step 3 中确认的所有需求点?
|
|
482
|
+
2. **约束一致性**:design 中的技术方案是否与 ARCHITECTURE.md、CONVENTIONS.md 一致?
|
|
483
|
+
3. **表名/字段真实性**:是否所有引用的表名和字段都来自真实 schema?新增的是否明确标注?
|
|
484
|
+
4. **范围控制**:是否包含了不必要的功能(违反 YAGNI)?
|
|
485
|
+
5. **验收标准**:验收标准是否具体、可测试?
|
|
486
|
+
6. **与已有变更冲突**:是否与 Step 1.5 中检测到的已有变更冲突?
|
|
487
|
+
|
|
488
|
+
**自审结果处理:**
|
|
489
|
+
- 全部通过 → 进入 Step 8
|
|
490
|
+
- 发现问题 → 修改 design 文档,重新自审,全部通过后再进入 Step 8
|
|
491
|
+
- 不确定的问题 → 在 Step 8 展示给用户时标注「⚠️ 自审存疑」,请用户判断
|
|
492
|
+
|
|
493
|
+
**不要跳过自审。** 这是保证设计质量的关键环节。
|
|
494
|
+
|
|
495
|
+
### 8. 提交 Git
|
|
398
496
|
|
|
399
497
|
```bash
|
|
400
498
|
git add .sillyspec/specs/
|
|
401
499
|
git commit -m "docs: design for <topic>"
|
|
402
500
|
```
|
|
403
501
|
|
|
404
|
-
###
|
|
502
|
+
### 9. 用户确认(⛔ 门禁)
|
|
405
503
|
|
|
406
504
|
**设计保存后,用 CLI 验证状态:**
|
|
407
505
|
|
|
@@ -411,10 +509,15 @@ sillyspec status --json
|
|
|
411
509
|
|
|
412
510
|
CLI 应返回 `phase: "propose"`。
|
|
413
511
|
|
|
414
|
-
展示给用户:
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
512
|
+
**⛔ 必须等待用户明确确认后才能进入下一阶段。** 展示给用户:
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
请确认设计方案:
|
|
516
|
+
1. ✅ 确认,进入 propose
|
|
517
|
+
2. ✏️ 需要修改(请说明要改什么)
|
|
518
|
+
3. ❌ 推翻重来
|
|
519
|
+
|
|
520
|
+
**用户选择 1** → 推荐下一步命令:
|
|
418
521
|
|
|
419
522
|
```bash
|
|
420
523
|
sillyspec next
|
|
@@ -422,7 +525,12 @@ sillyspec next
|
|
|
422
525
|
|
|
423
526
|
将 CLI 返回的命令推荐给用户。**不要自己编建议。**
|
|
424
527
|
|
|
425
|
-
|
|
528
|
+
**用户选择 2** → 修改 design 文档,重新自审,再次进入确认门禁。
|
|
529
|
+
**用户选择 3** → 回到 Step 3 或 Step 4 重新探索。
|
|
530
|
+
|
|
531
|
+
**不允许在用户确认前自行推进到 propose 或任何后续阶段。**
|
|
532
|
+
|
|
533
|
+
### 10. 更新 STATE.md
|
|
426
534
|
|
|
427
535
|
每次 brainstorm 完成后,**必须自动更新** `.sillyspec/STATE.md`。
|
|
428
536
|
|
package/templates/explore.md
CHANGED
package/templates/init.md
CHANGED
package/templates/resume.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## 交互规范
|
|
2
|
+
|
|
3
|
+
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
4
|
+
|
|
5
|
+
不要用编号列表让用户手动输入数字。
|
|
6
|
+
如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
|
|
7
|
+
|
|
1
8
|
你现在是 SillySpec 的恢复管理器。
|
|
2
9
|
|
|
3
10
|
## 流程
|
|
@@ -34,8 +41,8 @@ cat .sillyspec/STATE.md 2>/dev/null
|
|
|
34
41
|
**不需要执行 Git 操作或文件探测。** STATE.md 已经包含所有信息。
|
|
35
42
|
|
|
36
43
|
然后问用户:
|
|
37
|
-
|
|
38
|
-
|
|
44
|
+
1. 直接继续执行下一步
|
|
45
|
+
2. 查看更多细节
|
|
39
46
|
|
|
40
47
|
### 3. 如果没有 STATE.md
|
|
41
48
|
|
package/templates/scan.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## 交互规范
|
|
2
|
+
|
|
3
|
+
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
4
|
+
|
|
5
|
+
不要用编号列表让用户手动输入数字。
|
|
6
|
+
如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
|
|
7
|
+
|
|
1
8
|
|
|
2
9
|
你现在是 SillySpec 的代码库扫描器。
|
|
3
10
|
|
|
@@ -42,10 +49,6 @@ cat .sillyspec/config.yaml 2>/dev/null
|
|
|
42
49
|
如果 config.yaml 存在且包含 `projects` → 工作区模式:
|
|
43
50
|
|
|
44
51
|
询问用户:
|
|
45
|
-
> 检测到工作区模式,请选择扫描范围:
|
|
46
|
-
> 1. 全部子项目(逐个扫描后生成汇总)
|
|
47
|
-
> 2. 指定某个子项目
|
|
48
|
-
> 3. 取消
|
|
49
52
|
|
|
50
53
|
根据选择:
|
|
51
54
|
- 选 1 → 逐个扫描,最后生成 `.sillyspec/workspace/CODEBASE-OVERVIEW.md`
|
|
@@ -68,9 +71,9 @@ wc -l .sillyspec/codebase/*.md 2>/dev/null
|
|
|
68
71
|
|
|
69
72
|
**已有 3 份(STACK + STRUCTURE + PROJECT):**
|
|
70
73
|
> 检测到上次的快速扫描结果。
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
+
1. 升级为完整扫描(补充 4 份文档)
|
|
75
|
+
2. 重新快速扫描(覆盖现有文档)
|
|
76
|
+
3. 跳过,直接开始开发
|
|
74
77
|
|
|
75
78
|
**已有 7 份完整文档:**
|
|
76
79
|
先检查距上次扫描过了多久:
|
|
@@ -80,8 +83,8 @@ git log --oneline --since="上次扫描时间" | wc -l
|
|
|
80
83
|
```
|
|
81
84
|
|
|
82
85
|
> 上次扫描距今 X 天,期间有 Y 个新提交。
|
|
83
|
-
|
|
84
|
-
|
|
86
|
+
1. 刷新(重新扫描全部)
|
|
87
|
+
2. 跳过,直接开始开发
|
|
85
88
|
|
|
86
89
|
**用户选跳过** → 输出"可以开始开发了。建议下一步:`/sillyspec:brainstorm '你的需求'`"然后结束。
|
|
87
90
|
|
|
@@ -89,13 +92,13 @@ git log --oneline --since="上次扫描时间" | wc -l
|
|
|
89
92
|
|
|
90
93
|
请选择扫描模式:
|
|
91
94
|
|
|
92
|
-
|
|
95
|
+
1. 快速扫描 ⚡
|
|
93
96
|
> 读取配置文件和目录结构,约 30 秒
|
|
94
97
|
> 生成 3 份文档:技术栈 + 目录结构 + 项目概览
|
|
95
|
-
|
|
98
|
+
2. 深度扫描 🔍
|
|
96
99
|
> 读取全部源代码并分析,约 2-3 分钟
|
|
97
100
|
> 生成 7 份文档:技术栈 + 架构 + 目录结构 + 编码约定 + 集成 + 测试 + 技术债务
|
|
98
|
-
|
|
101
|
+
3. 取消
|
|
99
102
|
|
|
100
103
|
根据选择进入对应的扫描流程。
|
|
101
104
|
|
|
@@ -131,8 +134,8 @@ git log --oneline --since="上次扫描时间" | wc -l
|
|
|
131
134
|
把以上选择汇总,让用户最后确认:
|
|
132
135
|
|
|
133
136
|
开始扫描?
|
|
134
|
-
|
|
135
|
-
|
|
137
|
+
1. 确认,开始扫描
|
|
138
|
+
2. 修改选项
|
|
136
139
|
|
|
137
140
|
用户确认 → 执行扫描。用户想改 → 回到对应步骤。
|
|
138
141
|
|
package/templates/workspace.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## 交互规范
|
|
2
|
+
|
|
3
|
+
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
4
|
+
|
|
5
|
+
不要用编号列表让用户手动输入数字。
|
|
6
|
+
如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
|
|
7
|
+
|
|
1
8
|
---
|
|
2
9
|
|
|
3
10
|
你现在是 SillySpec 的工作区管理器。
|
|
@@ -14,8 +21,8 @@ cat .sillyspec/config.yaml 2>/dev/null
|
|
|
14
21
|
```
|
|
15
22
|
|
|
16
23
|
如果不存在 → 这是一个尚未配置工作区的项目。询问用户:
|
|
17
|
-
|
|
18
|
-
|
|
24
|
+
1. 初始化工作区
|
|
25
|
+
2. 跳过
|
|
19
26
|
|
|
20
27
|
### Step 2: 解析指令
|
|
21
28
|
|