sillyspec 3.8.7 → 3.9.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.
Files changed (51) hide show
  1. package/dist/steps/brainstorm/01-load-context.md +30 -0
  2. package/dist/steps/brainstorm/02-reuse-check.md +6 -0
  3. package/dist/steps/brainstorm/03-prototype-analysis.md +11 -0
  4. package/dist/steps/brainstorm/04-module-split.md +23 -0
  5. package/dist/steps/brainstorm/05-dialog-explore.md +8 -0
  6. package/dist/steps/brainstorm/06-propose-approaches.md +3 -0
  7. package/dist/steps/brainstorm/07-present-design.md +3 -0
  8. package/dist/steps/brainstorm/08-write-design.md +21 -0
  9. package/dist/steps/brainstorm/09-self-review.md +15 -0
  10. package/dist/steps/brainstorm/10-user-confirm.md +3 -0
  11. package/dist/steps/brainstorm/11-output-spec.md +7 -0
  12. package/dist/steps/brainstorm/manifest.yaml +26 -0
  13. package/dist/steps/execute/01-load-context.md +41 -0
  14. package/dist/steps/execute/02-scan-conventions.md +47 -0
  15. package/dist/steps/execute/03-skill-mcp.md +19 -0
  16. package/dist/steps/execute/04-assign-task.md +22 -0
  17. package/dist/steps/execute/04b-prompt-template.md +54 -0
  18. package/dist/steps/execute/05-write-test.md +7 -0
  19. package/dist/steps/execute/06-write-code.md +8 -0
  20. package/dist/steps/execute/07-run-test.md +26 -0
  21. package/dist/steps/execute/08-fix-issues.md +28 -0
  22. package/dist/steps/execute/09-next-task.md +33 -0
  23. package/dist/steps/execute/manifest.yaml +28 -0
  24. package/dist/steps/plan/01-load-context.md +22 -0
  25. package/dist/steps/plan/02-anchor-confirm.md +1 -0
  26. package/dist/steps/plan/03-expand-tasks.md +33 -0
  27. package/dist/steps/plan/04-mark-order.md +15 -0
  28. package/dist/steps/plan/05-e2e-planning.md +17 -0
  29. package/dist/steps/plan/06-self-check.md +16 -0
  30. package/dist/steps/plan/07-save.md +1 -0
  31. package/dist/steps/plan/manifest.yaml +18 -0
  32. package/dist/steps/scan/01-env-detect.md +51 -0
  33. package/dist/steps/scan/02-tech-stack.md +16 -0
  34. package/dist/steps/scan/03-conventions.md +16 -0
  35. package/dist/steps/scan/04-structure.md +19 -0
  36. package/dist/steps/scan/05-quality.md +18 -0
  37. package/dist/steps/scan/06-complete.md +49 -0
  38. package/dist/steps/scan/manifest.yaml +16 -0
  39. package/dist/steps/verify/01-load-specs.md +28 -0
  40. package/dist/steps/verify/02-check-tasks.md +1 -0
  41. package/dist/steps/verify/03-check-design.md +6 -0
  42. package/dist/steps/verify/04-run-tests.md +7 -0
  43. package/dist/steps/verify/05-e2e-tests.md +27 -0
  44. package/dist/steps/verify/05b-e2e-fix.md +33 -0
  45. package/dist/steps/verify/06-code-quality.md +25 -0
  46. package/dist/steps/verify/07-lint-check.md +27 -0
  47. package/dist/steps/verify/08-output-report.md +14 -0
  48. package/dist/steps/verify/manifest.yaml +22 -0
  49. package/package.json +3 -3
  50. package/src/index.js +10 -0
  51. package/src/step.js +543 -0
@@ -0,0 +1,30 @@
1
+ **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
2
+
3
+ ## 核心约束(必须遵守)
4
+ - ❌ 写实现代码(任何语言)
5
+ - ❌ 修改任何源代码文件
6
+ - ❌ 安装依赖或执行构建命令
7
+ - ❌ 创建数据库迁移脚本
8
+ - ❌ 跳过 brainstorm 直接进入 execute/plan
9
+ - ❌ 在 checklist 未完成前开始写设计文档
10
+ - ❌ 编造不存在的表名、字段名、API 端点
11
+ - ❌ 一次性抛出多个问题(必须逐个等待回答)
12
+ - ❌ 用户确认前自行推进到 plan 或任何后续阶段
13
+
14
+ **终态:** brainstorm 完成后唯一出口是 plan 阶段。不允许直接进入 execute 或任何代码操作。
15
+
16
+ ## 加载项目上下文
17
+
18
+ ```bash
19
+ ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .
20
+ ```
21
+
22
+ **工作区模式:** AskUserQuestion 选子项目,**cd 到子项目目录执行**,加载子项目上下文 + 共享规范 + 工作区概览,设计文档保存到子项目 `.sillyspec/docs/<project>/changes/`。修改在子项目目录中暂存。
23
+
24
+ **单项目模式:**
25
+ ```bash
26
+ cat .sillyspec/{PROJECT,REQUIREMENTS,ROADMAP}.md 2>/dev/null
27
+ cat .sillyspec/docs/<project>/scan/{STRUCTURE,CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
28
+ ls .sillyspec/changes/ 2>/dev/null | grep -v archive
29
+ ls .sillyspec/knowledge/ 2>/dev/null
30
+ ```
@@ -0,0 +1,6 @@
1
+ 检查已有变更和可复用模板,避免冲突和重复劳动。
2
+
3
+ - **同名变更:** `ls .sillyspec/changes/ | grep -v archive` — 有相关变更则提示避免冲突
4
+ - **全局模板:** `ls ~/.sillyspec/templates/ 2>/dev/null` — 有匹配模板则建议复用
5
+
6
+ 无匹配则跳过,不输出。
@@ -0,0 +1,11 @@
1
+ **如有图片则必做。无图片则跳过此步骤。**
2
+
3
+ **不要只看描述文字,图片包含布局、字段、交互等视觉信息。**
4
+
5
+ 对每张图逐页分析(先主页面后子页面):
6
+ 1. **页面结构** — 识别搜索区、操作栏、表格、表单等区块
7
+ 2. **表单字段** — 字段名、类型、必填、选项
8
+ 3. **交互流程** — 页面跳转、按钮行为、流程线
9
+ 4. **标注备注** — 业务规则、状态说明、权限说明
10
+
11
+ 展示分析结果,问用户确认有无遗漏。
@@ -0,0 +1,23 @@
1
+ 评估需求范围,复杂需求拆分子项目/阶段。
2
+
3
+ **满足以下任意 2 条就建议拆分:**
4
+ - 3+ 个可独立交付的功能模块
5
+ - 3+ 种角色有不同权限和视图
6
+ - 跨页面状态流转(审批流、多步表单)
7
+ - brainstorm 提问发现需求范围过大
8
+
9
+ 确认拆分后生成 MASTER.md:
10
+
11
+ ```bash
12
+ mkdir -p .sillyspec/changes/<变更名>/stages
13
+ ```
14
+
15
+ `MASTER.md` 内容:概述、拆分计划表(阶段/范围/状态)、整体技术方向、阶段间依赖、原型分析摘要、经验记录。
16
+
17
+ ```bash
18
+ git add .sillyspec/changes/<变更名>/MASTER.md
19
+ ```
20
+
21
+ 提示用户:对子阶段执行 brainstorm,读取 MASTER.md + 前序阶段经验 + 对应原型,设计文档保存到 `.sillyspec/changes/<变更名>/stages/<stage-N>/`。
22
+
23
+ 不需要拆分则跳过此步骤。
@@ -0,0 +1,8 @@
1
+ **核心规则:一次只问一个问题。**
2
+
3
+ 1. 从最核心的问题开始(用户到底想做什么?)
4
+ 2. 等待回答,根据信息量决定追问还是进入方案讨论
5
+ 3. 探索顺序按需:目的 → 约束 → 边界 → 成功标准
6
+ 4. **大多数 brainstorm 2-3 轮就应进入方案讨论**
7
+
8
+ 探索阶段可使用项目已配置的 MCP 工具或 web search 调研技术方案和 API 用法,不要凭记忆写方案。检测可用工具:`cat .claude/mcp.json .cursor/mcp.json 2>/dev/null`
@@ -0,0 +1,3 @@
1
+ 提出 2-3 种方案。
2
+
3
+ 每种方案列优劣,给出推荐和理由。
@@ -0,0 +1,3 @@
1
+ 分段展示设计,逐段确认。
2
+
3
+ 简单项目几句话;复杂项目每段 200-300 字逐段确认。
@@ -0,0 +1,21 @@
1
+ 写设计文档并保存到 `.sillyspec/changes/<变更名>/design.md`:
2
+
3
+ ```markdown
4
+ # [Feature Name] 设计
5
+
6
+ ## 动机与范围
7
+ (为什么做、范围边界、成功标准)
8
+
9
+ ## 功能需求
10
+ (需求场景、验收标准)
11
+ - [ ] 标准 1
12
+
13
+ ## 技术方案
14
+ ## 约束和假设
15
+ ## 不在范围内
16
+ ## 文件变更
17
+ ## 代码风格参照
18
+ (参考已有源文件,标注返回值类型、异常类型、注解风格)
19
+ ```
20
+
21
+ **注意:** 引用的表名必须来自 `.sillyspec/docs/<project>/scan/ARCHITECTURE.md` 数据模型或明确标注"新增"。必须先读取该文件。
@@ -0,0 +1,15 @@
1
+ AI 自审(必须执行)。
2
+
3
+ 对照 `.sillyspec/changes/<变更名>/design.md` 检查:
4
+
5
+ - 需求覆盖:是否完整覆盖对话式探索确认的需求点?
6
+ - 约束一致性:技术方案是否与 `.sillyspec/docs/<project>/scan/ARCHITECTURE.md`、`.sillyspec/docs/<project>/scan/CONVENTIONS.md` 一致?
7
+ - 表名/字段真实性:是否来自真实 schema?
8
+ - 范围控制:是否包含不必要功能(YAGNI)?
9
+ - 验收标准:是否具体、可测试?
10
+ - 变更冲突:是否与复用检查阶段检测到的已有变更冲突?
11
+ - 缺口:模糊表述("适当的"/"必要时"等)是否已明确化
12
+ - 缺口:隐含假设(登录态、数据量、并发预期)是否已显式写出
13
+ - 缺口:边界场景(空数据、并发、服务不可用)是否已考虑
14
+
15
+ 发现问题 → 修改文档,重新自审。不确定的标注「⚠️ 自审存疑」让用户判断。
@@ -0,0 +1,3 @@
1
+ ⛔ 门禁步骤。
2
+
3
+ 展示设计方案,使用 AskUserQuestion 让用户三选一:确认 / 需要修改 / 推翻重来。
@@ -0,0 +1,7 @@
1
+ 用户确认后,确认 `.sillyspec/changes/<变更名>/design.md` 已包含完整内容(动机、需求、方案、文件变更、代码风格参照)。如上一步已保存则无需重复。
2
+
3
+ ## 关键原则
4
+ - YAGNI — 无情砍掉不需要的功能
5
+ - 总是探索替代方案
6
+ - 设计可以很短,但必须存在
7
+ - "简单"的项目更需要设计——未检视的假设造成最大浪费
@@ -0,0 +1,26 @@
1
+ phase: brainstorm
2
+ description: 需求探索与方案设计
3
+ requires: [scan]
4
+ steps:
5
+ - file: 01-load-context.md
6
+ name: 加载项目上下文
7
+ - file: 02-reuse-check.md
8
+ name: 协作与复用检查
9
+ - file: 03-prototype-analysis.md
10
+ name: 原型/设计图分析
11
+ - file: 04-module-split.md
12
+ name: 大模块拆分
13
+ - file: 05-dialog-explore.md
14
+ name: 对话式探索
15
+ - file: 06-propose-approaches.md
16
+ name: 提出方案
17
+ - file: 07-present-design.md
18
+ name: 分段展示设计
19
+ - file: 08-write-design.md
20
+ name: 写设计文档
21
+ - file: 09-self-review.md
22
+ name: AI 自审
23
+ - file: 10-user-confirm.md
24
+ name: 用户确认
25
+ - file: 11-output-spec.md
26
+ name: 输出技术方案
@@ -0,0 +1,41 @@
1
+ **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
2
+
3
+ ## 核心约束(必须遵守)
4
+ - ❌ 跳步执行(不允许跳过 plan 直接 execute)
5
+ - ❌ 先写代码后补测试
6
+ - ❌ 编造不存在的方法/注解/路径/类/字段
7
+ - ❌ 自行补全缺失的接口/方法(应报告 BLOCKED)
8
+ - ❌ 意外修改了计划外的文件却不报告
9
+
10
+ **所有任务通过子代理执行,主代理负责调度和记录。**
11
+
12
+ ## 加载上下文
13
+
14
+ ```bash
15
+ ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .
16
+ ```
17
+
18
+ **工作区模式:** 根据计划 Task 标注确定子项目,额外加载共享规范 + `.sillyspec/workspace/CODEBASE-OVERVIEW.md`。所有代码修改、测试运行在子项目目录中执行。
19
+
20
+ ```bash
21
+ PLAN=$(ls -t .sillyspec/changes/*/tasks.md 2>/dev/null | head -1); cat "$PLAN"
22
+ LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
23
+ cat "$LATEST"/{tasks,design}.md 2>/dev/null
24
+ cat .sillyspec/docs/<project>/scan/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
25
+ cat .sillyspec/local.yaml 2>/dev/null
26
+ ```
27
+
28
+ **知识库查询(强制步骤):**
29
+ ```bash
30
+ cat .sillyspec/knowledge/INDEX.md 2>/dev/null
31
+ ```
32
+ 根据当前 task 描述中的关键词匹配 INDEX.md 条目。命中时读取对应 knowledge 文件,注入子代理 prompt。未命中则跳过。
33
+
34
+ ## 确认频率
35
+
36
+ 用 AskUserQuestion 询问用户选择:
37
+ - **每个 Wave 确认** — 每个 Wave 完成后展示结果,等用户确认后继续下一 Wave
38
+ - **AI 自主判断** — AI 在遇到 BLOCKED 或计划外变更时才询问,其余自动推进
39
+ - **全自动** — 全部自动执行,不在中途打断用户
40
+
41
+ 如果 `$ARGUMENTS` 指定范围(如 `wave-1`、`task-3`),只执行对应部分。
@@ -0,0 +1,47 @@
1
+ 主代理在 dispatch 子代理前执行以下扫描。
2
+
3
+ ## 编码规范扫描
4
+
5
+ ```bash
6
+ for f in .eslintrc .eslintrc.js .eslintrc.cjs .eslintrc.json .eslintrc.yml \
7
+ .prettierrc .prettierrc.js .prettierrc.json .prettierrc.yml \
8
+ tsconfig.json tsconfig.base.json \
9
+ .editorconfig \
10
+ .tailwind.config.js .tailwind.config.ts \
11
+ .stylelintrc .stylelintrc.js .stylelintrc.json \
12
+ CONTRIBUTING.md CODE_STYLE.md; do
13
+ [ -f "$f" ] && echo "=== $f ===" && cat "$f"
14
+ done
15
+ cat package.json 2>/dev/null | grep -A5 '"lint\|"format\|"typecheck\|"type-check'
16
+ ```
17
+
18
+ 扫描后生成**编码规范摘要**(提炼关键约束,非原文粘贴),格式:
19
+
20
+ ```
21
+ ## 编码规范约束(自动扫描)
22
+ ### ESLint
23
+ {关键规则}
24
+ ### Prettier
25
+ {格式化规则}
26
+ ### TypeScript
27
+ {严格模式设置}
28
+ ### Import / 命名约定
29
+ {导入排序、命名风格}
30
+ ### 框架约定
31
+ {框架特定约定}
32
+ ```
33
+
34
+ 注入到子代理 prompt,追加铁律:**遵守编码规范:如规范与任务描述冲突,优先遵守规范并报告。**
35
+
36
+ ## 测试模式扫描(E2E/测试任务时执行)
37
+
38
+ ```bash
39
+ cat package.json 2>/dev/null | grep -E "playwright|cypress|jest|vitest|mocha"
40
+ find . -name "*.spec.ts" -o -name "*.test.ts" -o -name "*.spec.tsx" -o -name "*.spec.js" \
41
+ -o -name "playwright.config.*" -o -name "vitest.config.*" -o -name "jest.config.*" \
42
+ 2>/dev/null | grep -v node_modules | head -10
43
+ ```
44
+
45
+ 读取 1-2 个已有测试文件作为风格参考,生成测试模式摘要(框架、断言风格、Fixtures、文件组织、配置要点),注入到 E2E/测试子代理 prompt。
46
+
47
+ 追加铁律:**参照已有测试风格编写新测试,不要凭记忆写测试。**
@@ -0,0 +1,19 @@
1
+ ## Skill 扫描
2
+
3
+ ```bash
4
+ for skill_dir in .claude/skills/*/SKILL.md .cursor/skills/*/SKILL.md .opencode/skills/*/SKILL.md; do
5
+ [ -f "$skill_dir" ] && echo "=== $skill_dir ===" && cat "$skill_dir"
6
+ done
7
+ ```
8
+
9
+ 根据任务关键词匹配 skill,匹配到的 SKILL.md 全文注入子代理 prompt。
10
+
11
+ ## MCP 能力检测
12
+
13
+ 检查当前可用工具列表中是否存在以下 MCP 工具:
14
+ - Context7 / 文档查询工具
15
+ - 数据库工具(postgres/sqlite/mysql/redis)
16
+ - 浏览器工具(browser/chrome/playwright/devtools)
17
+
18
+ 有 Context7 → 提示子代理用 MCP 查文档;无 → 提示用 web search。
19
+ 有数据库 MCP → 在子代理 prompt 注入数据操作可用。
@@ -0,0 +1,22 @@
1
+ ## 执行流程
2
+
3
+ 1. 解析 tasks.md,按 Wave 分组
4
+ 2. 同一 Wave 内的任务**并行启动**子代理,不同 Wave **串行等待**
5
+ 3. 每个 Wave 完成后,根据用户选择的确认频率决定是否暂停
6
+ 4. 子代理返回结果后,主代理勾选 tasks.md、更新 STATE.md
7
+
8
+ ## 子代理 Prompt 模板
9
+
10
+ 主代理 dispatch 子代理前,必须准备以下 prompt(所有内容**内联**,不让子代理自己读文件)。prompt 格式见 `04b-prompt-template.md`。
11
+
12
+ 需要注入的变量:
13
+ - `{任务描述}` — tasks.md 中当前 task 的完整内容(包括步骤字段)
14
+ - `{CONVENTIONS.md 全文}` — 来自 `.sillyspec/docs/<project>/scan/CONVENTIONS.md`
15
+ - `{编码规范约束}` — 02-scan-conventions 步骤生成的规范摘要
16
+ - `{测试模式参考}` — 仅 E2E/测试任务注入,02-scan-conventions 步骤生成
17
+ - `{ARCHITECTURE.md 全文}` — 来自 `.sillyspec/docs/<project>/scan/ARCHITECTURE.md`
18
+ - `{构建命令}` — `.sillyspec/local.yaml` 中的 build 命令
19
+ - `{工作目录}` — 子项目目录路径
20
+ - `{相关知识}` — knowledge/ 中匹配到的内容,未命中则删除此段
21
+ - `{文档查询指引}` — MCP 检测结果动态注入
22
+ - `{本地 Skills}` — 匹配到的 SKILL.md 全文,无匹配则省略
@@ -0,0 +1,54 @@
1
+ 子代理 Prompt 模板(供 04-assign-task.md 引用,dispatch 时所有变量需内联):
2
+
3
+ ```
4
+ 你正在执行任务:
5
+
6
+ ## 任务描述
7
+ {任务描述}
8
+
9
+ ## 项目约定
10
+ {CONVENTIONS.md 全文}
11
+
12
+ ## 编码规范约束(自动扫描)
13
+ {编码规范约束}
14
+
15
+ ## 测试模式参考(仅 E2E/测试任务注入)
16
+ {测试模式参考}
17
+
18
+ ## 项目架构
19
+ {ARCHITECTURE.md 全文}
20
+
21
+ ## 构建命令 / 工作目录
22
+ {构建命令}
23
+ {工作目录}
24
+
25
+ ## 相关知识 / 文档查询指引 / 本地 Skills
26
+ {相关知识}
27
+ {文档查询指引}
28
+ {本地 Skills}
29
+
30
+ ## 数据操作
31
+ ⛔ 任何 DML/DDL 操作必须暂停并报告给用户确认。新建表不受此限制。
32
+
33
+ ## 铁律
34
+ 1. **先读后写:** 先 cat 要修改的文件和参考文件,确认风格后再写
35
+ 2. **grep 确认:** 调用已有方法前必须 grep 确认存在,grep 不到 → BLOCKED
36
+ 3. **不编造:** 不编造不存在的方法/注解/类/字段
37
+ 4. **不自行补全:** 缺失接口/方法 → BLOCKED
38
+ 5. **TDD 不跳步:** 按任务步骤逐步执行,每步必须运行测试并确认结果
39
+ 6. **测试直接通过 = 测了已有行为,重写测试**
40
+ 7. **E2E 任务:** 先 cat 相关代码,参考测试模式,查阅用法文档,写完立即跑确认通过
41
+ 8. **Lint 校验:** 完成后运行 lint,自动修复可修复的问题
42
+ 9. **暂存:** lint 通过后 git add -A(不要 commit)
43
+ 10. **遵守编码规范:** 规范与任务描述冲突时,优先遵守规范并报告
44
+ 11. **参照已有测试风格,不要凭记忆写测试**
45
+ 12. **先 grep 项目中类似功能的已有代码,照着现有模式写**
46
+
47
+ ## 完成后报告(严格格式)
48
+ - **Status:** DONE / DONE_WITH_CONCERNS / BLOCKED
49
+ - **改动文件:** {列表}
50
+ - **测试结果:** {通过/失败/跳过及原因}
51
+ - **Commit:** {hash 或 "无"}
52
+ - **问题:** {BLOCKED 原因 / DONE_WITH_CONCERNS 描述 / 无}
53
+ - **发现的坑:** {项目特有规律/陷阱/约定,无则写"无"}
54
+ ```
@@ -0,0 +1,7 @@
1
+ 子代理执行任务的第一步:写测试。
2
+
3
+ 按 tasks.md 中当前 task 的「步骤」字段第 1 步执行:写测试。
4
+
5
+ - 运行测试确认失败(TDD 红)
6
+ - 如果测试直接通过 → 重新写测试(测了已有行为)
7
+ - 纯配置/数据/文档类任务跳过此步骤
@@ -0,0 +1,8 @@
1
+ 子代理执行任务的核心步骤:写代码。
2
+
3
+ 按 tasks.md 中当前 task 的「步骤」字段第 3 步执行:写代码实现。
4
+
5
+ - 必须先 cat 要修改的文件和参考文件
6
+ - grep 确认调用的方法存在
7
+ - 遵守编码规范约束
8
+ - 纯配置/数据/文档类任务直接执行实现步骤
@@ -0,0 +1,26 @@
1
+ 子代理执行任务的验证步骤:运行测试。
2
+
3
+ 按 tasks.md 中当前 task 的「步骤」字段第 4 步执行:运行测试确认通过。
4
+
5
+ - 运行全部测试,确认通过
6
+ - 运行 lint,自动修复可修复的问题
7
+ - lint 通过后 git add -A
8
+
9
+ ## 子代理结果处理
10
+
11
+ 子代理返回后,主代理:
12
+
13
+ 1. **DONE** → 勾选 tasks.md,记录精确到秒的时间戳
14
+ 2. **DONE_WITH_CONCERNS** → 勾选 tasks.md,记录问题到报告
15
+ 3. **BLOCKED** → 不勾选,报告给用户,AskUserQuestion 三选一:
16
+ - 重试(重新 dispatch 同一任务)
17
+ - 跳过(勾选并标注 SKIPPED)
18
+ - 停止(暂停执行,用户处理后继续)
19
+
20
+ **知识库写入:** 如果子代理报告中「发现的坑」不为"无",追加到 `.sillyspec/knowledge/uncategorized.md`:
21
+ ```markdown
22
+ ### [待确认] {简短标题}
23
+ > 来源:{变更名} / {task 编号} | {时间戳}
24
+
25
+ {坑的具体描述}
26
+ ```
@@ -0,0 +1,28 @@
1
+ 如果测试失败或子代理返回 BLOCKED,主代理处理修复。
2
+
3
+ **测试失败修复循环:**
4
+
5
+ ```
6
+ ROUND = 1
7
+ MAX_ROUNDS = 5
8
+
9
+ while ROUND <= MAX_ROUNDS:
10
+ 1. 运行失败测试,捕获完整输出
11
+ 2. 全部通过 → 跳出循环,标记 ✅
12
+ 3. 对每个失败测试:
13
+ a. 读取 .sillyspec/local.yaml 中当前变更的 fixAttempts
14
+ b. fixAttempts >= MAX_ROUNDS → 跳过,标记 ❌ MAX_REACHED
15
+ c. 否则 → 重新 dispatch 子代理修复,prompt 包含:
16
+ - 失败的测试文件路径和测试名
17
+ - 完整错误信息(含期望值 vs 实际值)
18
+ - 相关源文件路径
19
+ - "只修复这个测试失败,不要改其他代码"
20
+ d. 修复后重跑确认
21
+ e. 通过 → fixAttempts 不变;仍失败 → fixAttempts + 1
22
+ 4. 写入 .sillyspec/local.yaml
23
+ 5. ROUND++
24
+ 6. 本轮无任何修复 → 跳出循环
25
+ ```
26
+
27
+ **BLOCKED 处理:**
28
+ - AskUserQuestion 三选一:重试 / 跳过 / 停止
@@ -0,0 +1,33 @@
1
+ 当前任务完成后,推进到下一个任务。
2
+
3
+ 1. 检查当前 Wave 是否还有未完成任务 → 继续分配
4
+ 2. 当前 Wave 完成 → 根据确认频率决定是否暂停
5
+ 3. 所有 Wave 完成 → 执行以下收尾
6
+
7
+ ## 任务勾选自检(必须执行)
8
+
9
+ ```bash
10
+ cat .sillyspec/changes/*/tasks.md 2>/dev/null
11
+ ```
12
+
13
+ 逐条验证:
14
+ 1. 所有返回 DONE/DONE_WITH_CONCERNS 的任务是否已勾选 `- [x]`?
15
+ 2. 勾选的任务是否都记录了精确到秒的时间戳 `[YYYY-MM-DD HH:MM:SS]`?
16
+ 3. tasks.md 中是否还有未勾选 `- [ ]` 的已完成任务?
17
+
18
+ 发现遗漏 → 立即补勾选 + 补时间戳。
19
+
20
+ ## 知识库审阅
21
+
22
+ ```bash
23
+ grep -c '^\### \[待确认\]' .sillyspec/knowledge/uncategorized.md 2>/dev/null
24
+ ```
25
+
26
+ 如果有待确认条目,提示用户审阅 `.sillyspec/knowledge/uncategorized.md`。
27
+
28
+ ## 下一步
29
+
30
+ 用 AskUserQuestion 询问用户:
31
+ 1. **验证** — 执行 verify 全面验证
32
+ 2. **归档** — 跳过 verify,执行 archive
33
+ 3. **继续开发** — 不结束当前阶段
@@ -0,0 +1,28 @@
1
+ phase: execute
2
+ description: 任务执行
3
+ requires: [plan]
4
+ loop:
5
+ start: 5
6
+ end: 9
7
+ description: 写测试→写代码→跑测试→修复→下一个任务,循环直到所有任务完成
8
+ steps:
9
+ - file: 01-load-context.md
10
+ name: 加载上下文
11
+ - file: 02-scan-conventions.md
12
+ name: 规范扫描
13
+ - file: 03-skill-mcp.md
14
+ name: Skill/MCP 检测
15
+ - file: 04-assign-task.md
16
+ name: 分配任务
17
+ - file: 04b-prompt-template.md
18
+ name: 子代理 Prompt 模板
19
+ - file: 05-write-test.md
20
+ name: 写测试
21
+ - file: 06-write-code.md
22
+ name: 写代码
23
+ - file: 07-run-test.md
24
+ name: 运行测试
25
+ - file: 08-fix-issues.md
26
+ name: 修复问题
27
+ - file: 09-next-task.md
28
+ name: 下一个任务
@@ -0,0 +1,22 @@
1
+ **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
2
+
3
+ ## 核心约束(必须遵守)
4
+ - ❌ 写实现代码(只写计划中的代码示例)
5
+ - ❌ 每个步骤缺验证命令和预期输出
6
+ - ❌ 编造表名、字段名(必须来自 ARCHITECTURE.md 或 design.md)
7
+
8
+ ## 加载上下文
9
+
10
+ ```bash
11
+ ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .
12
+ ```
13
+
14
+ **工作区模式:** 加载 `.sillyspec/workspace/CODEBASE-OVERVIEW.md` + 共享规范 + 子项目的 CONVENTIONS/ARCHITECTURE/STACK + `.sillyspec/REQUIREMENTS.md`。
15
+
16
+ **单项目模式:**
17
+ ```bash
18
+ LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
19
+ cat "$LATEST"/{design,tasks}.md 2>/dev/null
20
+ cat .sillyspec/docs/<project>/scan/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
21
+ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
22
+ ```
@@ -0,0 +1 @@
1
+ 确认实际存在的文件(design / tasks),不存在的标注跳过。
@@ -0,0 +1,33 @@
1
+ 把 tasks.md 每个 checkbox **保留 `- [ ]` 格式**并展开为任务描述,按 Wave 分组组织。工作区模式下每个 Task 标注所属项目。
2
+
3
+ **输出格式要求(必须严格遵守):**
4
+
5
+ ```markdown
6
+ ### Wave 1(并行,无依赖)
7
+ - [ ] 添加用户创建接口
8
+ - 修改: `UserController.java`、`UserService.java`
9
+ - 参考: `RoleController.createRole`
10
+ - 步骤:
11
+ 1. 写测试 UserControllerTest.testCreateUser
12
+ 2. 运行测试确认失败
13
+ 3. 写 UserController.createUser
14
+ 4. 运行测试确认通过
15
+
16
+ - [ ] 添加角色创建接口
17
+ - ...
18
+ ```
19
+
20
+ **每个 Task 必须保留 `- [ ]` checkbox,这是 execute 阶段勾选完成状态的依据。** 禁止写成纯文本列表。
21
+
22
+ **每个 Task 必须包含「步骤」字段,列出 TDD 执行顺序:**
23
+ - 1. 写测试 → 2. 运行确认失败 → 3. 写代码 → 4. 运行确认通过
24
+
25
+ **纯配置/数据/文档类任务可跳过 TDD,步骤简化为:1. 实现 → 2. 验证**
26
+
27
+ **注意:不需要写精确方法签名和代码示例。** 方法签名和代码风格由 execute 阶段先读后写确认。plan 专注"做什么"和"执行顺序"。
28
+
29
+ **每个 Task 包含:**
30
+ - 精确文件路径(修改哪个文件)
31
+ - 任务描述(做什么,一两句话说清楚)
32
+ - 涉及已有类调用时,标注参考文件(如"参考 `RoleController.createRole`)
33
+ - 依赖关系
@@ -0,0 +1,15 @@
1
+ 按 Wave 分组,标注依赖关系:
2
+
3
+ ```markdown
4
+ ### Wave 1(并行,无依赖)
5
+ - [ ] 添加用户创建接口
6
+ - 修改: `UserController.java`、`UserService.java`
7
+ - 参考: `RoleController.createRole`
8
+
9
+ - [ ] 添加角色创建接口
10
+ - ...
11
+
12
+ ### Wave 2(依赖 Wave 1)
13
+ - [ ] 添加用户列表查询(依赖用户创建完成)
14
+ - ...
15
+ ```
@@ -0,0 +1,17 @@
1
+ 识别 design.md 中是否有 UI 交互功能(页面跳转、表单提交、按钮操作等),如有则:
2
+
3
+ **检测测试能力(按优先级):**
4
+ ```bash
5
+ # 优先级 1:专业 E2E 框架
6
+ cat package.json 2>/dev/null | grep -E "playwright|cypress" ; ls node_modules/playwright node_modules/cypress 2>/dev/null
7
+ # 优先级 2:通用测试框架
8
+ cat package.json 2>/dev/null | grep -E "jest|vitest|mocha" ; ls node_modules/jest node_modules/vitest 2>/dev/null
9
+ # 优先级 3:浏览器 MCP
10
+ cat .claude/mcp.json .cursor/mcp.json 2>/dev/null | grep -i "browser\|chrome\|devtools"
11
+ ```
12
+
13
+ - **有 E2E/测试框架** → tasks.md 中添加 E2E 测试任务(同波次,编码后编写)
14
+ - **无框架但有浏览器 MCP** → tasks.md 中添加"编写 e2e-steps.md 测试步骤"任务
15
+ - **什么都没有** → 提示用户运行 `sillyspec setup` 安装 MCP 工具,或手动安装测试框架
16
+
17
+ 纯后端/无 UI 的变更跳过此步骤。
@@ -0,0 +1,16 @@
1
+ 自检门控:
2
+
3
+ - [ ] 每个 task 有具体文件路径?
4
+ - [ ] 标注了 Wave 和依赖关系?
5
+ - [ ] 涉及 UI 的任务是否有对应的 E2E 测试任务?
6
+ - [ ] **design.md 中的每个功能点是否都在 tasks.md 中有对应任务?**
7
+
8
+ ### 设计完整性对照(必须完成)
9
+
10
+ 逐条检查 design.md 中的功能描述,确保每个功能点都有对应的 task。特别关注:
11
+
12
+ 1. **逐功能点扫描:** 将 design.md 中描述的每个功能点(含子功能)列出,与 tasks.md 逐条对照
13
+ 2. **前后端覆盖检查:** 涉及前后端协作的功能,确认前端和后端各有独立 task
14
+ 3. **遗漏项处理:** 发现未覆盖的功能点 → 追加 task 到对应 Wave,并提示用户确认
15
+
16
+ 发现遗漏时用 AskUserQuestion 确认追加内容,用户确认后再写入 tasks.md。
@@ -0,0 +1 @@
1
+ **直接覆盖** `.sillyspec/changes/<变更名>/tasks.md`。不再生成单独的 plan.md 文件。
@@ -0,0 +1,18 @@
1
+ phase: plan
2
+ description: 任务分解与执行计划
3
+ requires: [brainstorm]
4
+ steps:
5
+ - file: 01-load-context.md
6
+ name: 加载上下文
7
+ - file: 02-anchor-confirm.md
8
+ name: 锚定确认
9
+ - file: 03-expand-tasks.md
10
+ name: 逐任务展开
11
+ - file: 04-mark-order.md
12
+ name: 标注执行顺序
13
+ - file: 05-e2e-planning.md
14
+ name: E2E 测试规划
15
+ - file: 06-self-check.md
16
+ name: 自检门控
17
+ - file: 07-save.md
18
+ name: 保存