@zmice/zc 0.2.8 → 0.3.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 (84) hide show
  1. package/README.md +430 -430
  2. package/dist/cli/__tests__/platform.test.js +89 -112
  3. package/dist/cli/__tests__/platform.test.js.map +1 -1
  4. package/dist/cli/__tests__/surface.test.js +1 -1
  5. package/dist/cli/__tests__/surface.test.js.map +1 -1
  6. package/dist/cli/platform.d.ts.map +1 -1
  7. package/dist/cli/platform.js +5 -62
  8. package/dist/cli/platform.js.map +1 -1
  9. package/dist/node_modules/@zmice/platform-core/dist/index.test.js +3 -5
  10. package/dist/node_modules/@zmice/platform-core/dist/index.test.js.map +1 -1
  11. package/dist/runtime/worktree-manager.js +2 -2
  12. package/dist/runtime/worktree-manager.js.map +1 -1
  13. package/dist/utils/install-target.test.js +2 -3
  14. package/dist/utils/install-target.test.js.map +1 -1
  15. package/dist/utils/qwen-extension-cli.d.ts.map +1 -1
  16. package/dist/utils/qwen-extension-cli.js +4 -4
  17. package/dist/utils/qwen-extension-cli.js.map +1 -1
  18. package/dist/utils/qwen-extension-cli.test.js +6 -9
  19. package/dist/utils/qwen-extension-cli.test.js.map +1 -1
  20. package/dist/utils/workspace.js +1 -1
  21. package/dist/utils/workspace.js.map +1 -1
  22. package/dist/utils/workspace.test.js +0 -14
  23. package/dist/utils/workspace.test.js.map +1 -1
  24. package/package.json +5 -5
  25. package/vendor/node_modules/@zmice/platform-core/dist/index.test.js +3 -5
  26. package/vendor/node_modules/@zmice/platform-core/dist/index.test.js.map +1 -1
  27. package/vendor/packages/platform-claude/dist/index.js +75 -75
  28. package/vendor/packages/platform-claude/dist/index.test.js +8 -11
  29. package/vendor/packages/platform-claude/dist/index.test.js.map +1 -1
  30. package/vendor/packages/platform-codex/dist/index.js +194 -194
  31. package/vendor/packages/platform-codex/dist/index.test.js +13 -16
  32. package/vendor/packages/platform-codex/dist/index.test.js.map +1 -1
  33. package/vendor/packages/platform-opencode/dist/index.js +75 -75
  34. package/vendor/packages/platform-opencode/dist/index.test.js +15 -19
  35. package/vendor/packages/platform-opencode/dist/index.test.js.map +1 -1
  36. package/vendor/packages/platform-qwen/dist/index.js +75 -75
  37. package/vendor/packages/platform-qwen/dist/index.test.js +7 -9
  38. package/vendor/packages/platform-qwen/dist/index.test.js.map +1 -1
  39. package/vendor/packages/toolkit/dist/content-lint.test.js +161 -1
  40. package/vendor/packages/toolkit/dist/content-lint.test.js.map +1 -1
  41. package/vendor/packages/toolkit/dist/lint/content-lint.d.ts.map +1 -1
  42. package/vendor/packages/toolkit/dist/lint/content-lint.js +183 -2
  43. package/vendor/packages/toolkit/dist/lint/content-lint.js.map +1 -1
  44. package/vendor/packages/toolkit/dist/manifests.test.js +9 -0
  45. package/vendor/packages/toolkit/dist/manifests.test.js.map +1 -1
  46. package/vendor/packages/toolkit/src/content/agents/architect/body.md +42 -42
  47. package/vendor/packages/toolkit/src/content/agents/code-reviewer/body.md +41 -41
  48. package/vendor/packages/toolkit/src/content/agents/product-owner/body.md +40 -40
  49. package/vendor/packages/toolkit/src/content/commands/plan-review/body.md +42 -31
  50. package/vendor/packages/toolkit/src/content/commands/start/body.md +236 -197
  51. package/vendor/packages/toolkit/src/content/commands/start/meta.yaml +55 -55
  52. package/vendor/packages/toolkit/src/content/skills/branch-finish-and-cleanup/body.md +172 -172
  53. package/vendor/packages/toolkit/src/content/skills/browser-qa-testing/body.md +111 -111
  54. package/vendor/packages/toolkit/src/content/skills/ci-cd-and-automation/body.md +86 -86
  55. package/vendor/packages/toolkit/src/content/skills/code-review-and-quality/body.md +140 -140
  56. package/vendor/packages/toolkit/src/content/skills/code-simplification/body.md +80 -80
  57. package/vendor/packages/toolkit/src/content/skills/context-engineering/body.md +67 -67
  58. package/vendor/packages/toolkit/src/content/skills/continuous-learning/body.md +102 -102
  59. package/vendor/packages/toolkit/src/content/skills/documentation-and-adrs/body.md +8 -6
  60. package/vendor/packages/toolkit/src/content/skills/engineering-principles/body.md +10 -5
  61. package/vendor/packages/toolkit/src/content/skills/git-workflow-and-versioning/body.md +9 -9
  62. package/vendor/packages/toolkit/src/content/skills/multi-perspective-review/body.md +129 -81
  63. package/vendor/packages/toolkit/src/content/skills/parallel-agent-dispatch/body.md +143 -113
  64. package/vendor/packages/toolkit/src/content/skills/performance-optimization/body.md +75 -75
  65. package/vendor/packages/toolkit/src/content/skills/planning-and-task-breakdown/body.md +162 -83
  66. package/vendor/packages/toolkit/src/content/skills/sdd-tdd-workflow/body.md +130 -95
  67. package/vendor/packages/toolkit/src/content/skills/sprint-retrospective/body.md +99 -99
  68. package/vendor/packages/toolkit/src/content/skills/subagent-driven-development/body.md +49 -7
  69. package/vendor/packages/toolkit/src/content/skills/team-orchestration/body.md +133 -126
  70. package/vendor/packages/toolkit/src/content/skills/test-driven-development/body.md +78 -78
  71. package/vendor/packages/toolkit/src/content/skills/using-agent-skills/body.md +193 -193
  72. package/vendor/references/upstreams.yaml +94 -94
  73. package/dist/cli/setup.d.ts +0 -3
  74. package/dist/cli/setup.d.ts.map +0 -1
  75. package/dist/cli/setup.js +0 -41
  76. package/dist/cli/setup.js.map +0 -1
  77. package/dist/utils/codex-config-merge.d.ts +0 -3
  78. package/dist/utils/codex-config-merge.d.ts.map +0 -1
  79. package/dist/utils/codex-config-merge.js +0 -43
  80. package/dist/utils/codex-config-merge.js.map +0 -1
  81. package/dist/utils/codex-config-merge.test.d.ts +0 -2
  82. package/dist/utils/codex-config-merge.test.d.ts.map +0 -1
  83. package/dist/utils/codex-config-merge.test.js +0 -64
  84. package/dist/utils/codex-config-merge.test.js.map +0 -1
@@ -2,12 +2,25 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- 通过为每个任务分派独立的子代理来执行实现计划,每个任务完成后进行两阶段审查:先验证规格合规性,再验证代码质量。
5
+ 通过为每个任务分派独立的子代理来执行实现计划,每个任务完成后进行两阶段审查:先验证规格合规性,再验证代码质量。主线程负责控制计划、分派、fan-in 和最终验证。
6
6
 
7
7
  **核心原则:每任务一个新子代理 + 两阶段审查 = 高质量 + 快速迭代**
8
8
 
9
9
  为什么要用子代理:你将任务委派给隔离上下文的专门代理。通过精心构造它们的指令和上下文,确保它们专注且成功。子代理不应继承你的会话上下文 — 你精确构造它们所需的一切。这也保护你自己的上下文用于协调工作。
10
10
 
11
+ 管控原则:
12
+
13
+ ```text
14
+ producer owns fix
15
+ reviewer owns regression
16
+ controller owns fan-in
17
+ ```
18
+
19
+ - 主线程是 controller / integrator,负责目标、计划、分派、文件所有权、stop gate、fan-in 和最终验证。
20
+ - 实现方或产生方负责优先修复自己引入的问题。
21
+ - 审查方或提出方负责给出复现条件、断言、期望行为和风险等级,并在修复后回归确认。
22
+ - 主线程判断 finding 是否成立、是否阻塞、是否需要转派或降级。
23
+
11
24
  ## When to Use
12
25
 
13
26
  决策树:
@@ -54,13 +67,13 @@ parallel-agent-dispatch
54
67
  │ │
55
68
  │ 2. 分派规格审查子代理 │
56
69
  │ │ │
57
- │ ├─ 规格不合规? → 实现者修复 → 重新审查
70
+ │ ├─ 规格不合规? → 实现者修复 → 提出方回归
58
71
  │ │ │
59
72
  │ └─ 规格合规 ✓ │
60
73
  │ │
61
74
  │ 3. 分派代码质量审查子代理 │
62
75
  │ │ │
63
- │ ├─ 质量不过关? → 实现者修复 → 重新审查
76
+ │ ├─ 质量不过关? → 实现者修复 → 提出方回归
64
77
  │ │ │
65
78
  │ └─ 质量通过 ✓ │
66
79
  │ │
@@ -110,6 +123,7 @@ parallel-agent-dispatch
110
123
  - 是否有超出规格的额外实现?(over-building)
111
124
  - 接口是否与规格一致?
112
125
  - 测试是否覆盖规格中的验收条件?
126
+ - 如果提出 finding,必须给出复验标准,并在修复后确认原 finding 是否关闭。
113
127
  ```
114
128
 
115
129
  ### 代码质量审查员(Code Quality Reviewer)
@@ -124,8 +138,11 @@ parallel-agent-dispatch
124
138
  - 性能考量
125
139
  - 安全实践
126
140
  - 测试质量
141
+ - 如果提出 finding,必须给出风险等级、期望修复结果和回归结论。
127
142
  ```
128
143
 
144
+ 审查方默认不直接修复。只有用户明确要求“修复 review findings”,或 finding 是机械小修且主线程确认后,才把审查结论转成修复任务。
145
+
129
146
  ## 子代理状态处理
130
147
 
131
148
  子代理报告四种状态之一:
@@ -151,12 +168,36 @@ parallel-agent-dispatch
151
168
 
152
169
  | 任务特征 | 推荐审查策略 |
153
170
  |---------|------------|
154
- | 涉及 1-2 个文件,规格明确,机械性实现 | **轻量审查**:仅实现者自审 + 代码质量审查(跳过规格审查子代理) |
155
- | 涉及多文件,有接口/集成关注点 | **标准审查**:完整三角色(实现者自审 + 规格审查 + 质量审查) |
156
- | 涉及设计判断或广泛代码库理解 | **加强审查**:完整三角色 + 更强模型 |
171
+ | 涉及 1-2 个文件,规格明确,机械性实现 | **light review**:实现者自审 + 主线程检查 |
172
+ | 涉及多文件,有接口/集成关注点 | **standard review**:实现者自审 + 独立 reviewer + 提出方回归 |
173
+ | 涉及设计判断、广泛代码库理解或高风险路径 | **strict review**:规格审查 + 代码质量审查 + 测试 / 安全 / 性能按风险加入 |
157
174
 
158
175
  > **经验参考**:superpowers 项目实测发现,充分的实现者自审可替代大部分审查子代理的工作,将单任务审查时间从 ~25min 降至 ~30s,且缺陷捕获率相当。关键在于实现者自审检查清单的严格执行。
159
176
 
177
+ 默认中等以上任务使用 `standard review`,高风险任务使用 `strict review`。
178
+
179
+ ## Bugfix 与回归闭环
180
+
181
+ 当审查或回归发现 bug:
182
+
183
+ 1. 主线程先判断归属:实现方引入、集成引入、规格不清或外部环境问题。
184
+ 2. 实现方引入的问题优先退回实现方修复。
185
+ 3. 同一个 finding 两次修不好时,主线程缩小问题后转派给更合适的 agent 或自己接手。
186
+ 4. 提出方负责复验原问题;测试代码可以由实现方补,也可以由 test agent 补,但回归结论由提出方给出。
187
+ 5. 主线程运行最终集成验证后才能接受。
188
+
189
+ 回归记录必须能回答:
190
+
191
+ ```text
192
+ Regression:
193
+ - finding:
194
+ - producer:
195
+ - fix:
196
+ - reviewer:
197
+ - regression evidence:
198
+ - controller decision:
199
+ ```
200
+
160
201
  ## 模型选择指南
161
202
 
162
203
  用最经济的模型处理每个角色,节省成本提高速度。
@@ -220,9 +261,10 @@ Task 2: 会话管理
220
261
 
221
262
  ## Red Flags
222
263
 
223
- - 控制器直接动手实现而不分派子代理
264
+ - 已经选择子代理驱动模式后,控制器绕过已分配 worker 直接改同一任务
224
265
  - 跳过规格审查直接进入代码质量审查
225
266
  - 子代理报告 BLOCKED 后不做改变就重试
226
267
  - 所有任务用同一个最强模型(浪费资源)
227
268
  - 子代理间共享上下文(违背隔离原则)
228
269
  - 没有最终的整体审查就声明完成
270
+ - reviewer 提出 finding 后不负责回归确认
@@ -1,126 +1,133 @@
1
- # Team Orchestration
2
-
3
- ## 角色定位
4
-
5
- 使用 `zc team` 把多个 AI CLI worker 运行在 tmux pane 和 git worktree 中,适合需要文件系统级隔离、长时间并行或多 CLI 协作的任务。
6
-
7
- 这是重型能力。默认先考虑串行执行或 `parallel-agent-dispatch`;只有用户明确要求多 worker / team 模式,且文件边界清楚时才启动。
8
-
9
- ## 何时使用
10
-
11
- 使用:
12
-
13
- - 多个任务可以分配给不同 worker。
14
- - 需要独立 worktree 避免写入冲突。
15
- - 需要不同 CLI 处理不同类型任务。
16
- - 任务较长,值得承担 fan-in 和清理成本。
17
-
18
- 不使用:
19
-
20
- - 单个简单任务。
21
- - 任务高度耦合、共享大量上下文。
22
- - 没有测试或集成验证方式。
23
- - 只是想“快一点”,但文件所有权不清。
24
-
25
- ## 快速路径
26
-
27
- 1. 先用 `zc doctor` 检查环境。
28
- 2. `zc team plan` dry-run,任务必须带 `files=` 边界。
29
- 3. 只有 `canStart=true` 且用户确认后,才运行 `zc team start`。
30
- 4. `zc team status` `zc team log` 监控 worker。
31
- 5. fan-in 前运行 `zc team shutdown <team> --plan` 查看 clean/dirty/ahead/merged 状态。
32
- 6. 明确每个分支去向后再 `zc team shutdown`。
33
-
34
- ```bash
35
- zc doctor
36
-
37
- zc team plan \
38
- -w 2 \
39
- -t "API | files=src/api.ts,src/api.test.ts" \
40
- -t "UI | files=src/ui.ts,src/ui.test.ts"
41
-
42
- zc team start \
43
- -w "w1:codex,w2:qwen-code" \
44
- -t "API | files=src/api.ts,src/api.test.ts" \
45
- -t "UI | files=src/ui.ts,src/ui.test.ts"
46
-
47
- zc team status <team-name>
48
- zc team log <team-name>
49
- zc team shutdown <team-name> --plan
50
- zc team shutdown <team-name>
51
- ```
52
-
53
- ## 任务描述规则
54
-
55
- 每个 `-t` 至少包含:
56
-
57
- - 任务名
58
- - `files=` 文件或目录所有权
59
- - 验收标准
60
- - 验证命令
61
-
62
- 示例:
63
-
64
- ```text
65
- 实现用户认证 API | files=src/auth.ts,src/auth.test.ts | verify=pnpm test auth
66
- ```
67
-
68
- 没有 `files=` 时,默认不能证明任务可安全并行。
69
-
70
- ## 启动前推荐格式
71
-
72
- ```text
73
- Recommendation: 使用 zc team because <文件系统隔离收益> outweighs <tmux/worktree/fan-in 成本>。
74
- - worker:
75
- - worktree 边界:
76
- - 不使用 team 的替代方案:
77
- - fan-in 验证:
78
- - 清理策略:
79
-
80
- 确认后我再启动;不确认则按串行或 Context Fan-Out 推进。
81
- ```
82
-
83
- ## Worker 协作纪律
84
-
85
- - 每个 worker 只修改自己的 `files=` 范围。
86
- - 共享接口变更必须通过 mailbox 或主线程广播。
87
- - worker 完成时报告修改文件、验证结果和待集成事项。
88
- - 主线程负责最终集成,不把 fan-in 交给任意单个 worker 自行处理。
89
-
90
- ## Fan-In 与收尾
91
-
92
- 结束前必须记录:
93
-
94
- ```text
95
- Team acceptance transcript:
96
- - Team:
97
- - Workers:
98
- - Task ownership:
99
- - Branch/worktree status:
100
- - Worker results:
101
- - Integrated diff:
102
- - Verification:
103
- - Cleanup:
104
- ```
105
-
106
- 收尾判断:
107
-
108
- - clean 且已合入:可删除 worktree/branch。
109
- - dirty:先读 diff,决定合入、保留或放弃。
110
- - ahead 但未合入:明确是否提交、PR 或丢弃。
111
- - unknown:不要直接删除,先人工确认状态。
112
-
113
- ## 边界与安全
114
-
115
- - 不把 `zc team` 当成默认实现方式。
116
- - 不为了形式统一创建多个 worker。
117
- - 不在未验证 `canStart=true` 时启动。
118
- - 不直接清理 dirty worktree。
119
- - 不混入破坏性 git 操作;需要删除或重置时必须先确认。
120
-
121
- ## 相关技能
122
-
123
- - `parallel-agent-dispatch`:上下文级并行,成本更低。
124
- - `subagent-driven-development`:串行子代理委派。
125
- - `branch-finish-and-cleanup`:分支和 worktree 收尾。
126
- - `verification-before-completion`:声明完成前的最终证据门禁。
1
+ # Team Orchestration
2
+
3
+ ## 角色定位
4
+
5
+ 使用 `zc team` 把多个 AI CLI worker 运行在 tmux pane 和 git worktree 中,适合需要文件系统级隔离、长时间并行或多 CLI 协作的任务。
6
+
7
+ 这是重型能力。默认先考虑串行执行或 `parallel-agent-dispatch`;只有用户明确要求多 worker / team 模式,或用户确认 `agent_opportunity.mode=zc-team`,且文件边界清楚时才启动。
8
+
9
+ ## 何时使用
10
+
11
+ 使用:
12
+
13
+ - 多个任务可以分配给不同 worker。
14
+ - 需要独立 worktree 避免写入冲突。
15
+ - 需要 Codex / Qwen 等不同 CLI 处理不同类型任务。
16
+ - 任务较长,值得承担 fan-in 和清理成本。
17
+
18
+ 不使用:
19
+
20
+ - 单个简单任务。
21
+ - 任务高度耦合、共享大量上下文。
22
+ - 没有测试或集成验证方式。
23
+ - 只是想“快一点”,但文件所有权不清。
24
+
25
+ ## 快速路径
26
+
27
+ 1. 先用 `zc doctor` 检查环境。
28
+ 2. 确认 project-local worktree root 已被忽略;如果没有,把 `.worktrees/` 加入 `.gitignore` 或改用仓库外目录。
29
+ 3. `zc team plan` dry-run,任务必须带 `files=` 边界。
30
+ 4. 只有 `canStart=true` 且用户确认后,才运行 `zc team start`。
31
+ 5. `zc team status` 和 `zc team log` 监控 worker。
32
+ 6. fan-in 前运行 `zc team shutdown <team> --plan` 查看 clean/dirty/ahead/merged 状态。
33
+ 7. 明确每个分支去向后再 `zc team shutdown`。
34
+
35
+ ```bash
36
+ zc doctor
37
+
38
+ zc team plan \
39
+ -w 2 \
40
+ -t "API | files=src/api.ts,src/api.test.ts" \
41
+ -t "UI | files=src/ui.ts,src/ui.test.ts"
42
+
43
+ zc team start \
44
+ -w "w1:codex,w2:qwen-code" \
45
+ -t "API | files=src/api.ts,src/api.test.ts" \
46
+ -t "UI | files=src/ui.ts,src/ui.test.ts"
47
+
48
+ zc team status <team-name>
49
+ zc team log <team-name>
50
+ zc team shutdown <team-name> --plan
51
+ zc team shutdown <team-name>
52
+ ```
53
+
54
+ ## 任务描述规则
55
+
56
+ 每个 `-t` 至少包含:
57
+
58
+ - 任务名
59
+ - `files=` 文件或目录所有权
60
+ - 验收标准
61
+ - 验证命令
62
+
63
+ 示例:
64
+
65
+ ```text
66
+ 实现用户认证 API | files=src/auth.ts,src/auth.test.ts | verify=pnpm test auth
67
+ ```
68
+
69
+ 没有 `files=` 时,默认不能证明任务可安全并行。
70
+
71
+ ## 启动前推荐格式
72
+
73
+ ```text
74
+ Recommendation: 使用 zc team because <文件系统隔离收益> outweighs <tmux/worktree/fan-in 成本>。
75
+ - worker:
76
+ - worktree 边界:
77
+ - 不使用 team 的替代方案:
78
+ - fan-in 验证:
79
+ - 清理策略:
80
+
81
+ 确认后我再启动;不确认则按串行或 Context Fan-Out 推进。
82
+ ```
83
+
84
+ 即使 `start` 或 `task-plan` 输出 `agent_opportunity.mode=zc-team`,也只能作为建议。没有用户明确确认时,不运行 `zc team start`。
85
+
86
+ ## Worker 协作纪律
87
+
88
+ - 每个 worker 只修改自己的 `files=` 范围。
89
+ - 共享接口变更必须通过 mailbox 或主线程广播。
90
+ - worker 完成时报告修改文件、验证结果和待集成事项。
91
+ - 主线程负责最终集成,不把 fan-in 交给任意单个 worker 自行处理。
92
+ - review finding 按 `producer owns fix` 和 `reviewer owns regression` 闭环;提出方必须回归确认,主线程负责接受或转派。
93
+
94
+ ## Fan-In 与收尾
95
+
96
+ 结束前必须记录:
97
+
98
+ ```text
99
+ Team acceptance transcript:
100
+ - Team:
101
+ - Workers:
102
+ - Task ownership:
103
+ - Branch/worktree status:
104
+ - Worker results:
105
+ - Findings/fixes/regression:
106
+ - Integrated diff:
107
+ - Verification:
108
+ - Cleanup:
109
+ ```
110
+
111
+ 收尾判断:
112
+
113
+ - clean 且已合入:可删除 worktree/branch。
114
+ - dirty:先读 diff,决定合入、保留或放弃。
115
+ - ahead 但未合入:明确是否提交、PR 或丢弃。
116
+ - unknown:不要直接删除,先人工确认状态。
117
+
118
+ ## 边界与安全
119
+
120
+ - 不把 `zc team` 当成默认实现方式。
121
+ - 不为了形式统一创建多个 worker。
122
+ - 不在用户未明确确认时启动,即使并行看起来有收益。
123
+ - 不在未验证 `canStart=true` 时启动。
124
+ - 不在项目内创建未被 `.gitignore` 覆盖的 worktree root。
125
+ - 不直接清理 dirty worktree
126
+ - 不混入破坏性 git 操作;需要删除或重置时必须先确认。
127
+
128
+ ## 相关技能
129
+
130
+ - `parallel-agent-dispatch`:上下文级并行,成本更低。
131
+ - `subagent-driven-development`:串行子代理委派。
132
+ - `branch-finish-and-cleanup`:分支和 worktree 收尾。
133
+ - `verification-before-completion`:声明完成前的最终证据门禁。
@@ -1,78 +1,78 @@
1
- # 测试驱动开发
2
-
3
- ## 角色定位
4
-
5
- 先用测试定义期望行为,再写最小实现让测试通过。这个 skill 负责行为变更的证据闭环,不负责铺满测试理论或替代专项浏览器 QA。
6
-
7
- ## 何时使用
8
-
9
- - 新增或修改可观察行为。
10
- - 修复 bug,需要先复现再修复。
11
- - 重构可能影响现有行为。
12
- - 需要为边界条件、错误路径或兼容性补回归保护。
13
-
14
- 不适用:纯文档、纯静态内容、无行为影响的配置调整。浏览器体验改动需要再接 `browser-qa-testing`。
15
-
16
- ## 快速路径
17
-
18
- 1. 写清要证明的行为或 bug 症状。
19
- 2. 选择最小测试层级:unit / integration / E2E。
20
- 3. **RED**:先写一个会失败的测试,确认失败原因匹配目标。
21
- 4. **GREEN**:写最小实现,只让当前测试通过。
22
- 5. **REFACTOR**:在测试保持绿色的前提下简化实现。
23
- 6. 跑相关回归测试,确认没有破坏邻近行为。
24
- 7. 记录测试证据和仍未覆盖的风险。
25
-
26
- ## Bug 修复 Prove-It 模式
27
-
28
- ```text
29
- Bug report -> Reproduction test fails -> Fix -> Reproduction test passes -> Regression suite passes
30
- ```
31
-
32
- 如果无法先写复现测试,必须说明原因,并给出替代证据,例如最小命令、日志、浏览器 transcript 或人工可复查步骤。
33
-
34
- ## 测试层级选择
35
-
36
- | 层级 | 何时选 | 代价 |
37
- |---|---|---|
38
- | Unit | 纯逻辑、边界判断、数据转换 | 快,信心局部 |
39
- | Integration | API、数据库、文件系统、模块边界 | 中等,能发现契约问题 |
40
- | E2E / Browser | 用户关键路径、前端集成体验 | 慢,但最接近真实用户 |
41
-
42
- 默认从能证明目标的最低成本层级开始。不要为了形式写高层测试,也不要用过度 mock 让测试只证明实现细节。
43
-
44
- ## 测试质量门禁
45
-
46
- - 测试名字描述行为,而不是实现细节。
47
- - 断言结果状态,少断言内部调用顺序。
48
- - 测试数据最小且可读,优先 DAMP 而不是过度 DRY。
49
- - mock 只用于慢、不可控或有副作用的外部依赖。
50
- - 每个测试失败时应指向一个清晰原因。
51
-
52
- ## 反模式
53
-
54
- - 先写实现,再补一个永远会过的测试。
55
- - 修改测试来迁就错误实现。
56
- - 跳过失败测试继续加功能。
57
- - 用快照覆盖大量不稳定 UI,导致 diff 不可审。
58
- - 为了覆盖率写不验证业务行为的测试。
59
-
60
- ## 输出契约
61
-
62
- ```text
63
- TDD evidence:
64
- - Behavior:
65
- - Test added/changed:
66
- - Red result:
67
- - Green result:
68
- - Regression command:
69
- - Remaining risk:
70
- ```
71
-
72
- 推荐结论使用:
73
-
74
- ```text
75
- Recommendation: <继续实现 / 修复测试 / 补更高层验证 / 进入 review> because <测试证据、风险和被放弃替代方案>。
76
- ```
77
-
78
- 没有读过失败输出和通过输出,不要声明测试闭环成立。
1
+ # 测试驱动开发
2
+
3
+ ## 角色定位
4
+
5
+ 先用测试定义期望行为,再写最小实现让测试通过。这个 skill 负责行为变更的证据闭环,不负责铺满测试理论或替代专项浏览器 QA。
6
+
7
+ ## 何时使用
8
+
9
+ - 新增或修改可观察行为。
10
+ - 修复 bug,需要先复现再修复。
11
+ - 重构可能影响现有行为。
12
+ - 需要为边界条件、错误路径或兼容性补回归保护。
13
+
14
+ 不适用:纯文档、纯静态内容、无行为影响的配置调整。浏览器体验改动需要再接 `browser-qa-testing`。
15
+
16
+ ## 快速路径
17
+
18
+ 1. 写清要证明的行为或 bug 症状。
19
+ 2. 选择最小测试层级:unit / integration / E2E。
20
+ 3. **RED**:先写一个会失败的测试,确认失败原因匹配目标。
21
+ 4. **GREEN**:写最小实现,只让当前测试通过。
22
+ 5. **REFACTOR**:在测试保持绿色的前提下简化实现。
23
+ 6. 跑相关回归测试,确认没有破坏邻近行为。
24
+ 7. 记录测试证据和仍未覆盖的风险。
25
+
26
+ ## Bug 修复 Prove-It 模式
27
+
28
+ ```text
29
+ Bug report -> Reproduction test fails -> Fix -> Reproduction test passes -> Regression suite passes
30
+ ```
31
+
32
+ 如果无法先写复现测试,必须说明原因,并给出替代证据,例如最小命令、日志、浏览器 transcript 或人工可复查步骤。
33
+
34
+ ## 测试层级选择
35
+
36
+ | 层级 | 何时选 | 代价 |
37
+ |---|---|---|
38
+ | Unit | 纯逻辑、边界判断、数据转换 | 快,信心局部 |
39
+ | Integration | API、数据库、文件系统、模块边界 | 中等,能发现契约问题 |
40
+ | E2E / Browser | 用户关键路径、前端集成体验 | 慢,但最接近真实用户 |
41
+
42
+ 默认从能证明目标的最低成本层级开始。不要为了形式写高层测试,也不要用过度 mock 让测试只证明实现细节。
43
+
44
+ ## 测试质量门禁
45
+
46
+ - 测试名字描述行为,而不是实现细节。
47
+ - 断言结果状态,少断言内部调用顺序。
48
+ - 测试数据最小且可读,优先 DAMP 而不是过度 DRY。
49
+ - mock 只用于慢、不可控或有副作用的外部依赖。
50
+ - 每个测试失败时应指向一个清晰原因。
51
+
52
+ ## 反模式
53
+
54
+ - 先写实现,再补一个永远会过的测试。
55
+ - 修改测试来迁就错误实现。
56
+ - 跳过失败测试继续加功能。
57
+ - 用快照覆盖大量不稳定 UI,导致 diff 不可审。
58
+ - 为了覆盖率写不验证业务行为的测试。
59
+
60
+ ## 输出契约
61
+
62
+ ```text
63
+ TDD evidence:
64
+ - Behavior:
65
+ - Test added/changed:
66
+ - Red result:
67
+ - Green result:
68
+ - Regression command:
69
+ - Remaining risk:
70
+ ```
71
+
72
+ 推荐结论使用:
73
+
74
+ ```text
75
+ Recommendation: <继续实现 / 修复测试 / 补更高层验证 / 进入 review> because <测试证据、风险和被放弃替代方案>。
76
+ ```
77
+
78
+ 没有读过失败输出和通过输出,不要声明测试闭环成立。