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: devbooks-delivery-workflow
|
|
3
|
-
description: devbooks-delivery-workflow
|
|
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
|
-
|
|
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
|
-
|
|
|
46
|
-
|
|
|
47
|
-
|
|
|
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
|
-
```
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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~
|
|
211
|
+
| 约束 | CON-ROLE-001~005 |
|
|
182
212
|
|
|
183
213
|
---
|
|
184
214
|
|