sillyspec 2.4.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 +63 -0
- package/.claude/commands/sillyspec/brainstorm.md +463 -0
- package/.claude/commands/sillyspec/continue.md +44 -0
- package/.claude/commands/sillyspec/execute.md +255 -0
- package/.claude/commands/sillyspec/explore.md +88 -0
- package/.claude/commands/sillyspec/export.md +53 -0
- package/.claude/commands/sillyspec/init.md +166 -0
- package/.claude/commands/sillyspec/plan.md +238 -0
- package/.claude/commands/sillyspec/propose.md +234 -0
- package/.claude/commands/sillyspec/quick.md +62 -0
- package/.claude/commands/sillyspec/resume.md +100 -0
- package/.claude/commands/sillyspec/scan.md +672 -0
- package/.claude/commands/sillyspec/status.md +122 -0
- package/.claude/commands/sillyspec/verify.md +141 -0
- package/.claude/commands/sillyspec/workspace.md +122 -0
- package/README.md +158 -0
- package/SKILL.md +46 -0
- package/adapters/adapters.sh +172 -0
- package/bin/sillyspec.js +2 -0
- package/commands/sillyspec/archive.md +62 -0
- package/commands/sillyspec/brainstorm.md +462 -0
- package/commands/sillyspec/continue.md +41 -0
- package/commands/sillyspec/execute.md +254 -0
- package/commands/sillyspec/explore.md +85 -0
- package/commands/sillyspec/export.md +51 -0
- package/commands/sillyspec/init.md +163 -0
- package/commands/sillyspec/plan.md +237 -0
- package/commands/sillyspec/propose.md +233 -0
- package/commands/sillyspec/quick.md +59 -0
- package/commands/sillyspec/resume.md +99 -0
- package/commands/sillyspec/scan.md +671 -0
- package/commands/sillyspec/status.md +119 -0
- package/commands/sillyspec/verify.md +140 -0
- package/commands/sillyspec/workspace.md +120 -0
- package/package.json +14 -0
- package/scripts/init.sh +2 -0
- package/scripts/install.ps1 +316 -0
- package/scripts/scan-preprocess.sh +378 -0
- package/scripts/validate-all.sh +50 -0
- package/scripts/validate-plan.sh +44 -0
- package/scripts/validate-proposal.sh +87 -0
- package/scripts/validate-scan.sh +90 -0
- package/src/index.js +560 -0
- package/src/init.js +269 -0
- package/templates/archive.md +58 -0
- package/templates/brainstorm.md +458 -0
- package/templates/continue.md +39 -0
- package/templates/execute.md +250 -0
- package/templates/explore.md +83 -0
- package/templates/export.md +48 -0
- package/templates/init.md +161 -0
- package/templates/plan.md +233 -0
- package/templates/propose.md +229 -0
- package/templates/quick.md +57 -0
- package/templates/resume.md +95 -0
- package/templates/scan.md +667 -0
- package/templates/status.md +117 -0
- package/templates/verify.md +136 -0
- package/templates/workspace.md +117 -0
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 编写实现计划 — 2-5 分钟粒度,精确到文件路径和代码
|
|
3
|
+
argument-hint: "[计划名]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
你现在是 SillySpec 的计划编写器。
|
|
7
|
+
|
|
8
|
+
## 流程
|
|
9
|
+
|
|
10
|
+
### 0. 检查状态(必须先执行)
|
|
11
|
+
|
|
12
|
+
**在开始任何工作之前,先调用 SillySpec CLI 检查当前状态:**
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
sillyspec status --json
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**根据 CLI 返回的 phase 决定是否允许执行 plan:**
|
|
19
|
+
- `phase: "plan"` → ✅ 可以继续
|
|
20
|
+
- 其他 phase → ❌ 不允许跳步,提示用户运行 `sillyspec next` 获取正确步骤
|
|
21
|
+
|
|
22
|
+
**不要跳过状态检查。不要自己推断阶段。以 CLI 为准。**
|
|
23
|
+
|
|
24
|
+
### 1. 加载所有上下文
|
|
25
|
+
|
|
26
|
+
首先检查工作区配置:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
cat .sillyspec/config.yaml 2>/dev/null
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**如果是工作区模式:**
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# 工作区概览(了解所有子项目)
|
|
36
|
+
cat .sillyspec/workspace/CODEBASE-OVERVIEW.md 2>/dev/null
|
|
37
|
+
|
|
38
|
+
# 共享规范
|
|
39
|
+
cat .sillyspec/shared/*.md 2>/dev/null
|
|
40
|
+
|
|
41
|
+
# 规范(最近非归档变更)
|
|
42
|
+
LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
|
|
43
|
+
cat "$LATEST/proposal.md"
|
|
44
|
+
cat "$LATEST/design.md"
|
|
45
|
+
cat "$LATEST/tasks.md"
|
|
46
|
+
cat "$LATEST/specs/requirements.md" 2>/dev/null
|
|
47
|
+
|
|
48
|
+
# 各子项目的代码库上下文
|
|
49
|
+
# 从 config.yaml 读取项目列表,对每个子项目:
|
|
50
|
+
cat <子项目路径>/.sillyspec/codebase/CONVENTIONS.md 2>/dev/null
|
|
51
|
+
cat <子项目路径>/.sillyspec/codebase/ARCHITECTURE.md 2>/dev/null
|
|
52
|
+
cat <子项目路径>/.sillyspec/codebase/STACK.md 2>/dev/null
|
|
53
|
+
|
|
54
|
+
# 项目需求
|
|
55
|
+
cat <子项目路径>/.sillyspec/REQUIREMENTS.md 2>/dev/null
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**如果不是工作区模式:**
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# 规范(最近非归档变更)
|
|
62
|
+
LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
|
|
63
|
+
cat "$LATEST/proposal.md"
|
|
64
|
+
cat "$LATEST/design.md"
|
|
65
|
+
cat "$LATEST/tasks.md"
|
|
66
|
+
cat "$LATEST/specs/requirements.md" 2>/dev/null
|
|
67
|
+
|
|
68
|
+
# 代码库上下文(棕地)
|
|
69
|
+
cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
|
|
70
|
+
cat .sillyspec/codebase/ARCHITECTURE.md 2>/dev/null
|
|
71
|
+
cat .sillyspec/codebase/STACK.md 2>/dev/null
|
|
72
|
+
|
|
73
|
+
# 项目需求
|
|
74
|
+
cat .sillyspec/REQUIREMENTS.md 2>/dev/null
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 1.5 锚定确认(必须完成)
|
|
78
|
+
|
|
79
|
+
读取相关规范文件。对于存在的文件,确认理解;对于不存在的文件,标注跳过:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
已读取并理解:
|
|
83
|
+
- [x] proposal.md — 变更动机和范围
|
|
84
|
+
- [x] design.md — 技术方案和文件变更(如果存在)
|
|
85
|
+
- [x] tasks.md — 实现清单
|
|
86
|
+
- [x] specs/requirements.md — 需求和场景(如果存在)
|
|
87
|
+
|
|
88
|
+
所有可用上下文已加载,开始执行。
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**文件不存在不是错误**。只确认实际存在的文件。不准跳过此步骤。
|
|
92
|
+
|
|
93
|
+
### 2. 逐任务展开
|
|
94
|
+
|
|
95
|
+
把 tasks.md 中每个 checkbox 展开为详细步骤。
|
|
96
|
+
|
|
97
|
+
**工作区模式下,每个 Task 必须标注所属项目:**
|
|
98
|
+
|
|
99
|
+
```markdown
|
|
100
|
+
### Task 1: [frontend] 数据库 User 模型
|
|
101
|
+
|
|
102
|
+
**项目:** frontend
|
|
103
|
+
**文件:**
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
如果不是工作区模式,保持原有 Task 格式不变。
|
|
107
|
+
|
|
108
|
+
**非工作区模式示例:**
|
|
109
|
+
|
|
110
|
+
```markdown
|
|
111
|
+
### Task 1: 数据库 User 模型
|
|
112
|
+
|
|
113
|
+
**文件:**
|
|
114
|
+
- 修改:`prisma/schema.prisma`
|
|
115
|
+
- 新建:`prisma/migrations/xxx/migration.sql`
|
|
116
|
+
- 测试:`tests/models/user.test.ts`
|
|
117
|
+
|
|
118
|
+
**步骤:**
|
|
119
|
+
- [ ] 写失败测试:
|
|
120
|
+
```typescript
|
|
121
|
+
// tests/models/user.test.ts
|
|
122
|
+
import { prisma } from '@/lib/db'
|
|
123
|
+
|
|
124
|
+
describe('User model', () => {
|
|
125
|
+
it('should create user with hashed password', async () => {
|
|
126
|
+
const user = await prisma.user.create({
|
|
127
|
+
data: { email: 'test@test.com', passwordHash: 'hashed' }
|
|
128
|
+
})
|
|
129
|
+
expect(user.id).toBeDefined()
|
|
130
|
+
expect(user.passwordHash).toBe('hashed')
|
|
131
|
+
})
|
|
132
|
+
})
|
|
133
|
+
```
|
|
134
|
+
运行:`pnpm test tests/models/user.test.ts` → 预期 FAIL(模型不存在)
|
|
135
|
+
|
|
136
|
+
- [ ] 写最少代码让测试通过:
|
|
137
|
+
```prisma
|
|
138
|
+
// prisma/schema.prisma
|
|
139
|
+
model User {
|
|
140
|
+
id String @id @default(cuid())
|
|
141
|
+
email String @unique
|
|
142
|
+
passwordHash String
|
|
143
|
+
createdAt DateTime @default(now())
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
运行:`npx prisma migrate dev --name add-user-model`
|
|
147
|
+
运行:`pnpm test tests/models/user.test.ts` → 预期 PASS
|
|
148
|
+
|
|
149
|
+
- [ ] 运行全量测试 → 预期 ALL GREEN
|
|
150
|
+
- [ ] git commit -m "feat: add User model"
|
|
151
|
+
|
|
152
|
+
**验证命令:**
|
|
153
|
+
`pnpm test tests/models/user.test.ts -v`
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### 3. 标注执行顺序
|
|
157
|
+
|
|
158
|
+
```markdown
|
|
159
|
+
## 执行顺序
|
|
160
|
+
|
|
161
|
+
**Wave 1**(并行,无依赖):
|
|
162
|
+
- Task 1: 数据库模型
|
|
163
|
+
- Task 2: 邮件服务(独立模块)
|
|
164
|
+
|
|
165
|
+
**Wave 2**(依赖 Wave 1):
|
|
166
|
+
- Task 3: 注册 API(需要 User 模型)
|
|
167
|
+
|
|
168
|
+
**Wave 3**(依赖 Wave 2):
|
|
169
|
+
- Task 4: 验证流程(需要注册完成)
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### 4. 计划原则
|
|
173
|
+
|
|
174
|
+
**假设执行者是:** 熟练开发者,但对你项目零上下文、品味存疑、讨厌写测试。
|
|
175
|
+
|
|
176
|
+
- 每个步骤 2-5 分钟可完成
|
|
177
|
+
- 包含完整可运行的代码(不要写"添加验证逻辑")
|
|
178
|
+
- 包含精确文件路径(不要写"在适当位置")
|
|
179
|
+
- 包含运行命令和预期输出
|
|
180
|
+
- 频繁 commit,每个任务独立提交
|
|
181
|
+
- 如果发现设计有矛盾 → 停下来告诉用户
|
|
182
|
+
|
|
183
|
+
### 5. 保存
|
|
184
|
+
|
|
185
|
+
保存到 `.sillyspec/plans/YYYY-MM-DD-<change-name>.md`
|
|
186
|
+
|
|
187
|
+
### 6. 自检门控(Hard Gate)
|
|
188
|
+
|
|
189
|
+
- [ ] 每个 task 是否包含具体文件路径?
|
|
190
|
+
- [ ] 每个 task 是否包含验证命令和预期输出?
|
|
191
|
+
- [ ] 是否标注了 Wave 和执行顺序?
|
|
192
|
+
- [ ] plan 是否与 design.md 的文件变更清单一致?
|
|
193
|
+
|
|
194
|
+
**任何一项不通过 → 修正后重新检查。**
|
|
195
|
+
|
|
196
|
+
### 脚本校验(硬验证)
|
|
197
|
+
|
|
198
|
+
Hard Gate 自检通过后,运行校验脚本:
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
bash scripts/validate-plan.sh .sillyspec/changes/<当前变更目录>
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
- 脚本返回 0 → 自检通过,继续
|
|
205
|
+
- 脚本返回非 0 → 根据提示修正后重新运行
|
|
206
|
+
|
|
207
|
+
### 8. 最后说:
|
|
208
|
+
|
|
209
|
+
**用 CLI 验证并获取下一步:**
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
sillyspec status --json
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
展示给用户:
|
|
216
|
+
> 计划已保存到 `.sillyspec/plans/xxx.md`。
|
|
217
|
+
> 下一步:
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
sillyspec next
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
将 CLI 返回的命令推荐给用户。**不要自己编建议。**
|
|
224
|
+
|
|
225
|
+
### 9. 更新 STATE.md
|
|
226
|
+
|
|
227
|
+
plan 完成后,**必须自动更新** `.sillyspec/STATE.md`:
|
|
228
|
+
|
|
229
|
+
- 当前阶段改为 `plan ✅`
|
|
230
|
+
- 下一步改为 `/sillyspec:execute`
|
|
231
|
+
- 历史记录追加时间 + plan 完成
|
|
232
|
+
- 追加 Wave 数量信息
|
|
233
|
+
|
|
234
|
+
## 绝对规则
|
|
235
|
+
- 不写实现代码(只写计划中的代码示例)
|
|
236
|
+
- 每个步骤必须有验证命令和预期输出
|
|
237
|
+
- 不要遗漏边界情况
|
|
238
|
+
- **计划中引用的表名、字段名必须来自 ARCHITECTURE.md 数据模型或 design.md 中声明的新增表。禁止编造。**
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 生成结构化规范 — proposal + design + tasks
|
|
3
|
+
argument-hint: "[变更名]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
你现在是 SillySpec 的规范生成器。
|
|
7
|
+
|
|
8
|
+
## 变更名称
|
|
9
|
+
$ARGUMENTS
|
|
10
|
+
|
|
11
|
+
## 流程
|
|
12
|
+
|
|
13
|
+
### 0. 检查状态(必须先执行)
|
|
14
|
+
|
|
15
|
+
**在开始任何工作之前,先调用 SillySpec CLI 检查当前状态:**
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
sillyspec status --json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**根据 CLI 返回的 phase 决定是否允许执行 propose:**
|
|
22
|
+
- `phase: "propose"` → ✅ 可以继续
|
|
23
|
+
- 其他 phase → ❌ 不允许跳步,提示用户运行 `sillyspec next` 获取正确步骤
|
|
24
|
+
|
|
25
|
+
**不要跳过状态检查。不要自己推断阶段。以 CLI 为准。**
|
|
26
|
+
|
|
27
|
+
### 1. 加载上下文
|
|
28
|
+
|
|
29
|
+
读取相关文档:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# 检测是否是子阶段变更
|
|
33
|
+
if [[ "$ARGUMENTS" == */stage-* ]]; then
|
|
34
|
+
MASTER_NAME="${ARGUMENTS%%/*}"
|
|
35
|
+
STAGE_NAME="${ARGUMENTS#*/}"
|
|
36
|
+
MASTER_DIR=".sillyspec/changes/$MASTER_NAME"
|
|
37
|
+
CHANGE_DIR="$MASTER_DIR/stages/$STAGE_NAME"
|
|
38
|
+
else
|
|
39
|
+
CHANGE_DIR=".sillyspec/changes/$ARGUMENTS"
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
# 如果存在 MASTER.md,读取主变更上下文
|
|
43
|
+
cat .sillyspec/changes/*/MASTER.md 2>/dev/null
|
|
44
|
+
|
|
45
|
+
# 最新设计文档
|
|
46
|
+
ls -t .sillyspec/specs/*.md | head -1
|
|
47
|
+
# 需求
|
|
48
|
+
cat .sillyspec/REQUIREMENTS.md 2>/dev/null
|
|
49
|
+
# 代码库约定(棕地)
|
|
50
|
+
cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
|
|
51
|
+
cat .sillyspec/codebase/ARCHITECTURE.md 2>/dev/null
|
|
52
|
+
# 已有变更(排除子阶段)
|
|
53
|
+
ls .sillyspec/changes/ | grep -v archive
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
如果是子阶段变更(如 `reward-punishment/stage-1`):
|
|
57
|
+
- 读取 MASTER.md 获取整体方向和技术决策
|
|
58
|
+
- 读取 MASTER.md 中"经验记录"章节(前面阶段的踩坑经验)
|
|
59
|
+
- 读取前面已完成阶段的设计文件(保持一致性)
|
|
60
|
+
- 读取该阶段对应的原型分析结果
|
|
61
|
+
- 规范文件保存到 `changes/<变更名>/stages/<stage-N>/`
|
|
62
|
+
|
|
63
|
+
如果是普通变更,照原流程执行。
|
|
64
|
+
|
|
65
|
+
如果没有设计文档 → 提示先运行 `/sillyspec:brainstorm`
|
|
66
|
+
|
|
67
|
+
### 1.5 锚定确认(必须完成)
|
|
68
|
+
|
|
69
|
+
读取相关规范文件。对于存在的文件,确认理解;对于不存在的文件,标注跳过:
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
已读取并理解:
|
|
73
|
+
- [x] proposal.md — 变更动机和范围(如果存在)
|
|
74
|
+
- [ ] design.md — 不存在(正常,将在本阶段生成)
|
|
75
|
+
- [ ] specs/requirements.md — 不存在(正常,将在本阶段生成)
|
|
76
|
+
|
|
77
|
+
所有可用上下文已加载,开始执行。
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**文件不存在不是错误**。只确认实际存在的文件。不准跳过此步骤。
|
|
81
|
+
|
|
82
|
+
### 2. 探索现有代码
|
|
83
|
+
|
|
84
|
+
理解相关模块的当前实现,识别影响范围。
|
|
85
|
+
|
|
86
|
+
### 3. 生成规范文件
|
|
87
|
+
|
|
88
|
+
创建 `.sillyspec/changes/$ARGUMENTS/`,生成以下文件:
|
|
89
|
+
|
|
90
|
+
**`proposal.md`** — 变更提案:
|
|
91
|
+
```markdown
|
|
92
|
+
# [change-name]
|
|
93
|
+
|
|
94
|
+
## 动机
|
|
95
|
+
为什么做这件事
|
|
96
|
+
|
|
97
|
+
## 变更范围
|
|
98
|
+
受影响的核心区域
|
|
99
|
+
|
|
100
|
+
## 不在范围内
|
|
101
|
+
明确排除的内容
|
|
102
|
+
|
|
103
|
+
## 成功标准
|
|
104
|
+
- [ ] 可量化的标准 1
|
|
105
|
+
- [ ] 可量化的标准 2
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**`specs/requirements.md`** — 需求清单:
|
|
109
|
+
```markdown
|
|
110
|
+
# 需求
|
|
111
|
+
|
|
112
|
+
## 功能需求
|
|
113
|
+
- [ ] REQ-001: 用户可以用邮箱注册
|
|
114
|
+
- [ ] REQ-002: 注册后自动发送验证邮件
|
|
115
|
+
|
|
116
|
+
## 用户场景
|
|
117
|
+
### 场景 1: 新用户注册
|
|
118
|
+
Given: 用户在注册页面
|
|
119
|
+
When: 填写邮箱和密码并提交
|
|
120
|
+
Then: 收到验证邮件,账户处于待验证状态
|
|
121
|
+
|
|
122
|
+
### 场景 2: 邮箱验证
|
|
123
|
+
Given: 用户收到验证邮件
|
|
124
|
+
When: 点击验证链接
|
|
125
|
+
Then: 账户激活,跳转到登录页
|
|
126
|
+
|
|
127
|
+
## 非功能需求
|
|
128
|
+
- 注册接口响应 < 500ms
|
|
129
|
+
- 密码使用 bcrypt 哈希
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**`design.md`** — 技术方案:
|
|
133
|
+
```markdown
|
|
134
|
+
# 技术设计
|
|
135
|
+
|
|
136
|
+
## 架构决策
|
|
137
|
+
- 使用 JWT 存储 session(而非 server-side session)
|
|
138
|
+
- 理由:支持未来微服务拆分
|
|
139
|
+
|
|
140
|
+
## 文件变更清单
|
|
141
|
+
| 操作 | 文件 | 说明 |
|
|
142
|
+
|---|---|---|
|
|
143
|
+
| 新建 | `src/lib/auth.ts` | 认证核心逻辑 |
|
|
144
|
+
| 新建 | `src/app/api/auth/register/route.ts` | 注册接口 |
|
|
145
|
+
| 修改 | `prisma/schema.prisma` | 添加 User 模型 |
|
|
146
|
+
|
|
147
|
+
## 数据模型
|
|
148
|
+
[Prisma schema 或数据库表设计]
|
|
149
|
+
|
|
150
|
+
## API 设计
|
|
151
|
+
POST /api/auth/register
|
|
152
|
+
Request: { email: string, password: string }
|
|
153
|
+
Response: { userId: string, message: "verification email sent" }
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**`tasks.md`** — 实现清单:
|
|
157
|
+
```markdown
|
|
158
|
+
# 实现清单
|
|
159
|
+
|
|
160
|
+
## 准备
|
|
161
|
+
- [ ] Task 0: 配置开发环境(依赖、环境变量)
|
|
162
|
+
|
|
163
|
+
## 实现
|
|
164
|
+
- [ ] Task 1: 数据库模型(User 表)
|
|
165
|
+
- [ ] Task 2: 注册 API
|
|
166
|
+
- [ ] Task 3: 邮件发送服务
|
|
167
|
+
- [ ] Task 4: 邮箱验证流程
|
|
168
|
+
|
|
169
|
+
## 收尾
|
|
170
|
+
- [ ] Task 5: 错误处理和边界情况
|
|
171
|
+
- [ ] Task 6: 集成测试
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### 4. 展示关键文件
|
|
175
|
+
|
|
176
|
+
展示 proposal.md 和 design.md 给用户审阅。tasks.md 只展示任务列表(细节在 plan 阶段展开)。
|
|
177
|
+
|
|
178
|
+
### 5. 自检门控(Hard Gate)
|
|
179
|
+
|
|
180
|
+
在展示文件给用户之前,**必须自检**:
|
|
181
|
+
|
|
182
|
+
- [ ] proposal.md 是否包含"动机"、"变更范围"、"不在范围内"、"成功标准"四个章节?
|
|
183
|
+
- [ ] design.md 是否包含"文件变更清单"表格?
|
|
184
|
+
- [ ] specs/requirements.md 是否包含 Given/When/Then 格式的用户场景?
|
|
185
|
+
- [ ] tasks.md 是否每个 task 都有文件路径?
|
|
186
|
+
|
|
187
|
+
**任何一项不通过 → 修正后重新检查,不准跳过。**
|
|
188
|
+
|
|
189
|
+
### 脚本校验(硬验证)
|
|
190
|
+
|
|
191
|
+
Hard Gate 自检通过后,运行校验脚本:
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
bash scripts/validate-proposal.sh .sillyspec/changes/$ARGUMENTS
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
- 脚本返回 0 → 自检通过,继续展示文件
|
|
198
|
+
- 脚本返回非 0 → 根据错误提示修正文件,重新运行脚本
|
|
199
|
+
|
|
200
|
+
### 7. 最后说:
|
|
201
|
+
|
|
202
|
+
**用 CLI 验证并获取下一步:**
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
sillyspec status --json
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
展示给用户:
|
|
209
|
+
> 规范已生成到 `.sillyspec/changes/$ARGUMENTS/`。
|
|
210
|
+
>
|
|
211
|
+
> 审阅 `proposal.md`(为什么做)和 `design.md`(怎么做)。
|
|
212
|
+
> 下一步:
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
sillyspec next
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
将 CLI 返回的命令推荐给用户。**不要自己编建议。**
|
|
219
|
+
|
|
220
|
+
### 8. 更新 STATE.md
|
|
221
|
+
|
|
222
|
+
propose 完成后,**必须自动更新** `.sillyspec/STATE.md`:
|
|
223
|
+
|
|
224
|
+
- 当前阶段改为 `propose ✅`
|
|
225
|
+
- 下一步改为 `/sillyspec:plan`
|
|
226
|
+
- 历史记录追加时间 + propose 完成
|
|
227
|
+
- 如果是子阶段(stages/ 下),更新阶段进度
|
|
228
|
+
|
|
229
|
+
## 绝对规则
|
|
230
|
+
- 不写实现代码
|
|
231
|
+
- tasks.md 只列任务名,不写具体步骤
|
|
232
|
+
- 必须包含可量化的成功标准
|
|
233
|
+
- 用户场景用 Given/When/Then 格式
|
|
234
|
+
- **禁止编造不存在的表名、字段名、API 端点。** design.md 中引用的数据库对象必须来自 ARCHITECTURE.md 的数据模型章节,或明确标注为"新增"
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 快速任务 — 跳过完整流程,直接做
|
|
3
|
+
argument-hint: "[任务描述]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
你现在是 SillySpec 快速模式。
|
|
9
|
+
|
|
10
|
+
## 任务
|
|
11
|
+
$ARGUMENTS
|
|
12
|
+
|
|
13
|
+
## 适用场景
|
|
14
|
+
- bug 修复
|
|
15
|
+
- 改颜色、改文案、调样式
|
|
16
|
+
- 加一行日志
|
|
17
|
+
- 不需要规范管理的零碎任务
|
|
18
|
+
|
|
19
|
+
## 流程
|
|
20
|
+
|
|
21
|
+
### 1. 理解任务
|
|
22
|
+
如果描述模糊 → 问一个问题确认。
|
|
23
|
+
|
|
24
|
+
### 2. 加载最小上下文
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
|
|
28
|
+
cat .sillyspec/codebase/ARCHITECTURE.md 2>/dev/null
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 3. TDD 执行
|
|
32
|
+
|
|
33
|
+
- 写失败测试 → 确认失败
|
|
34
|
+
- 写最少代码 → 确认通过
|
|
35
|
+
- 重构(如需要)
|
|
36
|
+
|
|
37
|
+
### 4. 运行相关测试
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
pnpm test 2>/dev/null || npm test 2>/dev/null || pytest 2>/dev/null
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
确保没有引入回归。
|
|
44
|
+
|
|
45
|
+
### 5. Git commit
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
git add -A
|
|
49
|
+
git commit -m "fix: $ARGUMENTS"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 最后说:
|
|
53
|
+
|
|
54
|
+
> ✅ 完成:$ARGUMENTS
|
|
55
|
+
> 修改文件:xxx, yyy
|
|
56
|
+
> 新增测试:zzz
|
|
57
|
+
> 提交:abc1234
|
|
58
|
+
|
|
59
|
+
## 绝对规则
|
|
60
|
+
- 仍然要写测试(这是底线)
|
|
61
|
+
- 如果任务比预期复杂 → 停下来建议用完整流程
|
|
62
|
+
- 不修改无关文件
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 恢复工作 — 从中断处继续
|
|
3
|
+
argument-hint: ""
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
你现在是 SillySpec 的恢复管理器。
|
|
7
|
+
|
|
8
|
+
## 流程
|
|
9
|
+
|
|
10
|
+
### 1. 读取 STATE.md
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
cat .sillyspec/STATE.md 2>/dev/null
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### 2. 如果有 STATE.md
|
|
17
|
+
|
|
18
|
+
直接从 STATE.md 中提取并展示:
|
|
19
|
+
|
|
20
|
+
> 🔄 工作状态恢复
|
|
21
|
+
>
|
|
22
|
+
> **当前变更**:<名称>
|
|
23
|
+
> **当前阶段**:<阶段名> <状态>
|
|
24
|
+
> **下一步**:<命令>
|
|
25
|
+
>
|
|
26
|
+
> **阶段进度**(大模块):
|
|
27
|
+
> | 阶段 | 状态 |
|
|
28
|
+
> |---|---|
|
|
29
|
+
> | stage-1 列表页 | ✅ |
|
|
30
|
+
> | stage-2 表单页 | 🔄 execute (2/6) |
|
|
31
|
+
> | stage-3 详情页 | ⬜ |
|
|
32
|
+
>
|
|
33
|
+
> **关键决策**:
|
|
34
|
+
> - xxx
|
|
35
|
+
>
|
|
36
|
+
> **下一步命令**:
|
|
37
|
+
> `/sillyspec:execute reward-punishment/stage-2`
|
|
38
|
+
|
|
39
|
+
**不需要执行 Git 操作或文件探测。** STATE.md 已经包含所有信息。
|
|
40
|
+
|
|
41
|
+
然后问用户:直接继续,还是需要了解更多细节?
|
|
42
|
+
|
|
43
|
+
### 3. 如果没有 STATE.md
|
|
44
|
+
|
|
45
|
+
**不要直接说"没有记录"。** 自动探测项目状态:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# 检查主变更
|
|
49
|
+
ls .sillyspec/changes/*/MASTER.md 2>/dev/null
|
|
50
|
+
|
|
51
|
+
# 检查活跃变更
|
|
52
|
+
ls .d .sillyspec/changes/*/ | grep -v archive | grep -v stages | tail -1 2>/dev/null
|
|
53
|
+
|
|
54
|
+
# 检查子阶段
|
|
55
|
+
ls .sillyspec/changes/*/stages/*/proposal.md 2>/dev/null
|
|
56
|
+
|
|
57
|
+
# 检查代码库文档
|
|
58
|
+
ls .sillyspec/codebase/*.md 2>/dev/null
|
|
59
|
+
|
|
60
|
+
# 检查计划文件
|
|
61
|
+
ls -t .sillyspec/plans/*.md | head -1 2>/dev/null
|
|
62
|
+
|
|
63
|
+
# 检查需求/路线图
|
|
64
|
+
cat .sillyspec/REQUIREMENTS.md 2>/dev/null
|
|
65
|
+
cat .sillyspec/ROADMAP.md 2>/dev/null
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
#### 如果检测到 MASTER.md(大模块)
|
|
69
|
+
|
|
70
|
+
检查各阶段状态并输出阶段进度表(同步骤 2 格式)。
|
|
71
|
+
|
|
72
|
+
同时**创建 STATE.md**,将探测到的信息写入,后续命令执行时会自动更新。
|
|
73
|
+
|
|
74
|
+
#### 如果是普通变更(无 MASTER.md)
|
|
75
|
+
|
|
76
|
+
根据探测结果推断:
|
|
77
|
+
|
|
78
|
+
| 探测到的文件 | 推断阶段 | 建议操作 |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| 无任何 .sillyspec/ 内容 | 未开始 | `/sillyspec:init` 或 `/sillyspec:scan` |
|
|
81
|
+
| 有 SCAN-RAW.md 但缺失文档 | 扫描中断 | `/sillyspec:scan --deep`(断点续扫) |
|
|
82
|
+
| 有 codebase/ 但文档不全(快扫 3 份缺失) | 快扫中断 | `/sillyspec:scan`(补全缺失文档) |
|
|
83
|
+
| 有 codebase/ 7 份齐全但无 changes/ | 已扫描,未开始需求 | `/sillyspec:brainstorm "想法"` |
|
|
84
|
+
| 有 REQUIREMENTS.md 但无 changes/ | 绿地项目,已有需求 | `/sillyspec:propose 变更名` |
|
|
85
|
+
| changes/ 下有 proposal,无 tasks | 已有规范,待计划 | `/sillyspec:plan` |
|
|
86
|
+
| changes/ 下有 tasks,有未完成 checkbox | 执行中 | `/sillyspec:execute` |
|
|
87
|
+
| tasks.md 全部完成 | 待验证 | `/sillyspec:verify` |
|
|
88
|
+
|
|
89
|
+
**扫描中断检测逻辑:**
|
|
90
|
+
- 有 `SCAN-RAW.md` → 说明深度扫描预处理已完成,检查 7 份文档缺哪些
|
|
91
|
+
- 有部分 codebase 文档(如只有 STACK 和 STRUCTURE)→ 说明快扫或深扫中断
|
|
92
|
+
- 缺失的文档列表直接展示给用户,告知 `/sillyspec:scan` 会自动跳过已存在的文档
|
|
93
|
+
|
|
94
|
+
**同时创建 STATE.md** 记录推断的状态。
|
|
95
|
+
|
|
96
|
+
### 4. 关键原则
|
|
97
|
+
|
|
98
|
+
- **不需要 HANDOFF.json**。STATE.md 是唯一的恢复数据源。
|
|
99
|
+
- **STATE.md 不需要 Git 提交**。它是工作状态文件,可以加入 `.gitignore`。
|
|
100
|
+
- **每次命令执行完自动更新 STATE.md**,不需要用户手动保存。
|