team-skills 1.3.0 → 1.3.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/.claude/commands/team-setup.md +3 -3
- package/.claude/commands/team-uninstall.md +3 -2
- package/README.md +31 -27
- package/package.json +1 -1
- package/skills/team-brainstorm/SKILL.md +38 -15
- package/skills/team-debug/SKILL.md +23 -18
- package/skills/team-feedback/SKILL.md +19 -11
- package/skills/team-finish/SKILL.md +63 -36
- package/skills/team-impl/SKILL.md +56 -44
- package/skills/team-orchestrator/SKILL.md +121 -110
- package/skills/team-review/SKILL.md +42 -33
- package/skills/team-score/SKILL.md +36 -25
- package/skills/team-spec/SKILL.md +42 -29
- package/skills/team-test/SKILL.md +47 -28
- package/skills/team-verify/SKILL.md +22 -17
- package/skills/using-team-skills/SKILL.md +20 -17
- package/src/commands/init.js +13 -16
- package/src/commands/list.js +28 -9
- package/src/commands/setup.js +34 -16
- package/src/commands/uninstall.js +29 -8
- package/src/commands/update.js +17 -33
- package/src/lib/constants.js +1 -0
|
@@ -13,9 +13,9 @@ argument-hint: [target-dir]
|
|
|
13
13
|
|
|
14
14
|
| 组件 | 目标位置 | 说明 |
|
|
15
15
|
|------|----------|------|
|
|
16
|
-
| Agent Skills | `~/.agents/skills/{name}` | Cursor 自动发现 |
|
|
17
|
-
|
|
|
18
|
-
| 共享规则 | `~/.agents/skills/_team-rules/` | 被所有 Skill 引用 |
|
|
16
|
+
| Agent Skills (Cursor) | `~/.agents/skills/{name}` | Cursor 自动发现 |
|
|
17
|
+
| Agent Skills (Claude) | `~/.claude/skills/{name}` | Claude Code 自动发现 |
|
|
18
|
+
| 共享规则 | `~/.agents/skills/_team-rules/` + `~/.claude/skills/_team-rules/` | 被所有 Skill 引用 |
|
|
19
19
|
| CLI 辅助命令 | 两端均安装 | team-setup/uninstall/pull/push |
|
|
20
20
|
| Hooks(可选) | `~/.cursor/hooks/` | session-start 自动加载 |
|
|
21
21
|
|
|
@@ -14,10 +14,11 @@ argument-hint: [target-dir]
|
|
|
14
14
|
| 组件 | 位置 |
|
|
15
15
|
|------|------|
|
|
16
16
|
| Cursor Skills | `~/.agents/skills/team-*` |
|
|
17
|
-
| Claude Code
|
|
18
|
-
| 共享规则 | `~/.agents/skills/_team-rules/` |
|
|
17
|
+
| Claude Code Skills | `~/.claude/skills/team-*` |
|
|
18
|
+
| 共享规则 | `~/.agents/skills/_team-rules/` + `~/.claude/skills/_team-rules/` |
|
|
19
19
|
| CLI 辅助命令 | 两端均移除 |
|
|
20
20
|
| Hooks | `~/.cursor/hooks/`、`~/.claude/hooks/` |
|
|
21
|
+
| 旧路径(向后兼容) | `~/.claude/commands/team-*.md`(如存在) |
|
|
21
22
|
|
|
22
23
|
## 使用方式
|
|
23
24
|
|
package/README.md
CHANGED
|
@@ -57,9 +57,19 @@ reviewAgent 发现 spec 遗漏 ──→ 自动回退 specAgent
|
|
|
57
57
|
|
|
58
58
|
- **5 步验证协议**:确定命令 → 新鲜执行 → 完整阅读 → 检查退出码 → 声明通过
|
|
59
59
|
- **9 条 Constitutional Rules**:不可覆盖的硬约束
|
|
60
|
-
- **反规避条款**:预判
|
|
60
|
+
- **反规避条款**:预判 9 种常见借口并逐一反驳
|
|
61
61
|
- **三视角对抗审查**:攻击者/怀疑者/用户视角反向验证
|
|
62
62
|
|
|
63
|
+
### 📝 规则沉淀,不是"每次从零"
|
|
64
|
+
|
|
65
|
+
- **三层规则体系**:项目级 → 模块级 → 任务级,冲突按优先级覆盖
|
|
66
|
+
- **消费方契约**:每条规则含触发条件 + 可执行指令 + 示例,下游 Agent 可直接执行
|
|
67
|
+
|
|
68
|
+
### 📊 量化评估,不是"凭感觉"
|
|
69
|
+
|
|
70
|
+
- **7 硬门禁 + 24 评分项**:五维度 100 分制量化打分
|
|
71
|
+
- **反虚构规则**:占位符 >20% 或有效行 <10 → 判定 0 分
|
|
72
|
+
|
|
63
73
|
---
|
|
64
74
|
|
|
65
75
|
## 🚀 安装
|
|
@@ -83,7 +93,7 @@ npx team-skills@latest setup
|
|
|
83
93
|
npx team-skills@latest setup --with-score
|
|
84
94
|
```
|
|
85
95
|
|
|
86
|
-
|
|
96
|
+
全局安装后可直接在终端调用:
|
|
87
97
|
|
|
88
98
|
```bash
|
|
89
99
|
npm i -g team-skills
|
|
@@ -112,8 +122,8 @@ npx team-skills@latest update
|
|
|
112
122
|
|
|
113
123
|
| 内容 | 位置 | 说明 |
|
|
114
124
|
|------|------|------|
|
|
115
|
-
|
|
|
116
|
-
|
|
|
125
|
+
| 12 个 Agent Skills | `~/.agents/skills/` | Cursor 自动发现(team-score 需 `--with-score`) |
|
|
126
|
+
| 12 个 Skill 斜杠命令 | `~/.claude/commands/` | Claude Code `/team-{name}` |
|
|
117
127
|
| 共享规则 | `~/.agents/skills/_team-rules/` | 被所有 Skill 引用 |
|
|
118
128
|
| CLI 辅助命令 | 两端均安装 | team-setup/uninstall/pull/push |
|
|
119
129
|
| Hooks(可选) | `~/.cursor/hooks/` | session-start 自动加载 |
|
|
@@ -166,10 +176,11 @@ npx team-skills@latest update
|
|
|
166
176
|
| 已有规格,开始编码 | `/team-impl` |
|
|
167
177
|
| 测试覆盖够吗? | `/team-test` |
|
|
168
178
|
| 代码质量如何? | `/team-review` |
|
|
179
|
+
| Review 反馈来了 | `/team-feedback` |
|
|
169
180
|
| 这个 bug 怎么回事? | `/team-debug` |
|
|
170
181
|
| 测试真的过了吗? | `/team-verify` |
|
|
171
|
-
| Review 反馈来了 | `/team-feedback` |
|
|
172
182
|
| 代码写完了 | `/team-finish` |
|
|
183
|
+
| 项目做得好不好? | `/team-score` |
|
|
173
184
|
| 不知道用哪个 | `/using-team-skills` |
|
|
174
185
|
|
|
175
186
|
---
|
|
@@ -229,7 +240,7 @@ flowchart TD
|
|
|
229
240
|
|
|
230
241
|
## 🗺️ Skill 使用地图
|
|
231
242
|
|
|
232
|
-
> 从你的场景出发,找到对应的 Skill
|
|
243
|
+
> 从你的场景出发,找到对应的 Skill。
|
|
233
244
|
|
|
234
245
|
```mermaid
|
|
235
246
|
graph TD
|
|
@@ -247,8 +258,9 @@ graph TD
|
|
|
247
258
|
Q -->|"代码就绪,需要审查"| REVIEW[🔍 team-review<br/>→ 五维审查报告]:::skill
|
|
248
259
|
Q -->|"收到审查反馈"| FB[💬 team-feedback<br/>→ 修改方案]:::skill
|
|
249
260
|
Q -->|"遇到 Bug"| DEBUG[🐛 team-debug<br/>→ 根因分析 + 修复]:::skill
|
|
250
|
-
Q -->|"实现完成,准备合并"| FINISH[🏁 team-finish<br/>→ 合并/PR/清理]:::skill
|
|
251
261
|
Q -->|"声称完成"| VERIFY[✅ team-verify<br/>→ 验证证据链]:::skill
|
|
262
|
+
Q -->|"实现完成,准备合并"| FINISH[🏁 team-finish<br/>→ 合并/PR/清理]:::skill
|
|
263
|
+
Q -->|"项目做得好不好"| SCORE[📊 team-score<br/>→ 量化评分报告]:::skill
|
|
252
264
|
Q -->|"不知道用哪个"| USING[🧭 using-team-skills<br/>→ Skill 推荐]:::skill
|
|
253
265
|
Q -->|"需要完整交付流水线"| ORCH[⚙️ team-orchestrator<br/>→ 全自动编排]:::orch
|
|
254
266
|
|
|
@@ -259,15 +271,11 @@ graph TD
|
|
|
259
271
|
ORCH -.->|自动调度| FINISH
|
|
260
272
|
```
|
|
261
273
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
- **实线箭头 →**:你主动调用某个 Skill,适合只做其中一步
|
|
265
|
-
- **虚线箭头 ⇢**:编排器自动调度,适合需要完整流水线
|
|
266
|
-
- 每个 Skill 下方标注了它的产出物
|
|
274
|
+
> 实线 = 你主动调用;虚线 = 编排器自动调度。每个节点下方标注了产出物。
|
|
267
275
|
|
|
268
276
|
---
|
|
269
277
|
|
|
270
|
-
## 📦 包含
|
|
278
|
+
## 📦 包含 12 个可独立使用的 Skill
|
|
271
279
|
|
|
272
280
|
| Skill | 一句话说明 | 使用场景 |
|
|
273
281
|
|-------|-----------|----------|
|
|
@@ -276,14 +284,15 @@ graph TD
|
|
|
276
284
|
| `team-impl` | TDD 红-绿-重构循环实现 | "规格有了,开始写代码" |
|
|
277
285
|
| `team-test` | 四维测试矩阵 + 补充测试 | "测试覆盖够吗?" |
|
|
278
286
|
| `team-review` | 五维审查 + 资产沉淀 + 复盘 | "代码质量如何?" |
|
|
279
|
-
| `team-orchestrator` | 有向图流程编排 + 分支管理,4 个人类介入点 | "我要完整交付流水线" |
|
|
280
|
-
| `team-verify` | 5 步验证门禁,杜绝虚假通过 | "测试真的过了吗?" |
|
|
281
|
-
| `team-debug` | 四阶段根因分析 + 修复 | "这个 bug 怎么回事?" |
|
|
282
287
|
| `team-feedback` | 先验证再实施,非表演性同意 | "Review 反馈来了" |
|
|
288
|
+
| `team-debug` | 四阶段根因分析 + 修复 | "这个 bug 怎么回事?" |
|
|
289
|
+
| `team-verify` | 5 步验证门禁,杜绝虚假通过 | "测试真的过了吗?" |
|
|
283
290
|
| `team-finish` | 分支完成处理(合并/PR/保留/丢弃) | "代码写完了" |
|
|
291
|
+
| `team-orchestrator` | 有向图流程编排 + 分支管理,4 个人类介入点 | "我要完整交付流水线" |
|
|
292
|
+
| `team-score` | 7 硬门禁 + 24 项五维度评分(100 分制) | "项目做得好不好?" |
|
|
284
293
|
| `using-team-skills` | Meta-skill,自动引导你选正确的 Skill | "我该用哪个?" |
|
|
285
294
|
|
|
286
|
-
> 每个 Skill 可独立使用,也可通过 `team-orchestrator`
|
|
295
|
+
> 每个 Skill 可独立使用,也可通过 `team-orchestrator` 串联成完整流水线。`team-score` 为可选评估工具,安装时需 `--with-score`。
|
|
287
296
|
|
|
288
297
|
---
|
|
289
298
|
|
|
@@ -346,15 +355,6 @@ docs/
|
|
|
346
355
|
|
|
347
356
|
---
|
|
348
357
|
|
|
349
|
-
## 🔧 兼容性
|
|
350
|
-
|
|
351
|
-
| 工具 | 调用方式 | 自动发现 |
|
|
352
|
-
|------|----------|----------|
|
|
353
|
-
| **Claude Code** | `/team-{name}` 斜杠命令 | `~/.claude/commands/` |
|
|
354
|
-
| **Cursor** | Skill 自动发现 | `~/.agents/skills/` |
|
|
355
|
-
|
|
356
|
-
---
|
|
357
|
-
|
|
358
358
|
## 📚 体系来源
|
|
359
359
|
|
|
360
360
|
Team Skills 融合了业界多个 AI 协作框架的精华:
|
|
@@ -365,7 +365,7 @@ Team Skills 融合了业界多个 AI 协作框架的精华:
|
|
|
365
365
|
| **OpenSpec** (Fission AI) | Delta Spec 增量规格、RFC 2119 + Given/When/Then |
|
|
366
366
|
| **Karpathy Skills** | 过度抽象防御、死代码清理、困惑管理 |
|
|
367
367
|
| **Agent-Style** | 5 条 LLM 输出质量约束 |
|
|
368
|
-
| **独创** | 有向图回退、质量追溯矩阵、消费方契约、H1-H4
|
|
368
|
+
| **独创** | 有向图回退、质量追溯矩阵、消费方契约、H1-H4 人类介入点、100 分制量化评估、Markdown Skill Language |
|
|
369
369
|
|
|
370
370
|
---
|
|
371
371
|
|
|
@@ -386,6 +386,10 @@ npm run cli-test # CLI 冒烟测试
|
|
|
386
386
|
npm run setup # 安装 Skills 到全局目录
|
|
387
387
|
```
|
|
388
388
|
|
|
389
|
+
### Skill 编写规范
|
|
390
|
+
|
|
391
|
+
编写或修改 Skill 时,请参考 `skills/_team-rules/skill-spec.md`(Markdown Skill Language v1.0 形式语法)。
|
|
392
|
+
|
|
389
393
|
### CI 流程
|
|
390
394
|
|
|
391
395
|
提交后 GitHub Actions 自动运行:
|
package/package.json
CHANGED
|
@@ -62,7 +62,7 @@ NO IMPLEMENTATION WITHOUT USER APPROVED DESIGN FIRST
|
|
|
62
62
|
|
|
63
63
|
## 产出目录
|
|
64
64
|
|
|
65
|
-
`docs/tasks/{slug}/`(slug 由 Phase 1 RESOLVE
|
|
65
|
+
`docs/tasks/{slug}/`(slug 由 Phase 1 **RESOLVE**)
|
|
66
66
|
|
|
67
67
|
## 执行步骤
|
|
68
68
|
|
|
@@ -73,11 +73,15 @@ NO IMPLEMENTATION WITHOUT USER APPROVED DESIGN FIRST
|
|
|
73
73
|
3. **READ** 相关源码模块,理解现有实现
|
|
74
74
|
4. **IF** 需求包含多个独立子系统:
|
|
75
75
|
- 先帮助用户分解为独立任务,逐个处理
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
76
|
+
**ELSE**:
|
|
77
|
+
- 按单一任务继续
|
|
78
|
+
5. **RESOLVE** `keyword`(首个命中即停):
|
|
79
|
+
1. 从用户需求提取核心关键词(kebab-case)
|
|
80
|
+
2. 从项目上下文推断关键词
|
|
81
|
+
3. *none* → **NEEDS_CONTEXT**:请用户提供任务关键词
|
|
82
|
+
6. **IF** `docs/tasks/` 不存在 → 创建 `docs/tasks/`
|
|
83
|
+
7. **READ** `docs/tasks/` 已有目录列表 → 取最大序号 +1(从 `0001` 起)→ 拼接 `slug` = `{序号}-{keyword}`(整体 ≤ 50 字符)
|
|
84
|
+
8. 创建 `docs/tasks/{slug}/` 目录
|
|
81
85
|
|
|
82
86
|
### Phase 2:需求澄清(一次性提问)
|
|
83
87
|
|
|
@@ -91,13 +95,19 @@ NO IMPLEMENTATION WITHOUT USER APPROVED DESIGN FIRST
|
|
|
91
95
|
|
|
92
96
|
**IF** 用户回复揭示需求不可行:
|
|
93
97
|
|
|
94
|
-
-
|
|
98
|
+
- **H3**:暂停设计,展示不可行原因,请用户决策(Kill Switch / 调整需求)
|
|
99
|
+
|
|
100
|
+
**ELSE**:
|
|
101
|
+
|
|
102
|
+
- 整合用户回复,进入 Phase 3
|
|
95
103
|
|
|
96
104
|
### Phase 3:方案设计
|
|
97
105
|
|
|
98
106
|
提出 2-3 个不同方案,含优缺点对比和推荐理由:
|
|
99
107
|
|
|
100
|
-
**ASSERT** `方案数 >= 2
|
|
108
|
+
**ASSERT** `方案数 >= 2`
|
|
109
|
+
|
|
110
|
+
- `方案数 < 2` → 补充备选方案后重新对比
|
|
101
111
|
|
|
102
112
|
```
|
|
103
113
|
|
|
@@ -121,10 +131,19 @@ NO IMPLEMENTATION WITHOUT USER APPROVED DESIGN FIRST
|
|
|
121
131
|
- 关键接口
|
|
122
132
|
- 测试策略
|
|
123
133
|
|
|
124
|
-
**GATE**
|
|
134
|
+
**GATE** 用户设计确认(全部通过才进入 Phase 5):
|
|
135
|
+
|
|
136
|
+
- [ ] 架构/组件已展示并确认
|
|
137
|
+
- [ ] 数据流已展示并确认
|
|
138
|
+
- [ ] 关键接口已展示并确认
|
|
139
|
+
- [ ] 测试策略已展示并确认
|
|
125
140
|
|
|
141
|
+
**MATCH** `user_decision`:
|
|
142
|
+
|
|
143
|
+
- 用户确认通过 → 继续 Phase 5
|
|
126
144
|
- 用户要求修改 → **GOTO** Phase 3(仅重新展示修改后的方案,无需重新生成全部选项)
|
|
127
145
|
- 用户决定放弃 → **BLOCKED**,记录原因
|
|
146
|
+
- *default* → 向用户澄清确认意图
|
|
128
147
|
|
|
129
148
|
### Phase 5:产出 00-design-brief.md
|
|
130
149
|
|
|
@@ -167,7 +186,9 @@ NO IMPLEMENTATION WITHOUT USER APPROVED DESIGN FIRST
|
|
|
167
186
|
|
|
168
187
|
```
|
|
169
188
|
|
|
170
|
-
**ASSERT** `00-design-brief.md
|
|
189
|
+
**ASSERT** `00-design-brief.md 无占位符残留`(`{N}`、`{slug}` 等已替换为实际值)
|
|
190
|
+
|
|
191
|
+
- 残留占位符 → 替换为实际值后重新 **WRITE**
|
|
171
192
|
|
|
172
193
|
### Phase 6:Handoff
|
|
173
194
|
|
|
@@ -197,12 +218,14 @@ NO IMPLEMENTATION WITHOUT USER APPROVED DESIGN FIRST
|
|
|
197
218
|
|
|
198
219
|
## 自检门禁
|
|
199
220
|
|
|
221
|
+
**GATE** 产出前自检(全部通过才放行):
|
|
222
|
+
|
|
200
223
|
- [ ] 已 **READ** 代码库和现有实现(不是凭空设计)
|
|
201
|
-
- [ ]
|
|
202
|
-
- [ ] **
|
|
203
|
-
- [ ] `00-design-brief.md
|
|
204
|
-
- [ ] **ASSERT** `00-design-brief.md
|
|
205
|
-
- [ ] **ASSERT**
|
|
224
|
+
- [ ] **ASSERT** `方案数 >= 2`(不是只有一个选项)
|
|
225
|
+
- [ ] **ASSERT** `用户已确认设计方案`(不是自行决定)
|
|
226
|
+
- [ ] **ASSERT** `00-design-brief.md 存在`(已 **WRITE** 到 `docs/tasks/{slug}/`)
|
|
227
|
+
- [ ] **ASSERT** `00-design-brief.md 无占位符残留`
|
|
228
|
+
- [ ] **ASSERT** `01-plan.md 不存在`(那是 team-spec 的职责)
|
|
206
229
|
|
|
207
230
|
## 完成标志
|
|
208
231
|
|
|
@@ -51,6 +51,7 @@ NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST
|
|
|
51
51
|
|
|
52
52
|
1. **READ** 完整错误信息 — 不跳过 stack trace、行号、错误码
|
|
53
53
|
2. **EXEC** 稳定复现 — 确认触发条件和频率
|
|
54
|
+
- **ASSERT** `exit_code == 0` — 复现成功;失败 → 调整触发条件后重试
|
|
54
55
|
3. **READ** `git diff` + 最近 commits + 依赖变更 — 检查最近变更
|
|
55
56
|
4. **IF** 多组件系统 → 在每层边界添加诊断埋点,定位故障层
|
|
56
57
|
|
|
@@ -58,28 +59,30 @@ NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST
|
|
|
58
59
|
|
|
59
60
|
1. **READ** 代码库中相似的工作示例(完整阅读,不 skim)
|
|
60
61
|
2. **WRITE**(对话中)工作与失败之间的每个差异
|
|
61
|
-
3. **ASSERT**
|
|
62
|
+
3. **ASSERT** `未解释差异数 == 0`(不可假设"那个差异不重要")
|
|
62
63
|
|
|
63
64
|
### Phase 3:假设验证
|
|
64
65
|
|
|
65
66
|
1. **WRITE**(对话中)单一假设:"根因是 `{X}`,因为 `{Y}`"
|
|
66
67
|
2. **EXEC** 最小变更验证假设 — 一次只变一个变量
|
|
67
|
-
3. **
|
|
68
|
+
3. **IF** `exit_code != 0` → 记录执行失败详情
|
|
69
|
+
4. **MATCH** `verify_result`:
|
|
68
70
|
- 假设成立 → **GOTO** Phase 4
|
|
69
|
-
- 假设不成立 → 新假设 → **GOTO** Phase 3
|
|
70
|
-
- *default*(证据不足以判断)→ 补充诊断埋点 → **GOTO** Phase 1
|
|
71
|
+
- 假设不成立 → 新假设 → **GOTO** Phase 3
|
|
72
|
+
- *default*(证据不足以判断)→ 补充诊断埋点 → **GOTO** Phase 1
|
|
71
73
|
|
|
72
74
|
### Phase 4:修复实现
|
|
73
75
|
|
|
76
|
+
**REPEAT** max=3(修复尝试):
|
|
77
|
+
|
|
74
78
|
1. **WRITE** 失败测试到测试文件(最小复现用例)
|
|
75
79
|
2. **EXEC** 修复根因(不是症状)
|
|
80
|
+
- **ASSERT** `exit_code == 0` — 修复应用成功;失败 → 检查语法/编译错误
|
|
76
81
|
3. **EXEC** 项目测试命令 — 确认修复通过且无回归
|
|
77
|
-
- 修复引入新的测试失败 →
|
|
82
|
+
- **IF** `exit_code != 0` → 修复引入新的测试失败 → 回到步骤 2 定位新问题
|
|
78
83
|
4. **IF** 编排模式(任务目录存在)→ **WRITE** 修复循环到 `06-tdd-log.md` + 决策到 `08-ai-decisions.md`
|
|
84
|
+
5. 修复成功 → **GOTO** 自检门禁
|
|
79
85
|
|
|
80
|
-
**REPEAT** max=3(修复尝试,当前第 `attempt_count`/3 次):
|
|
81
|
-
|
|
82
|
-
- 修复成功 → **GOTO** 自检门禁
|
|
83
86
|
- *repeat exhausted* → **BLOCKED**,触发 **H3**,提交以下信息:
|
|
84
87
|
- 已尝试的 3 种修复方案 + 每种的失败原因
|
|
85
88
|
- 怀疑的架构问题
|
|
@@ -91,11 +94,11 @@ NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST
|
|
|
91
94
|
|
|
92
95
|
**GATE** "找不到根因"的最低门槛(全部满足才可声明):
|
|
93
96
|
|
|
94
|
-
- [ ]
|
|
95
|
-
- [ ]
|
|
96
|
-
- [ ]
|
|
97
|
-
- [ ]
|
|
98
|
-
- [ ]
|
|
97
|
+
- [ ] **ASSERT** `stack_trace 已完整 READ`
|
|
98
|
+
- [ ] **ASSERT** `独立复现次数 >= 3`(非 Phase 1 的首次复现)
|
|
99
|
+
- [ ] **ASSERT** `最近提交检查数 >= 10`
|
|
100
|
+
- [ ] **ASSERT** `正常实现对比数 >= 1`
|
|
101
|
+
- [ ] **ASSERT** `诊断日志/断言数 >= 5`
|
|
99
102
|
|
|
100
103
|
95% 的"找不到根因"是调查不充分。门槛未全部满足时,**GOTO** Phase 1。
|
|
101
104
|
|
|
@@ -132,11 +135,13 @@ NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST
|
|
|
132
135
|
|
|
133
136
|
## 自检门禁
|
|
134
137
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
- [ ]
|
|
138
|
-
- [ ] **
|
|
139
|
-
- [ ] **ASSERT**
|
|
138
|
+
**GATE** 产出前自检(全部通过才放行):
|
|
139
|
+
|
|
140
|
+
- [ ] **ASSERT** `根因描述` 非空(不是"可能是 X"而是"根因是 `{X}`")
|
|
141
|
+
- [ ] **ASSERT** `失败测试` 存在 — 修复前已 **WRITE** 失败测试
|
|
142
|
+
- [ ] **ASSERT** `exit_code == 0` — 修复后 **EXEC** 验证通过
|
|
143
|
+
- [ ] **ASSERT** `修复失败次数 < 3` || `H3 已触发`
|
|
144
|
+
- [ ] **ASSERT** `同时修改变量数 <= 1`
|
|
140
145
|
|
|
141
146
|
## 完成标志
|
|
142
147
|
|
|
@@ -72,17 +72,21 @@ NO IMPLEMENTATION WITHOUT TECHNICAL VERIFICATION FIRST
|
|
|
72
72
|
- **IF** 含义不确定 → 先提问澄清,暂不处理该项
|
|
73
73
|
3. **FOR** each `feedback_item`:
|
|
74
74
|
- **EXEC** `grep` / **READ** 实际代码 — 验证该建议在当前代码库中的技术正确性
|
|
75
|
-
- **
|
|
75
|
+
- **IF** `exit_code != 0` && `output 为空` → 标记该项为 *not found*,记录无法验证
|
|
76
|
+
- **ASSERT** `evidence_source != 印象`(验证基于代码证据,不凭印象)
|
|
76
77
|
4. **FOR** each `feedback_item`:
|
|
77
78
|
- **IF** 技术正确 → 记录确认,标记待实施
|
|
78
79
|
- **ELSE** → 用技术理由推回(参考「推回指南」)
|
|
79
|
-
5.
|
|
80
|
+
5. **IF** 存在「增加功能/完善」建议 → **GOTO** Phase 2
|
|
81
|
+
6. **IF** 存在外部反馈 → **GOTO** Phase 3
|
|
82
|
+
7. **GOTO** Phase 4
|
|
80
83
|
|
|
81
84
|
### Phase 2:YAGNI 检查
|
|
82
85
|
|
|
83
86
|
> 当审查者建议"实现得更完善"或添加新功能时,用代码证据判断是否真正需要。
|
|
84
87
|
|
|
85
88
|
1. **EXEC** `grep` 在代码库中查找该功能/接口的实际使用
|
|
89
|
+
- **IF** `exit_code != 0` && `output 为空` → `usage_result` = *not found*
|
|
86
90
|
|
|
87
91
|
2. **MATCH** `usage_result`:
|
|
88
92
|
- exported / public API 且有外部消费方可能 → 保留,即使当前项目未直接调用
|
|
@@ -96,8 +100,9 @@ NO IMPLEMENTATION WITHOUT TECHNICAL VERIFICATION FIRST
|
|
|
96
100
|
|
|
97
101
|
1. **FOR** each `external_feedback_item`:
|
|
98
102
|
- **EXEC** `grep` / **READ** 实际代码 — 验证技术正确性(同 Phase 1 步骤 3)
|
|
103
|
+
- **IF** `exit_code != 0` && `output 为空` → 标记该项为 *not found*
|
|
99
104
|
- **READ** `08-ai-decisions.md` — 检查与已有决策是否冲突
|
|
100
|
-
- **ASSERT**
|
|
105
|
+
- **ASSERT** `evidence_source != 印象`(验证基于代码证据,不凭印象)
|
|
101
106
|
|
|
102
107
|
2. **MATCH** `check_result`:
|
|
103
108
|
- 技术正确 + 无冲突 → 标记待实施(**GOTO** Phase 4)
|
|
@@ -106,6 +111,7 @@ NO IMPLEMENTATION WITHOUT TECHNICAL VERIFICATION FIRST
|
|
|
106
111
|
- 与已有决策冲突 → **H3**:暂停,展示冲突点,等待用户决策
|
|
107
112
|
- 反馈揭示 spec 遗漏 → **ROUTE** `team-spec`
|
|
108
113
|
- 反馈揭示架构问题 → **H3**
|
|
114
|
+
- *default* → 记录情况 → **NEEDS_CONTEXT**
|
|
109
115
|
|
|
110
116
|
### Phase 4:实施
|
|
111
117
|
|
|
@@ -121,17 +127,17 @@ NO IMPLEMENTATION WITHOUT TECHNICAL VERIFICATION FIRST
|
|
|
121
127
|
实施顺序:
|
|
122
128
|
|
|
123
129
|
1. **ASSERT** `不明确项 == 0`(所有不明确项已在 Phase 1 步骤 2 中澄清)
|
|
130
|
+
- `不明确项 > 0` → **GOTO** Phase 1 步骤 2 澄清后重试
|
|
124
131
|
2. 按优先级排序:阻塞问题 → 简单修复 → 复杂修复
|
|
125
132
|
3. **FOR** each `impl_item`(按排序顺序):
|
|
126
133
|
- 实施修改
|
|
127
134
|
- **EXEC** `verify_cmd` — 单独测试该项修改
|
|
128
135
|
- **ASSERT** `exit_code == 0` && `failures == 0`
|
|
129
|
-
-
|
|
136
|
+
- `exit_code != 0` → 立即定位原因并修复 → **GOTO** Step 3 当前项重新测试
|
|
130
137
|
4. **EXEC** `verify_cmd` — 全量测试,确认无回归
|
|
131
138
|
- **ASSERT** `exit_code == 0` && `failures == 0`
|
|
132
|
-
|
|
133
|
-
5. **IF**
|
|
134
|
-
- **WRITE** 每项修改的实施结果(反馈项 + 修改内容 + 测试结果)到 `08-ai-decisions.md`
|
|
139
|
+
- `exit_code != 0` → 定位引入问题的修改 → **ROLLBACK** 该修改 → 重新实施 → **GOTO** Step 3 该项
|
|
140
|
+
5. **IF** 任务目录存在(编排模式)→ **WRITE** `08-ai-decisions.md` 每项修改的实施结果(反馈项 + 修改内容 + 测试结果)
|
|
135
141
|
|
|
136
142
|
**验证协议**(步骤 3-4 声明"通过"前必须执行 `_team-rules/verification-protocol.md` 的 5 个步骤)
|
|
137
143
|
|
|
@@ -180,10 +186,12 @@ NO IMPLEMENTATION WITHOUT TECHNICAL VERIFICATION FIRST
|
|
|
180
186
|
|
|
181
187
|
## 自检门禁
|
|
182
188
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
- [ ] **ASSERT**
|
|
186
|
-
- [ ] **ASSERT**
|
|
189
|
+
**GATE** 产出前自检(全部通过才放行):
|
|
190
|
+
|
|
191
|
+
- [ ] **ASSERT** `每项反馈.技术验证 == true`
|
|
192
|
+
- [ ] **ASSERT** `不明确项 == 0`
|
|
193
|
+
- [ ] **ASSERT** `每项修改.单独测试 == passed`
|
|
194
|
+
- [ ] **ASSERT** `全量测试.exit_code == 0`
|
|
187
195
|
- [ ] **IF** 反馈揭示 spec 遗漏 → 已 **ROUTE** `team-spec`
|
|
188
196
|
- [ ] **IF** 反馈揭示架构问题 → 已触发 **H3**
|
|
189
197
|
|
|
@@ -57,8 +57,8 @@ NO BRANCH COMPLETION WITHOUT TEST VERIFICATION FIRST
|
|
|
57
57
|
|
|
58
58
|
- 通过 → **GOTO** Step 2
|
|
59
59
|
- 失败 → **MATCH** `mode`:
|
|
60
|
-
-
|
|
61
|
-
-
|
|
60
|
+
- `orchestrated` → **ROLLBACK** 编排器,由编排器 **ROUTE** implAgent(附上失败输出)
|
|
61
|
+
- *default* → **WRITE**(对话中)失败详情,推荐 `team-debug`,修复后 **GOTO** Step 1
|
|
62
62
|
|
|
63
63
|
> 不可忽略失败继续展示选项(FP-4)。
|
|
64
64
|
|
|
@@ -69,16 +69,18 @@ NO BRANCH COMPLETION WITHOUT TEST VERIFICATION FIRST
|
|
|
69
69
|
1. `READ("docs/tasks/{slug}/.checkpoint.json").base_branch`
|
|
70
70
|
2. `READ("CLAUDE.md").base_branch` / `READ(".cursor/rules/").default_branch`
|
|
71
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}")` 首个存在即停
|
|
72
|
+
4. **FOR** each `name` in [`main`, `master`, `develop`] → `EXEC("git show-ref --verify refs/heads/{name}")` 首个存在即停
|
|
73
73
|
5. *none* → **H3**:向用户展示 `git branch --list` 和 `git remote -v`,让用户指定
|
|
74
74
|
|
|
75
75
|
**EXEC** `git merge-base HEAD {base_branch}` → 获取合并基点
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
**ASSERT** `exit_code == 0`
|
|
78
|
+
|
|
79
|
+
- 失败(分支无公共祖先)→ **BLOCKED**,触发 **H3**
|
|
78
80
|
|
|
79
81
|
### Step 3:展示选项
|
|
80
82
|
|
|
81
|
-
**WRITE
|
|
83
|
+
**WRITE**(对话中)选项列表:
|
|
82
84
|
|
|
83
85
|
```
|
|
84
86
|
实现完成。请选择后续操作:
|
|
@@ -95,44 +97,66 @@ NO BRANCH COMPLETION WITHOUT TEST VERIFICATION FIRST
|
|
|
95
97
|
|
|
96
98
|
**MATCH** `user_choice`:
|
|
97
99
|
|
|
98
|
-
-
|
|
100
|
+
- `Option 1`(本地合并):
|
|
99
101
|
1. **EXEC** `git checkout {base_branch} && git pull`
|
|
102
|
+
- **ASSERT** `exit_code == 0`
|
|
103
|
+
- 失败 → **WRITE**(对话中)错误信息,**BLOCKED**
|
|
100
104
|
2. **EXEC** `git merge {branch} --no-ff`
|
|
101
|
-
-
|
|
102
|
-
-
|
|
103
|
-
|
|
104
|
-
-
|
|
105
|
-
|
|
106
|
-
|
|
105
|
+
- **IF** 合并冲突:
|
|
106
|
+
- **GOTO** 子步骤 4.1:冲突处理
|
|
107
|
+
- **ELSE**:
|
|
108
|
+
- 继续下一步
|
|
109
|
+
3. **EXEC** 项目测试命令(声明"通过"前须执行 `_team-rules/verification-protocol.md` 的 5 个步骤)
|
|
110
|
+
- **ASSERT** `exit_code == 0` && `failures == 0`
|
|
111
|
+
- 失败 → 记录回归详情 → **BLOCKED**
|
|
107
112
|
4. **EXEC** `git branch -d {branch}`
|
|
108
113
|
- **IF** `exit_code != 0` → **WRITE**(对话中)"分支未完全合并,需 -D 强制删除?",等待用户确认
|
|
109
114
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
- **Option 2**(创建 PR):
|
|
115
|
+
- `Option 2`(创建 PR):
|
|
113
116
|
1. **EXEC** `git push -u origin {branch}`
|
|
114
|
-
-
|
|
115
|
-
|
|
117
|
+
- **ASSERT** `exit_code == 0`
|
|
118
|
+
- 失败(auth 错误、远程未配置)→ **WRITE**(对话中)错误信息给用户,**BLOCKED**
|
|
119
|
+
2. **RESOLVE** `pr_cmd`(首个命中即停):
|
|
120
|
+
1. `READ("CLAUDE.md").pr_cmd` / `READ(".cursor/rules/").pr_cmd`
|
|
121
|
+
2. *default* → `gh pr create`
|
|
116
122
|
3. **EXEC** `{pr_cmd}`
|
|
117
|
-
- **ASSERT** `exit_code == 0`
|
|
118
|
-
|
|
123
|
+
- **ASSERT** `exit_code == 0`
|
|
124
|
+
- 通过 → **WRITE**(对话中)PR URL
|
|
125
|
+
- 失败 → **WRITE**(对话中)错误信息,**BLOCKED**
|
|
119
126
|
|
|
120
|
-
-
|
|
121
|
-
**WRITE
|
|
127
|
+
- `Option 3`(保留分支):
|
|
128
|
+
**WRITE**(对话中)"保留分支 {branch}。"
|
|
122
129
|
|
|
123
|
-
-
|
|
124
|
-
**ASSERT**
|
|
130
|
+
- `Option 4`(丢弃):
|
|
131
|
+
**ASSERT** `user_input == "discard"`
|
|
125
132
|
1. **EXEC** `git checkout {base_branch}`
|
|
133
|
+
- **ASSERT** `exit_code == 0`
|
|
126
134
|
2. **EXEC** `git branch -D {branch}`
|
|
135
|
+
- **ASSERT** `exit_code == 0`
|
|
127
136
|
|
|
128
137
|
- *default*(无效输入)→ **WRITE**(对话中)"请选择 1-4",重新展示选项
|
|
129
138
|
|
|
139
|
+
#### 子步骤 4.1:冲突处理
|
|
140
|
+
|
|
141
|
+
**WRITE**(对话中)冲突文件列表(不自动解决冲突)
|
|
142
|
+
|
|
143
|
+
**MATCH** `conflict_choice`:
|
|
144
|
+
|
|
145
|
+
- `A` → 手动解决冲突后继续
|
|
146
|
+
- `B` → 中止合并,改为创建 PR
|
|
147
|
+
- `C` → 中止合并,保留分支
|
|
148
|
+
- *default* → **WRITE**(对话中)"请选择 A/B/C"
|
|
149
|
+
|
|
130
150
|
### Step 5:清理工作目录
|
|
131
151
|
|
|
132
|
-
**IF** `user_choice` in [Option 1
|
|
152
|
+
**IF** `user_choice` in [`Option 1`, `Option 2`, `Option 4`]:
|
|
153
|
+
|
|
154
|
+
1. **EXEC** `git worktree list`
|
|
155
|
+
- **IF** `output` 包含关联工作目录 → 移除工作目录
|
|
133
156
|
|
|
134
|
-
|
|
135
|
-
|
|
157
|
+
**ELSE**:
|
|
158
|
+
|
|
159
|
+
- 无需清理
|
|
136
160
|
|
|
137
161
|
## STOP Signals
|
|
138
162
|
|
|
@@ -151,21 +175,24 @@ NO BRANCH COMPLETION WITHOUT TEST VERIFICATION FIRST
|
|
|
151
175
|
|
|
152
176
|
## 自检门禁
|
|
153
177
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
- [ ]
|
|
157
|
-
- [ ] **
|
|
158
|
-
- [ ]
|
|
159
|
-
- [ ] **
|
|
178
|
+
**GATE** 完成前自检(全部通过才放行):
|
|
179
|
+
|
|
180
|
+
- [ ] **ASSERT** `exit_code == 0` && `failures == 0`(测试已通过)
|
|
181
|
+
- [ ] **ASSERT** `base_branch` 非空
|
|
182
|
+
- [ ] **ASSERT** `user_choice` 非空(用户已选择,非自行决定)
|
|
183
|
+
- [ ] `[Option 4]` **ASSERT** `user_input == "discard"`
|
|
184
|
+
- [ ] **IF** `user_choice == Option 1` → **ASSERT** `merge_test_exit_code == 0`(合并后测试通过)
|
|
185
|
+
- [ ] **IF** `user_choice` in [`Option 1`, `Option 2`, `Option 4`] → **ASSERT** `worktree` 已清理
|
|
160
186
|
|
|
161
187
|
## 完成标志
|
|
162
188
|
|
|
163
189
|
**MATCH** `result`:
|
|
164
190
|
|
|
165
|
-
-
|
|
166
|
-
-
|
|
167
|
-
-
|
|
168
|
-
-
|
|
191
|
+
- `操作成功` → **DONE**
|
|
192
|
+
- `操作成功但有 warning` → **DONE_WITH_CONCERNS**
|
|
193
|
+
- `无法确定基准分支` → **NEEDS_CONTEXT**
|
|
194
|
+
- `测试失败` || `合并冲突` → **BLOCKED**
|
|
195
|
+
- *default* → **BLOCKED**,触发 **H3**
|
|
169
196
|
|
|
170
197
|
## 集成关系
|
|
171
198
|
|