openmatrix 0.2.26 → 0.2.27

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/skills/test.md CHANGED
@@ -36,13 +36,9 @@ priority: high
36
36
  </INTENT-JUDGMENT>
37
37
 
38
38
  <NO-OTHER-SKILLS>
39
- **绝对禁止**调用以下技能:
40
- - ❌ superpowers:test-driven-development → 你已经在 om:test 中了
41
- - ❌ superpowers:* → 全部被 OpenMatrix 替代
42
- - ❌ gsd:* → 全部被 OpenMatrix 替代
43
- - ❌ 任何其他任务编排相关的技能
39
+ 本 skill 与其他任务编排技能功能重叠,请勿同时使用。
44
40
 
45
- **测试生成阶段只能使用 Agent 工具** — 直接调用 Agent,不通过任何中间层。
41
+ **测试生成阶段使用 Agent 工具执行。**
46
42
  </NO-OTHER-SKILLS>
47
43
 
48
44
  <MANDATORY-EXECUTION-ORDER>
@@ -67,6 +63,95 @@ Step 8: 输出测试报告
67
63
  **铁律:验证失败自动循环,最多 3 次,超过必须暂停**
68
64
  </MANDATORY-EXECUTION-ORDER>
69
65
 
66
+ <IRON-LAW>
67
+ ## 铁律:没有失败的测试,不许写生产代码
68
+
69
+ **NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST**
70
+
71
+ 在测试前写了代码?删除。重新开始。
72
+
73
+ 没有例外:
74
+ - 不要保留作为"参考"
75
+ - 不要"写测试时适应它"
76
+ - 不要看它
77
+
78
+ 删除意味着删除。
79
+
80
+ ## Why Order Matters
81
+
82
+ ### "我会在实现后写测试来验证工作"
83
+
84
+ 实现后写的测试立即通过。立即通过什么也证明不了:
85
+ - 可能测试错误的东西
86
+ - 可能测试实现,不是行为
87
+ - 可能遗漏你忘记的边界情况
88
+ - 你从未看到它捕获 bug
89
+
90
+ 测试优先强制你看到测试失败,证明它确实测试某些东西。
91
+
92
+ ### "我手动测试了所有边界情况"
93
+
94
+ 手动测试是临时的。你以为测试了所有东西但:
95
+ - 没有测试记录
96
+ - 代码变化时无法重跑
97
+ - 压力下容易忘记情况
98
+ - "我试过了" ≠ 全面
99
+
100
+ 自动化测试是系统的。每次运行相同方式。
101
+
102
+ ### "删除 X 小时工作是浪费"
103
+
104
+ 沉没成本谬误。时间已经没了。现在选择:
105
+ - 删除并用 TDD 重写(X+小时,高信心)
106
+ - 保留并在后加测试(30分钟,低信心,可能 bug)
107
+
108
+ "浪费"是保留不能信任的代码。无真实测试的工作代码是技术债务。
109
+
110
+ ## Good vs Bad Tests
111
+
112
+ | 质量 | Good | Bad |
113
+ |-----|------|-----|
114
+ | **最小化** | 一件事。名字有"and"?拆分。 | `test('validates email and domain and whitespace')` |
115
+ | **清晰** | 名字描述行为 | `test('test1')` |
116
+ | **展示意图** | 展示期望 API | 模糊代码该做什么 |
117
+ | **真实代码** | 无 mock(除非不可避免) | Mock 一切 |
118
+
119
+ ### Good Example
120
+
121
+ ```typescript
122
+ test('重试失败操作 3 次', async () => {
123
+ let attempts = 0;
124
+ const operation = () => {
125
+ attempts++;
126
+ if (attempts < 3) throw new Error('fail');
127
+ return 'success';
128
+ };
129
+
130
+ const result = await retryOperation(operation);
131
+
132
+ expect(result).toBe('success');
133
+ expect(attempts).toBe(3);
134
+ });
135
+ ```
136
+
137
+ 一件事,测试真实行为,清晰名字。
138
+
139
+ ### Bad Example
140
+
141
+ ```typescript
142
+ test('retry works', async () => {
143
+ const mock = jest.fn()
144
+ .mockRejectedValueOnce(new Error())
145
+ .mockRejectedValueOnce(new Error())
146
+ .mockResolvedValueOnce('success');
147
+ await retryOperation(mock);
148
+ expect(mock).toHaveBeenCalledTimes(3);
149
+ });
150
+ ```
151
+
152
+ 模糊名字,测试 mock 不是代码。
153
+ </IRON-LAW>
154
+
70
155
  <objective>
71
156
  智能测试生成 - 从业务角度分析代码逻辑,发现测试缺失,自动生成并验证测试。遵循 OpenMatrix 分层原则:CLI 收集原始数据,AI 分析并生成测试。
72
157
  </objective>
@@ -682,6 +767,8 @@ Step 8: 输出测试报告
682
767
 
683
768
  **最大重试 3 次,超过必须暂停检查配置**
684
769
 
770
+ **没有失败的测试,不许写生产代码(参见 IRON-LAW 区块)**
771
+
685
772
  ## 红线
686
773
 
687
774
  - 3 次生成失败 → 暂停,检查测试框架配置
@@ -703,8 +790,18 @@ Step 8: 输出测试报告
703
790
  - "跳过自动验证"
704
791
  - 只测试函数调用而不是业务场景
705
792
  - 生成的测试与项目风格不一致
706
-
707
- **所有这些意味着:停止。回到 Step 2 或执行自动验证循环。**
793
+ - "我先写实现,再补测试"
794
+ - "这个测试一次就能过,不用看失败"
795
+ - "测试代码不重要,能过就行"
796
+ - "边界情况太多了,只测主流程"
797
+ - "删除这个失败的测试用例算了"
798
+ - "Mock 返回什么都行,只要测试通过"
799
+ - 测试名字描述实现细节而非业务行为
800
+ - 一个测试验证多个不相关的事情
801
+ - 测试依赖执行顺序或共享状态
802
+ - 使用 `any` 类型绕过类型检查
803
+
804
+ **这些都意味着:停止。回到 Step 2 或执行自动验证循环。**
708
805
 
709
806
  ## 测试生成原则
710
807