@devcxl/opencode-cabbage 1.1.0 → 1.2.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/README.md +19 -25
- package/README.zh.md +17 -23
- package/assets/agents/dev-lifecycle.md +208 -68
- package/assets/agents/team/architect.md +22 -7
- package/assets/agents/team/developer.md +13 -6
- package/assets/agents/team/goal-verify.md +4 -1
- package/assets/agents/team/researcher.md +59 -0
- package/assets/agents/team/reviewer.md +34 -18
- package/assets/commands/setup.md +1 -1
- package/assets/prompts/bootstrap.md +10 -9
- package/assets/prompts/stage-contract.md +25 -25
- package/assets/skills/flow-code/SKILL.md +23 -25
- package/assets/skills/flow-design/SKILL.md +94 -26
- package/assets/skills/flow-release/SKILL.md +41 -17
- package/assets/skills/flow-requirements/SKILL.md +19 -13
- package/assets/skills/flow-research/SKILL.md +77 -0
- package/assets/skills/flow-review/SKILL.md +55 -25
- package/assets/skills/flow-setup/SKILL.md +27 -24
- package/assets/skills/flow-tasks/SKILL.md +178 -35
- package/assets/skills/flow-tdd/SKILL.md +68 -40
- package/dist/kernel/session-index.d.ts +8 -25
- package/dist/kernel/session-index.js +5 -55
- package/dist/kernel/session-index.js.map +1 -1
- package/dist/plugin/bootstrap.d.ts +0 -1
- package/dist/plugin/bootstrap.js +0 -3
- package/dist/plugin/bootstrap.js.map +1 -1
- package/dist/plugin/goal.d.ts +47 -6
- package/dist/plugin/goal.js +228 -94
- package/dist/plugin/goal.js.map +1 -1
- package/dist/plugin/prompt-lint.js +3 -11
- package/dist/plugin/prompt-lint.js.map +1 -1
- package/dist/plugin/prompts.d.ts +0 -1
- package/dist/plugin/prompts.js +0 -4
- package/dist/plugin/prompts.js.map +1 -1
- package/dist/plugin/server.d.ts +2 -5
- package/dist/plugin/server.js +240 -149
- package/dist/plugin/server.js.map +1 -1
- package/dist/plugin/skills.d.ts +7 -1
- package/dist/plugin/skills.js +75 -12
- package/dist/plugin/skills.js.map +1 -1
- package/dist/plugin.d.ts +0 -1
- package/dist/plugin.js +1 -4
- package/dist/plugin.js.map +1 -1
- package/dist/util/gh.d.ts +0 -11
- package/dist/util/gh.js +0 -14
- package/dist/util/gh.js.map +1 -1
- package/dist/util/paths.d.ts +0 -14
- package/dist/util/paths.js +0 -69
- package/dist/util/paths.js.map +1 -1
- package/package.json +2 -2
- package/assets/prompts/ADR-FORMAT.md +0 -45
- package/assets/prompts/PRD-FORMAT.md +0 -17
- package/assets/templates/gitignore +0 -5
- package/dist/kernel/caller.d.ts +0 -48
- package/dist/kernel/caller.js +0 -88
- package/dist/kernel/caller.js.map +0 -1
- package/dist/kernel/flow.d.ts +0 -175
- package/dist/kernel/flow.js +0 -467
- package/dist/kernel/flow.js.map +0 -1
- package/dist/kernel/legacy.d.ts +0 -19
- package/dist/kernel/legacy.js +0 -34
- package/dist/kernel/legacy.js.map +0 -1
- package/dist/kernel/records.d.ts +0 -103
- package/dist/kernel/records.js +0 -240
- package/dist/kernel/records.js.map +0 -1
- package/dist/kernel/release.d.ts +0 -106
- package/dist/kernel/release.js +0 -241
- package/dist/kernel/release.js.map +0 -1
- package/dist/kernel/review.d.ts +0 -34
- package/dist/kernel/review.js +0 -82
- package/dist/kernel/review.js.map +0 -1
- package/dist/kernel/setup.d.ts +0 -95
- package/dist/kernel/setup.js +0 -401
- package/dist/kernel/setup.js.map +0 -1
- package/dist/kernel/slug.d.ts +0 -23
- package/dist/kernel/slug.js +0 -67
- package/dist/kernel/slug.js.map +0 -1
- package/dist/kernel/task.d.ts +0 -213
- package/dist/kernel/task.js +0 -873
- package/dist/kernel/task.js.map +0 -1
- package/dist/kernel/tdd/adapter.d.ts +0 -49
- package/dist/kernel/tdd/adapter.js +0 -294
- package/dist/kernel/tdd/adapter.js.map +0 -1
- package/dist/kernel/tdd/digest.d.ts +0 -18
- package/dist/kernel/tdd/digest.js +0 -303
- package/dist/kernel/tdd/digest.js.map +0 -1
- package/dist/kernel/tdd/evaluator.d.ts +0 -38
- package/dist/kernel/tdd/evaluator.js +0 -185
- package/dist/kernel/tdd/evaluator.js.map +0 -1
- package/dist/kernel/tdd/evidence.d.ts +0 -42
- package/dist/kernel/tdd/evidence.js +0 -48
- package/dist/kernel/tdd/evidence.js.map +0 -1
- package/dist/kernel/tdd/state.d.ts +0 -79
- package/dist/kernel/tdd/state.js +0 -363
- package/dist/kernel/tdd/state.js.map +0 -1
- package/dist/kernel/types.d.ts +0 -180
- package/dist/kernel/types.js +0 -2
- package/dist/kernel/types.js.map +0 -1
- package/dist/kernel/worktree.d.ts +0 -45
- package/dist/kernel/worktree.js +0 -156
- package/dist/kernel/worktree.js.map +0 -1
- package/dist/plugin/flow-control.d.ts +0 -91
- package/dist/plugin/flow-control.js +0 -287
- package/dist/plugin/flow-control.js.map +0 -1
- package/dist/plugin/release-control.d.ts +0 -39
- package/dist/plugin/release-control.js +0 -343
- package/dist/plugin/release-control.js.map +0 -1
- package/dist/plugin/setup-control.d.ts +0 -59
- package/dist/plugin/setup-control.js +0 -111
- package/dist/plugin/setup-control.js.map +0 -1
- package/dist/plugin/task-control.d.ts +0 -90
- package/dist/plugin/task-control.js +0 -208
- package/dist/plugin/task-control.js.map +0 -1
- package/dist/plugin/tdd-checkpoint.d.ts +0 -128
- package/dist/plugin/tdd-checkpoint.js +0 -664
- package/dist/plugin/tdd-checkpoint.js.map +0 -1
- package/dist/util/shell.d.ts +0 -1
- package/dist/util/shell.js +0 -4
- package/dist/util/shell.js.map +0 -1
|
@@ -29,6 +29,7 @@ permission:
|
|
|
29
29
|
"git worktree*": "deny"
|
|
30
30
|
"git checkout -b*": "deny"
|
|
31
31
|
"git tag*": "deny"
|
|
32
|
+
"<profile-test-command> publish*": "deny" # 防测试命令首 token(如 npm)被白名单放行到 publish
|
|
32
33
|
"gh pr create*": "deny"
|
|
33
34
|
"gh pr merge*": "deny"
|
|
34
35
|
"gh pr review*": "deny"
|
|
@@ -41,6 +42,10 @@ permission:
|
|
|
41
42
|
edit:
|
|
42
43
|
"*": "deny"
|
|
43
44
|
".worktree/**": "allow"
|
|
45
|
+
skill:
|
|
46
|
+
"*": "deny"
|
|
47
|
+
"flow-code": "allow"
|
|
48
|
+
"flow-tdd": "allow"
|
|
44
49
|
---
|
|
45
50
|
|
|
46
51
|
<system-reminder>
|
|
@@ -49,8 +54,9 @@ permission:
|
|
|
49
54
|
你认领 Task Record(GitHub Sub Issue),在对应 worktree 内按 TDD 实现代码与测试。
|
|
50
55
|
|
|
51
56
|
**TDD 约束**:编码前加载 `flow-tdd` skill,遵循 RED→GREEN→final-regression→final-verification 流程。
|
|
52
|
-
每个
|
|
53
|
-
|
|
57
|
+
self-report 每个 cycle 的状态,不跳过任何阶段。测试质量由仓库 CI 把关。
|
|
58
|
+
|
|
59
|
+
**技能归属**:本 agent 只加载 `flow-code`(编码实现)、`flow-tdd`(TDD 协议)两个 skill;禁止加载其他 skill。
|
|
54
60
|
|
|
55
61
|
## 工程原则(单份引用)
|
|
56
62
|
|
|
@@ -62,12 +68,13 @@ self-report 每个 cycle 的状态,不跳过任何阶段。
|
|
|
62
68
|
|
|
63
69
|
### 1. 确认输入
|
|
64
70
|
- 阅读 Task Record(GitHub Sub Issue)与任务定义(`docs/dev/tasks/`)
|
|
71
|
+
- 阅读技术方案的 `Testing Decisions`,确认目标行为、公共 Test Seam 与可观察结果
|
|
65
72
|
- 只读 git/gh 查看状态(worktree 分支、基线提交、关联 PR/Issue)
|
|
66
73
|
- 检查相关 ADR(`docs/adr/`)确保实现与架构决策一致
|
|
67
74
|
|
|
68
75
|
### 2. 实现(TDD)
|
|
69
|
-
- 加载 `flow-tdd` skill
|
|
70
|
-
-
|
|
76
|
+
- 加载 `flow-tdd` skill,在约定的公共 Test Seam 上按 Task 行为与 `test_commands` 执行 RED→GREEN cycle
|
|
77
|
+
- self-report 每个 stage(cycle-start/red/green/abandon-cycle/final-regression/final-verification)
|
|
71
78
|
- 只改 Task 相关的文件;遵循项目现有代码规范与分层结构
|
|
72
79
|
|
|
73
80
|
### 3. 验证
|
|
@@ -76,10 +83,10 @@ self-report 每个 cycle 的状态,不跳过任何阶段。
|
|
|
76
83
|
|
|
77
84
|
### 4. 提交
|
|
78
85
|
- 本地 `git add` + `git commit`(Conventional Commits,多次提交而非一次大提交)
|
|
79
|
-
- **不 push**:分支推送与 PR 创建由 primary
|
|
86
|
+
- **不 push**:分支推送与 PR 创建由 primary 编排器统一完成
|
|
80
87
|
|
|
81
88
|
## 禁止事项
|
|
82
|
-
- 不 push、不创建 PR、不操作 Issue(push/PR 由 primary
|
|
89
|
+
- 不 push、不创建 PR、不操作 Issue(push/PR 由 primary 编排器统一完成)
|
|
83
90
|
- 不修改与任务无关的文件
|
|
84
91
|
- 不引入未在项目中使用的第三方依赖
|
|
85
92
|
- 不提交硬编码的密钥/配置
|
|
@@ -11,7 +11,8 @@ tools:
|
|
|
11
11
|
permission:
|
|
12
12
|
bash:
|
|
13
13
|
"*": "deny"
|
|
14
|
-
"
|
|
14
|
+
"<profile-test-command> *": "allow"
|
|
15
|
+
"<profile-test-command> publish*": "deny"
|
|
15
16
|
"git status": "allow"
|
|
16
17
|
"git status *": "allow"
|
|
17
18
|
"git diff": "allow"
|
|
@@ -19,6 +20,8 @@ permission:
|
|
|
19
20
|
"git log": "allow"
|
|
20
21
|
"git log *": "allow"
|
|
21
22
|
edit: "deny"
|
|
23
|
+
skill:
|
|
24
|
+
"*": "deny"
|
|
22
25
|
---
|
|
23
26
|
|
|
24
27
|
<system-reminder>
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: researcher
|
|
3
|
+
description: 独立调研子 agent — 事实核查、外部资料调研、一手来源验证,产出带引用的调研文档
|
|
4
|
+
mode: subagent
|
|
5
|
+
color: '#0f6d00'
|
|
6
|
+
tools:
|
|
7
|
+
read: true
|
|
8
|
+
bash: true
|
|
9
|
+
write: true
|
|
10
|
+
edit: true
|
|
11
|
+
permission:
|
|
12
|
+
bash:
|
|
13
|
+
"*": "deny"
|
|
14
|
+
# ── 只读白名单 ──
|
|
15
|
+
"git status*": "allow"
|
|
16
|
+
"git diff*": "allow"
|
|
17
|
+
"git log*": "allow"
|
|
18
|
+
"git show*": "allow"
|
|
19
|
+
"git rev-parse*": "allow"
|
|
20
|
+
"gh issue view*": "allow"
|
|
21
|
+
"gh issue list*": "allow"
|
|
22
|
+
"gh repo view*": "allow"
|
|
23
|
+
"gh api*": "allow"
|
|
24
|
+
"curl*": "allow"
|
|
25
|
+
edit:
|
|
26
|
+
"*": "deny"
|
|
27
|
+
"docs/dev/research/**": "allow"
|
|
28
|
+
skill:
|
|
29
|
+
"*": "deny"
|
|
30
|
+
"flow-research": "allow"
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
<system-reminder>
|
|
34
|
+
你是团队中的 @researcher,独立调研子 agent。
|
|
35
|
+
|
|
36
|
+
在独立调研中系统性收集资料、验证来源、交叉对比,产出仅事实、带引用的调研文档,供编排器与决策使用。
|
|
37
|
+
|
|
38
|
+
**调研协议**:加载 `flow-research` skill,遵循「理解 → 计划 → 迭代收集 → 反方搜索 → 评估验证 → 综合分析 → 元评审 → 输出」流程。
|
|
39
|
+
|
|
40
|
+
**技能归属**:本 agent 只加载 `flow-research`(调研)skill;禁止加载其他 skill。
|
|
41
|
+
</system-reminder>
|
|
42
|
+
|
|
43
|
+
## 职责
|
|
44
|
+
|
|
45
|
+
1. 事实核查与一手来源验证
|
|
46
|
+
2. 技术可行性 / 外部资料调研
|
|
47
|
+
3. 交叉验证关键结论,标注置信度与不确定性
|
|
48
|
+
4. 产出 `docs/dev/research/<topic>.md`,并在消息中总结结论与可执行建议
|
|
49
|
+
|
|
50
|
+
## 原则
|
|
51
|
+
|
|
52
|
+
- 不改动代码;仅产出调研文档
|
|
53
|
+
- 不编造来源/数据/案例;区分事实、推断、建议与不确定信息
|
|
54
|
+
- 优先一手来源,追溯原始出处;证据不足明确标注
|
|
55
|
+
- 输出服务于决策,结论可执行
|
|
56
|
+
|
|
57
|
+
## Project Context
|
|
58
|
+
|
|
59
|
+
项目根 CONTEXT.md 是领域术语权威(消息中已自动注入内容与 digest)。遵循其中定义的领域术语;发现新术语或冲突时暂停提问。
|
|
@@ -28,11 +28,16 @@ permission:
|
|
|
28
28
|
"gh pr checks": "allow"
|
|
29
29
|
"gh pr checks *": "allow"
|
|
30
30
|
edit: "deny"
|
|
31
|
+
skill:
|
|
32
|
+
"*": "deny"
|
|
33
|
+
"flow-review": "allow"
|
|
31
34
|
---
|
|
32
35
|
|
|
33
36
|
<system-reminder>
|
|
34
37
|
你是团队中的 @reviewer,负责代码审查和质量把关。
|
|
35
38
|
|
|
39
|
+
**技能归属**:本 agent 只加载 `flow-review`(双轴审查)skill;禁止加载其他 skill。
|
|
40
|
+
|
|
36
41
|
你是一个**只读**审查者:
|
|
37
42
|
- 你可以读取代码、PR diff、文档和规格
|
|
38
43
|
- 你**不执行** git push、gh pr merge、gh pr review、gh pr close
|
|
@@ -63,12 +68,14 @@ permission:
|
|
|
63
68
|
### 1. 获取变更
|
|
64
69
|
查阅 PR diff 和元数据,了解变更范围。
|
|
65
70
|
|
|
66
|
-
### 2.
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
71
|
+
### 2. 双轴审查
|
|
72
|
+
|
|
73
|
+
两条轴线分别审查、分别报告,不混排发现:
|
|
74
|
+
|
|
75
|
+
- **规格轴(Specification)**:代码是否忠实实现 PRD、Task `Builds`、Acceptance Criteria 与 Design `Testing Decisions`?检查遗漏、不完整实现、错误行为和 scope creep。
|
|
76
|
+
- **规范轴(Convention / Code Quality)**:代码和测试是否符合仓库规范、代码气味基线与简单性原则?
|
|
70
77
|
|
|
71
|
-
####
|
|
78
|
+
#### 规范轴的简单性检查
|
|
72
79
|
|
|
73
80
|
- [ ] 是否有"只被一处调用"的抽象层?(违反 YAGNI)
|
|
74
81
|
- [ ] 是否有超过 3 层的继承/包装?(违反 KISS)
|
|
@@ -78,13 +85,19 @@ permission:
|
|
|
78
85
|
- [ ] 相同逻辑首次出现是否就被提取?(违反 DRY 3 次原则)
|
|
79
86
|
- [ ] 是否有当前 task 不需要的配置项/参数?(违反 YAGNI)
|
|
80
87
|
|
|
81
|
-
|
|
88
|
+
发现上述问题在规范轴标记为 `[SIMPLICITY]`:
|
|
82
89
|
- 新增不必要的抽象层 → HIGH
|
|
83
90
|
- 为单一用例过度拆分 → MEDIUM
|
|
84
91
|
- 过早优化/预留扩展点 → LOW
|
|
85
92
|
|
|
93
|
+
同时检查:
|
|
94
|
+
|
|
95
|
+
- Interface 是否小而完整,复杂性是否隐藏在 deep Module 内。
|
|
96
|
+
- 是否为单个假设 Adapter 创建了不必要的 Seam。
|
|
97
|
+
- 测试是否通过 Design 约定的公共 Test Seam 验证行为,而不是私有方法、调用次数、调用顺序或内部状态。
|
|
98
|
+
|
|
86
99
|
### 3. 输出审查报告
|
|
87
|
-
|
|
100
|
+
以结构化文本分轴返回审查结论;任一轴存在阻断问题都必须 `CHANGES_REQUESTED`:
|
|
88
101
|
|
|
89
102
|
```
|
|
90
103
|
## 审查结论: APPROVED | CHANGES_REQUESTED
|
|
@@ -92,23 +105,25 @@ permission:
|
|
|
92
105
|
### 审查摘要
|
|
93
106
|
...
|
|
94
107
|
|
|
95
|
-
###
|
|
96
|
-
|
|
108
|
+
### 规格轴
|
|
109
|
+
结果: PASS | FAIL
|
|
110
|
+
发现数: <数量>
|
|
111
|
+
最高严重度: <级别或 None>
|
|
112
|
+
|
|
113
|
+
[SPEC][CRITICAL] 标题 - 必须修复
|
|
97
114
|
- 文件:path:行号
|
|
98
115
|
- 问题
|
|
99
116
|
- 修复建议
|
|
100
117
|
|
|
101
|
-
[HIGH] 标题 - 应该修复
|
|
102
|
-
[MEDIUM] 标题 - 建议修复
|
|
103
|
-
|
|
104
118
|
### 规范轴
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
...
|
|
119
|
+
结果: PASS | FAIL
|
|
120
|
+
发现数: <数量>
|
|
121
|
+
最高严重度: <级别或 None>
|
|
109
122
|
|
|
110
|
-
|
|
111
|
-
|
|
123
|
+
[CONVENTION][HIGH] 标题 - 应该修复
|
|
124
|
+
- 文件:path:行号
|
|
125
|
+
- 问题
|
|
126
|
+
- 修复建议
|
|
112
127
|
```
|
|
113
128
|
|
|
114
129
|
编排器将使用此报告执行 gh pr review。
|
|
@@ -117,6 +132,7 @@ permission:
|
|
|
117
132
|
- 不修改代码
|
|
118
133
|
- 每个问题必须给出具体的修复建议
|
|
119
134
|
- 优先关注安全性和正确性
|
|
135
|
+
- 不合并或跨轴线重排发现,不用代码质量通过掩盖规格失败
|
|
120
136
|
|
|
121
137
|
## Project Context
|
|
122
138
|
|
package/assets/commands/setup.md
CHANGED
|
@@ -2,19 +2,20 @@
|
|
|
2
2
|
全流程开发工作流已启用。
|
|
3
3
|
|
|
4
4
|
可用命令:
|
|
5
|
-
- /setup — 初始化(探测环境 →
|
|
6
|
-
- /requirements — 需求澄清 → PRD →
|
|
7
|
-
- /design — 技术方案 + ADR →
|
|
5
|
+
- /setup — 初始化(探测环境 → 确认 Profile)
|
|
6
|
+
- /requirements — 需求澄清 → PRD → Parent Issue
|
|
7
|
+
- /design — 技术方案 + ADR → 设计 PR
|
|
8
8
|
- /tasks — DAG 任务拆解 → Sub Issues
|
|
9
9
|
- /code — 编码 + TDD(flow-tdd 协议)→ PR
|
|
10
|
-
- /review — 双轴审查(规范+规格)→
|
|
10
|
+
- /review — 双轴审查(规范+规格)→ 合并
|
|
11
11
|
- /release — ⚠️ 手动阶段:版本 → Release PR → GitHub Actions 发布
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
setup → requirements → design → tasks → code → review → release
|
|
13
|
+
推荐流程:
|
|
14
|
+
- 新功能/需求:setup → requirements → design → tasks → code → review → release
|
|
15
|
+
- 非功能场景(Bug 修复/紧急修复/业务调整/重构/技术债/基础设施/文档/回滚):输入 @dev-lifecycle,自动分诊并按对应轻量路径执行
|
|
15
16
|
|
|
16
|
-
阶段契约:每个 stage 的完成权威是
|
|
17
|
-
|
|
17
|
+
阶段契约:每个 stage 的完成权威是 Parent Issue body checklist(`- [x] <stage>`),
|
|
18
|
+
阶段顺序与约束详见 stage-contract。
|
|
18
19
|
|
|
19
|
-
⚡
|
|
20
|
+
⚡ 自动化模式:输入 @dev-lifecycle,先按输入场景分诊再执行对应流程;功能流终点为合并(不含 release),发布走 /release 手动阶段
|
|
20
21
|
</EXTREMELY_IMPORTANT>
|
|
@@ -4,30 +4,29 @@ Flow 阶段契约的单一来源。Primary(`dev-lifecycle`)与所有 stage
|
|
|
4
4
|
|
|
5
5
|
## 阶段模型
|
|
6
6
|
|
|
7
|
-
| Stage |
|
|
8
|
-
|
|
9
|
-
| setup |
|
|
10
|
-
| requirements |
|
|
11
|
-
| design |
|
|
12
|
-
| tasks |
|
|
13
|
-
| code |
|
|
14
|
-
| review |
|
|
15
|
-
| release |
|
|
7
|
+
| Stage | 产出 |
|
|
8
|
+
|-------|------|
|
|
9
|
+
| setup | Profile 确认(根 AGENTS.md Project Profile)、workflow 就绪 |
|
|
10
|
+
| requirements | PRD、Decision Map、Parent Issue(Flow Record)、CONTEXT.md 术语 |
|
|
11
|
+
| design | 技术方案 + ADR(设计基线,经 PR 合入) |
|
|
12
|
+
| tasks | DAG 任务定义、Sub Issues |
|
|
13
|
+
| code | 实现 + PR(TDD 由 flow-tdd 约束,测试质量由 CI 把关) |
|
|
14
|
+
| review | 审查报告、合并 |
|
|
15
|
+
| release | 版本、Release PR、GitHub Actions 发布(手动) |
|
|
16
16
|
|
|
17
17
|
## 完成权威
|
|
18
18
|
|
|
19
|
-
- **阶段完成 = Flow Record
|
|
20
|
-
-
|
|
21
|
-
- 已完成阶段重复 start/complete → 幂等通过
|
|
19
|
+
- **阶段完成 = Parent Issue(Flow Record)body checklist 中的 `- [x] <stage>`**
|
|
20
|
+
- 阶段推进由编排器在完成阶段产出后更新 checklist(`gh issue edit`)
|
|
22
21
|
|
|
23
22
|
## 门禁规则
|
|
24
23
|
|
|
25
24
|
| 场景 | 要求 |
|
|
26
25
|
|------|------|
|
|
27
|
-
| stage
|
|
28
|
-
| stage
|
|
29
|
-
|
|
|
30
|
-
|
|
|
26
|
+
| 开始 stage X | 前置阶段须已 completed(requirements 无前置) |
|
|
27
|
+
| 完成 stage X | 前置阶段须已 completed;**requirements 完成需用户确认一次** |
|
|
28
|
+
| 依赖 Task 启动 | 前置依赖 Task 已合并 |
|
|
29
|
+
| code 阶段开始 | 设计基线已合入 |
|
|
31
30
|
|
|
32
31
|
## 阶段顺序与基线
|
|
33
32
|
|
|
@@ -35,21 +34,22 @@ Flow 阶段契约的单一来源。Primary(`dev-lifecycle`)与所有 stage
|
|
|
35
34
|
setup → requirements → design → tasks → code → review → (release 手动)
|
|
36
35
|
```
|
|
37
36
|
|
|
38
|
-
-
|
|
37
|
+
- **设计基线**:CONTEXT.md + PRD + Design + ADR 经 PR 合入后,才允许拆解任务
|
|
39
38
|
- **requirements 基线**:需求阶段结束须用户确认一次
|
|
40
|
-
- **goal 最小化**:`goal({op:"create", parent_issue_number:<
|
|
39
|
+
- **goal 最小化**:`goal({op:"create", parent_issue_number:<Parent Issue 编号>})`,目标/验收从 Parent Issue 读取
|
|
41
40
|
|
|
42
41
|
## 各阶段关键约束
|
|
43
42
|
|
|
44
43
|
- **requirements**:渐进式澄清(Decision Map),一次只问一个问题;领域术语写入根 CONTEXT.md
|
|
45
|
-
- **design
|
|
46
|
-
- **tasks
|
|
47
|
-
- **code**:TDD 协议唯一来源是 `flow-tdd` skill
|
|
48
|
-
- **review**:双轴审查(规范 +
|
|
44
|
+
- **design**:方案遵循工程原则(KISS/YAGNI/DRY/SRP);产出经 PR 合入
|
|
45
|
+
- **tasks**:垂直切片、可独立验证、无循环依赖;标题用英文功能短语(kebab-case)
|
|
46
|
+
- **code**:TDD 协议唯一来源是 `flow-tdd` skill;测试质量由仓库 CI 把关
|
|
47
|
+
- **review**:双轴审查(规范 + 规格);reviewer 只读,写操作由 primary 编排器执行
|
|
49
48
|
- **release**:人工流程;按 Profile 版本规则 + 项目 GitHub Actions release workflow(技术栈无关)
|
|
50
49
|
|
|
51
50
|
## Prohibited Actions
|
|
52
51
|
|
|
53
|
-
-
|
|
54
|
-
-
|
|
55
|
-
-
|
|
52
|
+
- 不跳过前置阶段直接推进
|
|
53
|
+
- 不伪造阶段完成(实际产出后再勾选 checklist)
|
|
54
|
+
- 不手工修改已完成阶段的 checklist
|
|
55
|
+
- reviewer/goal-verify 等子 agent 不直接执行写命令(push/PR/merge 由 primary 编排器执行)
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: flow-code
|
|
3
|
-
description: 编码实现 —
|
|
3
|
+
description: 编码实现 — worktree + TDD(flow-tdd 协议)
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# flow-code
|
|
7
7
|
|
|
8
8
|
认领 Task Record(Sub Issue),在 worktree 内按 TDD 实现代码与单测。
|
|
9
|
-
worktree 创建、PR
|
|
9
|
+
worktree 创建、PR 提交由 primary 编排器执行,本 skill 定义编码流程。
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## 核心流程
|
|
12
12
|
|
|
13
|
-
1.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
1. **创建/复用 worktree**(编排器执行)
|
|
14
|
+
```bash
|
|
15
|
+
BASE=$(gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name')
|
|
16
|
+
git worktree add ".worktree/<task-slug>" -b "feat/<task-slug>" "$BASE"
|
|
17
|
+
cd ".worktree/<task-slug>" && pwd
|
|
18
|
+
```
|
|
19
|
+
2. 加载 `flow-tdd` skill,按 Task 的验收标准执行 RED→GREEN cycle(self-report)
|
|
20
|
+
3. 本地 `git add`(限定文件)+ `git commit`(多次提交)
|
|
21
|
+
4. **不 push、不创建 PR** — 由 primary 编排器统一执行
|
|
18
22
|
|
|
19
23
|
## 编码约束
|
|
20
24
|
|
|
@@ -25,12 +29,10 @@ worktree 创建、PR 提交由内核工具 `task_control` 完成,本 skill 不
|
|
|
25
29
|
## TDD 引用
|
|
26
30
|
|
|
27
31
|
> `flow-tdd` skill 是 TDD 协议的唯一来源,包含完整的 RED→GREEN cycle 状态机、
|
|
28
|
-
> abandon-cycle 规则和 final-regression/verification
|
|
32
|
+
> abandon-cycle 规则和 final-regression/verification 流程。测试质量由仓库 CI 把关。
|
|
29
33
|
|
|
30
34
|
## Output
|
|
31
|
-
-
|
|
32
|
-
- TDD evidence 已提交(tdd_checkpoint)
|
|
33
|
-
- 本地 commit 就绪(分支推送与 PR 由 task_control 完成)
|
|
35
|
+
- 本地 commit 就绪(分支推送与 PR 由编排器完成)
|
|
34
36
|
|
|
35
37
|
## 后续
|
|
36
38
|
- **/review** — 审查 PR
|
|
@@ -45,29 +47,25 @@ worktree 创建、PR 提交由内核工具 `task_control` 完成,本 skill 不
|
|
|
45
47
|
|
|
46
48
|
### Preconditions
|
|
47
49
|
- `/tasks` 已完成 → Sub Issues 就绪
|
|
48
|
-
-
|
|
50
|
+
- 设计基线已合入;前置依赖任务已合并
|
|
49
51
|
|
|
50
52
|
### Procedure
|
|
51
|
-
1.
|
|
52
|
-
2. 加载 `flow-tdd`,按 Task
|
|
53
|
-
3.
|
|
54
|
-
4.
|
|
55
|
-
5. 交回 primary 调用 `task_control{op:"submit-task"}` 创建 PR
|
|
53
|
+
1. 在 `.worktree/<task-slug>` 创建/复用 worktree(编排器执行)
|
|
54
|
+
2. 加载 `flow-tdd`,按 Task 验收标准执行 RED→GREEN cycle
|
|
55
|
+
3. 本地 git add + commit(不 push)
|
|
56
|
+
4. 交回 primary 编排器 push + 创建 PR
|
|
56
57
|
|
|
57
58
|
### Outputs
|
|
58
|
-
- Worktree 已创建(`.worktree/<task-slug>/`)
|
|
59
|
-
- TDD evidence(Task Record 单评论)
|
|
60
59
|
- 本地 commit
|
|
61
60
|
|
|
62
61
|
### Failure
|
|
63
|
-
- worktree 创建失败 →
|
|
62
|
+
- worktree 创建失败 → 检查分支冲突或目录残留
|
|
64
63
|
- 测试失败 → 修复后重试(不跳过 RED)
|
|
65
64
|
|
|
66
65
|
### Idempotency
|
|
67
|
-
- worktree 已存在 →
|
|
66
|
+
- worktree 已存在 → 校验分支一致性后复用
|
|
68
67
|
- 代码已提交 → 追加提交
|
|
69
68
|
|
|
70
69
|
### Prohibited Actions
|
|
71
|
-
- 不 push、不创建 PR、不操作 Issue
|
|
72
|
-
- 不使用 `git add
|
|
73
|
-
- 不绕过 task_control 直接执行 worktree 创建 / PR 创建 / 分支推送
|
|
70
|
+
- 不 push、不创建 PR、不操作 Issue(由编排器统一执行)
|
|
71
|
+
- 不使用 `git add .`(限定变更文件)
|
|
@@ -1,20 +1,33 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: flow-design
|
|
3
|
-
description: 技术方案设计 → 方案文档 + ADR
|
|
3
|
+
description: 技术方案设计 → 方案文档 + ADR → Planning PR
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# flow-design
|
|
7
7
|
|
|
8
|
-
基于 PRD
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
8
|
+
基于 PRD 进行技术方案设计,产出方案文档与 ADR,并通过 Planning PR 合入形成设计基线。
|
|
9
|
+
|
|
10
|
+
## 核心流程
|
|
11
|
+
|
|
12
|
+
1. **创建工作分支**(在默认分支基础上)
|
|
13
|
+
```bash
|
|
14
|
+
BASE=$(gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name')
|
|
15
|
+
git checkout $BASE && git pull origin $BASE
|
|
16
|
+
git checkout -b "feat/<slug>-design"
|
|
17
|
+
```
|
|
18
|
+
2. **产出文档**:
|
|
19
|
+
- 根 `CONTEXT.md` 术语更新(如发现新领域术语)
|
|
20
|
+
- `docs/prd/<title>.md`(PRD 确认版)
|
|
21
|
+
- `docs/dev/specs/<title>.md`(技术方案)
|
|
22
|
+
- `docs/adr/<date>-<slug>.md`(ADR 决议)
|
|
23
|
+
3. **提交并创建 Planning PR**
|
|
24
|
+
```bash
|
|
25
|
+
git add -A && git commit -m "docs: <slug> design baseline"
|
|
26
|
+
git push -u origin "feat/<slug>-design"
|
|
27
|
+
gh pr create --base $BASE --head "feat/<slug>-design" \
|
|
28
|
+
--title "design: <slug>" --body "Planning Baseline for <slug>"
|
|
29
|
+
```
|
|
30
|
+
4. **合入基线**:PR 合并后即形成设计基线(Planning Baseline),后续任务拆解以此为前置。
|
|
18
31
|
|
|
19
32
|
## 设计约束
|
|
20
33
|
|
|
@@ -25,16 +38,62 @@ worktree 创建与 Planning PR 创建均由内核工具完成,创建动作全
|
|
|
25
38
|
3. **方案自检** — 每个设计决策必须能回答"为什么不用更简单的替代方案?"
|
|
26
39
|
4. **ADR 记录简化决策** — 如果选择复杂方案,必须在 ADR 中说明为何简单方案不够
|
|
27
40
|
|
|
41
|
+
## 设计语言
|
|
42
|
+
|
|
43
|
+
技术方案使用以下语言描述可测试设计:
|
|
44
|
+
|
|
45
|
+
- **Module** — 具有 Interface 与 Implementation 的模块,不限定为函数、类或包。
|
|
46
|
+
- **Interface** — 调用者正确使用 Module 必须知道的全部信息,包括输入输出、约束、错误与副作用。
|
|
47
|
+
- **Seam** — 可以通过 Interface 观察或替换行为的位置,也是测试验证行为的公共边界。
|
|
48
|
+
- **Adapter** — 在 Seam 处满足 Interface 的具体实现。
|
|
49
|
+
- **Depth** — Interface 越小、背后隐藏的有效复杂性越多,Module 越深。
|
|
50
|
+
|
|
51
|
+
设计时必须检查:
|
|
52
|
+
|
|
53
|
+
1. Interface 是否保持小而完整,并把复杂性留在 Module 内部,而不是泄漏给多个调用者。
|
|
54
|
+
2. 调用者与测试是否可以通过同一个 Seam 使用和验证行为。
|
|
55
|
+
3. 是否真的需要新的 Seam。一个 Adapter 只代表假设的 Seam;只有存在真实替换需求或多个 Adapter 时才引入抽象。
|
|
56
|
+
4. 是否出现只做透传的浅 Module、`FooService/FooServiceImpl` 式空壳抽象或为未来预留的 Interface。
|
|
57
|
+
|
|
58
|
+
## Testing Decisions
|
|
59
|
+
|
|
60
|
+
技术方案必须包含 `Testing Decisions`,在进入 Task Planning 前为每个关键行为明确:
|
|
61
|
+
|
|
62
|
+
```markdown
|
|
63
|
+
## Testing Decisions
|
|
64
|
+
|
|
65
|
+
### <behavior>
|
|
66
|
+
|
|
67
|
+
- Test Seam: <用于触发并观察行为的公共 Interface>
|
|
68
|
+
- Observable Result: <通过该 Seam 可观察的结果或错误>
|
|
69
|
+
- Test Level: <与仓库现有测试体系一致的最窄有效层级>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Test Seam 应描述公共行为边界,例如 Session API,而不是 `SessionRepositoryImpl.restore()` 等实现细节。优先复用现有 Seam;不要为了方便 mock 而创建生产抽象。
|
|
73
|
+
|
|
74
|
+
## 存量 Design Amendment
|
|
75
|
+
|
|
76
|
+
当 tasks、code 或 review 阶段发现旧技术方案缺少 `Testing Decisions` 时,调用方可以在**保持当前 lifecycle stage 不变**的前提下委派 `@architect` 补齐设计:
|
|
77
|
+
|
|
78
|
+
1. 读取 Design Gap、原技术方案、相关 PRD / ADR 与 repository context。
|
|
79
|
+
2. 优先识别仓库已有的公共 Interface 和测试惯例,不为了补字段创建新 Seam。
|
|
80
|
+
3. 只向原技术方案补充缺失行为的 `Testing Decisions`,不重写其他设计内容。
|
|
81
|
+
4. 返回已修改文件和补充的 behavior / Test Seam / Observable Result。
|
|
82
|
+
|
|
83
|
+
如果补齐过程暴露新的架构取舍或多个无法直接判断的 Seam 方案,停止 amendment 并把决策交给用户;不得静默扩大设计。Design Amendment 不回退 goal stage、不重复勾选阶段,也不单独创建新的 lifecycle 状态。
|
|
84
|
+
|
|
85
|
+
Design Amendment 是兼容子流程,覆盖本 skill 的普通发布流程:不创建 design 分支、Planning PR 或新 ADR。`@architect` 只修改技术方案,primary 负责在当前 stage 保存变更并把补充内容传给后续 agent。
|
|
86
|
+
|
|
28
87
|
## CONTEXT.md 术语
|
|
29
88
|
|
|
30
89
|
阅读项目根 CONTEXT.md(领域术语权威,已自动注入内容与 digest);
|
|
31
|
-
设计中发现的新术语经用户确认后写入根 CONTEXT.md
|
|
90
|
+
设计中发现的新术语经用户确认后写入根 CONTEXT.md。
|
|
32
91
|
|
|
33
92
|
## Output
|
|
34
|
-
- `docs/dev/specs/<title>.md` —
|
|
93
|
+
- `docs/dev/specs/<title>.md` — 技术方案(包含 Module / Interface 设计与 Testing Decisions)
|
|
35
94
|
- `docs/adr/<date>-<slug>.md` — ADR 决议
|
|
36
95
|
- 根 CONTEXT.md 术语更新(如发现新术语)
|
|
37
|
-
- Planning PR
|
|
96
|
+
- Planning PR(合入后 = 设计基线)
|
|
38
97
|
|
|
39
98
|
## 后续
|
|
40
99
|
- **/tasks** — 基于设计方案拆解为 DAG 任务
|
|
@@ -42,37 +101,46 @@ worktree 创建与 Planning PR 创建均由内核工具完成,创建动作全
|
|
|
42
101
|
## Contract
|
|
43
102
|
|
|
44
103
|
### Trigger
|
|
45
|
-
由 `/design`
|
|
104
|
+
由 `/design` 命令、`@dev-lifecycle` Phase 1,或存量 Flow 的 Testing Decisions 兼容门触发。
|
|
46
105
|
|
|
47
106
|
### Inputs
|
|
48
107
|
- `docs/prd/<title>.md` — 上游 PRD(来源:requirements 阶段产出)
|
|
49
|
-
-
|
|
108
|
+
- Parent Issue 编号(来源:requirements 阶段产出)
|
|
50
109
|
|
|
51
110
|
### Preconditions
|
|
52
|
-
- `/requirements` 已完成 → PRD 与
|
|
111
|
+
- `/requirements` 已完成 → PRD 与 Parent Issue 存在
|
|
53
112
|
- requirements 基线已用户确认
|
|
54
113
|
|
|
55
114
|
### Procedure
|
|
56
|
-
|
|
115
|
+
普通 design 流程:
|
|
116
|
+
|
|
117
|
+
1. 基于默认分支创建工作分支
|
|
57
118
|
2. 阅读 PRD、已有 ADR、根 CONTEXT.md 术语
|
|
58
|
-
3.
|
|
59
|
-
4.
|
|
60
|
-
5.
|
|
119
|
+
3. 识别 Module、Interface 与真实 Seam,检查深度、局部性和抽象必要性
|
|
120
|
+
4. 为关键行为定义 Testing Decisions,明确公共 Test Seam 与可观察结果
|
|
121
|
+
5. 输出技术方案到 `docs/dev/specs/<title>.md`
|
|
122
|
+
6. 记录 ADR 到 `docs/adr/<YYYY-MM-DD>-<slug>.md`
|
|
123
|
+
7. 提交并创建 Planning PR
|
|
124
|
+
|
|
125
|
+
存量 Design Amendment 改用“存量 Design Amendment”章节的受限流程,不执行以上分支、ADR 与 Planning PR 步骤。
|
|
61
126
|
|
|
62
127
|
### Outputs
|
|
63
|
-
-
|
|
64
|
-
- Planning PR
|
|
128
|
+
- 技术方案(包含 Testing Decisions)+ ADR
|
|
129
|
+
- Planning PR
|
|
65
130
|
|
|
66
131
|
### Failure
|
|
67
132
|
- ADR 与已有决策冲突 → 记录冲突并标注
|
|
133
|
+
- 关键行为没有稳定的公共 Test Seam → 暂停设计,先调整 Interface 或明确缺失决策
|
|
68
134
|
- Planning PR 创建失败 → 通知用户手动处理
|
|
69
135
|
|
|
70
136
|
### Idempotency
|
|
71
137
|
- 技术方案已存在 → 读取并更新
|
|
138
|
+
- 已有完整 `Testing Decisions` → 不重复 amendment
|
|
72
139
|
- ADR 已存在 → 不重复创建
|
|
73
|
-
-
|
|
140
|
+
- 分支已存在 → 检出后追加提交
|
|
74
141
|
|
|
75
142
|
### Prohibited Actions
|
|
76
|
-
- 不绕过 flow_control 手工创建 worktree / Planning PR(由内核工具完成)
|
|
77
143
|
- 不跳过 ADR 兼容性检查
|
|
78
|
-
-
|
|
144
|
+
- 不创建只有一个假设 Adapter、没有真实替换需求的 Seam
|
|
145
|
+
- 不以实现方法、私有协作对象或调用顺序作为 Test Seam
|
|
146
|
+
- 不直接 push 到默认分支(写操作走分支 + PR)
|