sillyspec 3.7.14 → 3.7.16

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.
Files changed (85) hide show
  1. package/.claude/skills/sillyspec-archive/SKILL.md +77 -0
  2. package/.claude/skills/sillyspec-brainstorm/SKILL.md +591 -0
  3. package/.claude/skills/sillyspec-continue/SKILL.md +44 -0
  4. package/.claude/skills/sillyspec-execute/SKILL.md +233 -0
  5. package/.claude/skills/sillyspec-explore/SKILL.md +96 -0
  6. package/.claude/skills/sillyspec-export/SKILL.md +53 -0
  7. package/.claude/skills/sillyspec-init/SKILL.md +171 -0
  8. package/.claude/skills/sillyspec-plan/SKILL.md +263 -0
  9. package/.claude/skills/sillyspec-propose/SKILL.md +248 -0
  10. package/.claude/skills/sillyspec-quick/SKILL.md +102 -0
  11. package/.claude/skills/sillyspec-resume/SKILL.md +111 -0
  12. package/{templates/scan.md → .claude/skills/sillyspec-scan/SKILL.md} +22 -60
  13. package/.claude/skills/sillyspec-state/SKILL.md +54 -0
  14. package/.claude/skills/sillyspec-status/SKILL.md +131 -0
  15. package/.claude/skills/sillyspec-verify/SKILL.md +146 -0
  16. package/.claude/skills/sillyspec-workspace/SKILL.md +149 -0
  17. package/.sillyspec/changes/run-command-design/design.md +1230 -0
  18. package/.sillyspec/docs/sillyspec/scan/.gitkeep +0 -0
  19. package/.sillyspec/knowledge/INDEX.md +8 -0
  20. package/.sillyspec/knowledge/uncategorized.md +3 -0
  21. package/.sillyspec/projects/sillyspec.yaml +3 -0
  22. package/package.json +1 -1
  23. package/packages/dashboard/dist/assets/index-Bx0cgoK_.js +7446 -0
  24. package/packages/dashboard/dist/assets/index-DbkUSsNO.css +1 -0
  25. package/packages/dashboard/dist/index.html +2 -2
  26. package/packages/dashboard/package-lock.json +220 -0
  27. package/packages/dashboard/package.json +8 -5
  28. package/packages/dashboard/server/index.js +91 -3
  29. package/packages/dashboard/server/parser.js +252 -28
  30. package/packages/dashboard/src/App.vue +54 -8
  31. package/packages/dashboard/src/components/ActionBar.vue +23 -39
  32. package/packages/dashboard/src/components/CommandPalette.vue +40 -65
  33. package/packages/dashboard/src/components/DetailPanel.vue +68 -53
  34. package/packages/dashboard/src/components/DocPreview.vue +137 -20
  35. package/packages/dashboard/src/components/DocTree.vue +48 -26
  36. package/packages/dashboard/src/components/LogStream.vue +12 -32
  37. package/packages/dashboard/src/components/PipelineStage.vue +8 -8
  38. package/packages/dashboard/src/components/PipelineView.vue +35 -43
  39. package/packages/dashboard/src/components/ProjectList.vue +51 -77
  40. package/packages/dashboard/src/components/ProjectOverview.vue +178 -0
  41. package/packages/dashboard/src/components/StageBadge.vue +13 -13
  42. package/packages/dashboard/src/components/StepCard.vue +11 -11
  43. package/packages/dashboard/src/components/detail/DocsDetail.vue +48 -0
  44. package/packages/dashboard/src/components/detail/GitDetail.vue +61 -0
  45. package/packages/dashboard/src/components/detail/TechDetail.vue +43 -0
  46. package/packages/dashboard/src/main.js +4 -1
  47. package/packages/dashboard/src/style.css +14 -14
  48. package/src/index.js +55 -8
  49. package/src/init.js +69 -196
  50. package/src/migrate.js +1 -18
  51. package/src/progress.js +279 -281
  52. package/src/run.js +320 -0
  53. package/src/setup.js +1 -9
  54. package/src/stages/brainstorm.js +210 -0
  55. package/src/stages/execute.js +190 -0
  56. package/src/stages/index.js +22 -0
  57. package/src/stages/plan.js +118 -0
  58. package/src/stages/propose.js +115 -0
  59. package/src/stages/verify.js +98 -0
  60. package/packages/dashboard/dist/assets/index-hNnQCobe.css +0 -1
  61. package/packages/dashboard/dist/assets/index-qgPzQGjk.js +0 -17
  62. package/templates/archive.md +0 -121
  63. package/templates/brainstorm.md +0 -246
  64. package/templates/commit.md +0 -123
  65. package/templates/continue.md +0 -32
  66. package/templates/execute.md +0 -314
  67. package/templates/explore.md +0 -60
  68. package/templates/export.md +0 -21
  69. package/templates/init.md +0 -61
  70. package/templates/plan.md +0 -157
  71. package/templates/progress-format.md +0 -90
  72. package/templates/propose.md +0 -73
  73. package/templates/quick.md +0 -135
  74. package/templates/resume-dialog.md +0 -55
  75. package/templates/resume.md +0 -53
  76. package/templates/scan-quick.md +0 -49
  77. package/templates/skills/playwright-e2e/SKILL.md +0 -340
  78. package/templates/status.md +0 -72
  79. package/templates/verify.md +0 -253
  80. package/templates/workspace-sync.md +0 -89
  81. package/templates/workspace.md +0 -67
  82. /package/.sillyspec/{docs/sillyspec/brainstorm → changes/brainstorm-archive}/2026-04-05-dashboard-design.md +0 -0
  83. /package/.sillyspec/{docs/sillyspec/brainstorm → changes/brainstorm-archive}/2026-04-05-unified-docs-design.md +0 -0
  84. /package/.sillyspec/{specs/2026-04-05-dashboard-design.md → changes/dashboard/design.md.braindraft} +0 -0
  85. /package/.sillyspec/{specs/2026-04-05-unified-docs-design.md → changes/unified-docs-design/design.md} +0 -0
@@ -0,0 +1,263 @@
1
+ ---
2
+ name: sillyspec:plan
3
+ description: 编写实现计划 — 2-5 分钟粒度,精确到文件路径和代码
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
+ ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .
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
+ PROJECT=$(python3 -c "import sys,json; print(json.load(open('.sillyspec/.runtime/progress.json')).get('project',''))" 2>/dev/null || basename "$(pwd)")
50
+
51
+ # 各子项目的代码库上下文
52
+ for f in .sillyspec/projects/*.yaml; do
53
+ [ -f "$f" ] || continue
54
+ proj_name=$(basename "$f" .yaml)
55
+ proj_path=$(grep '^path:' "$f" | head -1 | sed 's/^path:[[:space:]]*//')
56
+ cat "${proj_path}/docs/${proj_name}/scan/CONVENTIONS.md" 2>/dev/null
57
+ cat "${proj_path}/docs/${proj_name}/scan/ARCHITECTURE.md" 2>/dev/null
58
+ cat "${proj_path}/docs/${proj_name}/scan/STACK.md" 2>/dev/null
59
+ cat "${proj_path}/.sillyspec/REQUIREMENTS.md" 2>/dev/null
60
+ done
61
+ ```
62
+
63
+ **如果不是工作区模式:**
64
+
65
+ ```bash
66
+ # 规范(最近非归档变更)
67
+ LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
68
+ cat "$LATEST/proposal.md"
69
+ cat "$LATEST/design.md"
70
+ cat "$LATEST/tasks.md"
71
+ cat "$LATEST/specs/requirements.md" 2>/dev/null
72
+
73
+ # 代码库上下文(棕地)
74
+ PROJECT=$(python3 -c "import sys,json; print(json.load(open('.sillyspec/.runtime/progress.json')).get('project',''))" 2>/dev/null || basename "$(pwd)")
75
+ cat docs/${PROJECT}/scan/CONVENTIONS.md 2>/dev/null
76
+ cat docs/${PROJECT}/scan/ARCHITECTURE.md 2>/dev/null
77
+ cat docs/${PROJECT}/scan/STACK.md 2>/dev/null
78
+
79
+ # 项目需求
80
+ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
81
+ ```
82
+
83
+ ### 1.5 锚定确认(必须完成)
84
+
85
+ 读取相关规范文件。对于存在的文件,确认理解;对于不存在的文件,标注跳过:
86
+
87
+ ```
88
+ 已读取并理解:
89
+ - [x] proposal.md — 变更动机和范围
90
+ - [x] design.md — 技术方案和文件变更(如果存在)
91
+ - [x] tasks.md — 实现清单
92
+ - [x] specs/requirements.md — 需求和场景(如果存在)
93
+
94
+ 所有可用上下文已加载,开始执行。
95
+ ```
96
+
97
+ **文件不存在不是错误**。只确认实际存在的文件。不准跳过此步骤。
98
+
99
+ ### 2. 逐任务展开
100
+
101
+ 把 tasks.md 中每个 checkbox 展开为详细步骤。
102
+
103
+ **工作区模式下,每个 Task 必须标注所属项目:**
104
+
105
+ ```markdown
106
+ ### Task 1: [frontend] 数据库 User 模型
107
+
108
+ **项目:** frontend
109
+ **文件:**
110
+ ```
111
+
112
+ 如果不是工作区模式,保持原有 Task 格式不变。
113
+
114
+ **非工作区模式示例:**
115
+
116
+ ```markdown
117
+ ### Task 1: 数据库 User 模型
118
+
119
+ **文件:**
120
+ - 修改:`prisma/schema.prisma`
121
+ - 新建:`prisma/migrations/xxx/migration.sql`
122
+ - 测试:`tests/models/user.test.ts`
123
+
124
+ **步骤:**
125
+ - [ ] 写失败测试:
126
+ ```typescript
127
+ // tests/models/user.test.ts
128
+ import { prisma } from '@/lib/db'
129
+
130
+ describe('User model', () => {
131
+ it('should create user with hashed password', async () => {
132
+ const user = await prisma.user.create({
133
+ data: { email: 'test@test.com', passwordHash: 'hashed' }
134
+ })
135
+ expect(user.id).toBeDefined()
136
+ expect(user.passwordHash).toBe('hashed')
137
+ })
138
+ })
139
+ ```
140
+ 运行:`pnpm test tests/models/user.test.ts` → 预期 FAIL(模型不存在)
141
+
142
+ - [ ] 写最少代码让测试通过:
143
+ ```prisma
144
+ // prisma/schema.prisma
145
+ model User {
146
+ id String @id @default(cuid())
147
+ email String @unique
148
+ passwordHash String
149
+ createdAt DateTime @default(now())
150
+ }
151
+ ```
152
+ 运行:`npx prisma migrate dev --name add-user-model`
153
+ 运行:`pnpm test tests/models/user.test.ts` → 预期 PASS
154
+
155
+ - [ ] 运行全量测试 → 预期 ALL GREEN
156
+ - [ ] git commit -m "feat: add User model"
157
+
158
+ **验证命令:**
159
+ `pnpm test tests/models/user.test.ts -v`
160
+ ```
161
+
162
+ ### 3. 标注执行顺序
163
+
164
+ ```markdown
165
+ ## 执行顺序
166
+
167
+ **Wave 1**(并行,无依赖):
168
+ - Task 1: 数据库模型
169
+ - Task 2: 邮件服务(独立模块)
170
+
171
+ **Wave 2**(依赖 Wave 1):
172
+ - Task 3: 注册 API(需要 User 模型)
173
+
174
+ **Wave 3**(依赖 Wave 2):
175
+ - Task 4: 验证流程(需要注册完成)
176
+ ```
177
+
178
+ ### 4. 计划原则
179
+
180
+ **假设执行者是:** 熟练开发者,但对你项目零上下文、品味存疑、讨厌写测试。
181
+
182
+ - 每个步骤 2-5 分钟可完成
183
+ - 包含完整可运行的代码(不要写"添加验证逻辑")
184
+ - 包含精确文件路径(不要写"在适当位置")
185
+ - 包含运行命令和预期输出
186
+ - 频繁 commit,每个任务独立提交
187
+ - 如果发现设计有矛盾 → 停下来告诉用户
188
+
189
+ ### 4.1 代码示例精确度(强制)
190
+
191
+ - 每个涉及代码的 Task 必须包含:
192
+ - 要修改的精确类名和文件路径
193
+ - 要调用/实现的方法签名(参数类型、返回值)
194
+ - 要使用的注解(和已有代码一致)
195
+ - 如果新增方法,列出完整方法签名示例
196
+ - ❌ "实现用户创建接口"
197
+ - ✅ "在 `UserController.java` 添加方法:`public Result<UserVO> createUser(@RequestBody @Valid UserDTO dto)`,参考 `RoleController.java` 的 `createRole` 方法风格"
198
+
199
+ ### 4.2 必须引用已有代码
200
+
201
+ - 每个任务如果涉及已有类的调用,必须标注"参考 `XxxService.java` 的 `xxx` 方法"
202
+ - 如果要继承基类方法,列出基类方法签名
203
+ - 方法签名从 CONVENTIONS.md 或已有源码中获取,禁止凭空编造
204
+
205
+ ### 5. 保存
206
+
207
+ 保存到 `.sillyspec/plans/YYYY-MM-DD-<change-name>.md`
208
+
209
+ ### 6. 自检门控(Hard Gate)
210
+
211
+ - [ ] 每个 task 是否包含具体文件路径?
212
+ - [ ] 每个 task 是否包含验证命令和预期输出?
213
+ - [ ] 是否标注了 Wave 和执行顺序?
214
+ - [ ] plan 是否与 design.md 的文件变更清单一致?
215
+
216
+ **任何一项不通过 → 修正后重新检查。**
217
+
218
+ ### 脚本校验(硬验证)
219
+
220
+ Hard Gate 自检通过后,运行校验脚本:
221
+
222
+ ```bash
223
+ bash scripts/validate-plan.sh .sillyspec/changes/<当前变更目录>
224
+ ```
225
+
226
+ - 脚本返回 0 → 自检通过,继续
227
+ - 脚本返回非 0 → 根据提示修正后重新运行
228
+
229
+ ### 8. 最后说:
230
+
231
+ **用 CLI 验证并获取下一步:**
232
+
233
+ ```bash
234
+ sillyspec status --json
235
+ ```
236
+
237
+ 展示给用户:
238
+ > 计划已保存到 `.sillyspec/plans/xxx.md`。
239
+ > 下一步:
240
+
241
+ ```bash
242
+ sillyspec next
243
+ ```
244
+
245
+ 将 CLI 返回的命令推荐给用户。**不要自己编建议。**
246
+
247
+ ### 9. 更新 progress.json
248
+
249
+ plan 完成后,**必须自动更新进度**:
250
+ ```bash
251
+ sillyspec progress complete-stage plan
252
+ ```
253
+
254
+ - 当前阶段改为 `plan ✅`
255
+ - 下一步改为 `/sillyspec:execute`
256
+ - 历史记录追加时间 + plan 完成
257
+ - 追加 Wave 数量信息
258
+
259
+ ## 绝对规则
260
+ - 不写实现代码(只写计划中的代码示例)
261
+ - 每个步骤必须有验证命令和预期输出
262
+ - 不要遗漏边界情况
263
+ - **计划中引用的表名、字段名必须来自 ARCHITECTURE.md 数据模型或 design.md 中声明的新增表。禁止编造。**
@@ -0,0 +1,248 @@
1
+ ---
2
+ name: sillyspec:propose
3
+ description: 生成结构化规范 — proposal + design + tasks
4
+ ---
5
+
6
+ > **提示:** 通常不需要单独执行 propose。brainstorm 阶段会自动产出 design.md。
7
+ > 仅当需求已经明确、跳过 brainstorm 时才需要手动执行 propose。
8
+
9
+ 你现在是 SillySpec 的规范生成器。
10
+
11
+ ## 变更名称
12
+ $ARGUMENTS
13
+
14
+ ## 流程
15
+
16
+ ### 0. 检查状态(必须先执行)
17
+
18
+ **在开始任何工作之前,先调用 SillySpec CLI 检查当前状态:**
19
+
20
+ ```bash
21
+ sillyspec status --json
22
+ ```
23
+
24
+ **根据 CLI 返回的 phase 决定是否允许执行 propose:**
25
+ - `phase: "propose"` → ✅ 可以继续
26
+ - 其他 phase → ❌ 不允许跳步,提示用户运行 `sillyspec next` 获取正确步骤
27
+
28
+ **不要跳过状态检查。不要自己推断阶段。以 CLI 为准。**
29
+
30
+ ### 1. 加载上下文
31
+
32
+ 读取相关文档:
33
+
34
+ ```bash
35
+ # 检测是否是子阶段变更
36
+ if [[ "$ARGUMENTS" == */stage-* ]]; then
37
+ MASTER_NAME="${ARGUMENTS%%/*}"
38
+ STAGE_NAME="${ARGUMENTS#*/}"
39
+ MASTER_DIR=".sillyspec/changes/$MASTER_NAME"
40
+ CHANGE_DIR="$MASTER_DIR/stages/$STAGE_NAME"
41
+ else
42
+ CHANGE_DIR=".sillyspec/changes/$ARGUMENTS"
43
+ fi
44
+
45
+ # 如果存在 MASTER.md,读取主变更上下文
46
+ cat .sillyspec/changes/*/MASTER.md 2>/dev/null
47
+
48
+ # 最新设计文档
49
+ ls -t .sillyspec/specs/*.md | head -1
50
+ # 需求
51
+ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
52
+ # 代码库约定(棕地)
53
+ cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
54
+ cat .sillyspec/codebase/ARCHITECTURE.md 2>/dev/null
55
+ # 已有变更(排除子阶段)
56
+ ls .sillyspec/changes/ | grep -v archive
57
+ ```
58
+
59
+ 如果是子阶段变更(如 `reward-punishment/stage-1`):
60
+ - 读取 MASTER.md 获取整体方向和技术决策
61
+ - 读取 MASTER.md 中"经验记录"章节(前面阶段的踩坑经验)
62
+ - 读取前面已完成阶段的设计文件(保持一致性)
63
+ - 读取该阶段对应的原型分析结果
64
+ - 规范文件保存到 `changes/<变更名>/stages/<stage-N>/`
65
+
66
+ 如果是普通变更,照原流程执行。
67
+
68
+ 如果没有设计文档 → 提示先运行 `/sillyspec:brainstorm`
69
+
70
+ ### 1.5 锚定确认(必须完成)
71
+
72
+ 读取相关规范文件。对于存在的文件,确认理解;对于不存在的文件,标注跳过:
73
+
74
+ ```
75
+ 已读取并理解:
76
+ - [x] proposal.md — 变更动机和范围(如果存在)
77
+ - [ ] design.md — 不存在(正常,将在本阶段生成)
78
+ - [ ] specs/requirements.md — 不存在(正常,将在本阶段生成)
79
+
80
+ 所有可用上下文已加载,开始执行。
81
+ ```
82
+
83
+ **文件不存在不是错误**。只确认实际存在的文件。不准跳过此步骤。
84
+
85
+ ### 2. 探索现有代码
86
+
87
+ 理解相关模块的当前实现,识别影响范围。
88
+
89
+ ### 3. 生成规范文件
90
+
91
+ 创建 `.sillyspec/changes/$ARGUMENTS/`,生成以下文件:
92
+
93
+ **`proposal.md`** — 变更提案:
94
+ ```markdown
95
+ # [change-name]
96
+
97
+ ## 动机
98
+ 为什么做这件事
99
+
100
+ ## 变更范围
101
+ 受影响的核心区域
102
+
103
+ ## 不在范围内
104
+ 明确排除的内容
105
+
106
+ ## 成功标准
107
+ - [ ] 可量化的标准 1
108
+ - [ ] 可量化的标准 2
109
+ ```
110
+
111
+ **`specs/requirements.md`** — 需求清单:
112
+ ```markdown
113
+ # 需求
114
+
115
+ ## 功能需求
116
+ - [ ] REQ-001: 用户可以用邮箱注册
117
+ - [ ] REQ-002: 注册后自动发送验证邮件
118
+
119
+ ## 用户场景
120
+ ### 场景 1: 新用户注册
121
+ Given: 用户在注册页面
122
+ When: 填写邮箱和密码并提交
123
+ Then: 收到验证邮件,账户处于待验证状态
124
+
125
+ ### 场景 2: 邮箱验证
126
+ Given: 用户收到验证邮件
127
+ When: 点击验证链接
128
+ Then: 账户激活,跳转到登录页
129
+
130
+ ## 非功能需求
131
+ - 注册接口响应 < 500ms
132
+ - 密码使用 bcrypt 哈希
133
+ ```
134
+
135
+ **`design.md`** — 技术方案:
136
+ ```markdown
137
+ # 技术设计
138
+
139
+ ## 架构决策
140
+ - 使用 JWT 存储 session(而非 server-side session)
141
+ - 理由:支持未来微服务拆分
142
+
143
+ ## 文件变更清单
144
+ | 操作 | 文件 | 说明 |
145
+ |---|---|---|
146
+ | 新建 | `src/lib/auth.ts` | 认证核心逻辑 |
147
+ | 新建 | `src/app/api/auth/register/route.ts` | 注册接口 |
148
+ | 修改 | `prisma/schema.prisma` | 添加 User 模型 |
149
+
150
+ ## 数据模型
151
+ [Prisma schema 或数据库表设计]
152
+
153
+ ## API 设计
154
+ POST /api/auth/register
155
+ Request: { email: string, password: string }
156
+ Response: { userId: string, message: "verification email sent" }
157
+
158
+ ## 代码风格参照
159
+ - Controller 风格:参考 `XxxController.java`(从 CONVENTIONS.md 获取)
160
+ - Service 风格:参考 `XxxServiceImpl.java`(从 CONVENTIONS.md 获取)
161
+ - 实体风格:参考 `Xxx.java`(基类:`BaseEntity`,字段参见 CONVENTIONS.md)
162
+ - 返回值类型:`Result<T>` / `ResponseEntity<T>`
163
+ - 异常类型:`BusinessException` / 其他
164
+ - 注解风格:从 CONVENTIONS.md「代码风格」章节获取
165
+ ```
166
+
167
+ **`tasks.md`** — 实现清单:
168
+ ```markdown
169
+ # 实现清单
170
+
171
+ ## 准备
172
+ - [ ] Task 0: 配置开发环境(依赖、环境变量)
173
+
174
+ ## 实现
175
+ - [ ] Task 1: 数据库模型(User 表)
176
+ - [ ] Task 2: 注册 API
177
+ - [ ] Task 3: 邮件发送服务
178
+ - [ ] Task 4: 邮箱验证流程
179
+
180
+ ## 收尾
181
+ - [ ] Task 5: 错误处理和边界情况
182
+ - [ ] Task 6: 集成测试
183
+ ```
184
+
185
+ ### 4. 展示关键文件
186
+
187
+ 展示 proposal.md 和 design.md 给用户审阅。tasks.md 只展示任务列表(细节在 plan 阶段展开)。
188
+
189
+ ### 5. 自检门控(Hard Gate)
190
+
191
+ 在展示文件给用户之前,**必须自检**:
192
+
193
+ - [ ] proposal.md 是否包含"动机"、"变更范围"、"不在范围内"、"成功标准"四个章节?
194
+ - [ ] design.md 是否包含"文件变更清单"表格?
195
+ - [ ] specs/requirements.md 是否包含 Given/When/Then 格式的用户场景?
196
+ - [ ] tasks.md 是否每个 task 都有文件路径?
197
+
198
+ **任何一项不通过 → 修正后重新检查,不准跳过。**
199
+
200
+ ### 脚本校验(硬验证)
201
+
202
+ Hard Gate 自检通过后,运行校验脚本:
203
+
204
+ ```bash
205
+ bash scripts/validate-proposal.sh .sillyspec/changes/$ARGUMENTS
206
+ ```
207
+
208
+ - 脚本返回 0 → 自检通过,继续展示文件
209
+ - 脚本返回非 0 → 根据错误提示修正文件,重新运行脚本
210
+
211
+ ### 7. 最后说:
212
+
213
+ **用 CLI 验证并获取下一步:**
214
+
215
+ ```bash
216
+ sillyspec status --json
217
+ ```
218
+
219
+ 展示给用户:
220
+ > 规范已生成到 `.sillyspec/changes/$ARGUMENTS/`。
221
+ >
222
+ > 审阅 `proposal.md`(为什么做)和 `design.md`(怎么做)。
223
+ > 下一步:
224
+
225
+ ```bash
226
+ sillyspec next
227
+ ```
228
+
229
+ 将 CLI 返回的命令推荐给用户。**不要自己编建议。**
230
+
231
+ ### 8. 更新 progress.json
232
+
233
+ propose 完成后,**必须自动更新进度**:
234
+ ```bash
235
+ sillyspec progress complete-stage propose
236
+ ```
237
+
238
+ - 当前阶段改为 `propose ✅`
239
+ - 下一步改为 `/sillyspec:plan`
240
+ - 历史记录追加时间 + propose 完成
241
+ - 如果是子阶段(stages/ 下),更新阶段进度
242
+
243
+ ## 绝对规则
244
+ - 不写实现代码
245
+ - tasks.md 只列任务名,不写具体步骤
246
+ - 必须包含可量化的成功标准
247
+ - 用户场景用 Given/When/Then 格式
248
+ - **禁止编造不存在的表名、字段名、API 端点。** design.md 中引用的数据库对象必须来自 ARCHITECTURE.md 的数据模型章节,或明确标注为"新增"
@@ -0,0 +1,102 @@
1
+ ---
2
+ name: sillyspec:quick
3
+ description: 快速任务 — 跳过完整流程,直接做
4
+ ---
5
+
6
+ ## 交互规范
7
+ **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
8
+
9
+ ## 核心约束(必须遵守)
10
+ - ❌ 不写测试(底线是仍然要写测试)
11
+ - ❌ 修改无关文件
12
+ - ❌ 跳过测试因为"任务太简单"
13
+
14
+ ## 用法
15
+
16
+ - `/sillyspec:quick "修复用户创建接口漏了手机号校验"` — 独立记录到按用户名隔离的 QUICKLOG
17
+ - `/sillyspec:quick --change user-module "修复用户创建接口漏了手机号校验"` — 追加到 user-module 变更的 tasks.md
18
+
19
+ ## 任务
20
+ $ARGUMENTS
21
+
22
+ ---
23
+
24
+ ## 流程
25
+
26
+ 1. **解析参数:** 检查是否携带 `--change <变更名>`,确定记录方式
27
+ 2. **理解任务:** 模糊则问一个问题确认
28
+ 3. **加载上下文:** `cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null`
29
+ 4. **知识库查询(强制步骤):**
30
+ ```bash
31
+ cat .sillyspec/knowledge/INDEX.md 2>/dev/null
32
+ ```
33
+ 根据当前任务描述中的关键词匹配 INDEX.md 条目,命中时 `cat` 对应知识文件,将内容纳入后续开发考量。未命中则跳过。
34
+ 5. **文档/代码查询(强制步骤):** 如果涉及不熟悉的库/框架/API:
35
+ - 通过 Context7 MCP 查询官方文档
36
+ - 如果文档不足,通过 grep.app MCP 搜索 GitHub 开源代码
37
+ - 将查询结果纳入后续开发考量
38
+ 6. **先读后写:** 调用已有方法前 `cat` 源文件确认签名,`grep` 确认方法存在
39
+ 7. **TDD 执行:**
40
+ ```
41
+ 🔴 RED → 先写测试,运行确认失败
42
+ 🟢 GREEN → 写最少代码让测试通过
43
+ 🔵 REFACTOR → 清理,保持测试通过
44
+ ✅ STAGE → git add 暂存(测试文件必须包含在暂存中)
45
+ ```
46
+ 测试文件必须保留在项目中,不能删除。违反 TDD → 删掉代码从测试重新开始。
47
+ - 纯配置/数据/文档可跳过 TDD
48
+ - 其他情况一律走 TDD
49
+ 8. **运行测试:** 先检查 local.yaml 构建命令配置:
50
+ ```bash
51
+ cat .sillyspec/local.yaml 2>/dev/null
52
+ ```
53
+ 如果有则使用 local.yaml 中的命令;否则使用默认命令:
54
+ ```bash
55
+ mvn test -pl <模块> -Dtest=<测试类> 2>/dev/null || ./gradlew test --tests <测试类> 2>/dev/null || pnpm test 2>/dev/null || npm test 2>/dev/null || pytest <测试文件> 2>/dev/null
56
+ ```
57
+ 9. **Git 暂存:** `git add -A`。**不要 commit**,由用户通过 `/sillyspec:commit` 统一提交。**工作区模式下,确认当前在正确的子项目目录中执行暂存。**
58
+ 10. **记录:**
59
+ - **有 `--change`:** 在 `.sillyspec/changes/<变更名>/tasks.md` 追加 task 并勾选,**记录精确到秒的时间戳**:
60
+
61
+ ```
62
+ - [x] [YYYY-MM-DD HH:MM:SS] 任务描述
63
+ ```
64
+ - **无 `--change`:** 记录到 `.sillyspec/quicklog/QUICKLOG-<git用户名>.md`(见下方规则)
65
+ 11. **检查复杂度:** 任务比预期复杂 → 建议用完整流程
66
+
67
+ 12. **记录发现的坑:** 执行过程中如果发现项目特有的规律、陷阱或约定(如"某方法参数顺序容易搞反"、"某表有隐藏软删除字段"),追加到 `.sillyspec/knowledge/uncategorized.md`,格式:
68
+
69
+ ```markdown
70
+ ### [待确认] {简短标题}
71
+ > 来源:quick / {时间戳}
72
+
73
+ {坑的具体描述}
74
+ ```
75
+
76
+ **工作区模式下:** 只影响当前子项目 → 写入当前子项目 `.sillyspec/knowledge/uncategorized.md`;影响多个子项目 → 写入工作区根目录 `.sillyspec/knowledge/uncategorized.md`。
77
+
78
+ 13. **知识库审阅提示:** 如果本次执行向 knowledge/ 写入了新条目,提示用户:
79
+ > 📚 本次 quick 发现了新知识,请审阅:`cat .sillyspec/knowledge/uncategorized.md`
80
+ > 确认后请将 `[待确认]` 改为 `[已确认]`,并可归类到 knowledge/ 下的专题文件中更新 INDEX.md。
81
+
82
+ ### QUICKLOG 规则
83
+
84
+ **按 git 用户名隔离,避免多人同时操作冲突:**
85
+
86
+ ```bash
87
+ USER=$(git config user.name 2>/dev/null || echo "default")
88
+ LOG_FILE=".sillyspec/quicklog/QUICKLOG-${USER}.md"
89
+ ```
90
+
91
+ 文件路径:`$LOG_FILE`
92
+
93
+ **追加记录格式(时间精确到秒):**
94
+ ```markdown
95
+ ## YYYY-MM-DD HH:MM:SS | fix: 任务描述
96
+ - 文件:`修改的文件列表`
97
+ - 关联归档:`相关的已归档变更名`(如有)
98
+ ```
99
+
100
+ **文件轮转:** 追加前检查文件大小,超过 500 行则:
101
+ 1. 将当前文件重命名为 `QUICKLOG-${USER}-YYYY-MM-DD.md`
102
+ 2. 创建新的空 `QUICKLOG-${USER}.md`