@devcxl/opencode-cabbage 0.3.1 → 1.0.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 (177) hide show
  1. package/README.md +34 -19
  2. package/README.zh.md +34 -19
  3. package/assets/agents/dev-lifecycle.md +60 -41
  4. package/assets/agents/team/architect.md +36 -1
  5. package/assets/agents/team/developer.md +89 -0
  6. package/assets/agents/team/goal-verify.md +5 -1
  7. package/assets/agents/team/reviewer.md +42 -1
  8. package/assets/commands/code.md +3 -2
  9. package/assets/commands/design.md +3 -2
  10. package/assets/commands/release.md +3 -2
  11. package/assets/commands/requirements.md +3 -2
  12. package/assets/commands/review.md +3 -2
  13. package/assets/commands/setup.md +3 -2
  14. package/assets/commands/tasks.md +2 -1
  15. package/assets/prompts/bootstrap.md +9 -8
  16. package/assets/prompts/stage-contract.md +55 -0
  17. package/assets/skills/flow-code/SKILL.md +38 -140
  18. package/assets/skills/flow-design/SKILL.md +33 -74
  19. package/assets/skills/flow-release/SKILL.md +31 -51
  20. package/assets/skills/flow-requirements/SKILL.md +47 -45
  21. package/assets/skills/flow-review/SKILL.md +26 -112
  22. package/assets/skills/flow-setup/SKILL.md +40 -43
  23. package/assets/skills/flow-tasks/SKILL.md +30 -139
  24. package/assets/skills/flow-tdd/SKILL.md +30 -31
  25. package/dist/kernel/caller.d.ts +48 -0
  26. package/dist/kernel/caller.js +88 -0
  27. package/dist/kernel/caller.js.map +1 -0
  28. package/dist/kernel/context.d.ts +27 -0
  29. package/dist/kernel/context.js +73 -0
  30. package/dist/kernel/context.js.map +1 -0
  31. package/dist/kernel/flow.d.ts +166 -0
  32. package/dist/kernel/flow.js +387 -0
  33. package/dist/kernel/flow.js.map +1 -0
  34. package/dist/kernel/legacy.d.ts +19 -0
  35. package/dist/kernel/legacy.js +34 -0
  36. package/dist/kernel/legacy.js.map +1 -0
  37. package/dist/kernel/mutex.d.ts +8 -0
  38. package/dist/kernel/mutex.js +23 -0
  39. package/dist/kernel/mutex.js.map +1 -0
  40. package/dist/kernel/permission.d.ts +21 -0
  41. package/dist/kernel/permission.js +37 -0
  42. package/dist/kernel/permission.js.map +1 -0
  43. package/dist/kernel/profile.d.ts +35 -0
  44. package/dist/kernel/profile.js +144 -0
  45. package/dist/kernel/profile.js.map +1 -0
  46. package/dist/kernel/records.d.ts +87 -0
  47. package/dist/kernel/records.js +197 -0
  48. package/dist/kernel/records.js.map +1 -0
  49. package/dist/kernel/release.d.ts +104 -0
  50. package/dist/kernel/release.js +229 -0
  51. package/dist/kernel/release.js.map +1 -0
  52. package/dist/kernel/review.d.ts +34 -0
  53. package/dist/kernel/review.js +81 -0
  54. package/dist/kernel/review.js.map +1 -0
  55. package/dist/kernel/session-index.d.ts +43 -0
  56. package/dist/kernel/session-index.js +120 -0
  57. package/dist/kernel/session-index.js.map +1 -0
  58. package/dist/kernel/setup.d.ts +70 -0
  59. package/dist/kernel/setup.js +324 -0
  60. package/dist/kernel/setup.js.map +1 -0
  61. package/dist/kernel/slug.d.ts +23 -0
  62. package/dist/kernel/slug.js +67 -0
  63. package/dist/kernel/slug.js.map +1 -0
  64. package/dist/kernel/task.d.ts +208 -0
  65. package/dist/kernel/task.js +788 -0
  66. package/dist/kernel/task.js.map +1 -0
  67. package/dist/{flowrun → kernel/tdd}/adapter.d.ts +1 -1
  68. package/dist/kernel/tdd/adapter.js.map +1 -0
  69. package/dist/{flowrun → kernel/tdd}/digest.d.ts +1 -1
  70. package/dist/kernel/tdd/digest.js.map +1 -0
  71. package/dist/{flowrun → kernel/tdd}/evaluator.d.ts +1 -1
  72. package/dist/kernel/tdd/evaluator.js.map +1 -0
  73. package/dist/kernel/tdd/evidence.d.ts +42 -0
  74. package/dist/kernel/tdd/evidence.js +48 -0
  75. package/dist/kernel/tdd/evidence.js.map +1 -0
  76. package/dist/{flowrun → kernel/tdd}/state.d.ts +1 -1
  77. package/dist/kernel/tdd/state.js.map +1 -0
  78. package/dist/kernel/types.d.ts +180 -0
  79. package/dist/kernel/types.js +2 -0
  80. package/dist/kernel/types.js.map +1 -0
  81. package/dist/kernel/worktree.d.ts +45 -0
  82. package/dist/kernel/worktree.js +127 -0
  83. package/dist/kernel/worktree.js.map +1 -0
  84. package/dist/plugin/agents.d.ts +5 -17
  85. package/dist/plugin/agents.js +0 -23
  86. package/dist/plugin/agents.js.map +1 -1
  87. package/dist/plugin/flow-control.d.ts +80 -0
  88. package/dist/plugin/flow-control.js +254 -0
  89. package/dist/plugin/flow-control.js.map +1 -0
  90. package/dist/plugin/goal.d.ts +7 -46
  91. package/dist/plugin/goal.js +32 -116
  92. package/dist/plugin/goal.js.map +1 -1
  93. package/dist/plugin/prompt-lint.js +78 -5
  94. package/dist/plugin/prompt-lint.js.map +1 -1
  95. package/dist/plugin/release-control.d.ts +37 -0
  96. package/dist/plugin/release-control.js +304 -0
  97. package/dist/plugin/release-control.js.map +1 -0
  98. package/dist/plugin/server.d.ts +19 -0
  99. package/dist/plugin/server.js +147 -302
  100. package/dist/plugin/server.js.map +1 -1
  101. package/dist/plugin/setup-control.d.ts +45 -0
  102. package/dist/plugin/setup-control.js +80 -0
  103. package/dist/plugin/setup-control.js.map +1 -0
  104. package/dist/plugin/shell.d.ts +7 -34
  105. package/dist/plugin/shell.js +12 -137
  106. package/dist/plugin/shell.js.map +1 -1
  107. package/dist/plugin/skills.d.ts +1 -1
  108. package/dist/plugin/skills.js +16 -17
  109. package/dist/plugin/skills.js.map +1 -1
  110. package/dist/plugin/task-control.d.ts +90 -0
  111. package/dist/plugin/task-control.js +201 -0
  112. package/dist/plugin/task-control.js.map +1 -0
  113. package/dist/plugin/tdd-checkpoint.d.ts +118 -0
  114. package/dist/plugin/tdd-checkpoint.js +581 -0
  115. package/dist/plugin/tdd-checkpoint.js.map +1 -0
  116. package/dist/util/paths.d.ts +0 -2
  117. package/dist/util/paths.js +1 -7
  118. package/dist/util/paths.js.map +1 -1
  119. package/package.json +1 -1
  120. package/assets/agents/team/backend.md +0 -66
  121. package/assets/agents/team/frontend.md +0 -63
  122. package/assets/commands/handoff.md +0 -4
  123. package/assets/commands/test.md +0 -4
  124. package/assets/context/CONTEXT.md +0 -40
  125. package/assets/skills/flow-handoff/SKILL.md +0 -76
  126. package/assets/skills/flow-requirements/references/interview-guide.md +0 -35
  127. package/assets/skills/flow-test/SKILL.md +0 -75
  128. package/dist/flowrun/adapter.js.map +0 -1
  129. package/dist/flowrun/audit.d.ts +0 -5
  130. package/dist/flowrun/audit.js +0 -67
  131. package/dist/flowrun/audit.js.map +0 -1
  132. package/dist/flowrun/ci.d.ts +0 -64
  133. package/dist/flowrun/ci.js +0 -184
  134. package/dist/flowrun/ci.js.map +0 -1
  135. package/dist/flowrun/coverage.d.ts +0 -70
  136. package/dist/flowrun/coverage.js +0 -207
  137. package/dist/flowrun/coverage.js.map +0 -1
  138. package/dist/flowrun/digest.js.map +0 -1
  139. package/dist/flowrun/evaluator.js.map +0 -1
  140. package/dist/flowrun/gate.d.ts +0 -28
  141. package/dist/flowrun/gate.js +0 -139
  142. package/dist/flowrun/gate.js.map +0 -1
  143. package/dist/flowrun/github.d.ts +0 -24
  144. package/dist/flowrun/github.js +0 -154
  145. package/dist/flowrun/github.js.map +0 -1
  146. package/dist/flowrun/index.d.ts +0 -14
  147. package/dist/flowrun/index.js +0 -15
  148. package/dist/flowrun/index.js.map +0 -1
  149. package/dist/flowrun/merge.d.ts +0 -57
  150. package/dist/flowrun/merge.js +0 -180
  151. package/dist/flowrun/merge.js.map +0 -1
  152. package/dist/flowrun/migration.d.ts +0 -11
  153. package/dist/flowrun/migration.js +0 -276
  154. package/dist/flowrun/migration.js.map +0 -1
  155. package/dist/flowrun/resilience.d.ts +0 -18
  156. package/dist/flowrun/resilience.js +0 -80
  157. package/dist/flowrun/resilience.js.map +0 -1
  158. package/dist/flowrun/state.js.map +0 -1
  159. package/dist/flowrun/transitions.d.ts +0 -66
  160. package/dist/flowrun/transitions.js +0 -168
  161. package/dist/flowrun/transitions.js.map +0 -1
  162. package/dist/flowrun/types.d.ts +0 -356
  163. package/dist/flowrun/types.js +0 -21
  164. package/dist/flowrun/types.js.map +0 -1
  165. package/dist/flowrun/validator.d.ts +0 -19
  166. package/dist/flowrun/validator.js +0 -209
  167. package/dist/flowrun/validator.js.map +0 -1
  168. package/dist/plugin/broker.d.ts +0 -73
  169. package/dist/plugin/broker.js +0 -140
  170. package/dist/plugin/broker.js.map +0 -1
  171. package/dist/plugin/tdd-tool.d.ts +0 -62
  172. package/dist/plugin/tdd-tool.js +0 -336
  173. package/dist/plugin/tdd-tool.js.map +0 -1
  174. /package/dist/{flowrun → kernel/tdd}/adapter.js +0 -0
  175. /package/dist/{flowrun → kernel/tdd}/digest.js +0 -0
  176. /package/dist/{flowrun → kernel/tdd}/evaluator.js +0 -0
  177. /package/dist/{flowrun → kernel/tdd}/state.js +0 -0
@@ -1,130 +1,44 @@
1
1
  ---
2
2
  name: flow-review
3
- description: 双轴审查(规范 + 规格)→ 自动合并
3
+ description: 双轴审查(规范 + 规格)→ task_control submit-review / merge-task
4
4
  ---
5
5
 
6
6
  # flow-review
7
7
 
8
8
  沿两条轴线审查 PR 代码:规范(是否符合编码标准)和规格(是否实现了原始需求)。
9
+ 审查结果由 primary 通过 `task_control` 提交与合并,reviewer 本身只读。
9
10
 
10
- ## Prerequisites
11
- - PR 已创建
12
- - 可选的 `/test` 已完成
11
+ ## 核心:调用 task_control
13
12
 
14
- ## Workflow
13
+ 1. `task_control{op:"submit-review", pr_number, verdict:"approve"|"request-changes", ...}` — 发布审查结果
14
+ 2. `task_control{op:"merge-task", pr_number, ...}` — 合并(CI + 分支保护 + 风险分级 + 高风险人类 approval)
15
+ 3. `task_control{op:"status-task", task_id}` — 查看 Task/PR 状态
15
16
 
16
- ### 1. 获取审查材料
17
- ```bash
18
- gh pr diff <pr-number>
19
- gh pr view <pr-number> --json title,body,files
20
- ```
17
+ reviewer 只读:不直接 `gh pr review` / `gh pr merge`(写操作由 primary 经 task_control 执行)。
21
18
 
22
- ### 2. 阅读约束来源
23
- - 检查相关 ADR(`docs/adr/`)— 确认代码是否遵循架构决策
24
- - 确认规格来源:commit 消息中的 Issue 引用或 `docs/prd/` / `docs/dev/specs/`
25
-
26
- ### 3. 文档同步确认
27
- 确认 PR 中是否包含文档同步:
28
- - 检查 PR body 是否列出已同步的文档
29
- - 检查 `docs/guides/` 和 `docs/dev/guides/` 是否有相应变更
30
- - 如涉及配置/API 变更但文档未同步 → 标记为阻断性问题
31
-
32
- ### 4. 双轴审查
33
- 并行检查两个维度:
19
+ ## 双轴审查
34
20
 
35
21
  **规范轴(Normative)** — 代码是否符合文档化的编码标准?
36
22
  参考 `references/smell-baseline.md` 中的代码气味基线。
37
23
 
38
24
  **规格轴(Specification)** — 代码是否忠实实现了需求?
39
25
  对照 PRD(`docs/prd/`)和设计方案(`docs/dev/specs/`)验证。
40
- - 如发现实现与设计偏差 → 追加到 `docs/dev/changelog/<YYYY-MM-DD-NNN-slug>.md`
26
+ - 如发现实现与设计偏差 → 追加到 changelog
41
27
 
42
28
  **TDD Criterion Coverage** — 检查 Task 的 `acceptance_criteria` 是否被 PR 覆盖:
43
29
  - 对照 Task frontmatter 中的 `acceptance` 数组,逐条核查
44
30
  - 检查 PR 是否包含每条 criterion 对应的测试或验证
45
31
  - 检查 `tdd` 配置块中的 `mode` 和 `min_cycles` 是否被遵循
46
- - **明确不检查 commit order** — TDD cycle 的 RED→GREEN 顺序是编码过程约束,
47
- reviewer 不审查 commit 历史是否呈现 RED-first 模式
48
-
49
- ### 5. 合并前检查
50
- 在合并前确认以下项:
51
- - 文档同步已完成(`docs/guides/` 已更新或无需更新)
52
- - changelog 已记录偏差(如有)
53
- - CI 已通过
54
-
55
- ### 6. 发表审查意见
56
- 发现阻断性问题:
57
- ```bash
58
- gh pr review <pr-number> --request-changes --body "..."
59
- ```
60
- 无问题或非阻断性建议:
61
- ```bash
62
- gh pr review <pr-number> --approve --body "..."
63
- ```
64
-
65
- ### 7. 等待 CI + 自动合并
66
- ```bash
67
- gh pr checks <pr-number> --watch
68
- gh pr merge <pr-number> --squash --delete-branch
69
- ```
70
-
71
- ### 8. 关闭关联 Sub Issue
72
- 如果 PR body 未包含 `Closes #<num>`(或 PR 合并后 GitHub 未自动关闭),手动关闭:
73
- ```bash
74
- gh issue close <issue-num> --comment "已完成,已合并至 main"
75
- ```
76
-
77
- ### 9. 清理 Worktree
78
- PR 合并后,安全清理对应的 worktree 和分支:
79
-
80
- ```bash
81
- WORKTREE=".worktree/<task-slug>"
82
- BRANCH="feat/<task-slug>"
83
-
84
- # Preflight 检查
85
- echo "=== Worktree 清理 Preflight ==="
86
-
87
- # 1. 确认 PR 已合并
88
- PR_NUM=<pr-number>
89
- if ! gh pr view "$PR_NUM" --json merged --jq '.merged' 2>/dev/null | grep -q true; then
90
- echo "ERROR: PR #$PR_NUM 未合并,跳过清理"
91
- exit 1
92
- fi
93
-
94
- # 2. 确认分支已推送到远程
95
- if git ls-remote --exit-code origin "$BRANCH" >/dev/null 2>&1; then
96
- echo "分支 $BRANCH 已推送到远程"
97
- else
98
- echo "WARNING: 分支 $BRANCH 未推送到远程,但 PR 已合并,继续清理"
99
- fi
100
-
101
- # 3. 检查 worktree 是否干净
102
- if [ -d "$WORKTREE" ]; then
103
- DIRTY=$(git -C "$WORKTREE" status --porcelain)
104
- if [ -n "$DIRTY" ]; then
105
- echo "WARNING: Worktree 有未提交变更:"
106
- echo "$DIRTY"
107
- echo "暂停。如需强制清理请手动执行 --force"
108
- exit 1
109
- fi
110
-
111
- # 4. 全部通过 → 清理
112
- git worktree remove "$WORKTREE"
113
- git branch -D "$BRANCH" 2>/dev/null || true
114
- echo "Worktree 已清理:$WORKTREE"
115
- else
116
- echo "Worktree 不存在,跳过清理"
117
- fi
118
- ```
119
-
120
- > 清理前必须验证 PR 已合并、worktree 干净。只有在所有 preflight 检查通过后才删除。
121
- > 如果 PR 已合并但 worktree 仍有未提交变更,暂停并通知用户,不自动 --force。
32
+ - **明确不检查 commit order** — RED→GREEN 顺序是编码过程约束,reviewer 不审查 commit 历史
33
+
34
+ ## 审查材料获取
35
+
36
+ 代码审查必须在本地分支/worktree 中进行,禁止通过 WebFetch 或浏览器访问远程 PR 页面获取代码。
122
37
 
123
38
  ## Output
124
- - PR 已审查
125
- - PR 已合并(条件满足时)
126
- - 关联 Sub Issue 已关闭
127
- - changelog 已记录偏差(如有)
39
+ - 结构化审查报告(APPROVED / CHANGES_REQUESTED)
40
+ - PR 已合并(task_control merge-task,条件满足时)
41
+ - Worktree 已清理(task_control merge-task 后 preflight 销毁)
128
42
 
129
43
  ## 后续
130
44
  - **/release** — 发布(如所有 PR 已合并)
@@ -135,26 +49,25 @@ fi
135
49
  由 `/review` 命令或 `@dev-lifecycle` Phase 3 审查步骤触发。
136
50
 
137
51
  ### Inputs
138
- - PR 编号(来源:`/code` 产出)
52
+ - PR 编号与 Task Record(来源:`/code` 产出)
139
53
 
140
54
  ### Preconditions
141
55
  - `/code` 已完成 → PR 已创建
142
56
 
143
57
  ### Procedure
144
- 1. 获取 PR diff 和元数据
145
- 2. 双轴审查(规范轴 + 规格轴)
58
+ 1. 在本地 worktree/分支获取 PR diff 与元数据
59
+ 2. 双轴审查(规范轴 + 规格轴)+ TDD criterion coverage
146
60
  3. 输出结构化审查报告
147
- 4. 编排器发布审查结果
148
- 5. 等待 CI 通过后合并
149
- 6. 关闭关联 Sub Issue
150
- 7. 安全清理 Worktree(Preflight)
61
+ 4. primary 调用 `task_control{op:"submit-review"}` 发布结果
62
+ 5. CI 通过后 `task_control{op:"merge-task"}` 合并(工具执行清理)
151
63
 
152
64
  ### Outputs
153
65
  - 结构化审查报告(APPROVED / CHANGES_REQUESTED)
154
66
  - PR 已合并(条件满足时)
67
+ - Worktree 已清理
155
68
 
156
69
  ### Failure
157
- - Critical/High → Request Changes
70
+ - Critical/High → request-changes
158
71
  - Worktree 清理失败 → 记录警告,不阻塞
159
72
 
160
73
  ### Idempotency
@@ -162,5 +75,6 @@ fi
162
75
  - 已审查的 PR → 更新结论
163
76
 
164
77
  ### Prohibited Actions
78
+ - **禁止使用 WebFetch 或任何 Web 工具获取远程 PR 代码** — 审查代码时必须本地读取源码文件
79
+ - reviewer 不直接执行 `gh pr review` / `gh pr merge`(由 task_control 完成)
165
80
  - 不使用默认 --force 清理
166
- - 不直接执行 gh pr merge(Orchestrator 执行)
@@ -1,46 +1,42 @@
1
1
  ---
2
2
  name: flow-setup
3
- description: 初始化项目文档结构,验证开发环境
3
+ description: 初始化 — 探测环境 → 生成 workflow → 确认 Profile
4
4
  ---
5
5
 
6
6
  # flow-setup
7
7
 
8
- 初始化项目文档结构,验证开发环境。
8
+ 初始化阶段:探测开发环境、生成缺失的 CI/release workflow、确认 AGENTS.md Project Profile。
9
+ 所有探测与写入由内核工具 `setup_control` 完成,本 skill 只定义流程,不复制工具实现。
9
10
 
10
- ## Workflow
11
+ ## 核心:调用 setup_control
11
12
 
12
- ### 1. 创建文档目录
13
- 确保以下目录结构存在:
14
- ```
15
- docs/
16
- ├── prd/ # 产品需求文档
17
- ├── adr/ # 架构决策记录
18
- └── dev/
19
- ├── specs/ # 技术方案
20
- ├── tasks/ # DAG 任务定义
21
- ├── api/ # API 设计文档
22
- ├── db/ # 数据库设计
23
- ├── guides/ # 开发指南
24
- └── handoff/ # 上下文交接
25
- ```
13
+ 调用 `setup_control` 完成三个阶段:
26
14
 
27
- ### 2. 验证环境
28
- ```bash
29
- gh auth status
30
- git remote get-url origin
31
- ```
32
- 确保 gh CLI 已认证、项目已关联 GitHub 远程。
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
33
18
 
34
- ### 3. 完成标记
35
- ```bash
36
- mkdir -p .opencode/opencode-cabbage
37
- echo "setup-complete" > .opencode/opencode-cabbage/setup-complete
19
+ Profile 区块格式(内核解析白名单,§9.1):
20
+
21
+ ```markdown
22
+ ## Project Profile
23
+
24
+ - test command: `npm test -- run`
25
+ - test file patterns: `test/**/*.test.ts`
26
+ - implementation file patterns: `src/**/*.ts`
27
+ - tdd default mode: `strict`
28
+ - version bump rule: `breaking→major, feature→minor, fix→patch`
29
+ - version file: `package.json`
30
+ - tag format: `v{version}`
31
+ - release workflow: `.github/workflows/release.yml`
38
32
  ```
39
33
 
34
+ 未确认 Profile 时 `flow_control{op:"create-flow"}` 会阻断并提示先执行 `/setup`。
35
+
40
36
  ## Output
41
- - `docs/` 目录已就绪
42
- - 开发环境已验证
43
- - 可开始 `/requirements`
37
+ - readiness 报告(development-ready / release-ready 逐项布尔)
38
+ - `.github/workflows/` 草案(缺失时,经 Setup PR 人工合入)
39
+ - 根 AGENTS.md `## Project Profile` 区块
44
40
 
45
41
  ## Contract
46
42
 
@@ -48,28 +44,29 @@ echo "setup-complete" > .opencode/opencode-cabbage/setup-complete
48
44
  由 `/setup` 命令触发。首次使用插件或切换新项目时执行。
49
45
 
50
46
  ### Inputs
51
- 无外部输入。从当前工作目录检测项目状态。
47
+ - 用户对 readiness 报告 / Profile 覆盖项的确认
52
48
 
53
49
  ### Preconditions
54
- 无。不要求任何前置阶段。
50
+ - gh CLI 已认证(宿主 `gh auth`)
55
51
 
56
52
  ### Procedure
57
- 1. 创建 docs 目录结构
58
- 2. 验证 gh CLI 和 GitHub 远程
59
- 3. 写入完成标记
53
+ 1. 调用 `setup_control{op:"probe"}` 读取 readiness 报告
54
+ 2. 缺失 workflow 时调用 `setup_control{op:"generate-workflows"}` 生成草案
55
+ 3. 用户确认后调用 `setup_control{op:"confirm-profile"}` 写入 Profile
60
56
 
61
57
  ### Outputs
62
- - `docs/` 目录树(prd, adr, dev/specs, dev/tasks, dev/api, dev/db, dev/guides, dev/handoff)
63
- - `.opencode/opencode-cabbage/setup-complete` 标记文件
58
+ - readiness 报告
59
+ - workflow 草案(可选)
60
+ - 根 AGENTS.md Profile 区块
64
61
 
65
62
  ### Failure
66
- - 目录创建失败 → 报告错误并退出
67
- - gh auth 失败 → 提示用户执行 `gh auth login`
63
+ - gh auth 失败 → 提示用户执行 `gh auth login` 后重试
64
+ - workflow 生成失败 → 报告错误并停止
68
65
 
69
66
  ### Idempotency
70
- - 已存在的目录跳过
71
- - 已存在 `setup-complete` 标记则跳过全部步骤
67
+ - Profile 已确认 → 重复 confirm 覆盖写入(工具内读后写)
68
+ - workflow 已存在 → 跳过生成
72
69
 
73
70
  ### Prohibited Actions
74
- - 不删除已有目录或文件
75
- - 不修改项目代码
71
+ - 不手工编辑 AGENTS.md Profile 区块(由 setup_control 写回)
72
+ - 不直接 push 或创建 Setup PR(工具内部执行)
@@ -1,151 +1,43 @@
1
1
  ---
2
2
  name: flow-tasks
3
- description: DAG 任务拆解 → Sub Issues 创建
3
+ description: DAG 任务拆解 → Task Record(task_control)
4
4
  ---
5
5
 
6
6
  # flow-tasks
7
7
 
8
- 将设计方案拆解为 DAG(有向无环图)任务,创建 GitHub Sub Issues。
8
+ 将设计方案拆解为 DAG(有向无环图)任务,并用 `task_control{op:"create-task"}` 创建 Task Record(GitHub Sub Issue)。
9
9
 
10
- ## Prerequisites
11
- - `/design` 已完成 → `docs/dev/specs/<title>.md` 存在
12
- - Parent GitHub Issue 存在
10
+ ## 核心:调用 task_control
13
11
 
14
- ## Workflow
12
+ `task_control{op:"create-task", title:"<英文功能标题>", acceptance_criteria:"<JSON>", ...}` 创建 Sub Issue。
13
+ 内核负责 slug 派生与校验、标题规范(R3)、关联 Parent Issue——创建动作全部收敛到工具内。
15
14
 
16
- ### 1. DAG 拆解
17
- 将设计拆解为最小可执行单元,识别并行/串行关系。
15
+ ## DAG 拆解
18
16
 
19
- 拆解原则:
20
- - 每个任务应在 1-2 小时内完成实现
21
- - 无依赖的任务标记为可并行
22
- - 任务粒度以"一个人可独立完成"为标准
17
+ #### 拆解前自检
23
18
 
24
- DAG 使用 Mermaid 语法绘制,示例:
19
+ 1. **能否用一个任务完成?** — 如果功能足够内聚,不强拆多个任务
20
+ 2. **拆开后能否独立验证?** — 每个任务必须有独立的验收标准
21
+ 3. **拆开后耦合是否最低?** — 两个任务共享大量数据结构/模块 → 合并
25
22
 
26
- ```mermaid
27
- graph TD
28
- A["Task A(无依赖)"] --> B["Task B(依赖 A)"]
29
- A --> C["Task C(依赖 A)"]
30
- D["Task D(无依赖)"]
31
- ```
23
+ #### 反模式
32
24
 
33
- 保存为 `docs/dev/tasks/<YYYY-MM-DD-NNN-slug>/DAG.md`。
25
+ | 反模式 | 示例 | 正确做法 |
26
+ |--------|------|----------|
27
+ | 技术分层拆分 | "建表任务" → "DAO 任务" → "Service 任务" | 垂直切片:一个任务包含完整链路 |
28
+ | 过度拆分 | 一个 CRUD 拆成四个任务 | 一个 CRUD 就是一个任务 |
29
+ | 预留式拆分 | "先搭框架,后面任务再填内容" | 不要有空壳任务 |
34
30
 
35
- ### 2. 创建任务文件
36
- 每个任务 `docs/dev/tasks/<task-name>.md`:
31
+ DAG 使用 Mermaid 语法绘制,保存为 `docs/dev/tasks/<YYYY-MM-DD-NNN-slug>/DAG.md`。
37
32
 
38
- ```markdown
39
- ---
40
- name: "<task-name>"
41
- depends_on: ["<前置任务>"]
42
- labels: ["backend"]
43
- worktree_root: ".worktree/<task-name>/"
44
- test_commands:
45
- - "npm test -- <test-file>"
46
- - "npm run typecheck"
47
- verify_commands:
48
- - "npm run lint"
49
- tdd:
50
- mode: strict
51
- min_cycles: 1
52
- acceptance:
53
- - criteria: "<验收标准描述>"
54
- verification_type: test | manual | lint
55
- test_command: "<关联的测试命令>"
56
- - criteria: "<另一条验收标准>"
57
- verification_type: test
58
- test_command: "npm test -- <other-test>"
59
- ---
60
- ```
61
-
62
- Task frontmatter 新增字段说明:
63
-
64
- | 字段 | 类型 | 说明 |
65
- |------|------|------|
66
- | `test_commands` | `string[]` | TDD cycle 中运行的测试命令列表 |
67
- | `verify_commands` | `string[]` | final-verification 阶段运行的验证命令 |
68
- | `tdd.mode` | `"strict" \| "advisory"` | TDD 模式,默认 `strict` |
69
- | `tdd.min_cycles` | `number` | 最少 RED→GREEN cycle 数量,默认 `1` |
70
- | `acceptance` | `object[]` | 结构化验收标准列表 |
71
- | `acceptance[].criteria` | `string` | 验收标准描述 |
72
- | `acceptance[].verification_type` | `"test" \| "manual" \| "lint"` | 验证方式 |
73
- | `acceptance[].test_command` | `string` | 关联的测试命令(verification_type 为 test 时必填) |
74
-
75
- `tdd` 配置块为 `flow-tdd` skill 提供运行时参数。模式默认 `strict`,
76
- 表示 Agent 必须遵循 RED→GREEN→final-regression→final-verification 完整流程。
77
-
78
- ## 目标
79
-
80
- ## 实现要点
81
-
82
- ## 验收标准
83
-
84
- 验收标准以结构化 `acceptance` 数组形式定义在 frontmatter 中(见上方模板)。
85
- 每条标准包含 `criteria`(描述)、`verification_type`(验证方式)和 `test_command`(关联命令)。
86
- `flow-tdd` skill 在 final-verification 阶段逐条核验这些标准。
87
-
88
- ## TDD 集成
89
-
90
- 本 skill 生成的 `test_commands`、`verify_commands`、`tdd` 配置块和 `acceptance_criteria`
91
- 是 `flow-tdd` skill 的输入。`flow-tdd` 根据这些字段执行 RED→GREEN cycle、
92
- final-regression 和 final-verification。
93
-
94
- ## Worktree
95
- - 路径: `.worktree/<task-name>/`
96
- - 分支: `feat/<task-name>`
97
- - 创建时机: `/code` 阶段首次执行时自动创建
98
- - 清理时机: PR 合并后自动删除
99
- ```
100
-
101
- ### 3. 创建 Sub Issues
102
-
103
- ```bash
104
- mkdir -p docs/dev/handoff
105
- cat > docs/dev/handoff/task-issue-body.md << 'EOF'
106
- ## 依赖
107
- 前置任务: <列表>
108
-
109
- ## Worktree
110
- - 路径: `.worktree/<task-name>/`
111
- - 分支: `feat/<task-name>`
112
-
113
- ## 描述
114
- ...
115
- EOF
116
- gh issue create \
117
- --title "<task-name>" \
118
- --label "task" \
119
- --parent <parent-number> \
120
- --body-file docs/dev/handoff/task-issue-body.md
121
- ```
122
-
123
- ### 4. 提交任务文件
124
- 任务定义文件通过 Planning PR 合入默认分支:
125
-
126
- ```bash
127
- # 探测默认分支
128
- BASE=$(gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name' 2>/dev/null || echo "main")
129
-
130
- git checkout -b chore/plan-tasks-<slug> $BASE
131
- git add docs/dev/tasks/<YYYY-MM-DD-NNN-slug>/
132
- git commit -m "docs: <title> — 任务定义"
133
- git push origin chore/plan-tasks-<slug>
134
- gh pr create --title "docs: <title> — 任务定义" --base $BASE
135
- ```
33
+ ## 任务定义文件
34
+
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)。
136
37
 
137
38
  ## Output
138
39
  - `docs/dev/tasks/*.md` — 独立任务文件
139
- - GitHub Sub Issues 已创建(依赖关系在 body 中声明)
140
- - 任务文件通过 Planning PR 合入默认分支
141
-
142
- ## Sub Issue 关闭时机
143
- Sub Issue 不在 `/tasks` 阶段关闭,而是在对应 PR 合并后自动关闭:
144
-
145
- | 阶段 | 动作 |
146
- |------|------|
147
- | `/code` | PR body 含 `Closes #<issue-num>`,合并后 GitHub 自动关闭 |
148
- | `/review` | 如 PR 未自动关闭 Sub Issue,reviewer 手动 `gh issue close <num>` |
40
+ - GitHub Sub Issues(由 task_control 创建,依赖关系在 body 中声明)
149
41
 
150
42
  ## 后续
151
43
  - **/code** — 认领 Sub Issue 开始编码
@@ -157,20 +49,18 @@ Sub Issue 不在 `/tasks` 阶段关闭,而是在对应 PR 合并后自动关
157
49
 
158
50
  ### Inputs
159
51
  - `docs/dev/specs/<title>.md` — 技术方案
160
- - Parent Issue 编号
52
+ - Flow Record 编号
161
53
 
162
54
  ### Preconditions
163
- - `/design` 已完成 → 技术方案和 ADR 存在
55
+ - `/design` 已完成 → 技术方案和 ADR 存在(Planning Baseline 已合入)
164
56
 
165
57
  ### Procedure
166
- 1. 基于技术方案拆解 DAG
167
- 2. 创建 Task Manifest (`manifest.yaml`) 和任务文件
168
- 3. 为每个任务创建 GitHub Sub Issue
169
- 4. 通过 Planning PR 提交任务文件
58
+ 1. 基于技术方案拆解 DAG(Mermaid 图 + 任务文件)
59
+ 2. 为每个任务调用 `task_control{op:"create-task"}` 创建 Sub Issue
60
+ 3. 任务文件随 Planning PR 合入默认分支
170
61
 
171
62
  ### Outputs
172
- - `docs/dev/tasks/<feature-slug>/manifest.yaml` — 任务清单
173
- - `docs/dev/tasks/<feature-slug>/*.md` — 任务文件
63
+ - `docs/dev/tasks/<feature-slug>/` — DAG 与任务文件
174
64
  - GitHub Sub Issues(含依赖声明)
175
65
 
176
66
  ### Failure
@@ -179,8 +69,9 @@ Sub Issue 不在 `/tasks` 阶段关闭,而是在对应 PR 合并后自动关
179
69
 
180
70
  ### Idempotency
181
71
  - 任务文件已存在 → 读取并更新
182
- - Sub Issue 已创建 → 更新而非重复创建
72
+ - Sub Issue 已创建 → 内核检测同名冲突(未合并分支/worktree)并拒绝
183
73
 
184
74
  ### Prohibited Actions
185
75
  - 不跳过 DAG 依赖检查
76
+ - 不绕过 task_control 手工创建 Sub Issue(由 create-task 完成)
186
77
  - 不直接 push 到默认分支
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: flow-tdd
3
- description: TDD Prompt 协议 — Phase A Advisory 层,定义 RED→GREEN self-reported 流程
3
+ description: TDD Prompt 协议 — RED→GREEN 状态机 + tdd_checkpoint Runtime 证据
4
4
  ---
5
5
 
6
6
  # flow-tdd
@@ -10,7 +10,7 @@ TDD(Test-Driven Development)Prompt 协议,为所有编码阶段提供统
10
10
 
11
11
  ## Advisory Procedure
12
12
 
13
- Phase A Advisory 层协议:Agent 自行遵循 TDD 流程并 self-report 状态,无需工具拦截。
13
+ Agent 自行遵循 TDD 流程并 self-report 状态。每个 stage 同时通过 `tdd_checkpoint` 提交证据。
14
14
 
15
15
  ### Cycle 状态机
16
16
 
@@ -64,7 +64,7 @@ Phase A Advisory 层协议:Agent 自行遵循 TDD 流程并 self-report 状态
64
64
 
65
65
  **约束:**
66
66
  - 测试必须有明确的 fail/pass 边界
67
- - 测试运行命令必须与 `test_commands` 中定义的一致
67
+ - 测试运行命令必须与 Task 的 `test_commands` 中定义的一致
68
68
  - 记录测试失败输出作为 RED evidence
69
69
 
70
70
  **self-report 格式:**
@@ -119,7 +119,7 @@ Phase A Advisory 层协议:Agent 自行遵循 TDD 流程并 self-report 状态
119
119
  所有 cycle 完成后,运行项目全部测试套件,确认无回归。
120
120
 
121
121
  **约束:**
122
- - 必须运行 `test_commands` 中定义的全部命令
122
+ - 必须运行 Task `test_commands` 中定义的全部命令
123
123
  - 所有测试必须通过
124
124
  - 如有失败 → 修复(不要求新 cycle,但需记录修复内容)
125
125
 
@@ -145,21 +145,19 @@ Phase A Advisory 层协议:Agent 自行遵循 TDD 流程并 self-report 状态
145
145
 
146
146
  ## Runtime Procedure
147
147
 
148
- > **Phase C 启用** — 以下为 Runtime Enforcement 协议占位,当前阶段不生效。
149
- >
150
- > Phase C 将引入 `tdd_checkpoint` 工具在运行时拦截 RED/GREEN 状态切换,
151
- > 并将 evidence 写入 FlowRun 存储。Agent 不直接调用这些工具的时机和方式
152
- > 由 Phase C 的 `tdd_checkpoint` 工具实现决定。
153
-
154
- <!--
155
- Phase C 启用后的 Runtime Procedure:
156
- 1. cycle-start → tdd_checkpoint({ stage: "cycle-start", task_id })
157
- 2. red → tdd_checkpoint({ stage: "red", evidence: test_output, task_id })
158
- 3. green → tdd_checkpoint({ stage: "green", evidence: test_output, task_id })
159
- 4. abandon-cycle → tdd_checkpoint({ stage: "abandon-cycle", reason, task_id })
160
- 5. final-regression → tdd_checkpoint({ stage: "final-regression", evidence: full_test_output, task_id })
161
- 6. final-verification → tdd_checkpoint({ stage: "final-verification", evidence: criteria_checklist, task_id })
162
- -->
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`)。
163
161
 
164
162
  ## Contract
165
163
 
@@ -167,27 +165,27 @@ Phase C 启用后的 Runtime Procedure:
167
165
  由编码阶段(`flow-code`)自动触发。Agent 在开始编码任务时加载 `flow-tdd` skill 获取 TDD 流程约束。
168
166
 
169
167
  ### Inputs
170
- - Task 定义中的 `acceptance_criteria`(来源:`flow-tasks` 产出)
171
- - Task 定义中的 `test_commands`(来源:`flow-tasks` 产出)
172
- - Task 定义中的 `verify_commands`(来源:`flow-tasks` 产出)
173
- - Task 定义中的 `tdd` 配置块 — `mode`(`strict`/`advisory`)、`min_cycles`(来源:`flow-tasks` 产出)
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` 产出)
174
172
 
175
173
  ### Preconditions
176
- - Task 文件存在,包含 `acceptance_criteria`、`test_commands`、`tdd` 配置块
177
- - 测试运行环境就绪(`npm install` 已完成)
174
+ - Task Record 存在,包含 `acceptance_criteria`、`test_commands`、`tdd` 配置块
175
+ - 测试运行环境就绪(worktree 内依赖已安装)
178
176
 
179
177
  ### Procedure
180
178
  1. 读取 Task 的 `acceptance_criteria`、`test_commands`、`verify_commands`
181
- 2. **Advisory Mode**:为每个验收标准识别对应的测试用例
182
- 3. 执行 `cycle-start` → 声明当前 cycle 目标
183
- 4. 执行 `red` → 编写测试,验证失败
184
- 5. 执行 `green` → 最小实现,验证通过
179
+ 2. 为每个验收标准识别对应的测试用例
180
+ 3. 执行 `cycle-start` → 声明当前 cycle 目标并调用 tdd_checkpoint
181
+ 4. 执行 `red` → 编写测试,验证失败,提交 evidence
182
+ 5. 执行 `green` → 最小实现,验证通过,提交 evidence
185
183
  6. 重复 cycle 直到所有 criterion 覆盖
186
184
  7. 执行 `final-regression` → 运行全部测试
187
185
  8. 执行 `final-verification` → 逐条对照 acceptance_criteria
188
186
 
189
187
  ### Outputs
190
- - 每个 cycle 的 self-report(提交到 commit message 或 PR body)
188
+ - 每个 cycle 的 self-report + tdd_checkpoint evidence(Task Record 评论)
191
189
  - `final-regression` 报告(测试通过/失败统计)
192
190
  - `final-verification` 报告(criterion 覆盖情况)
193
191
 
@@ -205,4 +203,5 @@ Phase C 启用后的 Runtime Procedure:
205
203
  - 不跳过 RED 阶段直接进入 GREEN
206
204
  - 不跳过 final-regression 直接 commit
207
205
  - 不在 abandon-cycle 后保留修改
208
- - 不修改 `tdd` 配置块中的 `mode` 和 `min_cycles` 值
206
+ - 不修改 Task `tdd` 配置块中的 `mode` 和 `min_cycles` 值
207
+ - 不伪造/内联 tdd_checkpoint evidence(工具亲自执行测试)