@devcxl/opencode-cabbage 1.0.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.
Files changed (126) hide show
  1. package/README.md +19 -25
  2. package/README.zh.md +17 -23
  3. package/assets/agents/dev-lifecycle.md +208 -68
  4. package/assets/agents/team/architect.md +22 -4
  5. package/assets/agents/team/developer.md +13 -6
  6. package/assets/agents/team/goal-verify.md +4 -1
  7. package/assets/agents/team/researcher.md +59 -0
  8. package/assets/agents/team/reviewer.md +34 -18
  9. package/assets/commands/setup.md +1 -1
  10. package/assets/prompts/bootstrap.md +10 -9
  11. package/assets/prompts/stage-contract.md +25 -25
  12. package/assets/skills/flow-code/SKILL.md +23 -25
  13. package/assets/skills/flow-design/SKILL.md +94 -26
  14. package/assets/skills/flow-release/SKILL.md +41 -17
  15. package/assets/skills/flow-requirements/SKILL.md +19 -13
  16. package/assets/skills/flow-research/SKILL.md +77 -0
  17. package/assets/skills/flow-review/SKILL.md +55 -25
  18. package/assets/skills/flow-setup/SKILL.md +27 -24
  19. package/assets/skills/flow-tasks/SKILL.md +178 -35
  20. package/assets/skills/flow-tdd/SKILL.md +68 -40
  21. package/dist/kernel/context.js +12 -1
  22. package/dist/kernel/context.js.map +1 -1
  23. package/dist/kernel/permission.d.ts +1 -1
  24. package/dist/kernel/permission.js +9 -1
  25. package/dist/kernel/permission.js.map +1 -1
  26. package/dist/kernel/profile.js +5 -2
  27. package/dist/kernel/profile.js.map +1 -1
  28. package/dist/kernel/session-index.d.ts +12 -27
  29. package/dist/kernel/session-index.js +46 -80
  30. package/dist/kernel/session-index.js.map +1 -1
  31. package/dist/plugin/bootstrap.d.ts +0 -1
  32. package/dist/plugin/bootstrap.js +0 -3
  33. package/dist/plugin/bootstrap.js.map +1 -1
  34. package/dist/plugin/goal.d.ts +57 -6
  35. package/dist/plugin/goal.js +234 -86
  36. package/dist/plugin/goal.js.map +1 -1
  37. package/dist/plugin/prompt-lint.js +3 -12
  38. package/dist/plugin/prompt-lint.js.map +1 -1
  39. package/dist/plugin/prompts.d.ts +0 -1
  40. package/dist/plugin/prompts.js +0 -4
  41. package/dist/plugin/prompts.js.map +1 -1
  42. package/dist/plugin/server.d.ts +2 -5
  43. package/dist/plugin/server.js +260 -136
  44. package/dist/plugin/server.js.map +1 -1
  45. package/dist/plugin/skills.d.ts +7 -1
  46. package/dist/plugin/skills.js +75 -12
  47. package/dist/plugin/skills.js.map +1 -1
  48. package/dist/plugin.d.ts +0 -1
  49. package/dist/plugin.js +1 -4
  50. package/dist/plugin.js.map +1 -1
  51. package/dist/util/gh.d.ts +3 -9
  52. package/dist/util/gh.js +9 -11
  53. package/dist/util/gh.js.map +1 -1
  54. package/dist/util/paths.d.ts +6 -14
  55. package/dist/util/paths.js +12 -67
  56. package/dist/util/paths.js.map +1 -1
  57. package/package.json +5 -5
  58. package/assets/prompts/ADR-FORMAT.md +0 -45
  59. package/assets/prompts/PRD-FORMAT.md +0 -17
  60. package/assets/templates/gitignore +0 -5
  61. package/dist/kernel/caller.d.ts +0 -48
  62. package/dist/kernel/caller.js +0 -88
  63. package/dist/kernel/caller.js.map +0 -1
  64. package/dist/kernel/flow.d.ts +0 -166
  65. package/dist/kernel/flow.js +0 -387
  66. package/dist/kernel/flow.js.map +0 -1
  67. package/dist/kernel/legacy.d.ts +0 -19
  68. package/dist/kernel/legacy.js +0 -34
  69. package/dist/kernel/legacy.js.map +0 -1
  70. package/dist/kernel/records.d.ts +0 -87
  71. package/dist/kernel/records.js +0 -197
  72. package/dist/kernel/records.js.map +0 -1
  73. package/dist/kernel/release.d.ts +0 -104
  74. package/dist/kernel/release.js +0 -229
  75. package/dist/kernel/release.js.map +0 -1
  76. package/dist/kernel/review.d.ts +0 -34
  77. package/dist/kernel/review.js +0 -81
  78. package/dist/kernel/review.js.map +0 -1
  79. package/dist/kernel/setup.d.ts +0 -70
  80. package/dist/kernel/setup.js +0 -324
  81. package/dist/kernel/setup.js.map +0 -1
  82. package/dist/kernel/slug.d.ts +0 -23
  83. package/dist/kernel/slug.js +0 -67
  84. package/dist/kernel/slug.js.map +0 -1
  85. package/dist/kernel/task.d.ts +0 -208
  86. package/dist/kernel/task.js +0 -788
  87. package/dist/kernel/task.js.map +0 -1
  88. package/dist/kernel/tdd/adapter.d.ts +0 -49
  89. package/dist/kernel/tdd/adapter.js +0 -293
  90. package/dist/kernel/tdd/adapter.js.map +0 -1
  91. package/dist/kernel/tdd/digest.d.ts +0 -17
  92. package/dist/kernel/tdd/digest.js +0 -301
  93. package/dist/kernel/tdd/digest.js.map +0 -1
  94. package/dist/kernel/tdd/evaluator.d.ts +0 -38
  95. package/dist/kernel/tdd/evaluator.js +0 -185
  96. package/dist/kernel/tdd/evaluator.js.map +0 -1
  97. package/dist/kernel/tdd/evidence.d.ts +0 -42
  98. package/dist/kernel/tdd/evidence.js +0 -48
  99. package/dist/kernel/tdd/evidence.js.map +0 -1
  100. package/dist/kernel/tdd/state.d.ts +0 -79
  101. package/dist/kernel/tdd/state.js +0 -363
  102. package/dist/kernel/tdd/state.js.map +0 -1
  103. package/dist/kernel/types.d.ts +0 -180
  104. package/dist/kernel/types.js +0 -2
  105. package/dist/kernel/types.js.map +0 -1
  106. package/dist/kernel/worktree.d.ts +0 -45
  107. package/dist/kernel/worktree.js +0 -127
  108. package/dist/kernel/worktree.js.map +0 -1
  109. package/dist/plugin/flow-control.d.ts +0 -80
  110. package/dist/plugin/flow-control.js +0 -254
  111. package/dist/plugin/flow-control.js.map +0 -1
  112. package/dist/plugin/release-control.d.ts +0 -37
  113. package/dist/plugin/release-control.js +0 -304
  114. package/dist/plugin/release-control.js.map +0 -1
  115. package/dist/plugin/setup-control.d.ts +0 -45
  116. package/dist/plugin/setup-control.js +0 -80
  117. package/dist/plugin/setup-control.js.map +0 -1
  118. package/dist/plugin/task-control.d.ts +0 -90
  119. package/dist/plugin/task-control.js +0 -201
  120. package/dist/plugin/task-control.js.map +0 -1
  121. package/dist/plugin/tdd-checkpoint.d.ts +0 -118
  122. package/dist/plugin/tdd-checkpoint.js +0 -581
  123. package/dist/plugin/tdd-checkpoint.js.map +0 -1
  124. package/dist/util/shell.d.ts +0 -1
  125. package/dist/util/shell.js +0 -4
  126. 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
- 每个 stage 通过 `tdd_checkpoint` 提交证据到 Task 评论(唯一证据源,缺证据的 PR 会被拒绝)。
53
- self-report 每个 cycle 的状态,不跳过任何阶段。
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,按 Task 的 `tdd` 配置(test_commands/acceptance)执行 RED→GREEN cycle
70
- - 通过 `tdd_checkpoint` 提交每个 stage 的证据(cycle-start/red/green/abandon-cycle/final-regression/final-verification)
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 的 `task_control` 完成
86
+ - **不 push**:分支推送与 PR 创建由 primary 编排器统一完成
80
87
 
81
88
  ## 禁止事项
82
- - 不 push、不创建 PR、不操作 Issue(push/PR 由 primary 的 task_control 完成)
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
- "npm *": "allow"
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
- - **规格轴**:代码是否忠实实现了 PRD/技术方案?
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
- #### 简单性轴(Simplicity)— 逐项检查
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
- 发现上述问题标记为 `[SIMPLICITY]` 级别:
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
- [CRITICAL] 标题 - 必须修复
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
- ...(标记 [SIMPLICITY] 级别发现)
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
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: 初始化 — 探测环境 → 生成 workflow → 确认 Profile
2
+ description: 初始化 — 探测环境 → 确认 Profile
3
3
  ---
4
4
  请加载 flow-setup 技能,按其中定义的流程进行初始化(阶段契约见 stage-contract)。
5
5
 
@@ -2,19 +2,20 @@
2
2
  全流程开发工作流已启用。
3
3
 
4
4
  可用命令:
5
- - /setup — 初始化(探测环境 → 生成 workflow → 确认 Profile)
6
- - /requirements — 需求澄清 → PRD → Flow Record
7
- - /design — 技术方案 + ADR → Planning PR
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 的完成权威是 Flow Record body checklist(`- [x] <stage>`),
17
- 阶段推进由 `flow_control{op:"stage-start"|"stage-complete"}` 维护,详见 stage-contract。
17
+ 阶段契约:每个 stage 的完成权威是 Parent Issue body checklist(`- [x] <stage>`),
18
+ 阶段顺序与约束详见 stage-contract。
18
19
 
19
- ⚡ 自动化模式:需求确认后输入 @dev-lifecycle 自动执行流程(终点为自动合并,不包含 release)
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 | 阶段名(flow_control) | 产出 | 工具 |
8
- |-------|----------------------|------|------|
9
- | setup | —(前置初始化) | Profile 确认、workflow 就绪 | `setup_control` |
10
- | requirements | `requirements` | PRD、Decision Map、Flow Record、CONTEXT.md 术语 | `flow_control{create-flow}` |
11
- | design | `design` | 技术方案 + ADR(Planning Baseline) | `flow_control{planning-start, planning-pr}` |
12
- | tasks | `tasks` | DAG 任务定义、Sub Issues | `task_control{create-task}` |
13
- | code | `code` | 实现 + TDD evidence + PR | `task_control{start-task, submit-task}` |
14
- | review | `review` | 审查报告、合并 | `task_control{submit-review, merge-task}` |
15
- | release | —(手动) | 版本、Release PR、GitHub Actions 发布 | `release_control` |
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(Parent Issue)body checklist 中的 `- [x] <stage>`**
20
- - 阶段推进由 `flow_control{op:"stage-start"|"stage-complete"}` 维护:start 打 `cabbage:stage:<name>` label,complete 标记 checklist
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-start X | 前置阶段须已 completed(requirements 无前置) |
28
- | stage-complete X | 前置阶段须已 completed;**requirements 完成需用户确认一次** |
29
- | stage-start tasks(高风险 Flow,label `cabbage:risk:high`) | 需用户确认(`user_confirmed: true`) |
30
- | 依赖 Task 启动 | 前置依赖 Task 已 merged、并行数 < 5 |
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
- - **Planning Baseline**:CONTEXT.md + PRD + Design + ADR 经单个 Planning PR 合入后,才允许创建 Task Record
37
+ - **设计基线**:CONTEXT.md + PRD + Design + ADR 经 PR 合入后,才允许拆解任务
39
38
  - **requirements 基线**:需求阶段结束须用户确认一次
40
- - **goal 最小化**:`goal({op:"create", parent_issue_number:<Flow Record 编号>})`,目标/验收从 Flow Record 读取
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**:architect 在 planning worktree 产出文档;方案遵循工程原则(KISS/YAGNI/DRY/SRP)
46
- - **tasks**:垂直切片、可独立验证、无循环依赖;标题用英文功能标题(内核派生 slug)
47
- - **code**:TDD 协议唯一来源是 `flow-tdd` skill;证据经 `tdd_checkpoint` 提交,缺证据 PR 被拒
48
- - **review**:双轴审查(规范 + 规格)+ TDD criterion coverage;reviewer 只读,写操作经 `task_control`
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
- - 不跳过前置门禁直接 stage-start/complete
54
- - 不手工修改 Flow Record 的 stage checklist(由 flow_control 维护)
55
- - 不绕过工具直接执行高风险 git/gh 写操作(push/PR/merge/worktree)
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: 编码实现 — task_control 创建 worktree + TDD(flow-tdd 协议)
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 提交由内核工具 `task_control` 完成,本 skill 不复制 shell 实现。
9
+ worktree 创建、PR 提交由 primary 编排器执行,本 skill 定义编码流程。
10
10
 
11
- ## 核心:调用 task_control + flow-tdd
11
+ ## 核心流程
12
12
 
13
- 1. `task_control{op:"start-task", task_id:"<slug>", ...}` — 创建 worktree + 记录基线 + 冻结 TDD policy
14
- 2. 加载 `flow-tdd` skill,按 Task 的 `tdd` 配置执行 RED→GREEN cycle
15
- 3. 每个 stage 通过 `tdd_checkpoint` 提交证据(唯一证据源,缺证据的 PR 会被拒绝)
16
- 4. 本地 `git add` + `git commit`(多次提交)
17
- 5. **不 push、不创建 PR** — 由 primary 的 `task_control{op:"submit-task"}` 完成
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 流程,以及 `tdd_checkpoint` 各 op 的调用方式。
32
+ > abandon-cycle 规则和 final-regression/verification 流程。测试质量由仓库 CI 把关。
29
33
 
30
34
  ## Output
31
- - Worktree 已创建(task_control)
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
- - Planning Baseline 已合入;前置依赖任务已合并(task_control 门禁)
50
+ - 设计基线已合入;前置依赖任务已合并
49
51
 
50
52
  ### Procedure
51
- 1. 调用 `task_control{op:"start-task"}` 创建/复用 worktree
52
- 2. 加载 `flow-tdd`,按 Task 的 tdd 配置执行 RED→GREEN cycle
53
- 3. 通过 `tdd_checkpoint` 提交证据
54
- 4. 本地 git add + commit(不 push)
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 创建失败 → 检查分支冲突或目录残留(task_control 报错)
62
+ - worktree 创建失败 → 检查分支冲突或目录残留
64
63
  - 测试失败 → 修复后重试(不跳过 RED)
65
64
 
66
65
  ### Idempotency
67
- - worktree 已存在 → task_control 校验分支一致性后复用
66
+ - worktree 已存在 → 校验分支一致性后复用
68
67
  - 代码已提交 → 追加提交
69
68
 
70
69
  ### Prohibited Actions
71
- - 不 push、不创建 PR、不操作 Issue(由 task_control 完成)
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(planning worktree + Planning PR)
3
+ description: 技术方案设计 → 方案文档 + ADR → Planning PR
4
4
  ---
5
5
 
6
6
  # flow-design
7
7
 
8
- 基于 PRD 进行技术方案设计,architect 在 planning worktree 产出 CONTEXT.md + PRD + Design + ADR,
9
- 并由 `flow_control` 通过 Planning PR 合入形成 Planning Baseline。
10
-
11
- ## 核心:调用 flow_control
12
-
13
- 1. `flow_control{op:"planning-start"}` — 创建 planning worktree `.worktree/planning-<slug>`(architect 在此写文档)
14
- 2. 在 planning worktree 内产出:根 `CONTEXT.md` 术语更新 + `docs/prd/<title>.md` + `docs/dev/specs/<title>.md` + `docs/adr/<date>-<slug>.md`
15
- 3. `flow_control{op:"planning-pr"}` — 对 planning worktree 变更创建 Planning PR(合并后 = Planning Baseline)
16
-
17
- worktree 创建与 Planning PR 创建均由内核工具完成,创建动作全部收敛到工具内。
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(由 flow_control 创建)
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` 命令或 `@dev-lifecycle` Phase 1 触发。
104
+ 由 `/design` 命令、`@dev-lifecycle` Phase 1,或存量 Flow 的 Testing Decisions 兼容门触发。
46
105
 
47
106
  ### Inputs
48
107
  - `docs/prd/<title>.md` — 上游 PRD(来源:requirements 阶段产出)
49
- - Flow Record 编号(来源:requirements 阶段产出)
108
+ - Parent Issue 编号(来源:requirements 阶段产出)
50
109
 
51
110
  ### Preconditions
52
- - `/requirements` 已完成 → PRD 与 Flow Record 存在
111
+ - `/requirements` 已完成 → PRD 与 Parent Issue 存在
53
112
  - requirements 基线已用户确认
54
113
 
55
114
  ### Procedure
56
- 1. 调用 `flow_control{op:"planning-start"}` 创建 planning worktree
115
+ 普通 design 流程:
116
+
117
+ 1. 基于默认分支创建工作分支
57
118
  2. 阅读 PRD、已有 ADR、根 CONTEXT.md 术语
58
- 3. 输出技术方案到 `docs/dev/specs/<title>.md`
59
- 4. 记录 ADR 到 `docs/adr/<YYYY-MM-DD>-<slug>.md`
60
- 5. 调用 `flow_control{op:"planning-pr"}` 创建 Planning PR
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
- - 技术方案 + ADR(planning worktree 内)
64
- - Planning PR(Planning Baseline 的一部分)
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
- - planning worktree 已存在 → 复用(工具校验分支一致性)
140
+ - 分支已存在 → 检出后追加提交
74
141
 
75
142
  ### Prohibited Actions
76
- - 不绕过 flow_control 手工创建 worktree / Planning PR(由内核工具完成)
77
143
  - 不跳过 ADR 兼容性检查
78
- - 不直接 push 到默认分支
144
+ - 不创建只有一个假设 Adapter、没有真实替换需求的 Seam
145
+ - 不以实现方法、私有协作对象或调用顺序作为 Test Seam
146
+ - 不直接 push 到默认分支(写操作走分支 + PR)