kld-sdd 2.6.1 → 2.6.2
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/package.json +1 -1
- package/templates/skills/kld-sdd/opsx-apply/SKILL.md +28 -21
- package/templates/skills/kld-sdd/opsx-apply/checklist.md +36 -30
- package/templates/skills/kld-sdd/opsx-apply/implementer-prompt.md +27 -31
- package/templates/skills/kld-sdd/opsx-apply/reference.md +7 -38
- package/templates/skills/kld-sdd/opsx-check/SKILL.md +8 -11
- package/templates/skills/kld-sdd/opsx-check/checklist.md +4 -10
- package/templates/skills/kld-sdd/opsx-design/SKILL.md +2 -0
- package/templates/skills/kld-sdd/opsx-design/checklist.md +1 -0
- package/templates/skills/kld-sdd/opsx-propose/reference.md +8 -18
- package/templates/skills/kld-sdd/opsx-rules/reference.md +1 -1
- package/templates/skills/kld-sdd/opsx-spec/SKILL.md +2 -0
- package/templates/skills/kld-sdd/opsx-task/SKILL.md +26 -43
- package/templates/skills/kld-sdd/opsx-task/checklist.md +4 -10
- package/templates/skills/kld-sdd/opsx-task/reference.md +12 -6
- package/templates/skills/kld-sdd/opsx-tdd-anti-patterns/SKILL.md +79 -0
- package/templates/skills/kld-sdd/opsx-tdd-anti-patterns/reference.md +203 -0
- package/templates/skills/kld-sdd/opsx-tdd-core/SKILL.md +167 -0
- package/templates/skills/kld-sdd/opsx-tdd-core/checklist.md +55 -0
- package/templates/skills/kld-sdd/opsx-tdd-core/reference.md +146 -0
- package/templates/skills/kld-sdd/opsx-tdd-metrics/SKILL.md +73 -0
- package/templates/skills/kld-sdd/opsx-tdd-metrics/checklist.md +60 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/SKILL.md +95 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/general/cause-effect-clarity.md +19 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/general/clean-test-data.md +33 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/general/existing-test-awareness.md +17 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/general/given-when-then.md +44 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/general/good-test-qualities.md +32 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/general/mock-boundary.md +44 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/general/naming-conventions.md +37 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/general/no-logic-in-tests.md +30 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/general/one-test-one-scenario.md +23 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/general/parameterized-testing.md +56 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/general/prefer-public-apis.md +17 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/general/test-behaviors-not-methods.md +26 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/java/argument-matching.md +38 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/java/controller-test-rules.md +37 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/java/domain-service-rules.md +33 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/java/java-test-template.md +42 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/java/json-serialization.md +34 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/java/logging-rules.md +35 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/post-generation/compilation-verification.md +25 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/post-generation/execution-verification.md +28 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/python/py-test-template.md +40 -0
- package/templates/skills/kld-sdd/opsx-tdd-quality/rules/typescript/ts-test-template.md +45 -0
- package/templates/skills/kld-sdd/opsx-tdd-review/SKILL.md +66 -0
- package/templates/skills/kld-sdd/opsx-tdd-review/checklist.md +39 -0
- package/templates/skills/kld-sdd/opsx-tdd-rules/SKILL.md +29 -0
- package/templates/skills/kld-sdd/opsx-tdd-rules/rules/controller-strategy.md +32 -0
- package/templates/skills/kld-sdd/opsx-tdd-rules/rules/dag-generation-rules.md +20 -0
- package/templates/skills/kld-sdd/opsx-tdd-rules/rules/des-step-annotation.md +36 -0
- package/templates/skills/kld-sdd/opsx-tdd-rules/rules/exception-path-coverage.md +47 -0
- package/templates/skills/kld-sdd/opsx-tdd-rules/rules/green-scope-declaration.md +45 -0
- package/templates/skills/kld-sdd/opsx-tdd-rules/rules/green-yagni-fence.md +41 -0
- package/templates/skills/kld-sdd/opsx-tdd-rules/rules/multi-validation-split.md +36 -0
- package/templates/skills/kld-sdd/opsx-tdd-rules/rules/non-tdd-modules.md +17 -0
- package/templates/skills/kld-sdd/opsx-tdd-rules/rules/refactor-checklist.md +45 -0
- package/templates/skills/kld-sdd/opsx-tdd-rules/rules/task-type-definitions.md +23 -0
- package/templates/skills/kld-sdd/opsx-tdd-rules/rules/tdd-strategy-selection.md +13 -0
- package/templates/skills/kld-sdd/opsx-tdd-rules/rules/test-execution-gate.md +25 -0
- package/templates/skills/kld-sdd/opsx-tdd-rules/rules/test-skeleton-telemetry.md +19 -0
- package/templates/skills/kld-sdd/opsx-test/SKILL.md +4 -3
package/package.json
CHANGED
|
@@ -191,35 +191,40 @@ e. **⛔ 测试执行门禁** — 按 `proposal.md` 的 `test-strategy` 决定
|
|
|
191
191
|
f. **⛔ 立即更新任务状态** — tasks.md `- [ ]`→`- [x]` 与 `**状态**: [ ]`→`[x]` 两种格式同步;显示 `✅ [TASK-ID] 已完成 [N/M]`;记录任务级 Telemetry(`task_update`,命令模板见 `./reference.md`)。
|
|
192
192
|
g. **继续下一个层级** — 重新检查 DAG,找出依赖已满足的下一层级任务。
|
|
193
193
|
|
|
194
|
-
**【S2
|
|
195
|
-
1. **测试-RED 任务**:编写带真实断言的测试 → 运行测试 → 确认失败(失败原因必须是功能未实现)→ 记录失败原因
|
|
196
|
-
2. **实现-GREEN 任务**:读取对应 RED 的失败原因 → 写最少代码让测试通过 → 运行测试确认通过
|
|
197
|
-
3. **重构-REFACTOR 任务**:在测试全绿状态下重构 → 运行全部测试确认仍绿
|
|
198
|
-
4. 再进入下一个任务
|
|
194
|
+
**【S2 逐任务红绿节奏】**(test-strategy=tdd 时):
|
|
199
195
|
|
|
200
|
-
|
|
196
|
+
⛔ TDD 铁律:NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST
|
|
197
|
+
先写了生产代码?删除它,从测试开始。
|
|
201
198
|
|
|
202
|
-
|
|
199
|
+
⛔ **TDD RED→GREEN 对严格串行,不适用同层并行派发**。即使 DAG 显示同层有多个 RED→GREEN 对,也必须逐对完成:RED-N → GREEN-N → RED-(N+1) → GREEN-(N+1)。禁止一次性编写多个 RED 测试再一次性实现多个 GREEN。
|
|
203
200
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
201
|
+
1. **RED**:编写带真实断言的测试 → 运行 → 确认失败(失败原因必须是功能未实现)→ 记录失败原因
|
|
202
|
+
- ⛔ 只写当前 RED 对应的测试方法,不提前编写后续 RED 的测试
|
|
203
|
+
2. **🔴 中断声明**:RED 确认失败后,显式声明 `🔴 RED-N 确认失败,原因:XXX。现在进入 GREEN-N`
|
|
204
|
+
3. **GREEN**:读取 RED 失败原因 → 执行 GREEN Scope 声明 → 逐条确认 YAGNI 围栏 → 写最少代码让测试通过 → 禁止捆绑未测试代码
|
|
205
|
+
4. **GREEN Scope 门禁**:Verify GREEN 之后,检查生产代码无越界逻辑分支(属于后续 RED 的行为 → 删除)
|
|
206
|
+
5. **REFACTOR**:在测试全绿状态下重构 → 运行全部测试确认仍绿
|
|
207
|
+
6. 再进入下一个任务
|
|
207
208
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
209
|
+
> 完整执行步骤见 opsx-tdd-core/reference.md §1-§3
|
|
210
|
+
> 合理化预防表见 opsx-tdd-core/SKILL.md §7
|
|
211
|
+
> REFACTOR 检查点见 opsx-tdd-rules/rules/refactor-checklist.md
|
|
212
|
+
> 异常路径覆盖门禁见 opsx-tdd-rules/rules/exception-path-coverage.md
|
|
211
213
|
|
|
212
|
-
|
|
213
|
-
- ✅ Mock `BookMapper.countByPublisher()` — 数据库边界,需要真实 DB 环境才能验证
|
|
214
|
-
- ❌ Mock `JwtUtil.parseToken()` — 这是被测行为的实现,mock 它等于跳过了被测逻辑
|
|
214
|
+
**【S2.1 RED 测试质量标准】**(test-strategy=tdd 时强制):
|
|
215
215
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
216
|
+
⛔ RED 测试质量门禁见 `./checklist.md`「§5e.2 RED 测试质量门禁」,核心包括:
|
|
217
|
+
- Mock 边界(引用 opsx-tdd-quality/SKILL.md §2)
|
|
218
|
+
- 测试命名与结构(引用 opsx-tdd-quality/SKILL.md §3-§4)
|
|
219
|
+
- 断言深度(引用 opsx-tdd-anti-patterns/SKILL.md §4 反模式 14)
|
|
220
|
+
- RED 阶段反模式检查(引用 opsx-tdd-anti-patterns/SKILL.md §3)
|
|
219
221
|
|
|
220
|
-
|
|
222
|
+
⛔ BEFORE 编写 RED 测试,必须读取:
|
|
223
|
+
- opsx-tdd-anti-patterns/SKILL.md §3(RED 阶段 3 种反模式 + 门禁函数)
|
|
224
|
+
读取后在报告中确认:"已读取 RED 阶段反模式检查表"。
|
|
221
225
|
|
|
222
|
-
|
|
226
|
+
> 完整 Mock 边界矩阵见 opsx-tdd-quality/SKILL.md §2
|
|
227
|
+
> 完整 15 种反模式见 opsx-tdd-anti-patterns/SKILL.md §3-§4
|
|
223
228
|
|
|
224
229
|
### 5f. 【S3 apply 结束前 checkbox 全量自检】
|
|
225
230
|
|
|
@@ -276,6 +281,8 @@ g. **继续下一个层级** — 重新检查 DAG,找出依赖已满足的下
|
|
|
276
281
|
- **⛔ 编译检查门禁**:每完成一个任务后必须运行编译检查,编译失败禁止标记已完成。
|
|
277
282
|
- **⛔ 测试执行门禁**:根据 `test-strategy` 决定(tdd=强制, impl-first=强制补跑, none=跳过);须真实执行并留 telemetry。${HOOK_GATE_DESCRIPTION}
|
|
278
283
|
- **⛔ 必须实时更新任务状态**:每完成一个任务立即改 tasks.md,两种格式同步。
|
|
284
|
+
- **⛔ task_update 后必须验证 checkbox 已更新**:执行 `check-task` 确认 tasks.md 对应行已变更;未更新则手动修改。
|
|
285
|
+
- **⛔ TDD RED→GREEN 严格串行**:不适用同层并行派发;RED-N 确认失败后必须执行中断声明再进入 GREEN-N;GREEN 完成后必须通过 Scope 门禁再进入下一个 RED。
|
|
279
286
|
- **Git 只读策略**:禁止为了度量自动初始化 Git、创建分支或提交 commit;非 Git 项目用 `vcs_mode=no-git` 继续执行。
|
|
280
287
|
- **⛔ Step 0.1 隔离校验必做**:建 worktree / 建议分支名前必须完成 proposal + 跨 cap spec 依赖校验并输出报告。
|
|
281
288
|
- **Worktree 为加速手段,非必选项**:校验通过且解耦方可多 worktree;有依赖或共享修改面则串行。
|
|
@@ -34,36 +34,41 @@ description: opsx-apply 的阶段强制检查点与自检清单。仅在执行 a
|
|
|
34
34
|
|
|
35
35
|
### §5e 测试执行门禁(按 `proposal.md` 的 `test-strategy`)
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
- [ ] `impl-first` → **⚠️ 警告模式**:运行测试,失败时显示警告但允许继续
|
|
43
|
-
- [ ] `none` → **跳过**:不执行测试门禁
|
|
37
|
+
> 测试执行门禁策略见 opsx-tdd-rules/rules/test-execution-gate.md
|
|
38
|
+
|
|
39
|
+
- [ ] `tdd` → ⛔ 强制执行(RED 确认失败、GREEN 确认通过、REFACTOR 全部测试仍绿)
|
|
40
|
+
- [ ] `impl-first` → ⚠️ 警告模式
|
|
41
|
+
- [ ] `none` → 跳过
|
|
44
42
|
|
|
45
43
|
### §5e.1 TDD 执行合规自检(仅 test-strategy=tdd 时)
|
|
46
44
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
- [ ] REFACTOR 任务执行后已运行全部测试确认仍绿
|
|
52
|
-
- [ ] 未出现"先写生产代码再补测试"的情况
|
|
45
|
+
⛔ 每完成一个 RED/GREEN/REFACTOR 任务后,必须执行 `opsx-tdd-core/checklist.md` §A(7 项)逐项勾选。
|
|
46
|
+
|
|
47
|
+
> 不在此内联复制,以 opsx-tdd-core/checklist.md §A 为唯一真相源。
|
|
48
|
+
> 额外补充:REFACTOR 任务还需执行 `opsx-tdd-rules/rules/refactor-checklist.md`(7 项重构检查点)。
|
|
53
49
|
|
|
54
50
|
### §5e.2 RED 测试质量门禁(仅 test-strategy=tdd 时,RED 任务完成后强制检查)
|
|
55
51
|
|
|
56
|
-
|
|
52
|
+
⛔ 核心原则(引用 opsx-tdd-quality/SKILL.md §2):Mock 边界,不 Mock 行为
|
|
53
|
+
- [ ] 未 mock 被测行为本身
|
|
54
|
+
- [ ] Mock 仅用于系统边界依赖(Mapper/HTTP)
|
|
55
|
+
- [ ] RED 测试 Given 是真实输入
|
|
56
|
+
|
|
57
|
+
⛔ 测试命名与结构(引用 opsx-tdd-quality/SKILL.md §3-§4):
|
|
58
|
+
- [ ] 测试方法名符合 `{method}_{given}_{expected}` 格式
|
|
59
|
+
- [ ] 测试包含 `// Given` / `// When` / `// Then` 注释结构
|
|
60
|
+
- [ ] 一测一场景(测试方法名不含 "and")
|
|
57
61
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
⛔ 断言深度(引用 opsx-tdd-anti-patterns/SKILL.md §4 反模式 14):
|
|
63
|
+
- [ ] 每个测试至少有一个具体值断言(assertEquals),而非仅 assertNotNull
|
|
64
|
+
- [ ] 异常测试使用 `assertThrows(BusinessException.class, ...)` 并验证错误码(而非 RuntimeException.class)
|
|
65
|
+
|
|
66
|
+
⛔ BEFORE 标记 RED 任务完成,必须读取:
|
|
67
|
+
- opsx-tdd-anti-patterns/SKILL.md §3(RED 阶段反模式检查)
|
|
68
|
+
读取后确认:"已检查 RED 阶段反模式"。
|
|
69
|
+
|
|
70
|
+
> 完整质量门禁见 opsx-tdd-quality/SKILL.md §2-§6
|
|
71
|
+
> 完整 15 种反模式见 opsx-tdd-anti-patterns/SKILL.md §3-§4
|
|
67
72
|
|
|
68
73
|
### 任务状态实时更新
|
|
69
74
|
|
|
@@ -72,19 +77,18 @@ description: opsx-apply 的阶段强制检查点与自检清单。仅在执行 a
|
|
|
72
77
|
- [ ] 两种格式同步更新,不可遗漏
|
|
73
78
|
- [ ] 显示进度:`✅ [TASK-ID] 已完成 [N/M]`
|
|
74
79
|
- [ ] 记录任务级 Telemetry(`task_update`,`--task-id=<TASK-ID>` 必填,否则 E4 指标无法计算);TDD 测试骨架任务须在 `--details-json` 带 `"task_kind":"test-skeleton"`(P3,避免红灯误判拉低 E4)
|
|
80
|
+
- [ ] ⛔ **task_update 后必须验证 checkbox 已更新**:执行 `node skywalk-sdd/index.cjs check-task --project=. --change=<变更名称> --task-id=<TASK-ID>` 确认 tasks.md 中对应行已从 `- [ ]` 变为 `- [x]`;若未更新,手动修改 tasks.md 并报告
|
|
75
81
|
|
|
76
82
|
---
|
|
77
83
|
|
|
78
84
|
## §6.0 单元测试真实执行自检(`test-strategy` 非 `none`)
|
|
79
85
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
- `task_update` 的 `details-json` 中 `test_results` 含真实执行数据
|
|
84
|
-
- 或单独运行 `/opsx-test` 并完成 `command=test` 的 `stage_end`
|
|
86
|
+
> 单元测试真实执行自检见 opsx-tdd-core/reference.md §9
|
|
87
|
+
|
|
88
|
+
- [ ] 真实运行单元测试命令并留 telemetry 证据
|
|
85
89
|
- [ ] `tdd`:无测试证据不得结束 apply / 不得 finish worktree
|
|
86
90
|
- [ ] `impl-first`:实现后必须补跑并记录
|
|
87
|
-
- [ ] `none
|
|
91
|
+
- [ ] `none`:跳过
|
|
88
92
|
|
|
89
93
|
---
|
|
90
94
|
|
|
@@ -108,8 +112,10 @@ description: opsx-apply 的阶段强制检查点与自检清单。仅在执行 a
|
|
|
108
112
|
- [ ] ⛔ **DAG 依赖拦截**:执行任务前必须检查依赖,前置未完成必须拦截
|
|
109
113
|
- [ ] ⛔ **编译检查门禁**:每完成一个任务后必须运行编译检查,编译失败禁止标记已完成
|
|
110
114
|
- [ ] ⛔ **测试执行门禁**:根据 `test-strategy` 决定(tdd=强制, impl-first=强制补跑, none=跳过);须真实执行并留 telemetry,`sdd-apply-test-gate` 校验非占位数据
|
|
111
|
-
- [ ] ⛔ **RED
|
|
115
|
+
- [ ] ⛔ **RED 测试质量门禁**:见 §5e.2(引用 opsx-tdd-quality + opsx-tdd-anti-patterns,不在此内联复制)
|
|
112
116
|
- [ ] ⛔ **必须实时更新任务状态**:每完成一个任务立即改 tasks.md,两种格式(`- [ ]`→`- [x]` 与 `**状态**: [ ]`→`[x]`)同步
|
|
117
|
+
- [ ] ⛔ **task_update 后必须验证 checkbox 已更新**:执行 `check-task` 确认 tasks.md 对应行已变更;未更新则手动修改
|
|
118
|
+
- [ ] ⛔ **TDD RED→GREEN 严格串行**:不适用同层并行派发;RED-N 确认失败后必须执行中断声明再进入 GREEN-N;GREEN 完成后必须通过 Scope 门禁再进入下一个 RED
|
|
113
119
|
- [ ] **Git 只读策略**:禁止为了度量自动初始化 Git、创建分支或提交 commit;非 Git 项目用 `vcs_mode=no-git` 继续执行
|
|
114
120
|
- [ ] ⛔ **Step 0.1 隔离校验必做**:建 worktree / 建议分支名前必须完成 proposal + 跨 cap spec 依赖校验并输出报告;未通过不得按 full 并行策略拆 `kld-sdd/<change>/<cap>`
|
|
115
121
|
- [ ] **Worktree 为加速手段,非必选项**:校验通过且解耦方可多 worktree;有依赖或共享修改面则串行
|
|
@@ -4,44 +4,36 @@
|
|
|
4
4
|
|
|
5
5
|
## TDD 铁律(当 test-strategy=tdd 时生效)
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
- 如果要写生产代码,必须先有一个失败的测试
|
|
10
|
-
- 如果先写了生产代码再写测试:删掉生产代码,从测试开始
|
|
7
|
+
NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST.
|
|
8
|
+
- 先写了生产代码再写测试?删掉生产代码,从测试开始
|
|
11
9
|
- "太简单不用测" → 如果值得写,就值得测
|
|
12
10
|
- "事后补测一样" → 不一样,TDD 的价值在于测试驱动设计
|
|
13
|
-
- "删了浪费" → 删掉重来比带着错误前提实现更省时间
|
|
14
11
|
|
|
15
12
|
### 执行 测试-RED 任务
|
|
16
|
-
1.
|
|
13
|
+
1. 读取 spec.md 场景和 design.md 设计
|
|
17
14
|
2. 编写测试代码:Given-When-Then 结构 + 真实断言
|
|
18
|
-
3.
|
|
19
|
-
4.
|
|
20
|
-
5.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
- **Mock 仅用于系统边界依赖**:数据库 Mapper、HTTP 客户端、消息队列等外部依赖可 mock;但被测类自身的业务逻辑、实现被测行为的工具类不可 mock
|
|
29
|
-
- ✅ Mock `BookMapper.countByPublisher()` — 数据库边界,需要真实 DB 环境才能验证
|
|
30
|
-
- ❌ Mock `JwtUtil.parseToken()` — 这是被测行为的实现,mock 它等于跳过了被测逻辑
|
|
31
|
-
- **RED 测试的 Given 必须是真实输入**:传入真实的数据(如 `"invalid"` 字符串、`null`、空对象),让被测代码自行处理;不能 mock 出"这个输入会导致什么结果"
|
|
32
|
-
- **判断标准**:如果删掉被测类的实现(方法体清空),测试是否仍然因为 mock 而通过?如果是,说明测试是假的——真实测试应该在实现缺失时失败
|
|
15
|
+
3. 运行测试,确认失败(失败原因必须是功能未实现)
|
|
16
|
+
4. 如果测试通过:说明测试无效或功能已存在,重新编写
|
|
17
|
+
5. ⛔ 检查异常路径覆盖:每个 orElseThrow/边界检查须有对应测试方法(见 `opsx-tdd-rules/rules/exception-path-coverage.md`)
|
|
18
|
+
|
|
19
|
+
⛔ BEFORE 编写测试代码,必须读取对应语言的规则文件:
|
|
20
|
+
- Java:opsx-tdd-quality/rules/java/java-test-template.md + argument-matching.md + domain-service-rules.md
|
|
21
|
+
- TypeScript:opsx-tdd-quality/rules/typescript/ts-test-template.md
|
|
22
|
+
- Python:opsx-tdd-quality/rules/python/py-test-template.md
|
|
23
|
+
- 通用:opsx-tdd-quality/rules/general/naming-conventions.md + given-when-then.md + no-logic-in-tests.md
|
|
24
|
+
读取后在报告中列出已读取的规则文件路径。
|
|
33
25
|
|
|
34
26
|
### 执行 实现-GREEN 任务
|
|
35
27
|
1. 读取对应 RED 任务的失败原因
|
|
36
|
-
2.
|
|
37
|
-
3.
|
|
38
|
-
4.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
28
|
+
2. 【Scope 声明】按 `opsx-tdd-rules/rules/green-scope-declaration.md` 执行 Scope 声明步骤
|
|
29
|
+
3. 编写最少代码——仅实现 Scope 声明中标记为"属于当前 RED"的步骤
|
|
30
|
+
4. 【Scope 自检】检查生产代码中是否有未被任何当前 RED 断言覆盖的逻辑路径?有则删除
|
|
31
|
+
5. 不提前实现没有测试要求的功能(YAGNI)
|
|
32
|
+
6. 禁止捆绑未测试的代码(Controller/Filter/Config)
|
|
33
|
+
|
|
34
|
+
> 完整执行步骤见 opsx-tdd-core/reference.md §1-§3
|
|
35
|
+
> 完整质量标准见 opsx-tdd-quality/SKILL.md §2
|
|
36
|
+
> Scope 声明规则见 opsx-tdd-rules/rules/green-scope-declaration.md
|
|
45
37
|
|
|
46
38
|
### 执行 重构-REFACTOR 任务
|
|
47
39
|
1. 在所有测试通过的状态下开始
|
|
@@ -49,6 +41,9 @@
|
|
|
49
41
|
3. 运行**全部测试**:`mvn test`(或项目对应命令)
|
|
50
42
|
4. 确认所有测试仍通过
|
|
51
43
|
5. 如果任何测试失败:回退重构,重新尝试
|
|
44
|
+
6. ⛔ 执行 `opsx-tdd-rules/rules/refactor-checklist.md`(7 项重构检查点)
|
|
45
|
+
|
|
46
|
+
> 完整 REFACTOR 检查点见 opsx-tdd-rules/rules/refactor-checklist.md
|
|
52
47
|
|
|
53
48
|
## 派发格式
|
|
54
49
|
|
|
@@ -99,7 +94,7 @@ Agent (general-purpose):
|
|
|
99
94
|
3. 遵循 overview.md 的全局规范
|
|
100
95
|
4. 保持变更最小化,不超出任务范围
|
|
101
96
|
5. **当任务类型为 测试-RED 时**:编写带真实断言的测试,运行并确认失败,记录失败原因
|
|
102
|
-
6. **当任务类型为 实现-GREEN 时**:读取对应 RED
|
|
97
|
+
6. **当任务类型为 实现-GREEN 时**:读取对应 RED 的失败原因,按 `opsx-tdd-rules/rules/green-scope-declaration.md` 执行 Scope 声明,仅实现标记为"属于"的步骤,写最少代码让测试通过,不提前实现未要求的功能
|
|
103
98
|
7. **当任务类型为 重构-REFACTOR 时**:在测试全绿状态下优化代码,运行全部测试确认仍绿
|
|
104
99
|
8. 自我审查(见下方)
|
|
105
100
|
9. 报告结果
|
|
@@ -144,6 +139,7 @@ Agent (general-purpose):
|
|
|
144
139
|
- 是否避免了过度工程(YAGNI)?
|
|
145
140
|
- 是否只构建了任务要求的内容?
|
|
146
141
|
- 是否避免了对无关文件的修改?
|
|
142
|
+
- **GREEN 任务 Scope 检查**:生产代码中是否存在未被当前 RED 断言覆盖的逻辑分支?若存在且属于后续 RED 的行为,是否已删除?
|
|
147
143
|
|
|
148
144
|
如果在自我审查中发现问题,先修复再报告。
|
|
149
145
|
|
|
@@ -22,13 +22,9 @@ node skywalk-sdd/log.cjs record --type=task_update --command=apply --project=. -
|
|
|
22
22
|
|
|
23
23
|
**⚠️ 注意**:`--task-id=<TASK-ID>` 必须替换为实际任务 ID,否则 E4 指标无法计算。
|
|
24
24
|
|
|
25
|
-
**🧪 TDD 测试骨架任务(`test-strategy: tdd`)**:当任务是"测试骨架"
|
|
25
|
+
**🧪 TDD 测试骨架任务(`test-strategy: tdd`)**:当任务是"测试骨架"时,`task_update` 必须在 `--details-json` 中带 `"task_kind":"test-skeleton"`。
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
node skywalk-sdd/log.cjs record --type=task_update --command=apply --project=. --change=<变更名称> --capability=<capability-name> --task-id=<TASK-ID> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --status=completed --result=success --summary="<TASK-ID> 测试骨架完成(TDD 红灯)" --details-json="{\"task_kind\":\"test-skeleton\",\"test_results\":{\"command\":\"<实际测试命令>\",\"passed\":0,\"failed\":<红灯数>,\"skipped\":0,\"duration_ms\":0}}"
|
|
31
|
-
```
|
|
27
|
+
> 完整 test-skeleton telemetry 模板见 opsx-tdd-rules/rules/test-skeleton-telemetry.md
|
|
32
28
|
|
|
33
29
|
**📄 通过文件传递大 payload**:若 `details-json` 内容过长,可先写入 `skywalk-sdd/state/<变更名称>-task-update.json`,再使用 `--details-file` 指定该文件:
|
|
34
30
|
|
|
@@ -353,44 +349,17 @@ node skywalk-sdd/log.cjs record --type=ai_adoption_review --command=apply --proj
|
|
|
353
349
|
|
|
354
350
|
## §6.0 单元测试真实执行(`test-strategy` 非 `none`)
|
|
355
351
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
1. **在结束 apply 或执行 §6.1 收尾之前**,必须在项目根或 worktree 内**真实运行**单元测试命令(`npm test` / `pytest` / `go test` 等)。
|
|
359
|
-
2. 须留下可核验的 telemetry 证据(任选其一):
|
|
360
|
-
- `node skywalk-sdd/log.cjs record --type=test_result ...`(`test_results.command` 非空,且 `passed`/`failed`/`duration_ms` 有实际值)
|
|
361
|
-
- `task_update` 的 `details-json` 中 `test_results` 含真实执行数据
|
|
362
|
-
- 或单独运行 `/opsx-test` 并完成 `command=test` 的 `stage_end`
|
|
363
|
-
3. **Claude Code**:`sdd-apply-test-gate.cjs` 会在 `log.cjs end`、`apply-worktree-finish`、会话 Stop 时自动校验;无证据则**阻断**并提示补跑测试。
|
|
352
|
+
> 单元测试真实执行见 opsx-tdd-core/reference.md §9
|
|
364
353
|
|
|
365
|
-
|
|
366
|
-
|---------------|------|
|
|
367
|
-
| `tdd` | 无测试证据不得结束 apply / 不得 finish worktree |
|
|
368
|
-
| `impl-first` | 同上,实现后必须补跑并记录 |
|
|
369
|
-
| `none` | 跳过本节与 test gate |
|
|
354
|
+
当 `test-strategy` 为 `tdd` 或 `impl-first` 时,必须真实运行单元测试并留 telemetry 证据。`sdd-apply-test-gate.cjs` 会在 `log.cjs end`、`apply-worktree-finish`、会话 Stop 时自动校验。
|
|
370
355
|
|
|
371
356
|
---
|
|
372
357
|
|
|
373
|
-
## §6.0a 测试反模式检查(TDD
|
|
374
|
-
|
|
375
|
-
> ⛔ **RED 阶段就必须检查**:不要等到 GREEN 之后才发现测试是假的。RED 写完立即自检,发现反模式立即重写。
|
|
376
|
-
|
|
377
|
-
### RED 阶段强制检查(写完测试、运行确认失败后)
|
|
378
|
-
|
|
379
|
-
| 反模式 | 表现 | 修复方案 |
|
|
380
|
-
|--------|------|---------|
|
|
381
|
-
| **Mock 被测行为本身** | `when(jwtUtil.parseToken("invalid")).thenThrow(...)` — mock 了被测行为(解析失败),GREEN 只需加 try-catch | 使用真实 JwtUtil + 真实 invalid token,让解析自然失败 |
|
|
382
|
-
| **Mock 预定结论而非准备条件** | `when(bookMapper.countByPublisher(1L)).thenReturn(3)` 后只测 `if (count > 0) throw` — trivial 逻辑 | Mock 边界依赖(Mapper)是合理的,但测试断言应验证完整行为链路(如 verify 不会执行 delete) |
|
|
383
|
-
| **Given 不是真实输入** | mock 出"这个输入会导致什么结果",而非传入真实数据让被测代码自行处理 | 传入真实数据(如 `"invalid"` 字符串、`null`),让被测代码自行决定结果 |
|
|
358
|
+
## §6.0a 测试反模式检查(TDD 模式下)
|
|
384
359
|
|
|
385
|
-
|
|
360
|
+
> 完整 9 种反模式检测见 opsx-tdd-anti-patterns/SKILL.md §3-§4 + reference.md
|
|
386
361
|
|
|
387
|
-
|
|
388
|
-
|--------|------|---------|
|
|
389
|
-
| 测试 mock 行为而非真实行为 | 测试验证的是 mock 被调用,而非真实业务逻辑 | 测试应验证输出/状态变化,而非方法调用 |
|
|
390
|
-
| 生产类中加测试专用方法 | 为方便测试在生产类中加了 public/protected 方法 | 通过公共 API 测试,不加测试专用方法 |
|
|
391
|
-
| 不理解依赖就 mock | mock 了不理解的依赖,隐藏了结构假设 | 先理解依赖的职责再决定是否 mock |
|
|
392
|
-
| 不完整的 mock | partial mock 隐藏了对象间的结构关系 | 要么完整 mock,要么用真实对象 |
|
|
393
|
-
| 集成测试作为事后补充 | 单元测试不足,用集成测试弥补 | 每个行为点应有独立的单元测试 |
|
|
362
|
+
⛔ RED 阶段就必须检查,不要等到 GREEN 之后才发现测试是假的。
|
|
394
363
|
|
|
395
364
|
> 参照来源:`skill-references/superpowers-tdd/testing-anti-patterns.md`
|
|
396
365
|
|
|
@@ -113,17 +113,14 @@ openspec list
|
|
|
113
113
|
|
|
114
114
|
#### 4.4a TDD 合规性检查(仅 test-strategy=tdd 时执行)
|
|
115
115
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
8. **Controller 层策略已声明**:tasks.md 中明确声明 Controller 层使用策略 A 或策略 B
|
|
125
|
-
9. **RED 任务有测试方法名**:每个 RED 任务包含 `{method}_{state}_{outcome}` 格式的测试方法名
|
|
126
|
-
10. **REFACTOR 有具体方向**:每个 REFACTOR 任务列出至少 2 个具体重构点
|
|
116
|
+
⛔ 执行 `opsx-tdd-core/checklist.md` §B(10 项)逐项检查。
|
|
117
|
+
|
|
118
|
+
> 不在此内联复制,以 opsx-tdd-core/checklist.md §B 为唯一真相源。
|
|
119
|
+
> 额外补充:还需检查 `opsx-tdd-rules/rules/exception-path-coverage.md`(异常路径覆盖门禁)。
|
|
120
|
+
|
|
121
|
+
⛔ BEFORE 完成 TDD 合规性检查,如需深度审查测试质量,必须读取:
|
|
122
|
+
- opsx-tdd-review/SKILL.md(测试质量审查清单 8 项 + 缺失测试检测)
|
|
123
|
+
读取后确认:"已读取测试质量审查清单"。
|
|
127
124
|
|
|
128
125
|
#### 4.5 任务完成状态检查(实现后 / 归档前)
|
|
129
126
|
|
|
@@ -38,16 +38,10 @@ description: "opsx-check 阶段日志自检清单 — 仅在 check 自检时读
|
|
|
38
38
|
|
|
39
39
|
## E. TDD 合规性检查(仅 test-strategy=tdd 时)
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
- [ ] tasks.md 中非 TDD 模块未拆红绿循环
|
|
46
|
-
- [ ] tasks.md 中 GREEN 任务的输出不包含未测试的 Controller/Filter/Config
|
|
47
|
-
- [ ] tasks.md 中已声明 Controller 层处理策略(策略 A 或策略 B)
|
|
48
|
-
- [ ] tasks.md 中每个 RED 任务包含测试方法名
|
|
49
|
-
- [ ] tasks.md 中每个 REFACTOR 任务列出至少 2 个具体重构点
|
|
50
|
-
- [ ] check_result 的 categories 中包含 `tdd_compliance`
|
|
41
|
+
⛔ 执行 `opsx-tdd-core/checklist.md` §B(10 项)逐项检查。
|
|
42
|
+
|
|
43
|
+
> 不在此内联复制,以 opsx-tdd-core/checklist.md §B 为唯一真相源。
|
|
44
|
+
> 额外补充:还需检查 `opsx-tdd-rules/rules/exception-path-coverage.md`(异常路径覆盖门禁)。
|
|
51
45
|
|
|
52
46
|
## F. 语义门禁与工作态
|
|
53
47
|
|
|
@@ -130,6 +130,8 @@ openspec list
|
|
|
130
130
|
|
|
131
131
|
**输出路径**:`changes/<name>/specs/<capability>/design.md`
|
|
132
132
|
|
|
133
|
+
**⛔ DES 步骤级标注(TDD 模式强制)**:当 `test-strategy=tdd` 时,被多个 RED/GREEN 对映射的 DES 元素必须标注步骤级任务归属。规则详见 `opsx-tdd-rules/rules/des-step-annotation.md`
|
|
134
|
+
|
|
133
135
|
### 6.5 【version 正则注释】允许前导零
|
|
134
136
|
|
|
135
137
|
design.md 中若使用 version 正则约束(如格式校验 `^\d+\.\d+\.\d+$`),需在正则旁**标注「允许前导零」**:
|
|
@@ -29,6 +29,7 @@ description: opsx-design 的阶段强制检查点与自检清单。仅在执行
|
|
|
29
29
|
- [ ] 外部依赖已列出
|
|
30
30
|
- [ ] 异常处理策略已定义
|
|
31
31
|
- [ ] 文档末尾包含质量红线检查清单
|
|
32
|
+
- [ ] ⛔ **DES 步骤级标注(TDD 模式)**:当 test-strategy=tdd 时,被多个 RED/GREEN 对映射的 DES 元素已标注步骤级 `[GREEN-N]` 归属(规则见 `opsx-tdd-rules/rules/des-step-annotation.md`)
|
|
32
33
|
|
|
33
34
|
**如有任意一项未满足,重新生成对应章节,直至全部通过。**
|
|
34
35
|
|
|
@@ -52,25 +52,12 @@ description: opsx-propose 的详细模板:telemetry 命令、文档拆分模
|
|
|
52
52
|
|
|
53
53
|
**❗ 必须主动询问用户,不得默认选择**
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
三种策略:
|
|
56
|
+
- A) TDD(红绿重构循环):每个行为点先写失败测试再写最少代码,任务量 3-5 倍
|
|
57
|
+
- B) Impl-First(代码先行):先实现再补测试验证
|
|
58
|
+
- C) None(仅实现):不生成测试任务
|
|
56
59
|
|
|
57
|
-
|
|
58
|
-
>
|
|
59
|
-
> **A) 测试驱动 (TDD)** - 红绿重构循环
|
|
60
|
-
> - 每个行为点先写失败测试(红),再写最少代码让它通过(绿),最后重构
|
|
61
|
-
> - DAG: RED → GREEN → REFACTOR → RED → GREEN → ...(行为级小步循环)
|
|
62
|
-
> - 任务数量较多(每个行为点一对红绿),但每个测试都真实驱动实现
|
|
63
|
-
> - 适合:核心业务逻辑、质量要求高、需要测试驱动设计
|
|
64
|
-
> - ⚠️ 注意:TDD 模式下任务数量会显著增加(约为模块级拆分的 3-5 倍)
|
|
65
|
-
>
|
|
66
|
-
> **B) 实现优先 (Impl-First)** - 代码先行
|
|
67
|
-
> - 先生成实现任务,测试作为验证步骤
|
|
68
|
-
> - DAG: 实现代码 → 测试验证
|
|
69
|
-
> - 适合:UI 层、配置类、快速原型
|
|
70
|
-
>
|
|
71
|
-
> **C) 无测试 (None)** - 仅实现
|
|
72
|
-
> - 不生成测试任务,仅编译检查
|
|
73
|
-
> - 适合:简单配置、文档更新"
|
|
60
|
+
使用 **AskUserQuestion** 工具向用户询问(A/B/C 三选一)。
|
|
74
61
|
|
|
75
62
|
根据用户选择:
|
|
76
63
|
- 选择 A:设置 `test-strategy: tdd`
|
|
@@ -79,6 +66,9 @@ description: opsx-propose 的详细模板:telemetry 命令、文档拆分模
|
|
|
79
66
|
|
|
80
67
|
**将用户选择记录到 proposal.md 的 YAML frontmatter 中。**
|
|
81
68
|
|
|
69
|
+
> 完整策略定义见 opsx-tdd-core/SKILL.md §5
|
|
70
|
+
> 交互引导文案见 opsx-tdd-rules/rules/tdd-strategy-selection.md
|
|
71
|
+
|
|
82
72
|
---
|
|
83
73
|
|
|
84
74
|
## §10 质量红线自检清单
|
|
@@ -80,7 +80,7 @@ trigger: always_on
|
|
|
80
80
|
|------|--------|----------|----------|
|
|
81
81
|
| 架构规范 | `architecture` | 目录分层、模块边界、入口 | 分层约定、禁止循环依赖、新代码落位 |
|
|
82
82
|
| 编码规范 | `coding-style` | 语言、lint、缩进 | 命名、缩进、注释语言、CommonJS/ESM |
|
|
83
|
-
| 测试约定 | `testing` | test 目录、框架 | 测试命令、命名、TDD
|
|
83
|
+
| 测试约定 | `testing` | test 目录、框架 | 测试命令、命名、TDD 期望(见 opsx-tdd-core/SKILL.md §5) |
|
|
84
84
|
| 数据安全 | `database-safety` | ORM/迁移目录 | 无 DB 时降级为「禁止危险文件操作/敏感数据提交」 |
|
|
85
85
|
| Git 提交 | `git-commit` | git log 风格、CI | 提交前确认、message 风格、禁止 force push |
|
|
86
86
|
|
|
@@ -162,6 +162,8 @@ node skywalk-sdd/context-client.cjs --query="<当前 Capability 的自然语言
|
|
|
162
162
|
- 需求项使用 `####`(4个#)
|
|
163
163
|
- 场景使用 `#####`(5个#)
|
|
164
164
|
|
|
165
|
+
**⛔ 多校验拆分规则(TDD 关键)**:当单个 STMT 包含多个"必须校验"条件时,每个校验条件必须有对应的独立 AC 场景。规则详见 `opsx-tdd-rules/rules/multi-validation-split.md`
|
|
166
|
+
|
|
165
167
|
### 6.5 【Node 版本约束来源校验】
|
|
166
168
|
|
|
167
169
|
若 spec.md 中声明了 Node 版本约束(如 `>=14`、`>=18` 等),必须在该需求项或 proposal.md 中**声明来源**:
|
|
@@ -132,33 +132,15 @@ Simple 模式或单文件能力域下,**不要拆成多个同文件任务**。
|
|
|
132
132
|
|
|
133
133
|
**若已设置**:向用户确认
|
|
134
134
|
> "🧪 **当前测试策略:[test-strategy]**
|
|
135
|
-
>
|
|
136
|
-
> - `
|
|
137
|
-
> - `
|
|
138
|
-
> - `none`: 无测试 - 不生成测试任务
|
|
139
|
-
>
|
|
135
|
+
> - `tdd`: 红绿重构循环
|
|
136
|
+
> - `impl-first`: 实现优先
|
|
137
|
+
> - `none`: 无测试
|
|
140
138
|
> 是否继续使用该策略?"
|
|
141
139
|
|
|
142
|
-
**若未设置**:使用 **AskUserQuestion**
|
|
143
|
-
> "🧪 **未检测到测试策略配置,请选择:**
|
|
144
|
-
>
|
|
145
|
-
> **A) 测试驱动 (TDD)** - 红绿重构循环
|
|
146
|
-
> - 每个行为点先写失败测试(红),再写最少代码让它通过(绿),最后重构
|
|
147
|
-
> - DAG 顺序:RED → GREEN → REFACTOR → RED → GREEN → ...(行为级小步循环)
|
|
148
|
-
> - 任务数量较多(每个行为点一对红绿),但每个测试都真实驱动实现
|
|
149
|
-
> - 适合:核心业务逻辑、质量要求高、需要测试驱动设计
|
|
150
|
-
> - ⚠️ 注意:TDD 模式下任务数量会显著增加(约为模块级拆分的 3-5 倍)
|
|
151
|
-
>
|
|
152
|
-
> **B) 实现优先 (Impl-First)** - 代码先行
|
|
153
|
-
> - 先生成实现任务,测试作为验证步骤
|
|
154
|
-
> - DAG 顺序:实现代码 → 测试验证
|
|
155
|
-
> - 适合:UI 层、配置类、快速原型
|
|
156
|
-
>
|
|
157
|
-
> **C) 无测试 (None)** - 仅实现
|
|
158
|
-
> - 不生成测试任务,仅编译检查
|
|
159
|
-
> - 适合:简单配置、文档更新"
|
|
140
|
+
**若未设置**:使用 **AskUserQuestion** 工具询问(A/B/C 三选一)
|
|
160
141
|
|
|
161
|
-
|
|
142
|
+
> 完整策略定义见 opsx-tdd-core/SKILL.md §5
|
|
143
|
+
> 交互引导文案见 opsx-tdd-rules/rules/tdd-strategy-selection.md
|
|
162
144
|
|
|
163
145
|
### 6. 【交互引导】确认任务拆解策略
|
|
164
146
|
|
|
@@ -183,25 +165,26 @@ Simple 模式或单文件能力域下,**不要拆成多个同文件任务**。
|
|
|
183
165
|
> **必须包含**:任务执行拓扑图(DAG)+ 原子任务清单。任务结构字段(TASK-ID / 类型 / 依赖 / 状态 / 描述等)见 `./reference.md`「§7 任务结构」。
|
|
184
166
|
|
|
185
167
|
**当 test-strategy=tdd 时,任务生成规则:**
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
168
|
+
|
|
169
|
+
⛔ 核心规则(inline):
|
|
170
|
+
1. 每个场景拆为一个行为点,每个行为点生成一对 RED+GREEN 任务
|
|
171
|
+
2. RED 验收标准必须包含"测试运行失败且失败原因正确"
|
|
172
|
+
3. GREEN 验收标准必须包含"写最少代码让对应 RED 测试通过",禁止捆绑
|
|
173
|
+
4. GREEN 不得包含未测试的 Controller/Filter/Config
|
|
174
|
+
5. 非 TDD 模块(前端 UI/配置/SQL DDL)不拆红绿
|
|
175
|
+
6. Controller 层策略必须在 tasks.md §2.0 中声明(策略 A 或 B)
|
|
176
|
+
7. ⛔ **GREEN 任务 YAGNI 围栏**:每个 GREEN-N 任务描述末尾必须包含"不提前实现 [后续 RED 行为]"围栏声明。规则详见 `opsx-tdd-rules/rules/green-yagni-fence.md`
|
|
177
|
+
|
|
178
|
+
⛔ BEFORE 生成 TDD 任务,必须读取:
|
|
179
|
+
1. opsx-tdd-core/reference.md §6(DAG 生成规则表)
|
|
180
|
+
2. opsx-tdd-rules/rules/dag-generation-rules.md(DAG 规则文件)
|
|
181
|
+
3. opsx-tdd-rules/rules/controller-strategy.md(Controller 策略 A/B)
|
|
182
|
+
4. opsx-tdd-rules/rules/exception-path-coverage.md(异常路径测试覆盖门禁)
|
|
183
|
+
读取后确认:"已读取 N 个规则文件"。
|
|
184
|
+
|
|
185
|
+
> 完整 TDD 拆分示例见 opsx-tdd-core/reference.md §4
|
|
186
|
+
> 非 TDD 模块定义见 opsx-tdd-rules/rules/non-tdd-modules.md
|
|
187
|
+
> 任务类型定义见 opsx-tdd-rules/rules/task-type-definitions.md
|
|
205
188
|
|
|
206
189
|
### 8. 质量红线自检
|
|
207
190
|
|
|
@@ -36,16 +36,10 @@ description: opsx-task 的阶段强制检查点与自检清单。仅在执行 ta
|
|
|
36
36
|
|
|
37
37
|
## §8.1 TDD 合规性自检(仅 test-strategy=tdd 时)
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
- [ ] **GREEN 验收为"最少代码"**:验收标准包含"让对应 RED 测试通过",不包含"实现完整功能"
|
|
44
|
-
- [ ] **非 TDD 模块已排除**:前端 UI、配置、SQL DDL 等不拆红绿循环
|
|
45
|
-
- [ ] **GREEN 任务无捆绑**:每个 GREEN 任务的输出文件不包含未测试的 Controller/Filter/Config(除非该 GREEN 对应的 RED 测试明确测试了这些组件)
|
|
46
|
-
- [ ] **Controller 层策略已声明**:tasks.md §2.0 中明确声明 Controller 层使用策略 A(拆 RED→GREEN)还是策略 B(非 TDD 任务)
|
|
47
|
-
- [ ] **RED 任务有测试方法名**:每个 RED 任务包含 `{method}_{state}_{outcome}` 格式的测试方法名
|
|
48
|
-
- [ ] **REFACTOR 有具体方向**:每个 REFACTOR 任务列出至少 2 个具体重构点
|
|
39
|
+
⛔ 执行 `opsx-tdd-core/checklist.md` §B(10 项)逐项检查。
|
|
40
|
+
|
|
41
|
+
> 不在此内联复制,以 opsx-tdd-core/checklist.md §B 为唯一真相源。
|
|
42
|
+
> 额外补充:还需检查 `opsx-tdd-rules/rules/exception-path-coverage.md`(异常路径覆盖门禁)——每个 orElseThrow/边界检查须有对应 RED 任务。
|
|
49
43
|
|
|
50
44
|
---
|
|
51
45
|
|