dev-playbooks-cn 1.5.2 → 1.5.4

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.5.2",
3
+ "version": "1.5.4",
4
4
  "description": "AI-driven spec-based development workflow",
5
5
  "keywords": [
6
6
  "devbooks",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: devbooks-delivery-workflow
3
- description: devbooks-delivery-workflow:把一次变更跑成可追溯闭环(Design→Plan→TraceVerify→Implement→Archive),明确 DoD、追溯矩阵与角色隔离(Test Owner 与 Coder 分离)。用户说"跑一遍闭环/交付验收/追溯矩阵/DoD/关账归档/验收工作流"等时使用。
3
+ description: devbooks-delivery-workflow:完整闭环编排器,在支持子 Agent 的 AI 编程工具中调用,自动编排 Proposal→Design→Spec→Plan→Test→Implement→Review→Archive 全流程。用户说"跑一遍闭环/完整交付/从头到尾跑完/自动化变更流程"等时使用。
4
4
  allowed-tools:
5
5
  - Glob
6
6
  - Grep
@@ -8,9 +8,12 @@ allowed-tools:
8
8
  - Write
9
9
  - Edit
10
10
  - Bash
11
+ - Task
11
12
  ---
12
13
 
13
- # DevBooks:交付验收工作流(闭环骨架)
14
+ # DevBooks:交付验收工作流(完整闭环编排器)
15
+
16
+ > **定位**:本 Skill 是**编排层**,不是日常手动使用的 Skill。它在支持子 Agent 的 AI 编程工具(如 Claude Code with Task tool)中调用,自动编排完整的变更闭环。
14
17
 
15
18
  ## 前置:配置发现(协议无关)
16
19
 
@@ -28,57 +31,85 @@ allowed-tools:
28
31
  - 禁止猜测目录根
29
32
  - 禁止跳过规则文档阅读
30
33
 
31
- ## 变更包命名规范(必须遵守)
34
+ ## 核心职责:完整闭环编排
32
35
 
33
- 变更包 ID(change-id)**必须**遵循以下命名规范:
36
+ Skill 的核心能力是**编排子 Agent 完成完整变更闭环**。
34
37
 
35
- ### 格式
38
+ ### 闭环流程(8 个阶段)
36
39
 
37
40
  ```
38
- <日期时间>-<动词开头的语义描述>
41
+ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
42
+ │ 1. Propose │ ──▶ │ 2. Design │ ──▶ │ 3. Spec │ ──▶ │ 4. Plan │
43
+ │ (提案) │ │ (设计) │ │ (规格) │ │ (计划) │
44
+ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
45
+ │ │
46
+ ▼ ▼
47
+ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
48
+ │ 8. Archive │ ◀── │ 7. Review │ ◀── │ 6. Code │ ◀── │ 5. Test │
49
+ │ (归档) │ │ (评审) │ │ (实现) │ │ (测试) │
50
+ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
39
51
  ```
40
52
 
41
- ### 规则
53
+ ### 阶段详解与对应 Skill
42
54
 
43
- | 组成部分 | 规则 | 示例 |
44
- |----------|------|------|
45
- | 日期时间 | `YYYYMMDD-HHMM` 格式 | `20240116-1030` |
46
- | 分隔符 | 日期时间与语义之间用 `-` 分隔 | `-` |
47
- | 语义描述 | **必须以动词开头**,使用小写和连字符 | `add-oauth2`, `fix-login-bug` |
55
+ | 阶段 | Skill | 产物 | 角色 |
56
+ |------|-------|------|------|
57
+ | 1. Propose | `devbooks-proposal-author` | proposal.md | Author |
58
+ | 1.5 Challenge(可选) | `devbooks-proposal-challenger` | 质疑意见 | Challenger |
59
+ | 1.6 Judge(可选) | `devbooks-proposal-judge` | 裁决结果 | Judge |
60
+ | 2. Design | `devbooks-design-doc` | design.md | Designer |
61
+ | 3. Spec | `devbooks-spec-contract` | specs/*.md | Spec Owner |
62
+ | 4. Plan | `devbooks-implementation-plan` | tasks.md | Planner |
63
+ | 5. Test | `devbooks-test-owner` | verification.md + tests/ | Test Owner |
64
+ | 6. Code | `devbooks-coder` | src/ 实现 | Coder |
65
+ | 7. Review | `devbooks-code-review` | 评审意见 | Reviewer |
66
+ | 7.5 Test Review(可选) | `devbooks-test-reviewer` | 测试评审 | Test Reviewer |
67
+ | 8. Archive | `devbooks-archiver` | 归档到真理源 | Archiver |
48
68
 
49
- ### 合法示例
69
+ ### 编排逻辑
50
70
 
51
- ```bash
52
- # ✅ 正确
53
- 20240116-1030-add-oauth2-support
54
- 20240116-1430-fix-user-auth-bug
55
- 20240116-0900-refactor-payment-module
56
- 20240115-2200-update-api-docs
57
-
58
- # 错误
59
- add-oauth2 # 缺少日期时间
60
- 20240116-oauth2 # 语义不是动词开头
61
- 2024-01-16-add-oauth2 # 日期格式错误(不应有 -)
62
- oauth2-20240116 # 顺序错误
71
+ ```
72
+ 1. 接收用户需求
73
+ 2. 调用 proposal-author 创建提案(自动生成 change-id)
74
+ 3. [可选] 调用 proposal-challenger 质疑提案
75
+ 4. [可选] 调用 proposal-judge 裁决
76
+ 5. 调用 design-doc 创建设计文档
77
+ 6. [如有对外契约] 调用 spec-contract 定义规格
78
+ 7. 调用 implementation-plan 创建实现计划
79
+ 8. 调用 test-owner 编写测试(独立 Agent)
80
+ 9. 调用 coder 实现功能(独立 Agent)
81
+ 10. 调用 code-review 评审代码
82
+ 11. [可选] 调用 test-reviewer 评审测试
83
+ 12. 调用 archiver 归档到真理源
63
84
  ```
64
85
 
65
- ### 常用动词
86
+ ### 角色隔离约束
87
+
88
+ **关键原则**:Test Owner 和 Coder 必须使用**独立的 Agent 实例/会话**。
89
+
90
+ | 角色 | 隔离要求 | 原因 |
91
+ |------|----------|------|
92
+ | Test Owner | 独立 Agent | 防止 Coder 篡改测试 |
93
+ | Coder | 独立 Agent | 防止 Coder 看到测试实现细节 |
94
+ | Reviewer | 独立 Agent(推荐) | 保持评审客观性 |
66
95
 
67
- | 动词 | 用途 |
68
- |------|------|
69
- | `add` | 添加新功能 |
70
- | `fix` | 修复缺陷 |
71
- | `update` | 更新现有功能 |
72
- | `refactor` | 重构代码 |
73
- | `remove` | 删除功能 |
74
- | `improve` | 改进性能/体验 |
75
- | `migrate` | 迁移数据/系统 |
96
+ ### 闸门检查点
76
97
 
77
- ### 为什么这样命名?
98
+ 每个阶段完成后,调用 `change-check.sh` 验证:
78
99
 
79
- 1. **时间戳在前**:归档目录中自动按时间排序
80
- 2. **动词开头**:清晰表达变更意图,方便代码审查
81
- 3. **小写连字符**:避免跨平台文件名问题
100
+ ```bash
101
+ # 提案阶段检查
102
+ change-check.sh <change-id> --mode proposal
103
+
104
+ # 实现阶段检查(Test Owner)
105
+ change-check.sh <change-id> --mode apply --role test-owner
106
+
107
+ # 实现阶段检查(Coder)
108
+ change-check.sh <change-id> --mode apply --role coder
109
+
110
+ # 归档前检查
111
+ change-check.sh <change-id> --mode archive
112
+ ```
82
113
 
83
114
  ## 参考骨架(按需读取)
84
115
 
@@ -81,6 +81,83 @@ if [[ -z "$change_id" || "$change_id" == "-"* || "$change_id" =~ [[:space:]] ]];
81
81
  exit 2
82
82
  fi
83
83
 
84
+ # Validate change-id format: YYYYMMDD-HHMM-<verb-prefixed-description>
85
+ # 格式:日期时间-动词开头的语义描述
86
+ # 示例:20240116-1030-add-oauth2-support
87
+ validate_change_id_format() {
88
+ local id="$1"
89
+
90
+ # Pattern: 8 digits (date) + hyphen + 4 digits (time) + hyphen + verb-prefixed-description
91
+ # 日期:YYYYMMDD,时间:HHMM
92
+ if [[ ! "$id" =~ ^[0-9]{8}-[0-9]{4}-.+ ]]; then
93
+ return 1
94
+ fi
95
+
96
+ # Extract datetime part for validation
97
+ local date_part="${id:0:8}"
98
+ local time_part="${id:9:4}"
99
+ local desc_part="${id:14}"
100
+
101
+ # Validate date (basic check: year 2020-2099, month 01-12, day 01-31)
102
+ local year="${date_part:0:4}"
103
+ local month="${date_part:4:2}"
104
+ local day="${date_part:6:2}"
105
+
106
+ # Remove leading zeros for numeric comparison
107
+ year=$((10#$year))
108
+ month=$((10#$month))
109
+ day=$((10#$day))
110
+
111
+ if [[ "$year" -lt 2020 || "$year" -gt 2099 ]]; then
112
+ return 1
113
+ fi
114
+ if [[ "$month" -lt 1 || "$month" -gt 12 ]]; then
115
+ return 1
116
+ fi
117
+ if [[ "$day" -lt 1 || "$day" -gt 31 ]]; then
118
+ return 1
119
+ fi
120
+
121
+ # Validate time (hour 00-23, minute 00-59)
122
+ local hour="${time_part:0:2}"
123
+ local minute="${time_part:2:2}"
124
+
125
+ hour=$((10#$hour))
126
+ minute=$((10#$minute))
127
+
128
+ if [[ "$hour" -lt 0 || "$hour" -gt 23 ]]; then
129
+ return 1
130
+ fi
131
+ if [[ "$minute" -lt 0 || "$minute" -gt 59 ]]; then
132
+ return 1
133
+ fi
134
+
135
+ # Validate description starts with a verb (common verbs)
136
+ # 常用动词:add, fix, update, refactor, remove, improve, migrate, implement, ...
137
+ local verb_pattern="^(add|fix|update|refactor|remove|improve|migrate|implement|enable|disable|change|create|delete|modify|optimize|resolve|setup|init|configure|introduce|extract|merge|split|move|rename|deprecate|upgrade|downgrade|revert|sync|integrate|unify|standardize|simplify|extend|reduce|enhance|support|handle|validate|test|document|cleanup|prepare|finalize|complete|release|publish|deploy|hotfix|patch|bump)-"
138
+
139
+ if [[ ! "$desc_part" =~ $verb_pattern ]]; then
140
+ return 1
141
+ fi
142
+
143
+ return 0
144
+ }
145
+
146
+ if ! validate_change_id_format "$change_id"; then
147
+ echo "error: change-id 格式无效: '$change_id'" >&2
148
+ echo "" >&2
149
+ echo "期望格式: YYYYMMDD-HHMM-<动词开头的语义描述>" >&2
150
+ echo "示例: 20240116-1030-add-oauth2-support" >&2
151
+ echo "" >&2
152
+ echo "规则:" >&2
153
+ echo " - 日期: YYYYMMDD (如 20240116)" >&2
154
+ echo " - 时间: HHMM (如 1030 表示 10:30)" >&2
155
+ echo " - 描述: 必须以动词开头 (add/fix/update/refactor/...)" >&2
156
+ echo "" >&2
157
+ echo "常用动词: add, fix, update, refactor, remove, improve, migrate, implement" >&2
158
+ exit 2
159
+ fi
160
+
84
161
  if [[ -z "$project_root" || -z "$change_root" || -z "$truth_root" ]]; then
85
162
  usage
86
163
  exit 2
@@ -32,6 +32,66 @@ allowed-tools:
32
32
  1. **提案撰写**:产出清晰、可审查、可落地的变更提案
33
33
  2. **设计性决策交互**:对于无法客观判断好坏的设计选择,呈现选项给用户决策,不自行拍板
34
34
 
35
+ ## 变更包命名规范(强制)
36
+
37
+ 变更包 ID(change-id)**必须**遵循以下命名规范:
38
+
39
+ ### 格式
40
+
41
+ ```
42
+ <日期时间>-<动词开头的语义描述>
43
+ ```
44
+
45
+ ### 规则
46
+
47
+ | 组成部分 | 规则 | 示例 |
48
+ |----------|------|------|
49
+ | 日期时间 | `YYYYMMDD-HHMM` 格式 | `20240116-1030` |
50
+ | 分隔符 | 日期时间与语义之间用 `-` 分隔 | `-` |
51
+ | 语义描述 | **必须以动词开头**,使用小写和连字符 | `add-oauth2`, `fix-login-bug` |
52
+
53
+ ### 示例
54
+
55
+ ```bash
56
+ # ✅ 正确
57
+ 20240116-1030-add-oauth2-support
58
+ 20240116-1430-fix-user-auth-bug
59
+ 20240116-0900-refactor-payment-module
60
+ 20240115-2200-update-api-docs
61
+
62
+ # ❌ 错误
63
+ add-oauth2 # 缺少日期时间
64
+ 20240116-oauth2 # 语义不是动词开头
65
+ 2024-01-16-add-oauth2 # 日期格式错误(不应有 -)
66
+ oauth2-20240116 # 顺序错误
67
+ ```
68
+
69
+ ### 常用动词
70
+
71
+ | 动词 | 用途 |
72
+ |------|------|
73
+ | `add` | 添加新功能 |
74
+ | `fix` | 修复缺陷 |
75
+ | `update` | 更新现有功能 |
76
+ | `refactor` | 重构代码 |
77
+ | `remove` | 删除功能 |
78
+ | `improve` | 提升性能/体验 |
79
+ | `migrate` | 迁移数据/系统 |
80
+
81
+ ### 为什么这样命名?
82
+
83
+ 1. **时间戳在前**:归档目录中自动按时间排序
84
+ 2. **动词开头**:清晰表达变更意图,方便代码审查
85
+ 3. **小写连字符**:避免跨平台文件名问题
86
+
87
+ ### 创建变更包
88
+
89
+ 在确定 change-id 后,调用脚手架脚本初始化变更包:
90
+
91
+ ```bash
92
+ change-scaffold.sh <change-id> --project-root <repo-root> --change-root <change-root> --truth-root <truth-root>
93
+ ```
94
+
35
95
  ## 产物落点
36
96
 
37
97
  - 提案:`<change-root>/<change-id>/proposal.md`
@@ -53,6 +53,34 @@ allowed-tools:
53
53
  - 必须对照 `verification.md` 检查测试是否覆盖所有 AC
54
54
  - 如发现测试缺失,明确指出缺失的 AC-ID
55
55
 
56
+ ### CON-ROLE-004:只评审测试代码质量,不评论运行结果
57
+ > 核心理念:Test Reviewer 关注的是"**测试写得好不好**",而非"**测试跑过没有**"
58
+
59
+ **禁止**:
60
+ - 讨论测试是 Pass/Fail、Red/Green、Skip
61
+ - 评论"功能未实现"或"依赖功能缺失"
62
+ - 给 Coder 提实现建议(如"实现 xxx 命令"、"添加 xxx 字段")
63
+ - 引用工作流阶段(如"Red 基线阶段"、"这是预期行为")
64
+ - 基于测试运行结果判断测试质量
65
+
66
+ **允许**:
67
+ - 评审测试断言的正确性和清晰度
68
+ - 评审测试结构和组织
69
+ - 评审测试覆盖的场景完整性(基于代码分析,非运行结果)
70
+
71
+ ### CON-ROLE-005:覆盖率 = 测试存在性,非测试通过性
72
+
73
+ | 覆盖状态 | 定义 | 判断依据 |
74
+ |----------|------|----------|
75
+ | ✅ 已覆盖 | 存在对应 AC 的测试用例 | 测试文件中有对应的 test/it block |
76
+ | ⚠️ 部分覆盖 | 测试存在但场景不完整 | 缺少边界条件、错误路径等 |
77
+ | ❌ 缺失 | 没有对应测试用例 | 找不到对应的测试代码 |
78
+
79
+ **禁止**将以下状态纳入覆盖率判断:
80
+ - 测试 Skip 状态(skip 的测试仍算"已覆盖")
81
+ - 测试 Fail 状态(失败的测试仍算"已覆盖")
82
+ - 测试运行时间或性能
83
+
56
84
  ---
57
85
 
58
86
  ## 评审维度
@@ -104,11 +132,13 @@ allowed-tools:
104
132
 
105
133
  ## 覆盖率分析
106
134
 
135
+ > **注意**:覆盖状态基于测试代码存在性判断,与测试运行结果(Pass/Fail/Skip)无关。
136
+
107
137
  | AC-ID | 测试文件 | 覆盖状态 | 备注 |
108
138
  |-------|----------|----------|------|
109
- | AC-001 | test-a.ts | ✅ 已覆盖 | - |
110
- | AC-002 | - | ❌ 缺失 | 需要添加 |
111
- | AC-003 | test-b.ts | ⚠️ 部分覆盖 | 缺少边界条件 |
139
+ | AC-001 | test-a.ts | ✅ 已覆盖 | 测试用例存在 |
140
+ | AC-002 | - | ❌ 缺失 | 无对应测试代码 |
141
+ | AC-003 | test-b.ts | ⚠️ 部分覆盖 | 测试存在但缺少边界条件 |
112
142
 
113
143
  ## 问题清单
114
144
 
@@ -178,7 +208,7 @@ allowed-tools:
178
208
  | Skill 名称 | devbooks-test-reviewer |
179
209
  | 阶段 | Apply |
180
210
  | 产物 | 评审报告(不写入变更包) |
181
- | 约束 | CON-ROLE-001~003 |
211
+ | 约束 | CON-ROLE-001~005 |
182
212
 
183
213
  ---
184
214