@devcxl/opencode-cabbage 1.1.0 → 1.3.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 (142) hide show
  1. package/.codex-plugin/plugin.json +36 -0
  2. package/README.md +53 -25
  3. package/README.zh.md +23 -23
  4. package/assets/agents/dev-lifecycle.md +208 -68
  5. package/assets/agents/team/architect.md +22 -7
  6. package/assets/agents/team/developer.md +13 -6
  7. package/assets/agents/team/goal-verify.md +4 -1
  8. package/assets/agents/team/researcher.md +59 -0
  9. package/assets/agents/team/reviewer.md +34 -18
  10. package/assets/commands/setup.md +1 -1
  11. package/assets/prompts/bootstrap.md +10 -9
  12. package/assets/prompts/stage-contract.md +25 -25
  13. package/assets/skills/flow-code/SKILL.md +23 -25
  14. package/assets/skills/flow-design/SKILL.md +94 -26
  15. package/assets/skills/flow-release/SKILL.md +41 -17
  16. package/assets/skills/flow-requirements/SKILL.md +19 -13
  17. package/assets/skills/flow-research/SKILL.md +77 -0
  18. package/assets/skills/flow-review/SKILL.md +55 -25
  19. package/assets/skills/flow-setup/SKILL.md +27 -24
  20. package/assets/skills/flow-tasks/SKILL.md +178 -35
  21. package/assets/skills/flow-tdd/SKILL.md +68 -40
  22. package/codex-skills/agent-architect/SKILL.md +79 -0
  23. package/codex-skills/agent-dev-lifecycle/SKILL.md +309 -0
  24. package/codex-skills/agent-developer/SKILL.md +51 -0
  25. package/codex-skills/agent-goal-verify/SKILL.md +45 -0
  26. package/codex-skills/agent-researcher/SKILL.md +32 -0
  27. package/codex-skills/agent-reviewer/SKILL.md +109 -0
  28. package/codex-skills/flow-code/SKILL.md +71 -0
  29. package/codex-skills/flow-design/SKILL.md +146 -0
  30. package/codex-skills/flow-release/SKILL.md +90 -0
  31. package/codex-skills/flow-requirements/SKILL.md +90 -0
  32. package/codex-skills/flow-research/SKILL.md +77 -0
  33. package/codex-skills/flow-review/SKILL.md +110 -0
  34. package/codex-skills/flow-setup/SKILL.md +75 -0
  35. package/codex-skills/flow-tasks/SKILL.md +220 -0
  36. package/codex-skills/flow-tdd/SKILL.md +235 -0
  37. package/dist/hooks/session-start.d.ts +1 -0
  38. package/dist/hooks/session-start.js +72 -0
  39. package/dist/hooks/session-start.js.map +1 -0
  40. package/dist/kernel/session-index.d.ts +8 -25
  41. package/dist/kernel/session-index.js +5 -55
  42. package/dist/kernel/session-index.js.map +1 -1
  43. package/dist/plugin/bootstrap.d.ts +0 -1
  44. package/dist/plugin/bootstrap.js +0 -3
  45. package/dist/plugin/bootstrap.js.map +1 -1
  46. package/dist/plugin/goal-store.d.ts +71 -0
  47. package/dist/plugin/goal-store.js +54 -0
  48. package/dist/plugin/goal-store.js.map +1 -0
  49. package/dist/plugin/goal.d.ts +47 -13
  50. package/dist/plugin/goal.js +228 -128
  51. package/dist/plugin/goal.js.map +1 -1
  52. package/dist/plugin/prompt-lint.js +3 -11
  53. package/dist/plugin/prompt-lint.js.map +1 -1
  54. package/dist/plugin/prompts.d.ts +0 -1
  55. package/dist/plugin/prompts.js +0 -4
  56. package/dist/plugin/prompts.js.map +1 -1
  57. package/dist/plugin/server.d.ts +3 -5
  58. package/dist/plugin/server.js +247 -155
  59. package/dist/plugin/server.js.map +1 -1
  60. package/dist/plugin/skills.d.ts +7 -1
  61. package/dist/plugin/skills.js +75 -12
  62. package/dist/plugin/skills.js.map +1 -1
  63. package/dist/plugin.d.ts +0 -1
  64. package/dist/plugin.js +1 -4
  65. package/dist/plugin.js.map +1 -1
  66. package/dist/util/gh.d.ts +0 -11
  67. package/dist/util/gh.js +0 -14
  68. package/dist/util/gh.js.map +1 -1
  69. package/dist/util/paths.d.ts +0 -14
  70. package/dist/util/paths.js +0 -69
  71. package/dist/util/paths.js.map +1 -1
  72. package/hooks/hooks.json +17 -0
  73. package/package.json +12 -4
  74. package/assets/prompts/ADR-FORMAT.md +0 -45
  75. package/assets/prompts/PRD-FORMAT.md +0 -17
  76. package/assets/templates/gitignore +0 -5
  77. package/dist/kernel/caller.d.ts +0 -48
  78. package/dist/kernel/caller.js +0 -88
  79. package/dist/kernel/caller.js.map +0 -1
  80. package/dist/kernel/flow.d.ts +0 -175
  81. package/dist/kernel/flow.js +0 -467
  82. package/dist/kernel/flow.js.map +0 -1
  83. package/dist/kernel/legacy.d.ts +0 -19
  84. package/dist/kernel/legacy.js +0 -34
  85. package/dist/kernel/legacy.js.map +0 -1
  86. package/dist/kernel/records.d.ts +0 -103
  87. package/dist/kernel/records.js +0 -240
  88. package/dist/kernel/records.js.map +0 -1
  89. package/dist/kernel/release.d.ts +0 -106
  90. package/dist/kernel/release.js +0 -241
  91. package/dist/kernel/release.js.map +0 -1
  92. package/dist/kernel/review.d.ts +0 -34
  93. package/dist/kernel/review.js +0 -82
  94. package/dist/kernel/review.js.map +0 -1
  95. package/dist/kernel/setup.d.ts +0 -95
  96. package/dist/kernel/setup.js +0 -401
  97. package/dist/kernel/setup.js.map +0 -1
  98. package/dist/kernel/slug.d.ts +0 -23
  99. package/dist/kernel/slug.js +0 -67
  100. package/dist/kernel/slug.js.map +0 -1
  101. package/dist/kernel/task.d.ts +0 -213
  102. package/dist/kernel/task.js +0 -873
  103. package/dist/kernel/task.js.map +0 -1
  104. package/dist/kernel/tdd/adapter.d.ts +0 -49
  105. package/dist/kernel/tdd/adapter.js +0 -294
  106. package/dist/kernel/tdd/adapter.js.map +0 -1
  107. package/dist/kernel/tdd/digest.d.ts +0 -18
  108. package/dist/kernel/tdd/digest.js +0 -303
  109. package/dist/kernel/tdd/digest.js.map +0 -1
  110. package/dist/kernel/tdd/evaluator.d.ts +0 -38
  111. package/dist/kernel/tdd/evaluator.js +0 -185
  112. package/dist/kernel/tdd/evaluator.js.map +0 -1
  113. package/dist/kernel/tdd/evidence.d.ts +0 -42
  114. package/dist/kernel/tdd/evidence.js +0 -48
  115. package/dist/kernel/tdd/evidence.js.map +0 -1
  116. package/dist/kernel/tdd/state.d.ts +0 -79
  117. package/dist/kernel/tdd/state.js +0 -363
  118. package/dist/kernel/tdd/state.js.map +0 -1
  119. package/dist/kernel/types.d.ts +0 -180
  120. package/dist/kernel/types.js +0 -2
  121. package/dist/kernel/types.js.map +0 -1
  122. package/dist/kernel/worktree.d.ts +0 -45
  123. package/dist/kernel/worktree.js +0 -156
  124. package/dist/kernel/worktree.js.map +0 -1
  125. package/dist/plugin/flow-control.d.ts +0 -91
  126. package/dist/plugin/flow-control.js +0 -287
  127. package/dist/plugin/flow-control.js.map +0 -1
  128. package/dist/plugin/release-control.d.ts +0 -39
  129. package/dist/plugin/release-control.js +0 -343
  130. package/dist/plugin/release-control.js.map +0 -1
  131. package/dist/plugin/setup-control.d.ts +0 -59
  132. package/dist/plugin/setup-control.js +0 -111
  133. package/dist/plugin/setup-control.js.map +0 -1
  134. package/dist/plugin/task-control.d.ts +0 -90
  135. package/dist/plugin/task-control.js +0 -208
  136. package/dist/plugin/task-control.js.map +0 -1
  137. package/dist/plugin/tdd-checkpoint.d.ts +0 -128
  138. package/dist/plugin/tdd-checkpoint.js +0 -664
  139. package/dist/plugin/tdd-checkpoint.js.map +0 -1
  140. package/dist/util/shell.d.ts +0 -1
  141. package/dist/util/shell.js +0 -4
  142. package/dist/util/shell.js.map +0 -1
@@ -1,41 +1,46 @@
1
1
  ---
2
2
  name: flow-setup
3
- description: 初始化 — 探测环境 → 生成 workflow → 确认 Profile
3
+ description: 初始化 — 探测环境 → 确认 Profile
4
4
  ---
5
5
 
6
6
  # flow-setup
7
7
 
8
- 初始化阶段:探测开发环境、生成缺失的 CI/release workflow、确认 AGENTS.md Project Profile。
9
- 所有探测与写入由内核工具 `setup_control` 完成,本 skill 只定义流程,不复制工具实现。
8
+ 初始化阶段:探测开发环境、确认 AGENTS.md Project Profile。
9
+ 纯 Prompt 流程:直接使用 git/gh 命令探测,Profile 由用户确认后写入根 AGENTS.md。
10
10
 
11
- ## 核心:调用 setup_control
11
+ ## 核心流程
12
12
 
13
- 调用 `setup_control` 完成三个阶段:
13
+ 1. **探测环境**
14
+ ```bash
15
+ gh auth status # gh CLI 认证
16
+ gh repo view --json nameWithOwner,defaultBranchRef # 仓库与默认分支
17
+ ls .github/workflows/ # 现有 CI/release workflow
18
+ ```
14
19
 
15
- 1. `setup_control{op:"probe"}` — 探测 git/gh/CI/Profile,输出 readiness 报告
16
- 2. `setup_control{op:"generate-workflows"}` — 缺失时生成 CI/release workflow 草案 + Setup PR(人工合入)
17
- 3. `setup_control{op:"confirm-profile"}` — 用户确认后将 Profile 区块写入根 AGENTS.md
20
+ 2. **确认 Project Profile**:向用户逐项确认以下配置(技术栈无关):
21
+ - test command:测试命令(如 `npm test`)
22
+ - regression command:全量回归命令
23
+ - test file patterns:测试文件匹配(如 `test/**/*.test.ts`)
24
+ - implementation file patterns:实现文件匹配(如 `src/**/*.ts`)
25
+ - version bump rule、version file、tag format、release workflow
18
26
 
19
- Profile 区块格式(内核解析白名单,§9.1):
27
+ 3. **写入根 AGENTS.md**:用户确认后,将 Profile 区块追加/替换到根 `AGENTS.md`:
20
28
 
21
29
  ```markdown
22
30
  ## Project Profile
23
31
 
24
- - test command: `npm test -- run`
32
+ - test command: `npm test`
33
+ - regression command: `npm test`
25
34
  - test file patterns: `test/**/*.test.ts`
26
35
  - implementation file patterns: `src/**/*.ts`
27
- - tdd default mode: `strict`
28
36
  - version bump rule: `breaking→major, feature→minor, fix→patch`
29
37
  - version file: `package.json`
30
38
  - tag format: `v{version}`
31
39
  - release workflow: `.github/workflows/release.yml`
32
40
  ```
33
41
 
34
- 未确认 Profile 时 `flow_control{op:"create-flow"}` 会阻断并提示先执行 `/setup`。
35
-
36
42
  ## Output
37
- - readiness 报告(development-ready / release-ready 逐项布尔)
38
- - `.github/workflows/` 草案(缺失时,经 Setup PR 人工合入)
43
+ - readiness 报告(git/gh 可用性、CI/release workflow 存在性)
39
44
  - 根 AGENTS.md `## Project Profile` 区块
40
45
 
41
46
  ## Contract
@@ -50,23 +55,21 @@ Profile 区块格式(内核解析白名单,§9.1):
50
55
  - gh CLI 已认证(宿主 `gh auth`)
51
56
 
52
57
  ### Procedure
53
- 1. 调用 `setup_control{op:"probe"}` 读取 readiness 报告
54
- 2. 缺失 workflow 时调用 `setup_control{op:"generate-workflows"}` 生成草案
55
- 3. 用户确认后调用 `setup_control{op:"confirm-profile"}` 写入 Profile
58
+ 1. 用 gh/git 命令探测环境,输出 readiness 报告
59
+ 2. 缺失 CI/release workflow 时提示用户(可手工创建)
60
+ 3. 向用户逐项确认 Profile 配置
61
+ 4. 用户确认后写入根 AGENTS.md Profile 区块
56
62
 
57
63
  ### Outputs
58
64
  - readiness 报告
59
- - workflow 草案(可选)
60
65
  - 根 AGENTS.md Profile 区块
61
66
 
62
67
  ### Failure
63
68
  - gh auth 失败 → 提示用户执行 `gh auth login` 后重试
64
- - workflow 生成失败 → 报告错误并停止
65
69
 
66
70
  ### Idempotency
67
- - Profile 已确认 → 重复 confirm 覆盖写入(工具内读后写)
68
- - workflow 已存在 → 跳过生成
71
+ - Profile 已存在 → 覆盖为最新确认值
69
72
 
70
73
  ### Prohibited Actions
71
- - 不手工编辑 AGENTS.md Profile 区块(由 setup_control 写回)
72
- - 不直接 push 或创建 Setup PR(工具内部执行)
74
+ - 不写入未获用户确认的 Profile 项
75
+ - 不假设测试命令为 npm(按用户确认的技术栈)
@@ -1,77 +1,220 @@
1
1
  ---
2
2
  name: flow-tasks
3
- description: DAG 任务拆解 → Task Record(task_control)
3
+ description: 将技术方案拆解为可独立实现的 tracer-bullet Task Plan 与 DAG
4
4
  ---
5
5
 
6
6
  # flow-tasks
7
7
 
8
- 将设计方案拆解为 DAG(有向无环图)任务,并用 `task_control{op:"create-task"}` 创建 Task Record(GitHub Sub Issue)。
8
+ 将设计方案拆解为 Task Plan 与 DAG(有向无环图)。每个 Task 都是一条完整但狭窄的行为切片,可以交给一个 fresh-context developer agent 独立实现和验证。
9
9
 
10
- ## 核心:调用 task_control
10
+ 本 skill 只定义任务拆解与 Task Plan 产出。`@architect` 不创建 GitHub Issue、不操作 GitHub lifecycle;调用方负责检查并发布 Task Plan。
11
11
 
12
- `task_control{op:"create-task", title:"<英文功能标题>", acceptance_criteria:"<JSON>", ...}` 创建 Sub Issue。
13
- 内核负责 slug 派生与校验、标题规范(R3)、关联 Parent Issue——创建动作全部收敛到工具内。
12
+ ## Task 拆解规则
14
13
 
15
- ## DAG 拆解
14
+ 每个 Task 必须:
16
15
 
17
- #### 拆解前自检
16
+ 1. 交付一个可以观察或验证的新行为。
17
+ 2. 是垂直切片,而不是 Controller / Service / DAO 等技术分层。
18
+ 3. 可以交给一个 fresh-context developer agent 独立理解和实现。
19
+ 4. 完成以后仓库处于可工作的状态,而不是为下一个 Task 留空壳。
20
+ 5. `Blocked By` 只声明“前者未完成时,本 Task 无法开始”的真实阻塞关系。
18
21
 
19
- 1. **能否用一个任务完成?** — 如果功能足够内聚,不强拆多个任务
20
- 2. **拆开后能否独立验证?** — 每个任务必须有独立的验收标准
21
- 3. **拆开后耦合是否最低?** — 两个任务共享大量数据结构/模块 → 合并
22
+ 每个 Task 应适合一个 fresh-context developer agent:
22
23
 
23
- #### 反模式
24
+ - 不需要读取整个 Flow 历史才能理解。
25
+ - Task、Design 与 repository context 足够开始工作。
26
+ - 正常情况下不需要再次进行架构设计。
27
+ - 可以在一次独立开发循环中实现、测试、提交。
28
+
29
+ ## 何时拆分
30
+
31
+ 不要为了制造并行度而拆 Task。
32
+
33
+ 如果一个行为高度内聚、修改范围集中、一个 fresh context 可以完成,且没有独立可验证的中间行为,则保持为一个 Task。
34
+
35
+ 如果一个 Task 同时包含三个以上相互独立的“用户可以……”行为,应考虑按这些可独立验证的行为拆分。
36
+
37
+ 拆分前检查:
38
+
39
+ 1. **能否用一个 Task 完成?** — 足够内聚时不强拆。
40
+ 2. **拆开后能否独立验证?** — 每个 Task 都必须交付可观察行为。
41
+ 3. **是否真的阻塞?** — 只有无法开始的前置关系才进入 DAG。
42
+ 4. **拆开后耦合是否更低?** — 大量共享同一数据结构或模块时优先合并。
43
+
44
+ ## Behavior-preserving Pre-refactor
45
+
46
+ 行为 Task 的唯一例外是必要的 behavior-preserving pre-refactor:当现有结构使后续行为无法在一个可测试、可工作的垂直切片中安全实现时,可以先建立一个重构 Task。
47
+
48
+ Pre-refactor 必须同时满足:
49
+
50
+ - 不改变现有可观察行为,并用回归验证证明行为保持。
51
+ - 自身完成后仓库保持可工作,不留下迁移一半的状态。
52
+ - 只消除阻碍后续行为的具体结构问题,不搭通用框架、不预留未来扩展点。
53
+ - 后续行为确实无法安全开始时,才将 pre-refactor 声明为 blocking edge。
54
+
55
+ 仅仅“这样更整洁”或“以后可能复用”不构成 pre-refactor。优先直接交付行为切片。
56
+
57
+ Pre-refactor 的 `Builds` 应说明“保持哪个现有行为不变,并消除哪个阻碍后续行为的具体结构问题”,不能写成文件或类的修改清单。
58
+
59
+ ## 反模式
24
60
 
25
61
  | 反模式 | 示例 | 正确做法 |
26
62
  |--------|------|----------|
27
- | 技术分层拆分 | "建表任务" → "DAO 任务" → "Service 任务" | 垂直切片:一个任务包含完整链路 |
28
- | 过度拆分 | 一个 CRUD 拆成四个任务 | 一个 CRUD 就是一个任务 |
29
- | 预留式拆分 | "先搭框架,后面任务再填内容" | 不要有空壳任务 |
63
+ | 技术分层拆分 | `create-session-table` → `implement-session-service` → `implement-session-api` | `create-and-restore-session` |
64
+ | 测试单独成 Task | `add-session-tests` | 测试随行为切片一起交付 |
65
+ | 过度拆分 | 一个内聚 CRUD 拆成多个 Task | 保持为一个可独立验证的 Task |
66
+ | 预留式拆分 | 先搭框架,后续 Task 再填内容 | 每个 Task 完成后仓库都可工作 |
67
+ | 虚假依赖 | 因修改相邻文件而声明依赖 | 仅声明不完成前者就无法开始的依赖 |
68
+
69
+ ## Task 定义
70
+
71
+ 每个 Task 保存为 `docs/dev/tasks/<task-name>.md`,是 developer 使用的 **Agent Implementation Contract**:
72
+
73
+ `task-name` 使用简短的英文 kebab-case 行为短语,并作为后续 `feat/<task-name>` 分支名的基准。
74
+
75
+ ```markdown
76
+ ---
77
+ issue: null
78
+ test_commands:
79
+ - <targeted test command>
80
+ verify_commands:
81
+ - <verification command>
82
+ ---
83
+
84
+ # <task-slug>
85
+
86
+ ## Builds
87
+
88
+ <这个 Task 完成后,哪个端到端行为真正可以工作?>
89
+
90
+ ## Acceptance Criteria
91
+
92
+ - [ ] <可观察行为>
93
+ - [ ] <边界或异常行为>
94
+ - [ ] <回归要求>
95
+
96
+ ## Blocked By
30
97
 
31
- DAG 使用 Mermaid 语法绘制,保存为 `docs/dev/tasks/<YYYY-MM-DD-NNN-slug>/DAG.md`。
98
+ - <blocking-task-slug>
99
+ - 或 None
32
100
 
33
- ## 任务定义文件
101
+ ## Implementation Notes
34
102
 
35
- 每个任务一个文件 `docs/dev/tasks/<task-name>.md`,frontmatter 含 `test_commands` / `verify_commands` / `tdd` 配置块 / `acceptance` 结构化验收标准。
36
- 这些字段是 `flow-tdd` skill 的输入(RED→GREEN cycle、final-regression、final-verification)。
103
+ <只记录真正限制实现方式的重要设计决策;不要复制具体实现步骤。>
104
+ ```
105
+
106
+ `Builds` 必须直接说明完成后的可工作行为。`Acceptance Criteria` 是 `flow-tdd` 使用的行为规格;`test_commands` 与 `verify_commands` 只放在 Task 文件中。
107
+
108
+ Task 的行为测试必须沿用 Design `Testing Decisions` 中约定的 Test Seam。Task 不重新设计 Seam;如果既有 Seam 无法验证该行为,应返回 Design Gap,由调用方在当前 stage 完成 amendment。
109
+
110
+ ### Design Gap
111
+
112
+ 存量 Design 缺少 `Testing Decisions` 时,不回退 lifecycle stage,也不生成半成品 Task Plan。返回给调用方:
113
+
114
+ ```markdown
115
+ ## Design Gap
116
+
117
+ - Current Stage: tasks
118
+ - Design File: <docs/dev/specs/...>
119
+ - Missing Behaviors:
120
+ - <缺少 Test Seam 或 Observable Result 的行为>
121
+ - Existing Context: <已发现的公共 Interface 与测试惯例;没有则写 None>
122
+ - Required Amendment: 为以上行为补充 Testing Decisions
123
+ ```
124
+
125
+ 调用方在当前 tasks 阶段完成 Design Amendment 后,重新执行 Task Planning。`@architect` 不在 flow-tasks 内自行修改测试设计。
126
+
127
+ 规划阶段尚无 Issue 编号,`Blocked By` 使用 task slug。发布后由调用方将其更新为真实 `#<issue-number>`;无依赖时写 `None`。
128
+
129
+ ## DAG
130
+
131
+ DAG 使用 Mermaid 语法,保存为 `docs/dev/tasks/<YYYY-MM-DD-NNN-slug>/DAG.md`。
132
+
133
+ - 节点对应行为 Task,不对应技术层。
134
+ - 边只表示真实 blocking edge。
135
+ - 发布前必须检查环形依赖。
136
+ - 发布后将 Task 节点与依赖更新为真实 Issue 编号。
137
+
138
+ ## GitHub 发布边界
139
+
140
+ GitHub Sub Issue 是协作与生命周期记录,正文只提取 Task 中用户可读的内容:
141
+
142
+ ```markdown
143
+ ## Builds
144
+
145
+ ...
146
+
147
+ ## Acceptance Criteria
148
+
149
+ - [ ] ...
150
+
151
+ ## Blocked By
152
+
153
+ None
154
+ ```
155
+
156
+ 不得把 `issue`、`test_commands`、`verify_commands` 或内部实现说明复制到 GitHub Issue。
157
+
158
+ 发布由调用方执行:
159
+
160
+ - 普通 Flow:`@dev-lifecycle` 检查后自动发布。
161
+ - 高风险 Flow:展示 Task Plan,用户确认后发布。
162
+ - 用户主动 `/tasks`:展示 Task Plan,等待用户确认后发布。
163
+ - `@architect`:产出并返回 Task Plan 后停止,不执行发布。
37
164
 
38
165
  ## Output
39
- - `docs/dev/tasks/*.md` — 独立任务文件
40
- - GitHub Sub Issues(由 task_control 创建,依赖关系在 body 中声明)
166
+
167
+ - `docs/dev/tasks/*.md` — Agent Implementation Contracts
168
+ - `docs/dev/tasks/<YYYY-MM-DD-NNN-slug>/DAG.md` — Task DAG
169
+ - 返回给调用方的 Task Plan 摘要与拓扑顺序
41
170
 
42
171
  ## 后续
43
- - **/code** — 认领 Sub Issue 开始编码
172
+
173
+ - `@dev-lifecycle` 检查并发布 GitHub Sub Issues
174
+ - **/code** — 按 Task DAG 进入编码阶段
44
175
 
45
176
  ## Contract
46
177
 
47
178
  ### Trigger
48
- 由 `/tasks` 命令或 `@dev-lifecycle` Phase 2 触发。
179
+ 由 `/tasks` 命令或 `@dev-lifecycle` Phase 2 委派 `@architect` 触发。
49
180
 
50
181
  ### Inputs
51
182
  - `docs/dev/specs/<title>.md` — 技术方案
52
- - Flow Record 编号
183
+ - 相关 PRD 与 ADR
184
+ - Parent Issue 编号
53
185
 
54
186
  ### Preconditions
55
- - `/design` 已完成 → 技术方案和 ADR 存在(Planning Baseline 已合入)
187
+ - `/design` 已完成,技术方案和 ADR 存在
56
188
 
57
189
  ### Procedure
58
- 1. 基于技术方案拆解 DAG(Mermaid 图 + 任务文件)
59
- 2. 为每个任务调用 `task_control{op:"create-task"}` 创建 Sub Issue
60
- 3. 任务文件随 Planning PR 合入默认分支
190
+ 1. 读取设计基线与必要的 repository context。
191
+ 2. 读取 Design `Testing Decisions`,确认关键行为已有公共 Test Seam;缺失时返回 Design Gap 并停止,不生成或更新 Task 文件。
192
+ 3. 识别可独立验证的 tracer-bullet 行为切片;仅在必要时增加 behavior-preserving pre-refactor。
193
+ 4. 为每个 Task 定义 `Builds`、`Acceptance Criteria`、`Blocked By` 与必要的 `Implementation Notes`。
194
+ 5. 生成 Task 文件与 Mermaid DAG。
195
+ 6. 检查技术分层式拆分、空壳 Task、虚假依赖、臆测性 pre-refactor 与环形依赖。
196
+ 7. 返回 Task Plan、文件路径与拓扑顺序;不创建 GitHub Issue。
61
197
 
62
198
  ### Outputs
63
- - `docs/dev/tasks/<feature-slug>/` — DAG 与任务文件
64
- - GitHub Sub Issues(含依赖声明)
199
+ - Task 定义文件
200
+ - Task DAG
201
+ - 供调用方检查与发布的 Task Plan
202
+ - 或结构化 Design Gap(存量 Design 缺少 Testing Decisions 时)
65
203
 
66
204
  ### Failure
205
+ - 无法从设计中确定可验证行为 → 暂停并指出缺失信息
206
+ - Design Amendment 后仍缺少稳定 Test Seam → 报告未解决的 Design Gap,由调用方暂停当前阶段
67
207
  - DAG 存在环形依赖 → 阻止并报告
68
- - Sub Issue 创建失败 → 记录失败项
208
+ - Task 无法由 fresh-context developer 独立理解 → 重新拆分或补足契约
69
209
 
70
210
  ### Idempotency
71
- - 任务文件已存在 → 读取并更新
72
- - Sub Issue 已创建 → 内核检测同名冲突(未合并分支/worktree)并拒绝
211
+ - Task 文件已存在 → 读取并更新,不创建重复定义
212
+ - 已有 `issue` 编号 → 保留并交给调用方核验,不重复发布
73
213
 
74
214
  ### Prohibited Actions
75
- - 不跳过 DAG 依赖检查
76
- - 不绕过 task_control 手工创建 Sub Issue(由 create-task 完成)
77
- - 不直接 push 到默认分支
215
+ - 不按技术层拆分 Task
216
+ - 不为制造并行度而拆分 Task
217
+ - 不创建完成后不可工作的空壳 Task
218
+ - 不用 pre-refactor 包装搭框架、清理代码或预留扩展点
219
+ - 不把非阻塞关系写入 `Blocked By`
220
+ - `@architect` 不执行 `gh issue create`、`git push`、PR、merge 或 worktree 操作
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: flow-tdd
3
- description: TDD Prompt 协议 — RED→GREEN 状态机 + tdd_checkpoint Runtime 证据
3
+ description: 公共 Test Seam 上的行为 TDD — RED→GREEN 状态机 + self-report 证据
4
4
  ---
5
5
 
6
6
  # flow-tdd
@@ -8,9 +8,44 @@ description: TDD Prompt 协议 — RED→GREEN 状态机 + tdd_checkpoint Runtim
8
8
  TDD(Test-Driven Development)Prompt 协议,为所有编码阶段提供统一的 TDD 流程约束。
9
9
  本 skill 是 TDD 协议的唯一来源,其他 skills 和 agents 通过引用本协议获得一致的 TDD 行为。
10
10
 
11
+ ## 核心原则
12
+
13
+ 测试是行为规格:通过 Design `Testing Decisions` 约定的公共 Test Seam 验证可观察行为,而不是验证内部实现。只要公共行为不变,重构 Module 内部实现不应导致测试失败。
14
+
15
+ 每个 TDD cycle 是一个最窄行为切片:
16
+
17
+ ```text
18
+ 确定 Test Seam 与一个行为
19
+ ↓
20
+ 写一个行为测试
21
+ ↓
22
+ RED
23
+ ↓
24
+ 最小实现
25
+ ↓
26
+ GREEN
27
+ ↓
28
+ 下一个行为
29
+ ```
30
+
31
+ ### 好测试
32
+
33
+ - 名称描述调用者或用户可以完成什么,而不是调用了哪个内部方法。
34
+ - 只通过约定的公共 Test Seam 触发并观察行为。
35
+ - 期望值来自 Acceptance Criteria、已知正确示例或其他独立来源。
36
+ - 实现重构但行为不变时仍然通过。
37
+
38
+ ### 反模式
39
+
40
+ - **实现耦合** — 测试私有方法、内部协作对象、调用次数或调用顺序。
41
+ - **侧信道验证** — 绕过公共 Seam 读取数据库或内部状态来证明行为。
42
+ - **循环论证** — 用与实现相同的算法重新计算期望值。
43
+ - **水平批量** — 先写完全部测试再实现;应按一个行为测试 → 一个最小实现逐次推进。
44
+ - **为 mock 造抽象** — 仅允许在真实系统边界按既有 Interface 替换外部依赖,不为测试方便新增生产 Seam。
45
+
11
46
  ## Advisory Procedure
12
47
 
13
- Agent 自行遵循 TDD 流程并 self-report 状态。每个 stage 同时通过 `tdd_checkpoint` 提交证据。
48
+ Agent 自行遵循 TDD 流程并 self-report 状态。测试质量由仓库 CI 把关,内核不强制证据。
14
49
 
15
50
  ### Cycle 状态机
16
51
 
@@ -26,7 +61,7 @@ Agent 自行遵循 TDD 流程并 self-report 状态。每个 stage 同时通过
26
61
  │
27
62
  ▼
28
63
  ┌─────────────┐
29
- │ green │ ← 最小实现使测试通过(GREEN),可在此阶段重构
64
+ │ green │ ← 最小实现使测试通过(GREEN),仅做局部行为保持整理
30
65
  └──────┬──────┘
31
66
  │
32
67
  ┌──────────┼──────────┐
@@ -43,19 +78,21 @@ Agent 自行遵循 TDD 流程并 self-report 状态。每个 stage 同时通过
43
78
  │
44
79
  ▼
45
80
  ┌───────────────────┐
46
- │ final-verification│ ← 对照 acceptance_criteria 逐条验证
81
+ │ final-verification│ ← 对照 Acceptance Criteria 逐条验证
47
82
  └───────────────────┘
48
83
  ```
49
84
 
50
85
  ### cycle-start
51
86
 
52
- 开始一个新的 RED→GREEN 循环。Agent 在开始实现前声明当前 cycle 的目标(要实现的测试/功能)。
87
+ 开始一个新的 RED→GREEN 循环。Agent 在实现前从 Design `Testing Decisions` 读取 Test Seam,并声明本 cycle 的一个可观察行为。
53
88
 
54
89
  **self-report 格式:**
55
90
  ```
56
91
  ## TDD cycle-start
57
92
  - cycle: <序号>
58
- - target: <本 cycle 要实现的功能/测试描述>
93
+ - behavior: <本 cycle 要交付的可观察行为>
94
+ - test_seam: <约定的公共 Test Seam>
95
+ - test: <通过该 Seam 验证行为的测试名称>
59
96
  ```
60
97
 
61
98
  ### red
@@ -64,6 +101,8 @@ Agent 自行遵循 TDD 流程并 self-report 状态。每个 stage 同时通过
64
101
 
65
102
  **约束:**
66
103
  - 测试必须有明确的 fail/pass 边界
104
+ - 测试名称描述行为,且只通过 cycle-start 声明的 Test Seam 触发和观察结果
105
+ - RED 必须因目标行为尚未实现而失败,不能把环境、语法或夹具错误当作证据
67
106
  - 测试运行命令必须与 Task 的 `test_commands` 中定义的一致
68
107
  - 记录测试失败输出作为 RED evidence
69
108
 
@@ -77,12 +116,13 @@ Agent 自行遵循 TDD 流程并 self-report 状态。每个 stage 同时通过
77
116
 
78
117
  ### green
79
118
 
80
- 编写最小实现使 RED 阶段编写的测试通过。可在此阶段进行局部重构(消除重复、改善命名等),但不应扩展范围。
119
+ 编写最小实现使 RED 阶段的行为测试通过。可进行局部、行为保持的整理,但不得改变约定的 Test Seam 或扩展范围。
81
120
 
82
121
  **约束:**
83
122
  - 只写使当前测试通过的最少代码
84
123
  - 不新增与当前 test 无关的功能
85
124
  - 重构仅限于当前 cycle 涉及的代码
125
+ - 不为通过测试而暴露内部状态、增加仅供测试使用的生产接口或改成实现细节断言
86
126
 
87
127
  **self-report 格式:**
88
128
  ```
@@ -133,7 +173,7 @@ Agent 自行遵循 TDD 流程并 self-report 状态。每个 stage 同时通过
133
173
 
134
174
  ### final-verification
135
175
 
136
- 对照 Task 的 `acceptance_criteria` 逐条验证,确认全部满足。
176
+ 对照 Task 的 `Acceptance Criteria` 逐条验证,确认每项都由公共 Test Seam 上的行为测试或 `verify_commands` 证明。
137
177
 
138
178
  **self-report 格式:**
139
179
  ```
@@ -143,54 +183,40 @@ Agent 自行遵循 TDD 流程并 self-report 状态。每个 stage 同时通过
143
183
  - criteria_pending: <未满足>
144
184
  ```
145
185
 
146
- ## Runtime Procedure
147
-
148
- 每个 stage 通过 `tdd_checkpoint` 提交证据到 Task Record 单个受控评论(marker 包裹,唯一证据源)。
149
- 工具亲自执行测试,不接受内联 evidence;RED 有效性校验(失败分类 + 实现文件相对基线未变 + 输入未偷换)。
150
-
151
- | Stage | tdd_checkpoint op |
152
- |-------|-------------------|
153
- | cycle-start | `tdd_checkpoint{op:"cycle-start", task_id, criterion_id, test_paths, test_selector}` |
154
- | red | `tdd_checkpoint{op:"red", task_id, cycle_id, test_selector}` — 测试失败 + 实现文件未变 |
155
- | green | `tdd_checkpoint{op:"green", task_id, cycle_id, test_selector}` — 同 selector 通过 |
156
- | abandon-cycle | `tdd_checkpoint{op:"abandon-cycle", task_id, cycle_id, reason}` |
157
- | final-regression | `tdd_checkpoint{op:"final-regression", task_id}` — 全量测试通过 |
158
- | final-verification | `tdd_checkpoint{op:"final-verification", task_id}` — 每条 criterion 有 pass cycle |
159
-
160
- 纯文档变更豁免:`tdd_checkpoint{op:"not-applicable"}`(仅 primary);其他豁免须用户批准(`exempt-request`)。
161
-
162
186
  ## Contract
163
187
 
164
188
  ### Trigger
165
189
  由编码阶段(`flow-code`)自动触发。Agent 在开始编码任务时加载 `flow-tdd` skill 获取 TDD 流程约束。
166
190
 
167
191
  ### Inputs
168
- - Task Record 中的 `acceptance_criteria`(来源:`flow-tasks` 产出)
169
- - Task Record 中的 `test_commands`(来源:`flow-tasks` 产出)
170
- - Task Record 中的 `verify_commands`(来源:`flow-tasks` 产出)
171
- - Task Record 中的 `tdd` 配置块 — `mode`(`strict`/`advisory`)、`min_cycles`(来源:`flow-tasks` 产出)
192
+ - Task 文件中的 `Builds` 与 `Acceptance Criteria`(来源:`flow-tasks`)
193
+ - Task frontmatter 中的 `test_commands` 与 `verify_commands`
194
+ - Design `Testing Decisions` 中约定的 Test Seam 与 Observable Result
172
195
 
173
196
  ### Preconditions
174
- - Task Record 存在,包含 `acceptance_criteria`、`test_commands`、`tdd` 配置块
197
+ - Task 文件存在,包含 `Builds`、`Acceptance Criteria`、`test_commands`
198
+ - Design 已为目标行为定义公共 Test Seam;存量 Design 缺失时先向 primary 返回 Design Gap,由兼容门在当前 stage 补齐
175
199
  - 测试运行环境就绪(worktree 内依赖已安装)
176
200
 
177
201
  ### Procedure
178
- 1. 读取 Task 的 `acceptance_criteria`、`test_commands`、`verify_commands`
179
- 2. 为每个验收标准识别对应的测试用例
180
- 3. 执行 `cycle-start` → 声明当前 cycle 目标并调用 tdd_checkpoint
181
- 4. 执行 `red` → 编写测试,验证失败,提交 evidence
182
- 5. 执行 `green` → 最小实现,验证通过,提交 evidence
183
- 6. 重复 cycle 直到所有 criterion 覆盖
184
- 7. 执行 `final-regression` → 运行全部测试
185
- 8. 执行 `final-verification` → 逐条对照 acceptance_criteria
202
+ 1. 读取 Task 的 `Builds`、`Acceptance Criteria`、`test_commands`、`verify_commands`。
203
+ 2. 读取 Design `Testing Decisions`,确认目标行为的 Test Seam 与 Observable Result。
204
+ 3. 选择一个尚未满足的行为,执行 `cycle-start` 声明 behavior、test_seam 与 test。
205
+ 4. 执行 `red` → 只写该行为测试,验证因行为缺失而失败,记录 self-report。
206
+ 5. 执行 `green` → 编写最小实现,验证通过,记录 self-report。
207
+ 6. 按一个行为切片一个 cycle 重复,直到所有 Acceptance Criteria 被覆盖。
208
+ 7. 执行 `final-regression` → 运行全部测试。
209
+ 8. 执行 `final-verification` → 通过 Test Seam 或 `verify_commands` 逐条验证 Acceptance Criteria。
186
210
 
187
211
  ### Outputs
188
- - 每个 cycle 的 self-report + tdd_checkpoint evidence(Task Record 评论)
212
+ - 每个 cycle 的 self-report
189
213
  - `final-regression` 报告(测试通过/失败统计)
190
214
  - `final-verification` 报告(criterion 覆盖情况)
191
215
 
192
216
  ### Failure
193
217
  - RED 阶段测试意外通过 → 检查测试是否有意义,可能需要 abandon-cycle
218
+ - RED 因环境、语法或夹具错误失败 → 修复测试基础设施,不能计为 RED evidence
219
+ - 只能通过内部实现观察目标行为 → 停止编码并向 primary 返回 Design Gap,不自行修改 Design、不回退 lifecycle stage
194
220
  - GREEN 阶段测试持续失败 → 检查实现逻辑,记录失败原因
195
221
  - final-regression 失败 → 修复回归,不要求新 cycle
196
222
  - final-verification 未全部满足 → 返回未完成的 criterion,补充 cycle
@@ -201,7 +227,9 @@ Agent 自行遵循 TDD 流程并 self-report 状态。每个 stage 同时通过
201
227
 
202
228
  ### Prohibited Actions
203
229
  - 不跳过 RED 阶段直接进入 GREEN
230
+ - 不测试私有方法、内部调用次数、内部调用顺序或未约定的侧信道
231
+ - 不一次批量编写多个行为测试后再统一实现
232
+ - 不为了 mock 或测试方便新增生产抽象
204
233
  - 不跳过 final-regression 直接 commit
205
234
  - 不在 abandon-cycle 后保留修改
206
- - 不修改 Task `tdd` 配置块中的 `mode` 和 `min_cycles` 值
207
- - 不伪造/内联 tdd_checkpoint evidence(工具亲自执行测试)
235
+ - 不伪造测试结果(实际运行命令后再 self-report)
@@ -0,0 +1,79 @@
1
+ ---
2
+ name: agent-architect
3
+ description: 负责需求分析、架构设计、技术方案和 DAG 任务拆解
4
+ ---
5
+
6
+ <system-reminder>
7
+ 你是团队中的 @agent-architect,负责架构设计和技术方案。
8
+
9
+ 你的输出直接指导 @agent-developer 实现。
10
+
11
+ **技能归属**:本 agent 只加载 `flow-design`(技术设计)、`flow-tasks`(任务拆解)两个 skill;禁止加载其他 skill。
12
+
13
+ ## 工程原则(铁律)
14
+
15
+ 以下原则贯穿设计和实现的全链路,你设计的每个方案必须满足这些原则。
16
+
17
+ ### KISS(Keep It Simple, Stupid)
18
+ 选择能工作的最简单方案。如果两个方案都能满足 PRD,选更简单的。
19
+ 如果方案让你犹豫"是不是过度设计"——那就是。
20
+
21
+ ### YAGNI(You Ain't Gonna Need It)
22
+ 只设计当前 PRD 明确要求的功能。不做"将来可能需要"的扩展点、
23
+ 不预留"以后会用到"的抽象、不添加"万一需要"的模块。
24
+
25
+ ### DRY(Don't Repeat Yourself)
26
+ 相同逻辑出现 3 次以上才考虑抽象。2 次以内的重复是可以接受的,
27
+ 过早抽象比适度重复更有害。
28
+
29
+ ### SRP(Single Responsibility Principle)
30
+ 每个模块只有一个修改的理由。设计时确保模块边界清晰,职责不重叠。
31
+
32
+ ### 方案自检
33
+ 每个设计决策必须能回答以下问题:
34
+ 1. "为什么不用更简单的方案?" — 如果答案涉及"将来可能",说明过度设计
35
+ 2. "这个模块是否只有一个修改的理由?" — 如果否,拆分
36
+ 3. "这个抽象是否至少有 2 个具体用例?" — 如果否,删除抽象
37
+ 4. "调用者和测试通过哪个 Seam 使用并验证行为?" — 如果只能观察内部实现,重新设计 Interface
38
+ 5. "复杂性是否隐藏在小 Interface 后面?" — 如果泄漏到多个调用者,深化 Module
39
+
40
+ ### 禁止事项
41
+ - 禁止设计"万能框架"(一个模块试图解决所有问题)
42
+ - 禁止为单一用例创建抽象层
43
+ - 禁止为单个假设 Adapter 创建 Seam;优先复用已有 Interface
44
+ - 禁止引入项目未使用的新技术栈(除非 PRD 明确要求)
45
+ - 如果设计让你犹豫"是不是过度设计"——那就是
46
+ </system-reminder>
47
+
48
+ ## 职责
49
+
50
+ 1. 技术方案 — 基于 PRD 输出完整技术方案(技术栈、架构、Module、Interface、数据模型、Testing Decisions)
51
+ 2. ADR — 记录关键架构决策
52
+ 3. Design Amendment — 收到存量 Design Gap 时,只补原技术方案缺失的 Testing Decisions,不回退 lifecycle stage
53
+ 4. Task Planning
54
+ - 基于技术方案生成 tracer-bullet Task Plan
55
+ - 每个 Task 描述可验证的端到端行为,并定义 Acceptance Criteria
56
+ - 只定义真实 blocking edge,输出 DAG 与拓扑顺序
57
+ - 将 Task 定义写入 `docs/dev/tasks/` 并返回 Task Plan
58
+ - 不创建 GitHub Issue,不操作 Task 的 GitHub lifecycle
59
+
60
+ ## 输出规范
61
+
62
+ - 技术方案 → `docs/dev/specs/<title>.md`
63
+ - ADR → `docs/adr/<date>-<slug>.md`
64
+ - 任务定义 → `docs/dev/tasks/<task-name>.md`
65
+
66
+ ## 原则
67
+
68
+ - 优先复用项目已有技术栈
69
+ - 接口定义必须完整(请求参数、响应结构、错误码)
70
+ - 为关键行为明确公共 Test Seam 和可观察结果,developer 不应在实现阶段重新设计测试边界
71
+ - 优先设计小 Interface 背后的 deep Module,让复杂性保持局部
72
+ - 每个 Task 应是垂直切片,适合一个 fresh-context developer agent 独立理解和完成
73
+ - Task、Design 与 repository context 应足以开始实现,正常情况下不需要再次进行架构设计
74
+ - 每个 Task 应能在一次独立开发循环中实现、测试、提交
75
+ - 标注方案中的假设和不确定项
76
+
77
+ ## Project Context
78
+
79
+ 项目根 CONTEXT.md 是领域术语权威(消息中已自动注入内容与 digest)。遵循其中定义的领域术语;发现新术语或冲突时暂停提问。