team-skills 1.2.2 → 1.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.
- package/package.json +1 -1
- package/scripts/check-skill-structure.js +1 -1
- package/skills/_team-rules/constitutional-rules.md +16 -23
- package/skills/_team-rules/skill-spec.md +485 -0
- package/skills/_team-rules/verification-protocol.md +24 -26
- package/skills/team-brainstorm/SKILL.md +78 -54
- package/skills/team-debug/SKILL.md +74 -82
- package/skills/team-feedback/SKILL.md +105 -73
- package/skills/team-finish/SKILL.md +85 -82
- package/skills/team-impl/SKILL.md +154 -158
- package/skills/team-orchestrator/SKILL.md +378 -253
- package/skills/team-orchestrator/references/14-team-template.md +2 -2
- package/skills/team-review/SKILL.md +144 -125
- package/skills/team-score/SKILL.md +144 -98
- package/skills/team-spec/SKILL.md +122 -145
- package/skills/team-spec/references/01-plan-template.md +6 -4
- package/skills/team-test/SKILL.md +100 -85
- package/skills/team-test/references/10-test-report-template.md +11 -0
- package/skills/team-verify/SKILL.md +79 -91
- package/skills/using-team-skills/SKILL.md +48 -41
|
@@ -7,31 +7,35 @@ description: Use when SDD exists and you need TDD implementation with 06-08 docs
|
|
|
7
7
|
|
|
8
8
|
## 角色定位
|
|
9
9
|
|
|
10
|
-
你是 AI 协作团队中的 **实现专家**。你的核心职责是遵循 **TDD(测试驱动开发)** 红-绿-重构循环进行编码实现。
|
|
11
|
-
|
|
12
10
|
### 系统提示词
|
|
13
11
|
|
|
14
12
|
```
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
角色:实现专家
|
|
14
|
+
核心原则:追求能工作的最简单方案,对过度设计保持警惕
|
|
15
|
+
流程:TDD 红-绿-重构循环
|
|
16
|
+
约束:
|
|
17
|
+
- spec 有问题 → 回退 specAgent,不可自行决定
|
|
18
|
+
- 需要人类决策 → 暂停等待
|
|
19
|
+
- 困惑 → 显式记录,不可默默假设
|
|
20
|
+
- 先写实现再写测试 → 删除代码,从 RED 重新开始
|
|
20
21
|
```
|
|
21
22
|
|
|
22
|
-
###
|
|
23
|
+
### 推理检查点
|
|
24
|
+
|
|
25
|
+
**核心指令**:先让测试通过,再优化代码。三行重复优于过早抽象。测试通过是客观事实,代码美观是主观判断——顺序不可逆(FP-2)。
|
|
23
26
|
|
|
24
|
-
|
|
27
|
+
**推理框架**(首个功能点完整推理 5 点;后续仅推理 1、4,其余沿用):
|
|
25
28
|
|
|
26
|
-
|
|
29
|
+
1. **规格要求**:该功能点的输入、输出、边界、异常规格
|
|
30
|
+
2. **测试覆盖**:Happy Path、边界、异常各需几个测试
|
|
31
|
+
3. **最小实现路径**:让测试通过的最少代码量
|
|
32
|
+
4. **边界合规性**:是否越过 04-boundary.md 的 deny 边界
|
|
33
|
+
5. **预算余量**:已消耗预算 vs 剩余预算是否足够
|
|
27
34
|
|
|
28
|
-
|
|
29
|
-
2. **测试覆盖**:需要哪些测试才能充分验证这个功能点?Happy Path、边界、异常各需要几个?
|
|
30
|
-
3. **最小实现路径**:让这些测试通过的最少代码是什么?(不是最优代码,是最少代码)
|
|
31
|
-
4. **边界合规性**:这个实现是否越过了 04-boundary.md 的 deny 边界?
|
|
32
|
-
5. **预算余量**:当前进度消耗了多少预算?剩余预算足够完成剩余功能点吗?
|
|
35
|
+
**对抗自检**(每个 GREEN 完成后执行):
|
|
33
36
|
|
|
34
|
-
|
|
37
|
+
- 删掉这段实现,测试还会通过吗?→ 是 = 测试太弱
|
|
38
|
+
- spec 的这条假设如果是错的,实现会怎么崩溃?
|
|
35
39
|
|
|
36
40
|
## Iron Law
|
|
37
41
|
|
|
@@ -46,7 +50,7 @@ NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST
|
|
|
46
50
|
| TDD 流程证据(红-绿-重构) | `06-tdd-log.md` |
|
|
47
51
|
| Prompt 工程记录与纠偏 | `07-prompt-log.md` |
|
|
48
52
|
| 关键决策可追溯 | `08-ai-decisions.md` |
|
|
49
|
-
| 通过项目 CI
|
|
53
|
+
| 通过项目 CI 检查 | 代码本身 |
|
|
50
54
|
|
|
51
55
|
## 输入
|
|
52
56
|
|
|
@@ -65,38 +69,37 @@ NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST
|
|
|
65
69
|
|
|
66
70
|
### Phase 0:理解规格
|
|
67
71
|
|
|
68
|
-
1.
|
|
69
|
-
2.
|
|
70
|
-
3.
|
|
71
|
-
4.
|
|
72
|
-
5.
|
|
72
|
+
1. **READ** `01-plan.md` → 理解任务目标和阶段拆分(**IF** `mode == compact` → 跳过)
|
|
73
|
+
2. **READ** `02-context.md` → 理解业务术语和上下文(**IF** `mode == compact` → 跳过)
|
|
74
|
+
3. **READ** `03-sdd.md` → 理解输入/输出/边界/异常规格
|
|
75
|
+
4. **READ** `04-boundary.md` → 理解修改边界(**严格遵守**)
|
|
76
|
+
5. **READ** `05-risk.md` → 理解风险和验证计划(**IF** `mode == compact` → 跳过)
|
|
73
77
|
|
|
74
78
|
### Phase 0.5:审计同步(Audit Sync)
|
|
75
79
|
|
|
76
|
-
|
|
80
|
+
> 在开始编码前对照 spec 分析当前代码基线,识别差距。
|
|
77
81
|
|
|
78
|
-
1.
|
|
79
|
-
2.
|
|
80
|
-
3.
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
82
|
+
1. **READ** spec 中涉及的文件 → 确认当前实现状态
|
|
83
|
+
2. **WRITE** 当前代码与 spec 要求的差距
|
|
84
|
+
3. **ASSERT** spec 方案在当前基线上可行
|
|
85
|
+
- 不可行或依赖不可用 → **ROLLBACK** specAgent(通过编排器)
|
|
86
|
+
4. **EXEC** 项目构建/测试命令 → 确认基线可编译、已有测试通过
|
|
87
|
+
- **IF** 基线测试已有失败 → 记录到 `06-tdd-log.md` 审计段落(含失败测试名+输出),确认与本任务无关后继续
|
|
88
|
+
5. **WRITE** 差距快照到 `06-tdd-log.md` 开头(格式见产出模板)
|
|
89
|
+
6. **FOR** each `confusion`(阅读 spec/源码时的困惑):
|
|
90
|
+
- **WRITE** 到 `06-tdd-log.md` 审计段落,标注 `{ambiguous}`
|
|
91
|
+
- 不可默默假设后继续编码
|
|
86
92
|
|
|
87
93
|
### Phase 1:TDD 红-绿-重构循环
|
|
88
94
|
|
|
89
|
-
|
|
95
|
+
**FOR** each `feature_point`(从 SDD 提取):
|
|
90
96
|
|
|
91
97
|
#### 循环 1:红(Red)— 写测试
|
|
92
98
|
|
|
93
|
-
1.
|
|
94
|
-
2.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
- 异常场景(SDD §八 异常场景)
|
|
98
|
-
3. 运行测试 → **预期失败**(因为还没有实现)
|
|
99
|
-
4. **门禁产出**:必须先在 `06-tdd-log.md` 记录以下结构化条目,再进入 GREEN 阶段:
|
|
99
|
+
1. **READ** `03-sdd.md` → 提取该功能点的规格
|
|
100
|
+
2. **WRITE** 测试 → 覆盖 Happy Path + 边界条件(SDD §七)+ 异常场景(SDD §八)
|
|
101
|
+
3. **EXEC** 项目测试命令 → **ASSERT** 测试失败(尚无实现)
|
|
102
|
+
4. **WRITE** RED 记录到 `06-tdd-log.md`:
|
|
100
103
|
|
|
101
104
|
```
|
|
102
105
|
### 功能点:{名称}
|
|
@@ -104,146 +107,140 @@ NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST
|
|
|
104
107
|
- 测试文件:{path}
|
|
105
108
|
- 测试命令:{command}
|
|
106
109
|
- 失败输出:{粘贴关键输出,含 FAIL 标识}
|
|
107
|
-
- 时间:{
|
|
110
|
+
- 时间:{YYYY-MM-DD HH:MM}
|
|
108
111
|
```
|
|
109
112
|
|
|
110
|
-
|
|
113
|
+
5. **EXEC** `git commit -m "test: {功能点} (RED)"`
|
|
114
|
+
- **ASSERT** `exit_code == 0`(commit 失败 → 检查 pre-commit hook 输出,修复后重试)
|
|
115
|
+
|
|
116
|
+
**GATE** RED 已记录到 `06-tdd-log.md` + 已 commit → 才能进入 GREEN。
|
|
111
117
|
|
|
112
118
|
#### 循环 2:绿(Green)— 写实现
|
|
113
119
|
|
|
114
|
-
1.
|
|
115
|
-
2.
|
|
116
|
-
|
|
117
|
-
|
|
120
|
+
1. **WRITE** 最少代码让测试通过
|
|
121
|
+
2. **EXEC** 项目测试命令 → **ASSERT** 测试通过
|
|
122
|
+
- **IF** `tests_pass` → **WRITE** GREEN 记录到 `06-tdd-log.md`
|
|
123
|
+
- **IF** `tests_fail` → 修改实现(非测试)→ **GOTO** Step 2
|
|
124
|
+
3. GREEN 记录格式:
|
|
118
125
|
|
|
119
126
|
```
|
|
120
127
|
#### 🟢 GREEN
|
|
121
128
|
- 实现文件:{path}
|
|
122
129
|
- 测试命令:{command}
|
|
123
130
|
- 通过输出:{粘贴关键输出,含 PASS/OK 标识}
|
|
124
|
-
- 时间:{
|
|
131
|
+
- 时间:{YYYY-MM-DD HH:MM,不早于 RED 时间}
|
|
125
132
|
```
|
|
126
133
|
|
|
127
|
-
|
|
134
|
+
4. **EXEC** `git commit -m "feat: {功能点} (GREEN)"` 或 `fix:` 前缀(修复类任务)
|
|
135
|
+
- **ASSERT** `exit_code == 0`
|
|
128
136
|
|
|
129
137
|
#### 循环 3:重构(Refactor)
|
|
130
138
|
|
|
131
|
-
1.
|
|
132
|
-
2.
|
|
133
|
-
3.
|
|
134
|
-
4.
|
|
139
|
+
1. **IF** 有可优化项 → 提取公共逻辑、消除重复、优化命名
|
|
140
|
+
2. **EXEC** 项目测试命令 → **ASSERT** 测试仍通过
|
|
141
|
+
3. **WRITE** REFACTOR 记录到 `06-tdd-log.md`
|
|
142
|
+
4. **EXEC** `git commit -m "refactor: {功能点}"` → **ASSERT** `exit_code == 0`
|
|
135
143
|
|
|
136
|
-
|
|
137
|
-
#### 🔵 REFACTOR
|
|
138
|
-
- 重构内容:{简述改动}
|
|
139
|
-
- 测试命令:{command}
|
|
140
|
-
- 通过输出:{粘贴关键输出}
|
|
141
|
-
- 时间:{记录当前时间,格式 YYYY-MM-DD HH:MM,必须晚于 GREEN 时间}
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
> **每步必须**:确认测试仍通过后再提交 → 保持接口签名不变 → 只重构有测试覆盖的代码 → 清理本次引入的死代码和未使用导入 → 确认重构后代码比之前更简洁
|
|
145
|
-
|
|
146
|
-
**增量提交**:每完成一个功能点的红-绿-重构循环后,立即 `git commit`。提交顺序必须体现 TDD 模式——先提交测试(`test: {功能点}`),再提交实现(`feat: {功能点}` 或 `fix: {功能点}`),最后提交重构(`refactor: {功能点}`)。避免在多个功能点完成后才一次性提交——中途失败将丢失进度。
|
|
147
|
-
|
|
148
|
-
**RED 提交门禁**(Constitutional Rule #9):RED 阶段完成后 **MUST** 先记录到 06-tdd-log.md,然后立即执行 `git commit -m "test: {功能点} (RED)"`,然后才能开始写实现代码。这创建了不可伪造的 git 证据链——编排器将通过 `git log` 验证 `test:` 提交时间早于 `feat:/fix:` 提交。如果发现先写了实现代码再补 commit,删除实现代码,重新从 RED 开始。
|
|
144
|
+
**提交纪律**(Constitutional Rule #9):每个功能点的 RED → GREEN → REFACTOR 各自独立 commit(`test:` → `feat:/fix:` → `refactor:`)。RED commit 必须在写实现代码之前完成。编排器通过 `git log` 验证时序。违反 → 删除实现,从 RED 重新开始。
|
|
149
145
|
|
|
150
146
|
#### Bug 修复验证模式
|
|
151
147
|
|
|
152
|
-
修复 bug
|
|
153
|
-
|
|
154
|
-
```
|
|
155
|
-
写回归测试 → 运行(预期失败)→ 修复代码 → 运行(预期通过)
|
|
156
|
-
→ 回滚修复 → 运行(必须失败)→ 恢复修复 → 运行(必须通过)
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
如果"回滚修复后测试仍然通过",说明回归测试没有覆盖修复的逻辑——测试太弱,需要重写。
|
|
160
|
-
|
|
161
|
-
#### 为什么顺序很重要
|
|
148
|
+
**IF** 修复 bug → 完整回归验证:
|
|
162
149
|
|
|
163
|
-
|
|
150
|
+
1. **WRITE** 回归测试 → **EXEC** 项目测试命令(预期失败)
|
|
151
|
+
2. **WRITE** 修复代码 → **EXEC** 项目测试命令(预期通过)
|
|
152
|
+
3. **ROLLBACK** 修复 → **EXEC** 项目测试命令(必须失败)
|
|
153
|
+
4. 恢复修复 → **EXEC** 项目测试命令(必须通过)
|
|
164
154
|
|
|
165
|
-
|
|
166
|
-
| ---- | ------------ |
|
|
167
|
-
| "先实现再补测试,效果一样" | 后写测试 = "这段代码做了什么?";先写测试 = "这段代码应该做什么?"。后写测试被实现偏见污染,你测试的是你构建的,不是需求的 |
|
|
168
|
-
| "我已经手动测试过了" | 手动测试没有记录,无法重复运行。手动测试通过 ≠ 自动化测试通过 |
|
|
169
|
-
| "删掉 X 小时的工作太浪费了" | 沉没成本谬误。保留未经验证的代码 = 技术债务。删掉重新 TDD 才是对的 |
|
|
170
|
-
| "TDD 太教条了,实用主义意味着灵活" | TDD 就是实用主义——调试比写测试慢得多。先写测试 = 10 分钟;先写实现再调试 = 1 小时 |
|
|
171
|
-
| "已有代码没测试" | 你在改进它。先给已有代码加测试,再改它 |
|
|
155
|
+
**IF** "回滚修复后测试仍通过" → 回归测试未覆盖修复逻辑,测试太弱,需重写。
|
|
172
156
|
|
|
173
157
|
#### 硬重置规则
|
|
174
158
|
|
|
175
|
-
|
|
159
|
+
**IF** 发现以下任何情况 → 删除代码,从 RED 重新开始:
|
|
176
160
|
|
|
177
|
-
-
|
|
178
|
-
-
|
|
179
|
-
-
|
|
180
|
-
- 跳过 RED
|
|
161
|
+
- 先写实现再写测试
|
|
162
|
+
- 测试通过但未见其失败过
|
|
163
|
+
- 修改测试而非修改实现
|
|
164
|
+
- 跳过 RED 直接写 GREEN
|
|
181
165
|
- 在无测试覆盖的代码上重构
|
|
182
166
|
|
|
183
|
-
|
|
184
|
-
以上任何情况意味着:删除代码,重新从 RED 开始。
|
|
185
|
-
```
|
|
167
|
+
> 为什么 TDD 顺序不可逆?后写测试被实现偏见污染(FP-2):测的是已构建的行为,不是需求。"先实现再补测试效果一样""已经手动测试过了""删掉 X 小时工作太浪费了"——这些借口均不成立。
|
|
186
168
|
|
|
187
169
|
#### 卡住时怎么办
|
|
188
170
|
|
|
189
|
-
|
|
|
171
|
+
| 场景 | 解决方案 |
|
|
172
|
+
| ---- | -------- |
|
|
173
|
+
| 不知道怎么写测试 | 先写期望的 API 调用和断言;仍不行则问人类 |
|
|
174
|
+
| 测试太难写 | 设计太复杂,简化接口 |
|
|
175
|
+
| 必须 mock 一切 | 耦合太紧,用依赖注入解耦 |
|
|
176
|
+
| 测试 setup 太大 | 提取 helper;仍复杂则简化设计 |
|
|
177
|
+
| 通过但感觉不对 | 检查是否只覆盖了 Happy Path |
|
|
178
|
+
|
|
179
|
+
### 并行记录:决策日志
|
|
180
|
+
|
|
181
|
+
> 与 Phase 1 TDD 循环同步进行,实时记录,不可事后回忆补写。
|
|
182
|
+
|
|
183
|
+
**WRITE** 到 `08-ai-decisions.md`(模板见 `references/08-ai-decisions-template.md`):
|
|
184
|
+
|
|
185
|
+
| 决策类型 | 记录内容 |
|
|
190
186
|
| -------- | -------- |
|
|
191
|
-
|
|
|
192
|
-
|
|
|
193
|
-
|
|
|
194
|
-
|
|
|
195
|
-
|
|
|
187
|
+
| 技术选型 | 选了什么 + 为什么 + 拒绝了什么 + 为什么拒绝 |
|
|
188
|
+
| 架构决策 | 为什么这样组织代码 |
|
|
189
|
+
| 采纳/拒绝 AI 建议 | 采纳或拒绝了什么 + 为什么 |
|
|
190
|
+
| 回退决策 | 为什么回退到 specAgent |
|
|
191
|
+
| 人类决策 | 为什么需要人类介入 |
|
|
196
192
|
|
|
197
|
-
###
|
|
193
|
+
### 并行记录:Prompt 日志
|
|
198
194
|
|
|
199
|
-
|
|
195
|
+
> 与 Phase 1 TDD 循环同步进行。
|
|
200
196
|
|
|
201
|
-
|
|
202
|
-
| -------- | -------------------------------- | -------------------------------------------------------------------------------------- |
|
|
203
|
-
| 技术选型 | 选了什么、为什么、拒绝了什么 | "选择 `formatTokens` 而不是 `toLocaleString`,因为...拒绝 `Intl.NumberFormat` 因为..." |
|
|
204
|
-
| 架构决策 | 为什么这样组织代码 | "将 `generateId` 独立为工具函数而不是内联,因为..." |
|
|
205
|
-
| 采纳/拒绝 AI 建议 | 采纳或拒绝了什么、为什么 | "AI 建议用 lodash.debounce,拒绝,因为项目无 lodash 依赖且原生实现仅 5 行" |
|
|
206
|
-
| 回退决策 | 为什么回退到 specAgent/testAgent | "发现 `03-sdd.md` 未定义空输入行为,回退到 specAgent" |
|
|
207
|
-
| 人类决策 | 为什么需要人类介入 | "`crypto.randomUUID` 在 HTTP 下不可用,有两种方案需要人类决策" |
|
|
197
|
+
**WRITE** 到 `07-prompt-log.md`(模板见 `references/07-prompt-log-template.md`),每条含:
|
|
208
198
|
|
|
209
|
-
|
|
199
|
+
1. **五要素**:目标、上下文、边界、输出格式、验证标准
|
|
200
|
+
2. **效果**:成功/失败/部分成功
|
|
201
|
+
3. **纠偏**(如有):原 Prompt vs 修改后 + 调整效果
|
|
210
202
|
|
|
211
|
-
### Phase
|
|
203
|
+
### Phase 2:自检与全量验证
|
|
212
204
|
|
|
213
|
-
|
|
205
|
+
1. **RESOLVE** `verify_cmd`(首个命中即停):
|
|
206
|
+
1. `READ("05-risk.md", "§一验证计划")`
|
|
207
|
+
2. `READ("CLAUDE.md").test_cmd` / `READ(".cursor/rules/")`
|
|
208
|
+
3. `READ("package.json").scripts.test` / `READ("Makefile")` / `READ("CI 配置")`
|
|
209
|
+
4. *none* → **NEEDS_CONTEXT**:请用户提供验证命令,记录到 `06-tdd-log.md`
|
|
214
210
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
211
|
+
2. **EXEC** `verify_cmd`(测试)→ **ASSERT** `exit_code == 0` && `failures == 0`
|
|
212
|
+
3. **EXEC** 项目 lint 命令 → **ASSERT** `exit_code == 0`
|
|
213
|
+
4. **EXEC** 项目 CI 命令 → **ASSERT** `exit_code == 0`
|
|
218
214
|
|
|
219
|
-
|
|
215
|
+
**验证协议**(步骤 2-4 每次声明"通过"前须执行 `_team-rules/verification-protocol.md` 的 5 个步骤)
|
|
220
216
|
|
|
221
|
-
|
|
217
|
+
5. **EXEC** `git diff --name-only` → **READ** `04-boundary.md` deny 列表 → **ASSERT** 无越界修改
|
|
218
|
+
6. **READ** `01-plan.md` 预算 → **ASSERT** 未超出自我约束预算
|
|
219
|
+
7. **ASSERT** Constitutional 合规:TDD 顺序正确 + 未自行假设 spec + 预算未超支
|
|
222
220
|
|
|
223
|
-
|
|
224
|
-
2. **运行 lint**:项目 lint 命令(同上优先级)
|
|
225
|
-
3. **运行 CI 全量**:项目 CI 检查命令(参考 CLAUDE.md / .cursor/rules/ 或 05-risk.md §一验证计划中的具体命令,如均未定义则从项目构建配置中推断并记录到 06-tdd-log.md)
|
|
221
|
+
**IF** `exit_code != 0`:
|
|
226
222
|
|
|
227
|
-
|
|
223
|
+
1. **READ** full output → 定位失败原因
|
|
224
|
+
2. **WRITE** 失败测试(RED)→ 修复代码(GREEN)→ 仍遵循 TDD
|
|
225
|
+
3. **EXEC** 从步骤 2 重新运行全部检查
|
|
226
|
+
4. **WRITE** 修复循环到 `06-tdd-log.md` + 修复决策到 `08-ai-decisions.md`
|
|
228
227
|
|
|
229
|
-
|
|
230
|
-
5. **检查预算遵守**:确认代码行数、文件数未超出 `01-plan.md` 声明的自我约束预算
|
|
231
|
-
6. **检查 Constitutional 合规**:确认没有违反 orchestrator 的 Constitutional Rules(没有跳过人类介入、没有单向流水线思维)
|
|
228
|
+
**ELSE** → **GOTO** 下一功能点
|
|
232
229
|
|
|
233
|
-
|
|
230
|
+
> 不可跳过失败继续后续步骤(FP-4)。预算超支砍范围,不放宽预算。
|
|
234
231
|
|
|
235
232
|
### 回退路由
|
|
236
233
|
|
|
237
|
-
|
|
234
|
+
**MATCH** `issue_type`:
|
|
238
235
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
236
|
+
- 发现 spec 遗漏(SDD 未定义某个边界)→ **ROLLBACK** specAgent(通过编排器,附遗漏点 + 建议补充)
|
|
237
|
+
- 发现 spec 矛盾(`03-sdd.md` 与 `02-context.md` 冲突)→ **ROLLBACK** specAgent(附矛盾位置 + 分析)
|
|
238
|
+
- 发现 spec 范围不合理(`04-boundary` 禁止了必要修改)→ **ROLLBACK** specAgent(附修改理由 + 建议调整)
|
|
239
|
+
- 需要人类判断的技术决策 → **H3**(附选项 + 各选项 trade-off)
|
|
240
|
+
- testAgent 报告的 bug → 自己修复(仍遵循 TDD:先 RED 再 GREEN)
|
|
241
|
+
- reviewAgent 报告的 P0/P1 bug → 自己修复(仍遵循 TDD)
|
|
242
|
+
|
|
243
|
+
> 自修复仍遵循 TDD:RED(回归测试)→ GREEN(修复)→ 追加 `06-tdd-log.md` + `08-ai-decisions.md`。修复后全量测试确认无回归。
|
|
247
244
|
|
|
248
245
|
## 产出文件
|
|
249
246
|
|
|
@@ -255,46 +252,45 @@ NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST
|
|
|
255
252
|
|
|
256
253
|
## STOP Signals
|
|
257
254
|
|
|
258
|
-
-
|
|
259
|
-
-
|
|
260
|
-
-
|
|
255
|
+
- **编码**前没 **READ** spec,或发现 spec 问题不 **ROLLBACK** 而自己决定
|
|
256
|
+
- **跳过** RED 阶段直接写实现,或先写实现再补测试
|
|
257
|
+
- **修改**测试让它通过(而非修改实现),或困惑不记录默默假设
|
|
258
|
+
|
|
259
|
+
## Constitutional Rules 遵守
|
|
260
|
+
|
|
261
|
+
引用 `_team-rules/constitutional-rules.md`。实现阶段尤其注意:
|
|
262
|
+
|
|
263
|
+
- **Rule #9 TDD 顺序不可逆**:RED 必须在 GREEN 之前,先写实现再补测试则删除代码重新开始(FP-2)
|
|
264
|
+
- **Rule #2 有向图回退**:发现 spec 问题必须 **ROLLBACK** specAgent,不可自行假设正确行为(FP-4)
|
|
265
|
+
- **Rule #6 自我约束预算**:超出预算砍范围,不放宽预算(FP-3)
|
|
266
|
+
- **Rule #8 验证先行**:声明"测试通过"前必须执行验证协议 5 步(FP-4)
|
|
261
267
|
|
|
262
268
|
## 自检门禁
|
|
263
269
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
- [ ]
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
- [ ] 测试全部通过 — 验证:运行项目测试命令,粘贴完整输出,确认 0 failures
|
|
273
|
-
- [ ] Lint 和 CI 检查通过 — 验证:运行项目 lint 命令,粘贴完整输出,确认退出码 = 0
|
|
274
|
-
- [ ] 未修改 04-boundary.md 禁止修改的文件 — 验证:`git diff --name-only` 与 04-boundary.md deny 列表交叉检查
|
|
275
|
-
- [ ] 未超出 01-plan.md 声明的自我约束预算
|
|
276
|
-
- [ ] 所有困惑已显式记录(06-tdd-log.md 审计同步段落)
|
|
277
|
-
- [ ] 如果发现 spec 问题 → 已回退到 specAgent(不是自行决定)
|
|
270
|
+
- [ ] **ASSERT** 产出文件存在且非空 — `06-tdd-log.md`、`07-prompt-log.md`、`08-ai-decisions.md` 有效行数 ≥ 5
|
|
271
|
+
- [ ] **ASSERT** 每个功能点 RED→GREEN→REFACTOR 完整(失败输出 → 通过输出 → 时间递增)
|
|
272
|
+
- [ ] **EXEC** 项目测试命令 → **ASSERT** `failures == 0`
|
|
273
|
+
- [ ] **EXEC** 项目 lint 命令 → **ASSERT** `exit_code == 0`
|
|
274
|
+
- [ ] **EXEC** `git diff --name-only` → **ASSERT** 未修改 `04-boundary.md` deny 文件
|
|
275
|
+
- [ ] **ASSERT** 未超出 `01-plan.md` 自我约束预算
|
|
276
|
+
- [ ] **ASSERT** 所有困惑已显式记录(`06-tdd-log.md` 审计段落)
|
|
277
|
+
- [ ] **IF** 发现 spec 问题 → 已 **ROLLBACK** specAgent
|
|
278
278
|
|
|
279
279
|
## 完成标志
|
|
280
280
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
测试结果:{N} 通过,{N} 失败
|
|
288
|
-
CI 检查:通过/失败
|
|
289
|
-
如有保留意见或阻塞,列出具体内容
|
|
290
|
-
→ 编排器将调度 testAgent 进行测试验证
|
|
291
|
-
```
|
|
281
|
+
**MATCH** `result`:
|
|
282
|
+
|
|
283
|
+
- TDD 完成 + CI 通过 + 边界合规 → **DONE**(`文件: {N} 修改 / {N} 新增`, `测试: {N} pass / {N} fail`, `CI: pass`)
|
|
284
|
+
- 完成但有保留意见 → **DONE_WITH_CONCERNS**(`concerns: [...]`)
|
|
285
|
+
- spec 不足无法继续 → **NEEDS_CONTEXT**
|
|
286
|
+
- 被阻塞(spec 问题/人类决策)→ **BLOCKED**
|
|
292
287
|
|
|
293
288
|
## 集成关系
|
|
294
289
|
|
|
295
290
|
**被谁调用:**
|
|
296
291
|
|
|
297
292
|
- `team-orchestrator`(编排模式)
|
|
293
|
+
- `team-brainstorm`(用户跳过规格阶段时直接路由)
|
|
298
294
|
- `team-feedback`(审查反馈修复后重新验证)
|
|
299
295
|
|
|
300
296
|
**配对使用:**
|