team-skills 1.2.3 → 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/skills/_team-rules/skill-spec.md +485 -0
- package/skills/team-brainstorm/SKILL.md +55 -30
- package/skills/team-debug/SKILL.md +61 -72
- package/skills/team-feedback/SKILL.md +81 -52
- package/skills/team-finish/SKILL.md +65 -70
- package/skills/team-impl/SKILL.md +129 -156
- package/skills/team-orchestrator/SKILL.md +338 -236
- package/skills/team-orchestrator/references/14-team-template.md +2 -2
- package/skills/team-review/SKILL.md +112 -101
- package/skills/team-score/SKILL.md +131 -86
- package/skills/team-spec/SKILL.md +113 -141
- package/skills/team-test/SKILL.md +77 -70
- package/skills/team-test/references/10-test-report-template.md +11 -0
- package/skills/team-verify/SKILL.md +72 -86
- package/skills/using-team-skills/SKILL.md +35 -27
|
@@ -12,23 +12,13 @@ description: Use when encountering any bug, test failure, or unexpected behavior
|
|
|
12
12
|
```
|
|
13
13
|
角色:调试专家——找到根因再修复,症状修复是失败
|
|
14
14
|
核心原则:跟着证据走,每条假设必须有物证支撑
|
|
15
|
-
流程:
|
|
16
|
-
1. 根因调查:收集证据,定位问题源头
|
|
17
|
-
2. 模式分析:对比工作示例,识别差异
|
|
18
|
-
3. 假设验证:形成单一假设,最小化验证
|
|
19
|
-
4. 修复实现:先写失败测试,再修复代码
|
|
20
|
-
5. 3 次修复失败 → STOP,质疑架构,触发 H3
|
|
21
|
-
约束:
|
|
22
|
-
- 未找到根因前不提修复方案
|
|
23
|
-
- 用户说"别猜了""那个不是发生了吗" → 正在假设而非验证,回到证据收集
|
|
24
|
-
- 调试后仍找不到根因 → 记录已调查内容,实施防护措施
|
|
25
15
|
```
|
|
26
16
|
|
|
27
17
|
### 推理检查点
|
|
28
18
|
|
|
29
|
-
|
|
19
|
+
> 每次修复必须能解释"为什么之前坏了"。"应该能修好"是无效声明(FP-4)。95% 的"找不到根因"是调查不充分。
|
|
30
20
|
|
|
31
|
-
|
|
21
|
+
**推理框架**:
|
|
32
22
|
|
|
33
23
|
1. **证据收集**:完整错误信息、stack trace 指向、错误码含义
|
|
34
24
|
2. **变更追溯**:最后一次正常时间点 → 之间的变更(git log、依赖更新、环境变化)
|
|
@@ -59,111 +49,110 @@ NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST
|
|
|
59
49
|
|
|
60
50
|
### Phase 1:根因调查
|
|
61
51
|
|
|
62
|
-
1.
|
|
63
|
-
2.
|
|
64
|
-
3.
|
|
65
|
-
4.
|
|
52
|
+
1. **READ** 完整错误信息 — 不跳过 stack trace、行号、错误码
|
|
53
|
+
2. **EXEC** 稳定复现 — 确认触发条件和频率
|
|
54
|
+
3. **READ** `git diff` + 最近 commits + 依赖变更 — 检查最近变更
|
|
55
|
+
4. **IF** 多组件系统 → 在每层边界添加诊断埋点,定位故障层
|
|
66
56
|
|
|
67
57
|
### Phase 2:模式分析
|
|
68
58
|
|
|
69
|
-
1.
|
|
70
|
-
2.
|
|
71
|
-
3.
|
|
72
|
-
4. 不假设"那个差异不重要"
|
|
59
|
+
1. **READ** 代码库中相似的工作示例(完整阅读,不 skim)
|
|
60
|
+
2. **WRITE**(对话中)工作与失败之间的每个差异
|
|
61
|
+
3. **ASSERT** `每个差异已解释`(不可假设"那个差异不重要")
|
|
73
62
|
|
|
74
63
|
### Phase 3:假设验证
|
|
75
64
|
|
|
76
|
-
1.
|
|
77
|
-
2.
|
|
78
|
-
3.
|
|
79
|
-
|
|
65
|
+
1. **WRITE**(对话中)单一假设:"根因是 `{X}`,因为 `{Y}`"
|
|
66
|
+
2. **EXEC** 最小变更验证假设 — 一次只变一个变量
|
|
67
|
+
3. **MATCH** `verify_result`:
|
|
68
|
+
- 假设成立 → **GOTO** Phase 4
|
|
69
|
+
- 假设不成立 → 新假设 → **GOTO** Phase 3.1
|
|
70
|
+
- *default*(证据不足以判断)→ 补充诊断埋点 → **GOTO** Phase 1.4
|
|
80
71
|
|
|
81
72
|
### Phase 4:修复实现
|
|
82
73
|
|
|
83
|
-
1.
|
|
84
|
-
2. 修复根因(不是症状)
|
|
85
|
-
3.
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
- 已尝试的 3 种修复方案
|
|
89
|
-
- 每种方案的失败原因
|
|
90
|
-
- 怀疑的架构问题(如:模块耦合、数据流错误、设计模式不匹配)
|
|
91
|
-
- 建议的下一步方向(如:重新设计模块、引入新依赖、重构接口)
|
|
74
|
+
1. **WRITE** 失败测试到测试文件(最小复现用例)
|
|
75
|
+
2. **EXEC** 修复根因(不是症状)
|
|
76
|
+
3. **EXEC** 项目测试命令 — 确认修复通过且无回归
|
|
77
|
+
- 修复引入新的测试失败 → 立即回到步骤 2 定位新问题
|
|
78
|
+
4. **IF** 编排模式(任务目录存在)→ **WRITE** 修复循环到 `06-tdd-log.md` + 决策到 `08-ai-decisions.md`
|
|
92
79
|
|
|
93
|
-
|
|
80
|
+
**REPEAT** max=3(修复尝试,当前第 `attempt_count`/3 次):
|
|
94
81
|
|
|
95
|
-
|
|
82
|
+
- 修复成功 → **GOTO** 自检门禁
|
|
83
|
+
- *repeat exhausted* → **BLOCKED**,触发 **H3**,提交以下信息:
|
|
84
|
+
- 已尝试的 3 种修复方案 + 每种的失败原因
|
|
85
|
+
- 怀疑的架构问题
|
|
86
|
+
- 建议的下一步方向
|
|
96
87
|
|
|
97
|
-
|
|
88
|
+
### Phase 5:根因未能确定时的处理
|
|
98
89
|
|
|
99
|
-
|
|
100
|
-
|
|
90
|
+
> Phase 1-4 完成后仍无根因时适用。门槛用于确认调查充分性,防止过早放弃。
|
|
91
|
+
|
|
92
|
+
**GATE** "找不到根因"的最低门槛(全部满足才可声明):
|
|
93
|
+
|
|
94
|
+
- [ ] 完整 **READ** 了错误信息(含 stack trace 全文)
|
|
95
|
+
- [ ] 稳定复现了问题(≥ 3 次独立复现,非 Phase 1 的首次复现)
|
|
101
96
|
- [ ] 检查了 `git log` 最近 10 次提交的变更
|
|
102
97
|
- [ ] 对比了 ≥ 1 个正常工作的相似实现
|
|
103
98
|
- [ ] 添加了 ≥ 5 个诊断日志/断言
|
|
104
99
|
|
|
105
|
-
|
|
100
|
+
95% 的"找不到根因"是调查不充分。门槛未全部满足时,**GOTO** Phase 1。
|
|
106
101
|
|
|
107
|
-
|
|
102
|
+
**MATCH** `gate_result`:
|
|
108
103
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
3. 添加监控/日志以便未来调查
|
|
112
|
-
4. 状态标记为 `DONE_WITH_CONCERNS`,附带已排除的假设列表
|
|
104
|
+
- 门槛通过 → **WRITE**(对话中)已调查内容和排除的假设 → 实施防护措施(重试、超时、错误处理)→ **DONE_WITH_CONCERNS**
|
|
105
|
+
- 门槛未通过 → **GOTO** Phase 1
|
|
113
106
|
|
|
114
107
|
## 用户信号识别
|
|
115
108
|
|
|
116
|
-
以下用户反馈表明调试方向偏离:
|
|
117
|
-
|
|
118
109
|
| 用户说 | 意味着 | 你应该 |
|
|
119
110
|
| ------ | ------ | ------ |
|
|
120
|
-
| "那个不是发生了吗?" | 你假设了但没有验证 |
|
|
111
|
+
| "那个不是发生了吗?" | 你假设了但没有验证 | **GOTO** Phase 1,用证据验证假设 |
|
|
121
112
|
| "它能给我们展示...吗?" | 你应该收集了证据但没有 | 添加诊断埋点或日志 |
|
|
122
|
-
| "别猜了" | 你在没理解根因的情况下提修复方案 |
|
|
123
|
-
| "想想根本原因" | 你在修症状不是根因 |
|
|
113
|
+
| "别猜了" | 你在没理解根因的情况下提修复方案 | **GOTO** Phase 1,先找根因 |
|
|
114
|
+
| "想想根本原因" | 你在修症状不是根因 | 质疑你的假设,回到根因分析 |
|
|
124
115
|
| "我们卡住了?"(沮丧) | 你的方法不对 | 暂停,重新评估策略 |
|
|
125
116
|
|
|
117
|
+
## STOP Signals
|
|
118
|
+
|
|
119
|
+
- **跳过**根因调查直接写修复代码
|
|
120
|
+
- **同时**修改多个变量,无法隔离有效改动
|
|
121
|
+
- **继续**尝试 3 次修复失败后仍不触发 **H3**
|
|
122
|
+
- **绕过**调查流程("先快速修一下,后面再查根因")
|
|
123
|
+
|
|
126
124
|
## Constitutional Rules 遵守
|
|
127
125
|
|
|
128
126
|
引用 `_team-rules/constitutional-rules.md`。调试阶段尤其注意:
|
|
129
127
|
|
|
130
128
|
- **Rule #9 TDD 顺序不可逆**:修复 bug 必须先写失败的回归测试再写修复代码(FP-2)
|
|
131
|
-
- **Rule #3 产出必须验证**:修复完成后必须执行 `_team-rules/verification-protocol.md` 的 5
|
|
132
|
-
- **Rule #7 回退次数上限**:3 次修复失败必须触发 H3
|
|
133
|
-
- **Rule #2
|
|
129
|
+
- **Rule #3 产出必须验证**:修复完成后必须执行 `_team-rules/verification-protocol.md` 的 5 个步骤(FP-4)
|
|
130
|
+
- **Rule #7 回退次数上限**:3 次修复失败必须触发 **H3**,不可无限重试(FP-1)
|
|
131
|
+
- **Rule #2 有向图回退**:调试发现根源在 spec 歧义/遗漏 → **ROLLBACK** specAgent(FP-4)
|
|
134
132
|
|
|
135
133
|
## 自检门禁
|
|
136
134
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
- [ ]
|
|
140
|
-
- [ ]
|
|
141
|
-
- [ ]
|
|
142
|
-
- [ ] 如果 3 次修复失败 → 已触发 H3
|
|
143
|
-
- [ ] 没有同时修改多个变量
|
|
135
|
+
- [ ] 根因已明确描述(不是"可能是 X"而是"根因是 `{X}`")
|
|
136
|
+
- [ ] 修复前 **WRITE** 了失败测试
|
|
137
|
+
- [ ] 修复后 **EXEC** 验证通过(项目测试命令确认)
|
|
138
|
+
- [ ] **IF** 3 次修复失败 → 已触发 **H3**
|
|
139
|
+
- [ ] **ASSERT** 没有同时修改多个变量
|
|
144
140
|
|
|
145
141
|
## 完成标志
|
|
146
142
|
|
|
147
|
-
|
|
148
|
-
状态:DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED
|
|
149
|
-
根因:{根因描述}
|
|
150
|
-
修复:{修复内容}
|
|
151
|
-
验证:{测试命令输出}
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
## STOP Signals
|
|
143
|
+
**MATCH** `result`:
|
|
155
144
|
|
|
156
|
-
-
|
|
157
|
-
-
|
|
158
|
-
-
|
|
159
|
-
-
|
|
145
|
+
- 根因确定 + 修复验证通过 → **DONE**
|
|
146
|
+
- 根因未确定但已实施防护措施 → **DONE_WITH_CONCERNS**
|
|
147
|
+
- 需要更多上下文信息 → **NEEDS_CONTEXT**
|
|
148
|
+
- 3 次修复失败 → **BLOCKED**
|
|
160
149
|
|
|
161
150
|
## 集成关系
|
|
162
151
|
|
|
163
152
|
**被谁调用:**
|
|
164
153
|
|
|
165
154
|
- 用户直接调用(独立使用)
|
|
166
|
-
- `team-
|
|
155
|
+
- `team-finish`(独立模式测试失败时推荐)
|
|
167
156
|
|
|
168
157
|
**配对使用:**
|
|
169
158
|
|
|
@@ -54,55 +54,86 @@ NO IMPLEMENTATION WITHOUT TECHNICAL VERIFICATION FIRST
|
|
|
54
54
|
| 技术验证记录 | 验证结果(对话中) |
|
|
55
55
|
| 修改实施记录 | 代码 diff + 测试结果 |
|
|
56
56
|
|
|
57
|
+
## 输入
|
|
58
|
+
|
|
59
|
+
- **required**:代码审查反馈内容
|
|
60
|
+
- **required**:项目测试/构建命令
|
|
61
|
+
- **RESOLVE**:`verify_cmd`(从 `CLAUDE.md` / `.cursor/rules/` 或 `05-risk.md` 获取)
|
|
62
|
+
|
|
57
63
|
## 执行步骤
|
|
58
64
|
|
|
59
65
|
### Phase 1:理解反馈
|
|
60
66
|
|
|
61
|
-
|
|
67
|
+
> 收到反馈后先理解、再验证、最后回应。禁止跳过验证直接实施。
|
|
62
68
|
|
|
63
|
-
1.
|
|
64
|
-
2.
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
+
1. **READ** 所有反馈项 — 不立即反应
|
|
70
|
+
2. **FOR** each `feedback_item`:
|
|
71
|
+
- 用自己的话重述审查者的要求
|
|
72
|
+
- **IF** 含义不确定 → 先提问澄清,暂不处理该项
|
|
73
|
+
3. **FOR** each `feedback_item`:
|
|
74
|
+
- **EXEC** `grep` / **READ** 实际代码 — 验证该建议在当前代码库中的技术正确性
|
|
75
|
+
- **ASSERT** `验证基于代码证据`(不凭印象)
|
|
76
|
+
4. **FOR** each `feedback_item`:
|
|
77
|
+
- **IF** 技术正确 → 记录确认,标记待实施
|
|
78
|
+
- **ELSE** → 用技术理由推回(参考「推回指南」)
|
|
79
|
+
5. 分析完成 → **IF** 存在「增加功能/完善」建议 → Phase 2 YAGNI 检查;**IF** 存在外部反馈 → Phase 3 验证。最终 → **GOTO** Phase 4 实施
|
|
69
80
|
|
|
70
81
|
### Phase 2:YAGNI 检查
|
|
71
82
|
|
|
72
|
-
当审查者建议"实现得更完善"
|
|
83
|
+
> 当审查者建议"实现得更完善"或添加新功能时,用代码证据判断是否真正需要。
|
|
73
84
|
|
|
74
|
-
1. grep
|
|
75
|
-
2. 如果是 exported/public API → 即使当前项目未直接调用也不应删除(可能有外部消费方)
|
|
76
|
-
3. 如果是 internal 且无引用 → 建议删除,向审查者回应:"该功能当前未被调用,建议删除(YAGNI)"
|
|
77
|
-
4. 如果有引用 → 按建议实现
|
|
78
|
-
5. 如果不确定 → 标注 {ambiguous} 并询问用户
|
|
85
|
+
1. **EXEC** `grep` 在代码库中查找该功能/接口的实际使用
|
|
79
86
|
|
|
80
|
-
|
|
87
|
+
2. **MATCH** `usage_result`:
|
|
88
|
+
- exported / public API 且有外部消费方可能 → 保留,即使当前项目未直接调用
|
|
89
|
+
- internal 且无引用 → 建议删除,向审查者回应:"该功能当前未被调用,建议删除(YAGNI)"
|
|
90
|
+
- 有引用 → 按建议实现
|
|
91
|
+
- *not found* 且无法确定 → 标注 `{ambiguous}` → **NEEDS_CONTEXT**:询问用户
|
|
81
92
|
|
|
82
|
-
|
|
93
|
+
### Phase 3:外部反馈处理
|
|
83
94
|
|
|
84
|
-
|
|
85
|
-
2. **决策一致性**:建议与用户之前做出的设计决策冲突吗?
|
|
95
|
+
> 外部反馈可能基于不完整上下文。验证技术正确性之外,还需检查上下文和决策一致性。
|
|
86
96
|
|
|
87
|
-
|
|
97
|
+
1. **FOR** each `external_feedback_item`:
|
|
98
|
+
- **EXEC** `grep` / **READ** 实际代码 — 验证技术正确性(同 Phase 1 步骤 3)
|
|
99
|
+
- **READ** `08-ai-decisions.md` — 检查与已有决策是否冲突
|
|
100
|
+
- **ASSERT** `验证基于代码证据`(不凭印象)
|
|
88
101
|
|
|
89
|
-
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
102
|
+
2. **MATCH** `check_result`:
|
|
103
|
+
- 技术正确 + 无冲突 → 标记待实施(**GOTO** Phase 4)
|
|
104
|
+
- 技术上不正确 → 用技术理由推回(参考「推回指南」)
|
|
105
|
+
- 无法验证 → **NEEDS_CONTEXT**:明确回应"我需要 `{具体信息}` 才能验证这条建议"
|
|
106
|
+
- 与已有决策冲突 → **H3**:暂停,展示冲突点,等待用户决策
|
|
107
|
+
- 反馈揭示 spec 遗漏 → **ROUTE** `team-spec`
|
|
108
|
+
- 反馈揭示架构问题 → **H3**
|
|
94
109
|
|
|
95
110
|
### Phase 4:实施
|
|
96
111
|
|
|
97
|
-
|
|
112
|
+
> 逐项实施、逐项测试。不可批量实施后再测试(FP-2 实现偏见污染验证)。全部单项通过后再跑全量测试确认无交叉回归。
|
|
98
113
|
|
|
99
|
-
|
|
100
|
-
2. 按优先级排序实施:阻塞问题 → 简单修复 → 复杂修复
|
|
101
|
-
3. 每项修改单独测试(运行项目测试命令)。如果测试失败 → 立即定位原因并修复,不可跳过失败继续下一项
|
|
102
|
-
4. 全部实施后运行全量测试,确认无回归。如果全量测试发现回归 → 定位是哪项修改引入的问题,回退该修改,重新实施
|
|
103
|
-
5. **更新文档**:如果在编排模式下(任务目录存在),将每项修改的实施结果(反馈项 + 修改内容 + 测试结果)记录到 `08-ai-decisions.md`
|
|
114
|
+
**RESOLVE** `verify_cmd`(首个命中即停):
|
|
104
115
|
|
|
105
|
-
|
|
116
|
+
1. `READ("05-risk.md", "§一验证计划")`
|
|
117
|
+
2. `READ("CLAUDE.md").test_cmd` / `READ(".cursor/rules/")`
|
|
118
|
+
3. `READ("package.json").scripts.test` / `READ("Makefile")` / `READ("Cargo.toml")`
|
|
119
|
+
4. *none* → **NEEDS_CONTEXT**:请用户提供验证命令
|
|
120
|
+
|
|
121
|
+
实施顺序:
|
|
122
|
+
|
|
123
|
+
1. **ASSERT** `不明确项 == 0`(所有不明确项已在 Phase 1 步骤 2 中澄清)
|
|
124
|
+
2. 按优先级排序:阻塞问题 → 简单修复 → 复杂修复
|
|
125
|
+
3. **FOR** each `impl_item`(按排序顺序):
|
|
126
|
+
- 实施修改
|
|
127
|
+
- **EXEC** `verify_cmd` — 单独测试该项修改
|
|
128
|
+
- **ASSERT** `exit_code == 0` && `failures == 0`
|
|
129
|
+
- **IF** `tests_fail` → 立即定位原因并修复 → **GOTO** Step 3 当前项重新测试
|
|
130
|
+
4. **EXEC** `verify_cmd` — 全量测试,确认无回归
|
|
131
|
+
- **ASSERT** `exit_code == 0` && `failures == 0`
|
|
132
|
+
- **IF** `regression_detected` → 定位引入问题的修改 → **ROLLBACK** 该修改 → 重新实施 → **GOTO** Step 3 该项
|
|
133
|
+
5. **IF** 任务目录存在(编排模式):
|
|
134
|
+
- **WRITE** 每项修改的实施结果(反馈项 + 修改内容 + 测试结果)到 `08-ai-decisions.md`
|
|
135
|
+
|
|
136
|
+
**验证协议**(步骤 3-4 声明"通过"前必须执行 `_team-rules/verification-protocol.md` 的 5 个步骤)
|
|
106
137
|
|
|
107
138
|
## 禁止回应
|
|
108
139
|
|
|
@@ -132,40 +163,38 @@ NO IMPLEMENTATION WITHOUT TECHNICAL VERIFICATION FIRST
|
|
|
132
163
|
6. 建议修复了不存在的 bug
|
|
133
164
|
7. 建议的方案比现有代码更复杂
|
|
134
165
|
|
|
166
|
+
## STOP Signals
|
|
167
|
+
|
|
168
|
+
- **实施**反馈建议前没有验证技术正确性
|
|
169
|
+
- **回应**"你说得太对了""好主意"等表演性同意
|
|
170
|
+
- **批量**实施多项反馈而不逐项测试
|
|
171
|
+
- **忽略**外部反馈与代码库现实的冲突而不推回
|
|
172
|
+
|
|
135
173
|
## Constitutional Rules 遵守
|
|
136
174
|
|
|
137
175
|
引用 `_team-rules/constitutional-rules.md`。反馈处理阶段尤其注意:
|
|
138
176
|
|
|
139
177
|
- **Rule #9 TDD 顺序不可逆**:每项修改必须单独测试,不可批量实施后再测试(FP-2)
|
|
140
|
-
- **Rule #2
|
|
141
|
-
- **Rule #1
|
|
178
|
+
- **Rule #2 有向图回退**:反馈揭示 spec 遗漏 → 回退 specAgent,不可自行决定(FP-4)
|
|
179
|
+
- **Rule #1 人类介入是一等公民**:反馈揭示架构问题 → 触发 H3(FP-1)
|
|
142
180
|
|
|
143
181
|
## 自检门禁
|
|
144
182
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
- [ ]
|
|
148
|
-
- [ ]
|
|
149
|
-
- [ ]
|
|
150
|
-
- [ ]
|
|
151
|
-
- [ ] 如果反馈揭示 spec 遗漏 → 已路由到 team-spec
|
|
152
|
-
- [ ] 如果反馈揭示架构问题 → 已触发 H3
|
|
183
|
+
- [ ] **ASSERT** 每项反馈都经过技术验证(不是表演性同意)
|
|
184
|
+
- [ ] **ASSERT** 不明确项已澄清后才实施
|
|
185
|
+
- [ ] **ASSERT** 每项修改单独 **EXEC** `verify_cmd` 测试过
|
|
186
|
+
- [ ] **ASSERT** 无回归(**EXEC** 全量测试确认)
|
|
187
|
+
- [ ] **IF** 反馈揭示 spec 遗漏 → 已 **ROUTE** `team-spec`
|
|
188
|
+
- [ ] **IF** 反馈揭示架构问题 → 已触发 **H3**
|
|
153
189
|
|
|
154
190
|
## 完成标志
|
|
155
191
|
|
|
156
|
-
|
|
157
|
-
状态:DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED
|
|
158
|
-
反馈项:{N} 项
|
|
159
|
-
已实施:{N} 项
|
|
160
|
-
已推回:{N} 项(含理由)
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
## STOP Signals
|
|
192
|
+
**MATCH** `result`:
|
|
164
193
|
|
|
165
|
-
-
|
|
166
|
-
-
|
|
167
|
-
-
|
|
168
|
-
-
|
|
194
|
+
- 全部实施且测试通过 → **DONE**(`反馈项: {N}`, `已实施: {N}`, `已推回: {N}`)
|
|
195
|
+
- 已实施但有保留意见 → **DONE_WITH_CONCERNS**(`concerns: [...]`)
|
|
196
|
+
- 缺少关键信息无法验证 → **NEEDS_CONTEXT**(`missing: [...]`)
|
|
197
|
+
- 被阻塞 → **BLOCKED** → **H3**
|
|
169
198
|
|
|
170
199
|
## 集成关系
|
|
171
200
|
|
|
@@ -14,21 +14,11 @@ description: Use when implementation is complete, all tests pass, and you need t
|
|
|
14
14
|
```
|
|
15
15
|
角色:分支完成处理——验证测试 → 展示选项 → 执行选择 → 清理
|
|
16
16
|
核心原则:测试未通过不展示选项,用户未选择不执行操作
|
|
17
|
-
流程:
|
|
18
|
-
1. 验证所有测试通过
|
|
19
|
-
2. 确定基准分支
|
|
20
|
-
3. 展示 4 个结构化选项
|
|
21
|
-
4. 执行用户选择
|
|
22
|
-
5. 清理工作目录
|
|
23
|
-
约束:
|
|
24
|
-
- 测试未通过前禁止展示合并选项(FP-4)
|
|
25
|
-
- 丢弃须用户输入 "discard" 确认
|
|
26
|
-
- 禁止 force-push 除非用户明确要求
|
|
27
17
|
```
|
|
28
18
|
|
|
29
19
|
### 推理检查点
|
|
30
20
|
|
|
31
|
-
|
|
21
|
+
> 测试未通过 = 不展示合并选项(FP-4)。用户未选择 = 不执行操作(FP-1)。每步有明确前置条件。
|
|
32
22
|
|
|
33
23
|
**推理框架**:
|
|
34
24
|
|
|
@@ -61,39 +51,39 @@ NO BRANCH COMPLETION WITHOUT TEST VERIFICATION FIRST
|
|
|
61
51
|
|
|
62
52
|
### Step 1:验证测试
|
|
63
53
|
|
|
64
|
-
|
|
54
|
+
**EXEC** 项目测试命令(声明"通过"前须执行 `_team-rules/verification-protocol.md` 的 5 个步骤)
|
|
65
55
|
|
|
66
|
-
|
|
67
|
-
测试失败({N} 个失败)。完成前须修复:
|
|
68
|
-
[展示失败详情]
|
|
69
|
-
测试通过前不可执行 merge/PR。
|
|
70
|
-
```
|
|
56
|
+
**ASSERT** `exit_code == 0` && `failures == 0`
|
|
71
57
|
|
|
72
|
-
|
|
58
|
+
- 通过 → **GOTO** Step 2
|
|
59
|
+
- 失败 → **MATCH** `mode`:
|
|
60
|
+
- 编排模式 → **ROLLBACK** 编排器,由编排器 **ROUTE** implAgent(附上失败输出)
|
|
61
|
+
- 独立使用 → **WRITE** 失败详情给用户,推荐 `team-debug`,修复后 **GOTO** Step 1
|
|
73
62
|
|
|
74
|
-
-
|
|
75
|
-
- **独立使用**:向用户展示失败详情,推荐使用 `team-debug` 定位根因,修复后重新执行 Step 1
|
|
76
|
-
|
|
77
|
-
不可忽略失败继续展示选项(FP-4)。
|
|
63
|
+
> 不可忽略失败继续展示选项(FP-4)。
|
|
78
64
|
|
|
79
65
|
### Step 2:确定基准分支
|
|
80
66
|
|
|
81
|
-
|
|
67
|
+
**RESOLVE** `base_branch`(首个命中即停):
|
|
68
|
+
|
|
69
|
+
1. `READ("docs/tasks/{slug}/.checkpoint.json").base_branch`
|
|
70
|
+
2. `READ("CLAUDE.md").base_branch` / `READ(".cursor/rules/").default_branch`
|
|
71
|
+
3. `EXEC("git symbolic-ref refs/remotes/origin/HEAD")` → 解析分支名
|
|
72
|
+
4. **FOR** `name` in [`main`, `master`, `develop`] → `EXEC("git show-ref --verify refs/heads/{name}")` 首个存在即停
|
|
73
|
+
5. *none* → **H3**:向用户展示 `git branch --list` 和 `git remote -v`,让用户指定
|
|
82
74
|
|
|
83
|
-
|
|
84
|
-
2. **从项目 AI 规范读取**:在 CLAUDE.md / .cursor/rules/ 中查找 `base_branch` 或 `default_branch` 配置项
|
|
85
|
-
3. **从 Git 远程推断**:`git symbolic-ref refs/remotes/origin/HEAD | sed 's|refs/remotes/origin/||'`
|
|
86
|
-
4. **常见分支名兜底**:按 `main` → `master` → `develop` 顺序检查本地是否存在
|
|
87
|
-
5. **全部失败** → 触发 H3:向用户展示 `git branch --list` 和 `git remote -v` 输出,让用户指定基准分支(不可自动猜测)
|
|
75
|
+
**EXEC** `git merge-base HEAD {base_branch}` → 获取合并基点
|
|
88
76
|
|
|
89
|
-
|
|
77
|
+
- **ASSERT** `exit_code == 0`(分支无公共祖先 → **BLOCKED**,触发 **H3**)
|
|
90
78
|
|
|
91
79
|
### Step 3:展示选项
|
|
92
80
|
|
|
81
|
+
**WRITE** 选项列表(对话中):
|
|
82
|
+
|
|
93
83
|
```
|
|
94
84
|
实现完成。请选择后续操作:
|
|
95
85
|
|
|
96
|
-
1. 本地合并到
|
|
86
|
+
1. 本地合并到 {base_branch}
|
|
97
87
|
2. 推送并创建 Pull Request
|
|
98
88
|
3. 保留当前分支(稍后处理)
|
|
99
89
|
4. 丢弃本次工作
|
|
@@ -103,39 +93,53 @@ NO BRANCH COMPLETION WITHOUT TEST VERIFICATION FIRST
|
|
|
103
93
|
|
|
104
94
|
### Step 4:执行选择
|
|
105
95
|
|
|
106
|
-
|
|
107
|
-
|
|
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. 删除功能分支
|
|
96
|
+
**MATCH** `user_choice`:
|
|
113
97
|
|
|
114
|
-
|
|
98
|
+
- **Option 1**(本地合并):
|
|
99
|
+
1. **EXEC** `git checkout {base_branch} && git pull`
|
|
100
|
+
2. **EXEC** `git merge {branch} --no-ff`
|
|
101
|
+
- 合并冲突 → **WRITE**(对话中)冲突文件列表,**MATCH** `user_choice`:
|
|
102
|
+
- (A) 手动解决冲突后继续
|
|
103
|
+
- (B) 中止合并,改为创建 PR
|
|
104
|
+
- (C) 中止合并,保留分支
|
|
105
|
+
- 不自动解决冲突
|
|
106
|
+
3. **EXEC** 项目测试命令 → **ASSERT** 合并后无回归
|
|
107
|
+
4. **EXEC** `git branch -d {branch}`
|
|
108
|
+
- **IF** `exit_code != 0` → **WRITE**(对话中)"分支未完全合并,需 -D 强制删除?",等待用户确认
|
|
115
109
|
|
|
116
|
-
|
|
110
|
+
**验证协议**(步骤 3 声明"通过"前须执行 `_team-rules/verification-protocol.md` 的 5 个步骤)
|
|
117
111
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
112
|
+
- **Option 2**(创建 PR):
|
|
113
|
+
1. **EXEC** `git push -u origin {branch}`
|
|
114
|
+
- 推送失败(auth 错误、远程未配置)→ **WRITE**(对话中)错误信息给用户,暂停
|
|
115
|
+
2. **RESOLVE** `pr_cmd`:`READ("CLAUDE.md").pr_cmd` / *default* `gh pr create`
|
|
116
|
+
3. **EXEC** `{pr_cmd}`
|
|
117
|
+
- **ASSERT** `exit_code == 0` → **WRITE** PR URL 给用户
|
|
118
|
+
- `exit_code != 0` → **WRITE**(对话中)错误信息,暂停
|
|
121
119
|
|
|
122
|
-
|
|
120
|
+
- **Option 3**(保留分支):
|
|
121
|
+
**WRITE** `保留分支 {branch}。`
|
|
123
122
|
|
|
124
|
-
|
|
123
|
+
- **Option 4**(丢弃):
|
|
124
|
+
**ASSERT** 用户已输入 "discard" 确认
|
|
125
|
+
1. **EXEC** `git checkout {base_branch}`
|
|
126
|
+
2. **EXEC** `git branch -D {branch}`
|
|
125
127
|
|
|
126
|
-
|
|
128
|
+
- *default*(无效输入)→ **WRITE**(对话中)"请选择 1-4",重新展示选项
|
|
127
129
|
|
|
128
|
-
|
|
130
|
+
### Step 5:清理工作目录
|
|
129
131
|
|
|
130
|
-
1
|
|
131
|
-
2. 强制删除功能分支
|
|
132
|
+
**IF** `user_choice` in [Option 1, Option 2, Option 4]:
|
|
132
133
|
|
|
133
|
-
|
|
134
|
+
1. **EXEC** `git worktree list` → 检查关联工作目录
|
|
135
|
+
2. **IF** `worktree` 存在 → 移除工作目录
|
|
134
136
|
|
|
135
|
-
|
|
137
|
+
## STOP Signals
|
|
136
138
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
+
- **展示**选项在测试未通过时
|
|
140
|
+
- **声明**完成在合并后未重新测试时
|
|
141
|
+
- **丢弃**分支前未要求用户输入 "discard"
|
|
142
|
+
- **执行** force-push 前未获用户明确授权
|
|
139
143
|
|
|
140
144
|
## Constitutional Rules 遵守
|
|
141
145
|
|
|
@@ -147,30 +151,21 @@ NO BRANCH COMPLETION WITHOUT TEST VERIFICATION FIRST
|
|
|
147
151
|
|
|
148
152
|
## 自检门禁
|
|
149
153
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
- [ ] 测试已验证通过(运行项目测试命令确认)
|
|
153
|
-
- [ ] 基准分支已确定
|
|
154
|
+
- [ ] **EXEC** 测试已验证通过(运行项目测试命令确认)
|
|
155
|
+
- [ ] `base_branch` 已 **RESOLVE**
|
|
154
156
|
- [ ] 用户已选择选项(不是自行决定)
|
|
155
|
-
- [ ]
|
|
157
|
+
- [ ] **IF** 选择 discard → **ASSERT** 用户已输入 "discard" 确认
|
|
156
158
|
- [ ] 工作目录已清理(如适用)
|
|
157
|
-
- [ ]
|
|
159
|
+
- [ ] **IF** 选择 merge → 合并后测试已通过
|
|
158
160
|
|
|
159
161
|
## 完成标志
|
|
160
162
|
|
|
161
|
-
|
|
162
|
-
状态:DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED
|
|
163
|
-
选择:{merge / PR / keep / discard}
|
|
164
|
-
测试:{N} 通过,0 失败
|
|
165
|
-
分支:{branch-name} → {base-branch}
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
## STOP Signals
|
|
163
|
+
**MATCH** `result`:
|
|
169
164
|
|
|
170
|
-
-
|
|
171
|
-
-
|
|
172
|
-
-
|
|
173
|
-
-
|
|
165
|
+
- 操作成功执行 → **DONE**
|
|
166
|
+
- 操作成功但有 warning → **DONE_WITH_CONCERNS**
|
|
167
|
+
- 无法确定基准分支 → **NEEDS_CONTEXT**
|
|
168
|
+
- 测试失败或合并冲突 → **BLOCKED**
|
|
174
169
|
|
|
175
170
|
## 集成关系
|
|
176
171
|
|