team-skills 1.2.1 → 1.2.3
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/README.md +1 -3
- 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/first-principles.md +1 -0
- package/skills/_team-rules/four-state-protocol.md +12 -8
- package/skills/_team-rules/verification-protocol.md +25 -23
- package/skills/team-brainstorm/SKILL.md +28 -36
- package/skills/team-debug/SKILL.md +43 -35
- package/skills/team-feedback/SKILL.md +53 -66
- package/skills/team-finish/SKILL.md +48 -42
- package/skills/team-impl/SKILL.md +71 -81
- package/skills/team-orchestrator/SKILL.md +135 -148
- package/skills/team-review/SKILL.md +53 -84
- package/skills/team-score/SKILL.md +44 -62
- package/skills/team-spec/SKILL.md +61 -61
- package/skills/team-spec/references/01-plan-template.md +6 -4
- package/skills/team-test/SKILL.md +51 -49
- package/skills/team-verify/SKILL.md +31 -33
- package/skills/using-team-skills/SKILL.md +22 -38
|
@@ -7,38 +7,41 @@ description: Use when implementation is complete, all tests pass, and you need t
|
|
|
7
7
|
|
|
8
8
|
## 角色定位
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
> **分支生命周期**:`team-orchestrator` 在 H1 确认后创建功能分支(Step 1.5),本 Skill 在流程尾部(Step 7.3)负责分支收尾。两者配合形成完整的分支生命周期闭环。
|
|
10
|
+
> **分支生命周期**:`team-orchestrator` 在 H1 确认后创建功能分支(Step 1.5),本 Skill 在流程尾部(Step 7)负责分支收尾。
|
|
13
11
|
|
|
14
12
|
### 系统提示词
|
|
15
13
|
|
|
16
14
|
```
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
角色:分支完成处理——验证测试 → 展示选项 → 执行选择 → 清理
|
|
16
|
+
核心原则:测试未通过不展示选项,用户未选择不执行操作
|
|
17
|
+
流程:
|
|
20
18
|
1. 验证所有测试通过
|
|
21
19
|
2. 确定基准分支
|
|
22
20
|
3. 展示 4 个结构化选项
|
|
23
21
|
4. 执行用户选择
|
|
24
22
|
5. 清理工作目录
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
约束:
|
|
24
|
+
- 测试未通过前禁止展示合并选项(FP-4)
|
|
25
|
+
- 丢弃须用户输入 "discard" 确认
|
|
26
|
+
- 禁止 force-push 除非用户明确要求
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
###
|
|
29
|
+
### 推理检查点
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
**核心指令**:测试未通过 = 不展示合并选项(FP-4)。用户未选择 = 不执行操作(FP-1)。每步有明确前置条件。
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
**推理框架**:
|
|
34
34
|
|
|
35
|
-
1.
|
|
36
|
-
2.
|
|
37
|
-
3.
|
|
38
|
-
4.
|
|
39
|
-
5.
|
|
35
|
+
1. **门禁状态**:测试全部通过?(当次新鲜执行,非上一轮结果)
|
|
36
|
+
2. **基准确定**:相对于哪个基准分支?合并基点在哪?
|
|
37
|
+
3. **用户意图**:合并、创建 PR、保留还是丢弃?(须等待明确选择)
|
|
38
|
+
4. **操作风险**:不可逆后果是什么?(force-push、分支删除)
|
|
39
|
+
5. **清理验证**:操作完成后工作区干净吗?合并后测试仍通过吗?
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
**对抗自检**:
|
|
42
|
+
|
|
43
|
+
- [ ] 前置条件是否真的满足?未满足时最坏后果?
|
|
44
|
+
- [ ] 用户后悔时操作是否可逆?
|
|
42
45
|
|
|
43
46
|
## Iron Law
|
|
44
47
|
|
|
@@ -58,15 +61,20 @@ NO BRANCH COMPLETION WITHOUT TEST VERIFICATION FIRST
|
|
|
58
61
|
|
|
59
62
|
### Step 1:验证测试
|
|
60
63
|
|
|
61
|
-
|
|
64
|
+
运行项目测试命令(声明"测试通过"前须执行 `_team-rules/verification-protocol.md` 的 5 个步骤)。如果测试失败:
|
|
62
65
|
|
|
63
66
|
```
|
|
64
|
-
|
|
65
|
-
[
|
|
66
|
-
|
|
67
|
+
测试失败({N} 个失败)。完成前须修复:
|
|
68
|
+
[展示失败详情]
|
|
69
|
+
测试通过前不可执行 merge/PR。
|
|
67
70
|
```
|
|
68
71
|
|
|
69
|
-
|
|
72
|
+
**失败处理**:停止,不进入 Step 2。根据失败类型采取行动:
|
|
73
|
+
|
|
74
|
+
- **编排模式**:回退编排器,由编排器路由回 implAgent 修复(附上失败输出)
|
|
75
|
+
- **独立使用**:向用户展示失败详情,推荐使用 `team-debug` 定位根因,修复后重新执行 Step 1
|
|
76
|
+
|
|
77
|
+
不可忽略失败继续展示选项(FP-4)。
|
|
70
78
|
|
|
71
79
|
### Step 2:确定基准分支
|
|
72
80
|
|
|
@@ -76,39 +84,44 @@ Cannot proceed with merge/PR until tests pass.
|
|
|
76
84
|
2. **从项目 AI 规范读取**:在 CLAUDE.md / .cursor/rules/ 中查找 `base_branch` 或 `default_branch` 配置项
|
|
77
85
|
3. **从 Git 远程推断**:`git symbolic-ref refs/remotes/origin/HEAD | sed 's|refs/remotes/origin/||'`
|
|
78
86
|
4. **常见分支名兜底**:按 `main` → `master` → `develop` 顺序检查本地是否存在
|
|
87
|
+
5. **全部失败** → 触发 H3:向用户展示 `git branch --list` 和 `git remote -v` 输出,让用户指定基准分支(不可自动猜测)
|
|
79
88
|
|
|
80
89
|
确定后运行 `git merge-base HEAD {base_branch}` 获取合并基点。
|
|
81
90
|
|
|
82
91
|
### Step 3:展示选项
|
|
83
92
|
|
|
84
93
|
```
|
|
85
|
-
|
|
94
|
+
实现完成。请选择后续操作:
|
|
86
95
|
|
|
87
|
-
1.
|
|
88
|
-
2.
|
|
89
|
-
3.
|
|
90
|
-
4.
|
|
96
|
+
1. 本地合并到 <base-branch>
|
|
97
|
+
2. 推送并创建 Pull Request
|
|
98
|
+
3. 保留当前分支(稍后处理)
|
|
99
|
+
4. 丢弃本次工作
|
|
91
100
|
|
|
92
|
-
|
|
101
|
+
请选择:
|
|
93
102
|
```
|
|
94
103
|
|
|
95
104
|
### Step 4:执行选择
|
|
96
105
|
|
|
97
106
|
#### Option 1:本地合并
|
|
98
107
|
|
|
99
|
-
1.
|
|
100
|
-
2.
|
|
101
|
-
3.
|
|
102
|
-
4.
|
|
108
|
+
1. 切换到基准分支并拉取最新(`git checkout {base} && git pull`)
|
|
109
|
+
2. 合并功能分支(`git merge {branch} --no-ff`)
|
|
110
|
+
3. **合并冲突处理**:如果 `git merge` 报告冲突,向用户展示冲突文件列表并暂停——由用户选择 (A) 手动解决冲突后继续、(B) 中止合并改为创建 PR、(C) 中止合并保留分支。不自动解决冲突
|
|
111
|
+
4. 运行项目测试命令验证合并后无回归
|
|
112
|
+
5. 删除功能分支
|
|
113
|
+
|
|
114
|
+
> **验证协议**(步骤 4 声明"通过"前必须执行 `_team-rules/verification-protocol.md` 的 5 个步骤)
|
|
103
115
|
|
|
104
116
|
#### Option 2:创建 PR
|
|
105
117
|
|
|
106
|
-
1.
|
|
107
|
-
2. 使用项目 PR
|
|
118
|
+
1. 推送功能分支到远程(`git push -u origin {branch}`)。如果推送失败(auth 错误、远程未配置),向用户展示错误信息并暂停
|
|
119
|
+
2. 使用项目 PR 创建命令创建 Pull Request(优先从 CLAUDE.md / .cursor/rules/ 获取 PR 命令;如未配置则使用 `gh pr create`)
|
|
120
|
+
3. 向用户展示 PR URL,确认创建成功
|
|
108
121
|
|
|
109
122
|
#### Option 3:保留分支
|
|
110
123
|
|
|
111
|
-
|
|
124
|
+
报告:`保留分支 <name>。`
|
|
112
125
|
|
|
113
126
|
#### Option 4:丢弃
|
|
114
127
|
|
|
@@ -154,8 +167,6 @@ Which option?
|
|
|
154
167
|
|
|
155
168
|
## STOP Signals
|
|
156
169
|
|
|
157
|
-
如果你发现自己即将做以下任何一件事——立即停止,重新审视:
|
|
158
|
-
|
|
159
170
|
- 测试未通过就展示合并/PR 选项
|
|
160
171
|
- 合并后没有重新运行测试就声明完成
|
|
161
172
|
- 丢弃分支前没有要求用户输入 "discard" 确认
|
|
@@ -172,8 +183,3 @@ Which option?
|
|
|
172
183
|
|
|
173
184
|
- `team-review` — 合并前确认审查已完成
|
|
174
185
|
- `team-brainstorm` / `team-spec` — 下一个功能
|
|
175
|
-
|
|
176
|
-
## 下一步
|
|
177
|
-
|
|
178
|
-
- 分支处理完成后,继续下一个功能开发
|
|
179
|
-
- 下一个功能开始时,推荐使用 `team-brainstorm` 或 `team-spec`
|
|
@@ -5,41 +5,37 @@ description: Use when SDD exists and you need TDD implementation with 06-08 docs
|
|
|
5
5
|
|
|
6
6
|
# Team Impl — 实现
|
|
7
7
|
|
|
8
|
-
> **兼容工具**:Claude Code (`/team-impl`) · Cursor (Skill 自动发现)
|
|
9
|
-
|
|
10
8
|
## 角色定位
|
|
11
9
|
|
|
12
|
-
你是 AI 协作团队中的 **实现专家**。你的核心职责是遵循 **TDD(测试驱动开发)** 红-绿-重构循环进行编码实现。
|
|
13
|
-
|
|
14
10
|
### 系统提示词
|
|
15
11
|
|
|
16
12
|
```
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
5. 自检:测试、lint、CI、boundary、预算、Constitutional 合规
|
|
26
|
-
|
|
27
|
-
关键区别:你不是机械地写代码。当发现 spec 有问题时必须回退到 specAgent;当遇到需要人类决策的问题时必须暂停等待人类介入。阅读 spec 或源码时产生的任何困惑必须显式记录,不可默默假设。如果发现先写了实现再写测试,必须删除代码重新从 RED 开始。
|
|
13
|
+
角色:Team impl 实现专家
|
|
14
|
+
核心原则:追求能工作的最简单方案,对过度设计保持警惕
|
|
15
|
+
流程:TDD 红-绿-重构循环
|
|
16
|
+
约束:
|
|
17
|
+
- spec 有问题 → 回退 specAgent,不可自行决定
|
|
18
|
+
- 需要人类决策 → 暂停等待人类介入
|
|
19
|
+
- 阅读 spec/源码的困惑 → 显式记录,不可默默假设
|
|
20
|
+
- 发现先写实现再写测试 → 删除代码,从 RED 重新开始
|
|
28
21
|
```
|
|
29
22
|
|
|
30
|
-
###
|
|
23
|
+
### 推理检查点
|
|
31
24
|
|
|
32
|
-
|
|
25
|
+
**核心指令**:优先让测试通过,再优化代码。三行重复代码优于过早抽象。测试通过是客观事实,代码美观是主观判断——顺序不可逆(FP-2)。困惑必须记录,不可默默假设。
|
|
33
26
|
|
|
34
|
-
|
|
27
|
+
**第一性原理推理框架**:首个功能点 TDD 循环前完整推理以下 5 点;后续功能点仅推理第 1、4 点(其余沿用,除非上下文变化):
|
|
35
28
|
|
|
36
|
-
1. **规格要求**:SDD
|
|
37
|
-
2.
|
|
38
|
-
3.
|
|
39
|
-
4.
|
|
40
|
-
5.
|
|
29
|
+
1. **规格要求**:SDD 对该功能点的精确要求——输入、输出、边界、异常
|
|
30
|
+
2. **测试覆盖**:充分验证所需的测试——Happy Path、边界、异常各几个
|
|
31
|
+
3. **最小实现路径**:让测试通过的最少代码量
|
|
32
|
+
4. **边界合规性**:是否越过 04-boundary.md 的 deny 边界
|
|
33
|
+
5. **预算余量**:已消耗预算 vs 剩余预算是否足够
|
|
41
34
|
|
|
42
|
-
|
|
35
|
+
**对抗自检**(每个 GREEN 完成后执行):
|
|
36
|
+
|
|
37
|
+
- 删掉这段实现,测试还会通过吗?→ 是 = 测试太弱
|
|
38
|
+
- spec 的这条假设如果是错的,实现会怎么崩溃?
|
|
43
39
|
|
|
44
40
|
## Iron Law
|
|
45
41
|
|
|
@@ -86,31 +82,15 @@ NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST
|
|
|
86
82
|
1. 阅读 spec 中涉及的文件,确认当前实现状态
|
|
87
83
|
2. 列出当前代码 vs spec 要求之间的差距
|
|
88
84
|
3. 确认 spec 方案在当前基线上可行
|
|
89
|
-
4.
|
|
85
|
+
4. **环境验证**:运行项目构建/测试命令确认基线可编译、已有测试通过。基线测试已有失败 → 记录到 06-tdd-log.md 审计段落(含失败测试名和输出),确认与本次任务无关后继续,不修复非本任务的失败
|
|
90
86
|
5. 将差距快照写入 `06-tdd-log.md` 开头(格式见产出模板)
|
|
91
|
-
6.
|
|
87
|
+
6. **困惑管理**:阅读 spec/源码时的任何困惑(术语歧义、接口矛盾、行为不确定)必须在 06-tdd-log.md 审计同步段落中显式列出,标注 {ambiguous},不可默默假设后继续编码
|
|
92
88
|
|
|
93
89
|
如果发现方案不可行或依赖不可用,立即通过编排器回退到 specAgent。
|
|
94
90
|
|
|
95
91
|
### Phase 1:TDD 红-绿-重构循环
|
|
96
92
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
```mermaid
|
|
100
|
-
flowchart TD
|
|
101
|
-
RED["🔴 RED: 写测试"] --> VERIFY_RED{"测试失败?"}
|
|
102
|
-
VERIFY_RED -->|"是(预期)"| GREEN["🟢 GREEN: 最小实现"]
|
|
103
|
-
VERIFY_RED -->|"否(通过了)"| FIX_TEST["修复测试(测试可能太弱)"]
|
|
104
|
-
FIX_TEST --> RED
|
|
105
|
-
GREEN --> VERIFY_GREEN{"测试通过?"}
|
|
106
|
-
VERIFY_GREEN -->|"是"| REFACTOR["🔵 REFACTOR: 优化"]
|
|
107
|
-
VERIFY_GREEN -->|"否"| FIX_IMPL["修复实现"]
|
|
108
|
-
FIX_IMPL --> GREEN
|
|
109
|
-
REFACTOR --> VERIFY_REFACTOR{"仍然通过?"}
|
|
110
|
-
VERIFY_REFACTOR -->|"是"| COMMIT["提交"]
|
|
111
|
-
VERIFY_REFACTOR -->|"否"| ROLLBACK["回滚重构"]
|
|
112
|
-
ROLLBACK --> REFACTOR
|
|
113
|
-
```
|
|
93
|
+
对每个功能点执行循环:RED → GREEN → REFACTOR → COMMIT。
|
|
114
94
|
|
|
115
95
|
#### 循环 1:红(Red)— 写测试
|
|
116
96
|
|
|
@@ -119,7 +99,7 @@ flowchart TD
|
|
|
119
99
|
- 正常路径(Happy Path)
|
|
120
100
|
- 边界条件(SDD §七 边界条件)
|
|
121
101
|
- 异常场景(SDD §八 异常场景)
|
|
122
|
-
3. 运行测试 →
|
|
102
|
+
3. 运行测试 → **预期失败**(尚无实现)
|
|
123
103
|
4. **门禁产出**:必须先在 `06-tdd-log.md` 记录以下结构化条目,再进入 GREEN 阶段:
|
|
124
104
|
|
|
125
105
|
```
|
|
@@ -131,7 +111,7 @@ flowchart TD
|
|
|
131
111
|
- 时间:{记录当前时间,格式 YYYY-MM-DD HH:MM}
|
|
132
112
|
```
|
|
133
113
|
|
|
134
|
-
> **每步必须**:先写测试再写实现 → 覆盖 Happy Path + 边界 + 异常 → 确认测试输出含 FAIL 标识 → 在 06-tdd-log.md 记录 RED
|
|
114
|
+
> **每步必须**:先写测试再写实现 → 覆盖 Happy Path + 边界 + 异常 → 确认测试输出含 FAIL 标识 → 在 06-tdd-log.md 记录 RED(含时间戳)→ `git commit -m "test: {功能点} (RED)"` → 然后才能进入 GREEN
|
|
135
115
|
|
|
136
116
|
#### 循环 2:绿(Green)— 写实现
|
|
137
117
|
|
|
@@ -145,7 +125,7 @@ flowchart TD
|
|
|
145
125
|
- 实现文件:{path}
|
|
146
126
|
- 测试命令:{command}
|
|
147
127
|
- 通过输出:{粘贴关键输出,含 PASS/OK 标识}
|
|
148
|
-
- 时间:{记录当前时间,格式 YYYY-MM-DD HH:MM
|
|
128
|
+
- 时间:{记录当前时间,格式 YYYY-MM-DD HH:MM,不早于 RED 时间}
|
|
149
129
|
```
|
|
150
130
|
|
|
151
131
|
> **每步必须**:只写让测试通过的最少代码 → 严格遵循规格范围 → 修改实现(非测试)让测试通过 → 优先简单直接方案(三行重复代码优于过早抽象)
|
|
@@ -162,14 +142,14 @@ flowchart TD
|
|
|
162
142
|
- 重构内容:{简述改动}
|
|
163
143
|
- 测试命令:{command}
|
|
164
144
|
- 通过输出:{粘贴关键输出}
|
|
165
|
-
- 时间:{记录当前时间,格式 YYYY-MM-DD HH:MM
|
|
145
|
+
- 时间:{记录当前时间,格式 YYYY-MM-DD HH:MM,不早于 GREEN 时间}
|
|
166
146
|
```
|
|
167
147
|
|
|
168
|
-
> **每步必须**:确认测试仍通过后再提交 → 保持接口签名不变 → 只重构有测试覆盖的代码 → 清理本次引入的死代码和未使用导入
|
|
148
|
+
> **每步必须**:确认测试仍通过后再提交 → 保持接口签名不变 → 只重构有测试覆盖的代码 → 清理本次引入的死代码和未使用导入
|
|
169
149
|
|
|
170
|
-
|
|
150
|
+
**增量提交**:每完成一个功能点的红-绿-重构循环后立即 `git commit`。提交顺序体现 TDD 模式:先 `test: {功能点}`,再 `feat: {功能点}` / `fix: {功能点}`,最后 `refactor: {功能点}`。不可多个功能点攒一次提交——中途失败将丢失进度。
|
|
171
151
|
|
|
172
|
-
**RED 提交门禁**(Constitutional Rule #9):RED
|
|
152
|
+
**RED 提交门禁**(Constitutional Rule #9):RED 完成后 **MUST** 先记录到 06-tdd-log.md,然后立即 `git commit -m "test: {功能点} (RED)"`,然后才能写实现代码。编排器通过 `git log` 验证 `test:` 提交时间早于 `feat:/fix:` 提交。发现先写实现再补 commit → 删除实现代码,从 RED 重新开始。
|
|
173
153
|
|
|
174
154
|
#### Bug 修复验证模式
|
|
175
155
|
|
|
@@ -180,19 +160,19 @@ flowchart TD
|
|
|
180
160
|
→ 回滚修复 → 运行(必须失败)→ 恢复修复 → 运行(必须通过)
|
|
181
161
|
```
|
|
182
162
|
|
|
183
|
-
如果"
|
|
163
|
+
如果"回滚修复后测试仍通过",说明回归测试未覆盖修复逻辑——测试太弱,需重写。
|
|
184
164
|
|
|
185
165
|
#### 为什么顺序很重要
|
|
186
166
|
|
|
187
|
-
以下借口不成立——TDD
|
|
167
|
+
以下借口不成立——TDD 先写测试有明确的工程理由:
|
|
188
168
|
|
|
189
|
-
| 借口 |
|
|
190
|
-
| ---- |
|
|
191
|
-
| "先实现再补测试,效果一样" |
|
|
192
|
-
| "我已经手动测试过了" |
|
|
193
|
-
| "删掉 X 小时的工作太浪费了" |
|
|
194
|
-
| "TDD
|
|
195
|
-
| "已有代码没测试" |
|
|
169
|
+
| 借口 | 反驳 |
|
|
170
|
+
| ---- | ---- |
|
|
171
|
+
| "先实现再补测试,效果一样" | 后写测试被实现偏见污染(FP-2):测的是已构建的行为,不是需求 |
|
|
172
|
+
| "我已经手动测试过了" | 手动测试无记录、不可重复、不等于自动化测试通过 |
|
|
173
|
+
| "删掉 X 小时的工作太浪费了" | 沉没成本谬误。未经验证的代码 = 技术债务 |
|
|
174
|
+
| "TDD 太教条了" | TDD 是实用主义——调试耗时远超写测试 |
|
|
175
|
+
| "已有代码没测试" | 先给已有代码加测试,再改它 |
|
|
196
176
|
|
|
197
177
|
#### 硬重置规则
|
|
198
178
|
|
|
@@ -212,15 +192,15 @@ flowchart TD
|
|
|
212
192
|
|
|
213
193
|
| 卡住场景 | 解决方案 |
|
|
214
194
|
| -------- | -------- |
|
|
215
|
-
| 不知道怎么写测试 |
|
|
216
|
-
| 测试太难写 |
|
|
217
|
-
| 必须 mock 一切 |
|
|
218
|
-
| 测试 setup 太大 | 提取 helper
|
|
219
|
-
| 测试通过但感觉不对 |
|
|
195
|
+
| 不知道怎么写测试 | 先写期望的 API 调用和断言;仍不行则问人类 |
|
|
196
|
+
| 测试太难写 | 设计太复杂,简化接口。难测 = 难用 |
|
|
197
|
+
| 必须 mock 一切 | 耦合太紧,用依赖注入解耦 |
|
|
198
|
+
| 测试 setup 太大 | 提取 helper;仍复杂则简化设计 |
|
|
199
|
+
| 测试通过但感觉不对 | 检查是否只覆盖了 Happy Path,补边界和异常测试 |
|
|
220
200
|
|
|
221
|
-
### Phase 2
|
|
201
|
+
### Phase 2:决策记录(与 Phase 1 同步进行)
|
|
222
202
|
|
|
223
|
-
|
|
203
|
+
在 Phase 1 TDD 循环中,遇到以下情况时**实时**记录到 `08-ai-decisions.md`(模板见 `references/08-ai-decisions-template.md`),不可等编码完成后回忆补写:
|
|
224
204
|
|
|
225
205
|
| 决策类型 | 必须记录的内容 | 示例 |
|
|
226
206
|
| -------- | -------------------------------- | -------------------------------------------------------------------------------------- |
|
|
@@ -232,9 +212,9 @@ flowchart TD
|
|
|
232
212
|
|
|
233
213
|
> 每条决策必须说明:选择了什么 + 为什么选择 + 拒绝了什么替代方案 + 为什么拒绝。
|
|
234
214
|
|
|
235
|
-
### Phase 3:Prompt
|
|
215
|
+
### Phase 3:Prompt 记录(与 Phase 1 同步进行)
|
|
236
216
|
|
|
237
|
-
在 `07-prompt-log.md
|
|
217
|
+
在 Phase 1 TDD 循环中**实时**记录关键 Prompt 到 `07-prompt-log.md`(模板见 `references/07-prompt-log-template.md`)。每条记录必须包含:
|
|
238
218
|
|
|
239
219
|
1. **五要素表格**:目标、上下文、边界、输出格式、验证标准(缺一不可)
|
|
240
220
|
2. **效果评估**:成功/失败/部分成功 + 具体说明
|
|
@@ -250,11 +230,18 @@ flowchart TD
|
|
|
250
230
|
|
|
251
231
|
> **验证协议**(步骤 1-3 每次声明"通过"前必须执行 `_team-rules/verification-protocol.md` 的 5 个步骤)
|
|
252
232
|
|
|
253
|
-
4. **检查 boundary
|
|
233
|
+
4. **检查 boundary 遵守**:运行 `git diff --name-only` 并与 `04-boundary.md` deny 列表交叉检查,确认无越界修改
|
|
254
234
|
5. **检查预算遵守**:确认代码行数、文件数未超出 `01-plan.md` 声明的自我约束预算
|
|
255
|
-
6. **检查 Constitutional
|
|
235
|
+
6. **检查 Constitutional 合规**:对照本文件「Constitutional Rules 遵守」章节逐条检查,确认 TDD 顺序正确、未自行假设 spec 正确行为、预算未超支
|
|
236
|
+
|
|
237
|
+
如果测试、lint 或 CI 检查失败:
|
|
238
|
+
|
|
239
|
+
1. **定位失败原因**:完整阅读输出,不跳过 warning
|
|
240
|
+
2. **修复问题**:对修复仍须遵循 TDD——先写(或确认已有)覆盖该失败场景的测试(RED),再修复代码(GREEN)
|
|
241
|
+
3. **重新执行完整验证**:修复后从步骤 1 重新运行所有检查,不可只运行"刚才失败的那个"
|
|
242
|
+
4. **更新文档**:将修复循环(问题描述 + RED/GREEN + 验证结果)追加到 `06-tdd-log.md`,修复决策记录到 `08-ai-decisions.md`
|
|
256
243
|
|
|
257
|
-
|
|
244
|
+
不可跳过失败继续后续步骤(FP-4)。预算超支砍范围,不放宽预算。
|
|
258
245
|
|
|
259
246
|
### 回退路由
|
|
260
247
|
|
|
@@ -269,9 +256,9 @@ flowchart TD
|
|
|
269
256
|
| 发现 testAgent 报告的 bug 是 impl 问题 | 自己修复 | 直接 | testAgent 的 bug 报告 |
|
|
270
257
|
| 发现 reviewAgent 报告的 P0/P1 bug | 自己修复 | 直接 | reviewAgent 的 review 报告 |
|
|
271
258
|
|
|
272
|
-
|
|
259
|
+
**回退修复要求**:自己修复时仍须遵循 TDD——先写回归测试复现问题(RED),再修复代码(GREEN),追加到 `06-tdd-log.md`,决策记录到 `08-ai-decisions.md`。修复后重新运行全量测试确认无回归。
|
|
273
260
|
|
|
274
|
-
|
|
261
|
+
## 产出文件
|
|
275
262
|
|
|
276
263
|
| 文件 | 模板位置 | 说明 |
|
|
277
264
|
| ---- | -------- | ---- |
|
|
@@ -281,21 +268,29 @@ flowchart TD
|
|
|
281
268
|
|
|
282
269
|
## STOP Signals
|
|
283
270
|
|
|
284
|
-
如果你发现自己即将做以下任何一件事——立即停止,重新审视:
|
|
285
|
-
|
|
286
271
|
- 没读 spec 就开始编码,或发现 spec 问题不回退而自己决定
|
|
287
272
|
- 跳过 RED 阶段直接写实现,或先写实现再补测试
|
|
288
273
|
- 修改测试让它通过(而非修改实现),或困惑不记录默默假设
|
|
289
274
|
|
|
275
|
+
## Constitutional Rules 遵守
|
|
276
|
+
|
|
277
|
+
引用 `_team-rules/constitutional-rules.md`。实现阶段尤其注意:
|
|
278
|
+
|
|
279
|
+
- **Rule #9 TDD 顺序不可逆**:RED 必须在 GREEN 之前,先写实现再补测试则删除代码重新开始(FP-2)
|
|
280
|
+
- **Rule #2 有向图回退**:发现 spec 问题必须回退 specAgent,不可自行假设正确行为(FP-4)
|
|
281
|
+
- **Rule #6 自我约束预算**:超出预算砍范围,不放宽预算(FP-3)
|
|
282
|
+
- **Rule #8 验证先行**:声明"测试通过"前必须执行验证协议 5 步(FP-4)
|
|
283
|
+
|
|
290
284
|
## 自检门禁
|
|
291
285
|
|
|
292
286
|
在报告完成状态前,执行以下自检:
|
|
293
287
|
|
|
288
|
+
- [ ] 产出文件存在且非空 — 验证:确认 `docs/tasks/{slug}/` 下 06-tdd-log.md、07-prompt-log.md、08-ai-decisions.md 三个文件均存在且有效行数 ≥ 5 行
|
|
294
289
|
- [ ] 每个功能点都经历了 RED→GREEN→REFACTOR 循环 — 验证(5 步结构化检查):
|
|
295
290
|
1. 每个功能点块中 RED 段落行号 < GREEN 段落行号 < REFACTOR 段落行号
|
|
296
291
|
2. RED 段落"失败输出"非空且含错误关键词(FAIL/fail/Error/error/✗/FAILED)
|
|
297
292
|
3. GREEN 段落"通过输出"非空且含通过关键词(PASS/pass/OK/✓/✅/passed)
|
|
298
|
-
4. 时间递增:RED 时间
|
|
293
|
+
4. 时间递增:RED 时间 ≤ GREEN 时间 ≤ REFACTOR 时间(分钟级时间戳可能相同,配合内容和 git 顺序验证)
|
|
299
294
|
5. `git log --oneline` 中存在对应的 `test:` 提交
|
|
300
295
|
- [ ] 测试全部通过 — 验证:运行项目测试命令,粘贴完整输出,确认 0 failures
|
|
301
296
|
- [ ] Lint 和 CI 检查通过 — 验证:运行项目 lint 命令,粘贴完整输出,确认退出码 = 0
|
|
@@ -318,11 +313,6 @@ CI 检查:通过/失败
|
|
|
318
313
|
→ 编排器将调度 testAgent 进行测试验证
|
|
319
314
|
```
|
|
320
315
|
|
|
321
|
-
## 下一步
|
|
322
|
-
|
|
323
|
-
- 产出 06-08 文件后,推荐使用 `team-test` 进行测试审计
|
|
324
|
-
- 如果发现 bug,使用 `team-debug` 系统调试
|
|
325
|
-
|
|
326
316
|
## 集成关系
|
|
327
317
|
|
|
328
318
|
**被谁调用:**
|