dev-playbooks-cn 1.6.0 → 1.6.1
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
CHANGED
|
@@ -58,6 +58,86 @@ allowed-tools:
|
|
|
58
58
|
✅ 必须:所有检查通过后才执行归档
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
+
### 禁令 4:禁止演示模式(NO DEMO MODE)
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
❌ 禁止:将工作流当作"演示"或"展示"
|
|
65
|
+
❌ 禁止:输出"演示已完成"、"工作流演示"等措辞
|
|
66
|
+
❌ 禁止:声称完成但实际产物不存在或为空
|
|
67
|
+
❌ 禁止:用"模拟"、"假设"、"如果"代替实际执行
|
|
68
|
+
|
|
69
|
+
✅ 必须:每个阶段都要产出真实的、可验证的产物
|
|
70
|
+
✅ 必须:产物必须写入文件系统(可通过 ls/cat 验证)
|
|
71
|
+
✅ 必须:使用"执行"、"完成"、"已创建"等真实动作词汇
|
|
72
|
+
✅ 必须:如果无法真实执行,立即停止并告知用户
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**检测演示模式的信号**:
|
|
76
|
+
- 使用"演示"、"展示"、"模拟"等词汇
|
|
77
|
+
- 声称完成但没有实际文件写入
|
|
78
|
+
- 提供"选项 A/B"而非执行下一步
|
|
79
|
+
- 输出"后续建议"而非继续执行
|
|
80
|
+
|
|
81
|
+
### 禁令 5:禁止忽略 REVISE REQUIRED
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
❌ 禁止:收到 REVISE REQUIRED 后继续下一阶段
|
|
85
|
+
❌ 禁止:收到 REVISE REQUIRED 后声称"已完成"
|
|
86
|
+
❌ 禁止:收到 REVISE REQUIRED 后提供"选项"让用户选择
|
|
87
|
+
❌ 禁止:收到 REJECTED 后继续执行
|
|
88
|
+
|
|
89
|
+
✅ 必须:Judge 返回 REVISE → 回到阶段 1 重写提案
|
|
90
|
+
✅ 必须:Judge 返回 REJECTED → 停止流程,告知用户
|
|
91
|
+
✅ 必须:Test-Review 返回 REVISE REQUIRED → 回到阶段 7 修复测试
|
|
92
|
+
✅ 必须:Code-Review 返回 REVISE REQUIRED → 回到阶段 8 修复代码
|
|
93
|
+
✅ 必须:修复后重新执行评审阶段,直到通过
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**回退执行流程**:
|
|
97
|
+
```
|
|
98
|
+
Test-Review REVISE REQUIRED:
|
|
99
|
+
→ 回到阶段 7(Test-Red)
|
|
100
|
+
→ 修复测试问题
|
|
101
|
+
→ 重新执行阶段 7-9
|
|
102
|
+
→ 循环直到 Test-Review 通过
|
|
103
|
+
|
|
104
|
+
Code-Review REVISE REQUIRED:
|
|
105
|
+
→ 回到阶段 8(Code)
|
|
106
|
+
→ 修复代码问题
|
|
107
|
+
→ 重新执行阶段 8-10
|
|
108
|
+
→ 循环直到 Code-Review 通过
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### 禁令 6:禁止部分完成前进
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
❌ 禁止:tasks.md 任务完成率 < 100% 时进入下一阶段
|
|
115
|
+
❌ 禁止:测试覆盖率 < AC 要求时进入下一阶段
|
|
116
|
+
❌ 禁止:存在空壳测试(skip/todo/not_implemented)时进入 Code 阶段
|
|
117
|
+
❌ 禁止:存在未实现函数(raise NotImplementedError)时进入 Review 阶段
|
|
118
|
+
|
|
119
|
+
✅ 必须:阶段 7 完成时,所有测试必须是真实的、可执行的
|
|
120
|
+
✅ 必须:阶段 8 完成时,tasks.md 所有任务 100% 完成
|
|
121
|
+
✅ 必须:如果发现范围过大,必须拆分变更包,不能部分完成
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**空壳测试的定义**:
|
|
125
|
+
```python
|
|
126
|
+
# 以下都是空壳测试,禁止存在:
|
|
127
|
+
def test_something():
|
|
128
|
+
pass
|
|
129
|
+
|
|
130
|
+
def test_something():
|
|
131
|
+
pytest.skip("not implemented")
|
|
132
|
+
|
|
133
|
+
def test_something():
|
|
134
|
+
# TODO: implement
|
|
135
|
+
assert True
|
|
136
|
+
|
|
137
|
+
def test_something():
|
|
138
|
+
raise NotImplementedError
|
|
139
|
+
```
|
|
140
|
+
|
|
61
141
|
---
|
|
62
142
|
|
|
63
143
|
## 前置:配置发现(协议无关)
|
|
@@ -67,6 +67,93 @@ proposal → design → [TEST-OWNER] → [CODER] → [TEST-OWNER] → code-revie
|
|
|
67
67
|
|
|
68
68
|
---
|
|
69
69
|
|
|
70
|
+
## 🚨 绝对禁令(ABSOLUTE RULES)
|
|
71
|
+
|
|
72
|
+
> **这些规则没有例外,违反即失败。**
|
|
73
|
+
|
|
74
|
+
### 禁令 1:禁止空壳测试
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
❌ 禁止:测试函数体为空(pass / return)
|
|
78
|
+
❌ 禁止:测试包含 skip / pytest.skip / @skip
|
|
79
|
+
❌ 禁止:测试包含 TODO / FIXME / not_implemented
|
|
80
|
+
❌ 禁止:测试只有 assert True 或 assert 1 == 1
|
|
81
|
+
❌ 禁止:测试抛出 NotImplementedError
|
|
82
|
+
|
|
83
|
+
✅ 必须:每个测试都有真实的断言
|
|
84
|
+
✅ 必须:每个测试都能独立运行
|
|
85
|
+
✅ 必须:测试失败时给出有意义的错误信息
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**空壳测试示例(全部禁止)**:
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
# ❌ 空函数体
|
|
92
|
+
def test_login():
|
|
93
|
+
pass
|
|
94
|
+
|
|
95
|
+
# ❌ 跳过标记
|
|
96
|
+
def test_login():
|
|
97
|
+
pytest.skip("not implemented yet")
|
|
98
|
+
|
|
99
|
+
# ❌ TODO 占位
|
|
100
|
+
def test_login():
|
|
101
|
+
# TODO: implement this test
|
|
102
|
+
assert True
|
|
103
|
+
|
|
104
|
+
# ❌ 无意义断言
|
|
105
|
+
def test_login():
|
|
106
|
+
assert 1 == 1
|
|
107
|
+
|
|
108
|
+
# ❌ 抛出未实现异常
|
|
109
|
+
def test_login():
|
|
110
|
+
raise NotImplementedError("pending")
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**合格测试示例**:
|
|
114
|
+
|
|
115
|
+
```python
|
|
116
|
+
# ✅ 真实的、有断言的测试
|
|
117
|
+
def test_login_returns_jwt():
|
|
118
|
+
# Arrange
|
|
119
|
+
user = create_test_user(email="test@example.com", password="secret")
|
|
120
|
+
|
|
121
|
+
# Act
|
|
122
|
+
result = login_service.login(email="test@example.com", password="secret")
|
|
123
|
+
|
|
124
|
+
# Assert
|
|
125
|
+
assert result.token is not None
|
|
126
|
+
assert result.token.startswith("eyJ")
|
|
127
|
+
assert result.user_id == user.id
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### 禁令 2:禁止演示模式(NO DEMO MODE)
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
❌ 禁止:将测试编写当作"演示"或"展示"
|
|
134
|
+
❌ 禁止:声称"测试已编写"但文件为空或不存在
|
|
135
|
+
❌ 禁止:输出测试计划但不实际创建测试文件
|
|
136
|
+
❌ 禁止:用"模拟"、"假设"代替实际编写测试
|
|
137
|
+
|
|
138
|
+
✅ 必须:每个声称的测试必须是真实文件
|
|
139
|
+
✅ 必须:文件必须包含可执行的测试代码
|
|
140
|
+
✅ 必须:Red 基线证据必须来自实际运行的测试
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 禁令 3:禁止测试与 AC 脱钩
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
❌ 禁止:测试不关联任何 AC
|
|
147
|
+
❌ 禁止:AC 没有对应的测试
|
|
148
|
+
❌ 禁止:测试通过但 AC 实际未验证
|
|
149
|
+
|
|
150
|
+
✅ 必须:每个 AC 至少有一个测试
|
|
151
|
+
✅ 必须:每个测试关联到具体的 AC-xxx
|
|
152
|
+
✅ 必须:verification.md AC 覆盖矩阵 100% 有测试映射
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
70
157
|
## 测试分层与运行策略(关键!)
|
|
71
158
|
|
|
72
159
|
> **核心原则**:测试分层是解决"慢测试阻塞开发"问题的关键。
|