dev-playbooks-cn 1.2.4 → 1.2.6

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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dev-playbooks-cn",
3
- "version": "1.2.4",
3
+ "version": "1.2.6",
4
4
  "description": "AI-driven spec-based development workflow",
5
5
  "keywords": [
6
6
  "devbooks",
@@ -10,6 +10,34 @@ allowed-tools:
10
10
 
11
11
  # DevBooks:代码评审(Reviewer)
12
12
 
13
+ ## 工作流位置感知(Workflow Position Awareness)
14
+
15
+ > **核心原则**:Code Review 在 Test Owner 阶段 2 验证之后执行,是归档前的最后一个评审步骤。
16
+
17
+ ### 我在整体工作流中的位置
18
+
19
+ ```
20
+ proposal → design → test-owner(阶段1) → coder → test-owner(阶段2) → [Code Review] → archive
21
+
22
+ 可读性/一致性/依赖审查
23
+ ```
24
+
25
+ ### Code Review 的职责边界
26
+
27
+ | 允许 | 禁止 |
28
+ |------|------|
29
+ | 审查代码可读性/一致性 | ❌ 修改代码文件 |
30
+ | 设置 verification.md Status = Done | ❌ 讨论业务正确性(那是 Test Owner 的事) |
31
+ | 提出改进建议 | ❌ 勾选 AC 覆盖矩阵(那是 Test Owner 的事) |
32
+
33
+ ### 前置条件
34
+
35
+ - [ ] Test Owner 阶段 2 已完成(AC 矩阵已打勾)
36
+ - [ ] 测试全绿
37
+ - [ ] evidence/green-final/ 存在
38
+
39
+ ---
40
+
13
41
  ## 前置:配置发现(协议无关)
14
42
 
15
43
  - `<truth-root>`:当前真理目录根
@@ -148,6 +176,15 @@ override dispose() {
148
176
  | 无 spec deltas | 归档完成 | 无需其他 skill |
149
177
  | 发现重大问题 | 交回 `devbooks-coder` | 归档前修复问题 |
150
178
 
179
+ ### Reviewer 专属权限:设置 verification.md Status
180
+
181
+ **只有 Reviewer 可以将 `verification.md` 的 Status 设为 `Done`**。
182
+
183
+ Review 通过后,Reviewer 必须执行:
184
+ 1. 打开 `<change-root>/<change-id>/verification.md`
185
+ 2. 将 `- Status: Ready` 改为 `- Status: Done`
186
+ 3. 这是归档的前置条件(`change-check.sh --mode archive` 会检查)
187
+
151
188
  ### 输出模板
152
189
 
153
190
  完成 code-review 后,输出:
@@ -12,6 +12,40 @@ allowed-tools:
12
12
 
13
13
  # DevBooks:实现负责人(Coder)
14
14
 
15
+ ## 工作流位置感知(Workflow Position Awareness)
16
+
17
+ > **核心原则**:Coder 在 Test Owner 阶段 1 之后执行,完成后交给 Test Owner 阶段 2 验证。
18
+
19
+ ### 我在整体工作流中的位置
20
+
21
+ ```
22
+ proposal → design → test-owner(阶段1) → [Coder] → test-owner(阶段2) → code-review → archive
23
+
24
+ 实现代码、让测试变绿
25
+ ```
26
+
27
+ ### Coder 的职责边界
28
+
29
+ | 允许 | 禁止 |
30
+ |------|------|
31
+ | 修改 `src/**` 代码 | ❌ 修改 `tests/**` |
32
+ | 勾选 `tasks.md` 任务项 | ❌ 修改 `verification.md` |
33
+ | 记录偏离到 `deviation-log.md` | ❌ 勾选 AC 覆盖矩阵 |
34
+ | 运行测试验证 | ❌ 设置 verification.md Status |
35
+
36
+ ### Coder 完成后的流程
37
+
38
+ 1. **任务完成**:tasks.md 全部 `[x]`
39
+ 2. **测试全绿**:运行 `npm test` 确认通过
40
+ 3. **交付 Test Owner**:通知 Test Owner 进入阶段 2 验证
41
+ 4. **等待验证结果**:
42
+ - Test Owner 确认全绿 → 进入 Code Review
43
+ - Test Owner 发现问题 → Coder 修复
44
+
45
+ **关键提醒**:Coder 完成后,**不是直接进入 Code Review**,而是先让 Test Owner 验证并打勾。
46
+
47
+ ---
48
+
15
49
  ## 前置:配置发现(协议无关)
16
50
 
17
51
  - `<truth-root>`:当前真理目录根
@@ -141,6 +175,7 @@ devbooks change-evidence <change-id> --label green-final -- npm test
141
175
  ### 角色边界约束
142
176
  - **禁止修改 `tests/**`**(需要改测试必须交还 Test Owner)
143
177
  - **禁止修改 `verification.md`**(由 Test Owner 维护)
178
+ - **禁止修改 `verification.md` 的 Status 字段**(只有 Reviewer 可以设为 Done)
144
179
  - **禁止修改 `.devbooks/`、`build/`、工程配置文件**(除非 proposal.md 明确声明)
145
180
 
146
181
  ### 代码质量约束
@@ -333,8 +368,8 @@ fi
333
368
 
334
369
  | 我的状态 | 下一步 | 原因 |
335
370
  |----------|--------|------|
336
- | COMPLETED | `devbooks-code-review` | 评审可读性/一致性 |
337
- | COMPLETED_WITH_DEVIATION | `devbooks-design-backport` | 先回写设计,再评审 |
371
+ | COMPLETED | `devbooks-test-owner`(阶段 2 验证) | 任务完成,需要 Test Owner 验证并打勾 |
372
+ | COMPLETED_WITH_DEVIATION | `devbooks-design-backport` | 先回写设计,再让 Test Owner 验证 |
338
373
  | HANDOFF (测试问题) | `devbooks-test-owner` | Coder 不能修改测试 |
339
374
  | BLOCKED | 等待用户 | 记录断点区 |
340
375
  | FAILED | 修复后重试 | 分析失败原因 |
@@ -343,6 +378,7 @@ fi
343
378
  - Coder **永远不能修改** `tests/**`
344
379
  - 如发现测试问题,必须 HANDOFF 给 Test Owner(单独会话)
345
380
  - 如有偏离,必须先 design-backport 再继续
381
+ - **Coder 完成后必须先经过 Test Owner 阶段 2 验证,再进入 Code Review**
346
382
 
347
383
  ---
348
384
 
@@ -410,6 +410,25 @@ check_verification() {
410
410
  return 0
411
411
  fi
412
412
 
413
+ # ==========================================================================
414
+ # AC-010: Verification Status Check
415
+ # Status field controls change package lifecycle: Draft → Ready → Done → Archived
416
+ # Only Reviewer can set Status to "Done" (Coder/Test Owner prohibited)
417
+ # ==========================================================================
418
+ if [[ "$mode" == "archive" || "$mode" == "strict" ]]; then
419
+ local status_line
420
+ status_line=$(rg -n "^- Status[::] *(Draft|Ready|Done|Archived)\b" "$verification_file" -m 1 || true)
421
+ if [[ -z "$status_line" ]]; then
422
+ err "verification missing Status line (e.g., '- Status: Done'): ${verification_file}"
423
+ else
424
+ local status_value
425
+ status_value="$(echo "$status_line" | sed -E 's/^[0-9]+:- Status[::] *//')"
426
+ if [[ "$status_value" != "Done" && "$status_value" != "Archived" ]]; then
427
+ err "verification Status must be 'Done' or 'Archived' for ${mode} (current: '${status_value}'). Only Reviewer can set Status to Done: ${verification_file}"
428
+ fi
429
+ fi
430
+ fi
431
+
413
432
  for h in "A\) (Test Plan Directive Table|测试计划指令表)" "B\) (Traceability Matrix|追溯矩阵)" "C\) (Execution Anchors|执行锚点)" "D\) (MANUAL-\* Checklist|MANUAL-\* 清单)"; do
414
433
  if ! rg -n "${h}" "$verification_file" >/dev/null; then
415
434
  err "verification missing section '${h}': ${verification_file}"
@@ -263,7 +263,13 @@ cat <<'EOF' | render_template | write_file "${change_dir}/verification.md"
263
263
  ## Metadata
264
264
 
265
265
  - Change ID: `__CHANGE_ID__`
266
- - Status: Draft | Ready | Done | Archived
266
+ - Status: Draft
267
+ > Status lifecycle: Draft → Ready → Done → Archived
268
+ > - Draft: Initial state
269
+ > - Ready: Test plan ready (set by Test Owner)
270
+ > - Done: All tests passed + Review approved (set by **Reviewer only**)
271
+ > - Archived: Archived (set by Spec Gardener)
272
+ > **Constraint: Coder is prohibited from modifying Status field**
267
273
  - References:
268
274
  - Proposal: `__CHANGE_ROOT__/__CHANGE_ID__/proposal.md`
269
275
  - Design: `__CHANGE_ROOT__/__CHANGE_ID__/design.md`
@@ -11,6 +11,40 @@ allowed-tools:
11
11
 
12
12
  # DevBooks:回写设计文档(Design Backport)
13
13
 
14
+ ## 工作流位置感知(Workflow Position Awareness)
15
+
16
+ > **核心原则**:Design Backport 现在**主要由 Spec Gardener 在归档阶段自动调用**,用户通常不需要手动调用。
17
+
18
+ ### 我在整体工作流中的位置
19
+
20
+ ```
21
+ proposal → design → test-owner → coder → test-owner(验证) → code-review → [Archive/Spec Gardener]
22
+ ↓ ↓
23
+ 记录偏离到 deviation-log.md 自动调用 design-backport
24
+ ```
25
+
26
+ ### 设计决策:自动回写
27
+
28
+ **旧流程**(需手动判断):
29
+ ```
30
+ coder 有偏离 → 用户手动调用 design-backport → 再归档
31
+ ```
32
+
33
+ **新流程**(自动处理):
34
+ ```
35
+ coder 有偏离 → 归档时 spec-gardener 自动检测并回写 → 归档
36
+ ```
37
+
38
+ ### 何时仍需手动调用
39
+
40
+ | 场景 | 是否需要手动调用 |
41
+ |------|------------------|
42
+ | 正常流程(偏离记录在 deviation-log.md) | ❌ 归档时自动处理 |
43
+ | 需要立即回写(不等归档) | ✅ 手动调用 |
44
+ | 设计与实现严重冲突需要决策 | ✅ 手动调用并讨论 |
45
+
46
+ ---
47
+
14
48
  ## 前置:配置发现(协议无关)
15
49
 
16
50
  - `<truth-root>`:当前真理目录根
@@ -11,6 +11,28 @@ allowed-tools:
11
11
 
12
12
  # DevBooks:设计文档(Design Doc)
13
13
 
14
+ ## 工作流位置感知(Workflow Position Awareness)
15
+
16
+ > **核心原则**:Design Doc 在 Proposal 批准后执行,是实现阶段的起点。
17
+
18
+ ### 我在整体工作流中的位置
19
+
20
+ ```
21
+ proposal → [Design Doc] → spec-contract → implementation-plan → test-owner → coder → ...
22
+
23
+ 定义 What/Constraints/AC
24
+ ```
25
+
26
+ ### Design Doc 的产出
27
+
28
+ - **What**:做什么(不是怎么做)
29
+ - **Constraints**:约束条件
30
+ - **AC-xxx**:验收标准(可测试的)
31
+
32
+ **关键**:Design Doc 不写实现步骤,那是 implementation-plan 的职责。
33
+
34
+ ---
35
+
14
36
  ## 前置:配置发现(协议无关)
15
37
 
16
38
  - `<truth-root>`:当前真理目录根
@@ -11,6 +11,42 @@ allowed-tools:
11
11
 
12
12
  # DevBooks:编码计划(Implementation Plan)
13
13
 
14
+ ## 工作流位置感知(Workflow Position Awareness)
15
+
16
+ > **核心原则**:Implementation Plan 在 Design Doc 之后执行,为 Test Owner 和 Coder 提供任务清单。
17
+
18
+ ### 我在整体工作流中的位置
19
+
20
+ ```
21
+ proposal → design → [Implementation Plan] → test-owner(阶段1) → coder → ...
22
+
23
+ tasks.md(任务清单)
24
+ ```
25
+
26
+ ### Implementation Plan 的职责
27
+
28
+ | 允许 | 禁止 |
29
+ |------|------|
30
+ | 从 design.md 推导任务 | ❌ 参考 tests/(避免实现偏见) |
31
+ | 绑定验收锚点 (AC-xxx) | ❌ 写实现代码 |
32
+ | 拆分并行任务 | ❌ 执行任务 |
33
+
34
+ ### 产出:tasks.md 结构
35
+
36
+ ```markdown
37
+ ## 主线计划区
38
+ - [ ] MP1.1 任务描述 (AC-001)
39
+ - [ ] MP1.2 任务描述 (AC-002)
40
+
41
+ ## 临时计划区
42
+ (紧急任务)
43
+
44
+ ## 断点区
45
+ (中断续做信息)
46
+ ```
47
+
48
+ ---
49
+
14
50
  ## 前置:配置发现(协议无关)
15
51
 
16
52
  - `<truth-root>`:当前真理目录根
@@ -11,6 +11,36 @@ allowed-tools:
11
11
 
12
12
  # DevBooks:规格园丁(Spec Gardener)
13
13
 
14
+ ## 工作流位置感知(Workflow Position Awareness)
15
+
16
+ > **核心原则**:Spec Gardener 是归档阶段的终点,负责将变更包产物合并到真理,**并自动处理任何未完成的回写**。
17
+
18
+ ### 我在整体工作流中的位置
19
+
20
+ ```
21
+ proposal → design → test-owner → coder → test-owner(验证) → code-review → [Spec Gardener/Archive]
22
+
23
+ 自动回写 + 合并到真理 + 归档
24
+ ```
25
+
26
+ ### Spec Gardener 的职责
27
+
28
+ 1. **自动回写检测**:检查 deviation-log.md 是否有未回写记录
29
+ 2. **自动执行回写**:如有未回写记录,自动执行设计回写
30
+ 3. **合并到真理**:将 specs/contracts/architecture 合并到 truth-root
31
+ 4. **归档变更包**:设置 verification.md Status = Archived
32
+
33
+ ### 为什么在归档阶段自动回写?
34
+
35
+ **设计决策**:用户只需线性调用 skills,不需要判断是否需要回写。
36
+
37
+ | 场景 | 旧设计(需手动判断) | 新设计(自动处理) |
38
+ |------|---------------------|-------------------|
39
+ | Coder 有偏离 | 用户需调用 design-backport → 再归档 | Spec Gardener 自动检测并回写 |
40
+ | Coder 无偏离 | 直接归档 | 直接归档 |
41
+
42
+ ---
43
+
14
44
  ## 前置:配置发现(协议无关)
15
45
 
16
46
  - `<truth-root>`:当前真理目录根
@@ -31,6 +61,51 @@ allowed-tools:
31
61
 
32
62
  ## 核心职责
33
63
 
64
+ ### 0. 自动回写检测与处理(归档前必做)
65
+
66
+ > **设计决策**:归档阶段自动处理所有未回写的偏离,用户无需手动调用 design-backport。
67
+
68
+ **检测流程**:
69
+
70
+ ```
71
+ 1. 读取 <change-root>/<change-id>/deviation-log.md
72
+ 2. 检查是否有 "| ❌" 未回写记录
73
+ → 有:执行自动回写(步骤 3-5)
74
+ → 无:跳过,直接进入合并阶段
75
+
76
+ 3. 对每条未回写记录,判断是否为 Design-level 内容:
77
+ - DESIGN_GAP, CONSTRAINT_CHANGE, API_CHANGE → 需要回写
78
+ - 纯实现细节(文件名/类名/临时步骤) → 不回写,标记为 IMPL_ONLY
79
+
80
+ 4. 执行设计回写:
81
+ - 读取 design.md
82
+ - 按 design-backport 协议的"可回写内容范围"更新
83
+ - 在 design.md 末尾添加变更记录
84
+
85
+ 5. 更新 deviation-log.md:
86
+ - 将已回写的记录标记为 ✅
87
+ - 记录回写时间和归档批次
88
+ ```
89
+
90
+ **自动回写的内容范围**(继承自 design-backport):
91
+
92
+ | 可回写 | 不可回写 |
93
+ |--------|----------|
94
+ | 对外语义/用户可感知行为 | 具体文件路径、类名/函数名 |
95
+ | 系统级不可变约束(Invariants) | PR 切分、任务执行顺序 |
96
+ | 核心数据契约与演进策略 | 过细的算法伪代码 |
97
+ | 跨阶段治理策略 | 脚本命令 |
98
+ | 关键取舍与决策 | 表名/字段名 |
99
+
100
+ **deviation-log.md 更新格式**:
101
+
102
+ ```markdown
103
+ | 时间 | 类型 | 描述 | 涉及文件 | 已回写 | 回写批次 |
104
+ |------|------|------|----------|:------:|----------|
105
+ | 2024-01-15 10:30 | DESIGN_GAP | 并发场景 | tests/... | ✅ | archive-2024-01-16 |
106
+ | 2024-01-15 11:00 | IMPL_ONLY | 重命名变量 | src/... | ⏭️ | (跳过) |
107
+ ```
108
+
34
109
  ### 1. 规格合并与维护
35
110
 
36
111
  在归档阶段,将变更包中的规格产物合并到 `<truth-root>`:
@@ -106,10 +181,34 @@ allowed-tools:
106
181
 
107
182
  | 模式 | 触发条件 | 行为 |
108
183
  |------|----------|------|
109
- | **归档模式** | 提供 change-id 且闸门通过 | 将变更包产物合并到 truth-root |
184
+ | **归档模式** | 提供 change-id 且闸门通过 | **自动回写** → 合并到 truth-root → 设置 Status=Archived |
110
185
  | **维护模式** | 无 change-id | 执行去重、清理、整理操作 |
111
186
  | **检查模式** | 带 --dry-run 参数 | 只输出建议,不实际修改 |
112
187
 
188
+ ### 归档模式完整流程
189
+
190
+ ```
191
+ 1. 前置检查:
192
+ - [ ] 变更包存在
193
+ - [ ] verification.md Status = Ready 或 Done
194
+ - [ ] evidence/green-final/ 存在
195
+ - [ ] tasks.md 全部 [x]
196
+
197
+ 2. 自动回写(如有需要):
198
+ - [ ] 检测 deviation-log.md
199
+ - [ ] 回写 design.md
200
+ - [ ] 更新 deviation-log.md 标记
201
+
202
+ 3. 合并到真理:
203
+ - [ ] 合并 specs/**
204
+ - [ ] 合并 contracts/**
205
+ - [ ] 合并 Architecture Impact 到 c4.md
206
+
207
+ 4. 归档:
208
+ - [ ] 设置 verification.md Status = Archived
209
+ - [ ] 输出归档报告
210
+ ```
211
+
113
212
  ### 检测输出示例
114
213
 
115
214
  ```
@@ -12,6 +12,46 @@ allowed-tools:
12
12
 
13
13
  # DevBooks:测试负责人(Test Owner)
14
14
 
15
+ ## 工作流位置感知(Workflow Position Awareness)
16
+
17
+ > **核心原则**:Test Owner 在整体工作流中承担**双阶段职责**,确保与 Coder 的角色隔离。
18
+
19
+ ### 我在整体工作流中的位置
20
+
21
+ ```
22
+ proposal → design → [Test Owner 阶段1] → coder → [Test Owner 阶段2] → code-review → archive
23
+ ↓ ↓
24
+ Red 基线产出 Green 验证 + 打勾
25
+ ```
26
+
27
+ ### Test Owner 的双阶段职责
28
+
29
+ | 阶段 | 触发时机 | 核心职责 | 产出 |
30
+ |------|----------|----------|------|
31
+ | **阶段 1:Red 基线** | design.md 完成后 | 编写测试、产出失败证据 | verification.md (Status=Ready)、Red 基线 |
32
+ | **阶段 2:Green 验证** | Coder 完成后 | 验证测试通过、勾选 AC 覆盖矩阵 | AC 矩阵打勾、Status 保持 Ready(等 Reviewer 设 Done) |
33
+
34
+ ### 阶段 2 详细职责(关键!)
35
+
36
+ 当用户说"Coder 完成了,请验证"或类似请求时,Test Owner 进入**阶段 2**:
37
+
38
+ 1. **运行全部测试**:执行 `npm test` 或项目测试命令
39
+ 2. **验证 Green 状态**:确认所有测试通过
40
+ 3. **勾选 AC 覆盖矩阵**:在 verification.md 的 AC 覆盖矩阵中将 `[ ]` 改为 `[x]`
41
+ 4. **收集 Green 证据**:保存到 `evidence/green-final/`
42
+ 5. **输出验证报告**:总结测试结果和覆盖情况
43
+
44
+ ### AC 覆盖矩阵复选框权限(重要!)
45
+
46
+ | 复选框位置 | 谁可以勾选 | 勾选时机 |
47
+ |------------|-----------|----------|
48
+ | AC 覆盖矩阵中的 `[ ]` | **Test Owner** | 阶段 2 验证 Green 状态后 |
49
+ | Status 字段 `Done` | Reviewer | Code Review 通过后 |
50
+
51
+ **禁止**:Coder 不能勾选 AC 覆盖矩阵,不能修改 verification.md。
52
+
53
+ ---
54
+
15
55
  ## 前置:配置发现(协议无关)
16
56
 
17
57
  - `<truth-root>`:当前真理目录根
@@ -40,6 +80,17 @@ allowed-tools:
40
80
 
41
81
  Test Owner 必须产出结构化的 `verification.md`,同时作为测试计划和追溯文档。
42
82
 
83
+ ### Status 字段权限
84
+
85
+ | 状态 | 含义 | 谁可以设置 |
86
+ |------|------|-----------|
87
+ | `Draft` | 初始状态 | 自动生成 |
88
+ | `Ready` | 测试计划就绪 | **Test Owner** |
89
+ | `Done` | Review 通过 | Reviewer(禁止 Test Owner/Coder) |
90
+ | `Archived` | 已归档 | Spec Gardener |
91
+
92
+ **约束**:Test Owner 完成测试计划后,应将 Status 设为 `Ready`。
93
+
43
94
  ```markdown
44
95
  # 验证计划:<change-id>
45
96
 
@@ -328,28 +379,53 @@ devbooks change-evidence <change-id> --label red-baseline -- npm test
328
379
 
329
380
  ## 完成状态与下一步路由
330
381
 
331
- ### 完成状态分类(MECE)
382
+ ### 阶段感知(关键!)
383
+
384
+ Test Owner 有两个阶段,完成状态因阶段而异:
385
+
386
+ | 当前阶段 | 如何判断 | 完成后下一步 |
387
+ |----------|----------|--------------|
388
+ | **阶段 1** | verification.md 不存在或 Red 基线未产出 | → Coder |
389
+ | **阶段 2** | 用户说"验证/打勾"且 Coder 已完成 | → Code Review |
390
+
391
+ ### 阶段 1 完成状态分类(MECE)
332
392
 
333
393
  | 状态码 | 状态 | 判定条件 | 下一步 |
334
394
  |:------:|------|----------|--------|
335
- | ✅ | COMPLETED | Red 基线产出,无偏离 | `devbooks-coder`(单独会话) |
336
- | ⚠️ | COMPLETED_WITH_DEVIATION | Red 基线产出,deviation-log 有未回写记录 | `devbooks-design-backport` |
395
+ | ✅ | PHASE1_COMPLETED | Red 基线产出,无偏离 | `devbooks-coder`(单独会话) |
396
+ | ⚠️ | PHASE1_COMPLETED_WITH_DEVIATION | Red 基线产出,deviation-log 有未回写记录 | `devbooks-design-backport` |
337
397
  | ❌ | BLOCKED | 需要外部输入/决策 | 记录断点,等待用户 |
338
398
  | 💥 | FAILED | 测试框架问题等 | 修复后重试 |
339
399
 
340
- ### 状态判定流程
400
+ ### 阶段 2 完成状态分类(MECE)
341
401
 
342
- ```
343
- 1. 检查 deviation-log.md 是否有 "| ❌" 记录
344
- 有:COMPLETED_WITH_DEVIATION
402
+ | 状态码 | 状态 | 判定条件 | 下一步 |
403
+ |:------:|------|----------|--------|
404
+ | ✅ | PHASE2_VERIFIED | 测试全绿,AC 矩阵已打勾 | `devbooks-code-review` |
405
+ | ❌ | PHASE2_FAILED | 测试未通过 | 通知 Coder 修复,或 HANDOFF |
406
+ | 🔄 | PHASE2_HANDOFF | 发现测试本身有问题 | 修复测试后重新验证 |
345
407
 
346
- 2. 检查 Red 基线是否产出
347
- - verification.md 存在且有追溯矩阵
348
- - evidence/red-baseline/ 存在
349
- → 否:BLOCKED 或 FAILED
408
+ ### 阶段判定流程
350
409
 
351
- 3. 以上都通过
352
- COMPLETED
410
+ ```
411
+ 1. 检查当前处于哪个阶段:
412
+ - verification.md 不存在 → 阶段 1
413
+ - verification.md 存在但 AC 矩阵全是 [ ] → 阶段 1 或 阶段 2(看用户请求)
414
+ - 用户明确说"验证/打勾/Coder 完成了" → 阶段 2
415
+
416
+ 2. 阶段 1 状态判定:
417
+ a. 检查 deviation-log.md 是否有 "| ❌" 记录
418
+ → 有:PHASE1_COMPLETED_WITH_DEVIATION
419
+ b. 检查 Red 基线是否产出
420
+ → 否:BLOCKED 或 FAILED
421
+ c. 以上都通过 → PHASE1_COMPLETED
422
+
423
+ 3. 阶段 2 状态判定:
424
+ a. 运行测试,检查是否全绿
425
+ → 否:PHASE2_FAILED
426
+ b. 检查测试本身是否有问题
427
+ → 是:PHASE2_HANDOFF
428
+ c. 全绿且无问题 → PHASE2_VERIFIED
353
429
  ```
354
430
 
355
431
  ### 路由输出模板(必须使用)
@@ -359,15 +435,21 @@ devbooks change-evidence <change-id> --label red-baseline -- npm test
359
435
  ```markdown
360
436
  ## 完成状态
361
437
 
362
- **状态**:✅ COMPLETED / ⚠️ COMPLETED_WITH_DEVIATION / ❌ BLOCKED / 💥 FAILED
438
+ **阶段**:阶段 1(Red 基线)/ 阶段 2(Green 验证)
439
+
440
+ **状态**:✅ PHASE1_COMPLETED / ✅ PHASE2_VERIFIED / ⚠️ ... / ❌ ... / 💥 ...
441
+
442
+ **Red 基线**:已产出 / 未完成(仅阶段 1)
443
+
444
+ **Green 验证**:全绿 / 有失败(仅阶段 2)
363
445
 
364
- **Red 基线**:已产出 / 未完成
446
+ **AC 矩阵**:已打勾 N/M / 未打勾(仅阶段 2)
365
447
 
366
448
  **偏离记录**:有 N 条待回写 / 无
367
449
 
368
450
  ## 下一步
369
451
 
370
- **推荐**:`devbooks-xxx skill`(单独会话)
452
+ **推荐**:`devbooks-xxx skill`
371
453
 
372
454
  **原因**:[具体原因]
373
455
 
@@ -379,8 +461,11 @@ devbooks change-evidence <change-id> --label red-baseline -- npm test
379
461
 
380
462
  | 我的状态 | 下一步 | 原因 |
381
463
  |----------|--------|------|
382
- | COMPLETED | `devbooks-coder`(单独会话) | Red 基线已产出,Coder 实现以变绿 |
383
- | COMPLETED_WITH_DEVIATION | `devbooks-design-backport` | 先回写设计,再交给 Coder |
464
+ | PHASE1_COMPLETED | `devbooks-coder`(单独会话) | Red 基线已产出,Coder 实现以变绿 |
465
+ | PHASE1_COMPLETED_WITH_DEVIATION | `devbooks-design-backport` | 先回写设计,再交给 Coder |
466
+ | PHASE2_VERIFIED | `devbooks-code-review` | 测试全绿,可以进入代码评审 |
467
+ | PHASE2_FAILED | 通知 Coder | 测试未通过,需要 Coder 修复 |
468
+ | PHASE2_HANDOFF | 修复测试 | 测试本身有问题,Test Owner 修复 |
384
469
  | BLOCKED | 等待用户 | 记录断点区 |
385
470
  | FAILED | 修复后重试 | 分析失败原因 |
386
471
 
@@ -388,6 +473,7 @@ devbooks change-evidence <change-id> --label red-baseline -- npm test
388
473
  - **角色隔离**:Coder 必须在**单独的会话/实例**中工作
389
474
  - Test Owner 和 Coder 不能共享同一会话上下文
390
475
  - 如有偏离,必须先 design-backport 再交给 Coder
476
+ - **阶段 2 的 AC 矩阵打勾只能由 Test Owner 执行**
391
477
 
392
478
  ---
393
479