@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.
- package/README.md +34 -19
- package/README.zh.md +34 -19
- package/assets/agents/dev-lifecycle.md +60 -41
- package/assets/agents/team/architect.md +36 -1
- package/assets/agents/team/developer.md +89 -0
- package/assets/agents/team/goal-verify.md +5 -1
- package/assets/agents/team/reviewer.md +42 -1
- package/assets/commands/code.md +3 -2
- package/assets/commands/design.md +3 -2
- package/assets/commands/release.md +3 -2
- package/assets/commands/requirements.md +3 -2
- package/assets/commands/review.md +3 -2
- package/assets/commands/setup.md +3 -2
- package/assets/commands/tasks.md +2 -1
- package/assets/prompts/bootstrap.md +9 -8
- package/assets/prompts/stage-contract.md +55 -0
- package/assets/skills/flow-code/SKILL.md +38 -140
- package/assets/skills/flow-design/SKILL.md +33 -74
- package/assets/skills/flow-release/SKILL.md +31 -51
- package/assets/skills/flow-requirements/SKILL.md +47 -45
- package/assets/skills/flow-review/SKILL.md +26 -112
- package/assets/skills/flow-setup/SKILL.md +40 -43
- package/assets/skills/flow-tasks/SKILL.md +30 -139
- package/assets/skills/flow-tdd/SKILL.md +30 -31
- package/dist/kernel/caller.d.ts +48 -0
- package/dist/kernel/caller.js +88 -0
- package/dist/kernel/caller.js.map +1 -0
- package/dist/kernel/context.d.ts +27 -0
- package/dist/kernel/context.js +73 -0
- package/dist/kernel/context.js.map +1 -0
- package/dist/kernel/flow.d.ts +166 -0
- package/dist/kernel/flow.js +387 -0
- package/dist/kernel/flow.js.map +1 -0
- package/dist/kernel/legacy.d.ts +19 -0
- package/dist/kernel/legacy.js +34 -0
- package/dist/kernel/legacy.js.map +1 -0
- package/dist/kernel/mutex.d.ts +8 -0
- package/dist/kernel/mutex.js +23 -0
- package/dist/kernel/mutex.js.map +1 -0
- package/dist/kernel/permission.d.ts +21 -0
- package/dist/kernel/permission.js +37 -0
- package/dist/kernel/permission.js.map +1 -0
- package/dist/kernel/profile.d.ts +35 -0
- package/dist/kernel/profile.js +144 -0
- package/dist/kernel/profile.js.map +1 -0
- package/dist/kernel/records.d.ts +87 -0
- package/dist/kernel/records.js +197 -0
- package/dist/kernel/records.js.map +1 -0
- package/dist/kernel/release.d.ts +104 -0
- package/dist/kernel/release.js +229 -0
- package/dist/kernel/release.js.map +1 -0
- package/dist/kernel/review.d.ts +34 -0
- package/dist/kernel/review.js +81 -0
- package/dist/kernel/review.js.map +1 -0
- package/dist/kernel/session-index.d.ts +43 -0
- package/dist/kernel/session-index.js +120 -0
- package/dist/kernel/session-index.js.map +1 -0
- package/dist/kernel/setup.d.ts +70 -0
- package/dist/kernel/setup.js +324 -0
- package/dist/kernel/setup.js.map +1 -0
- package/dist/kernel/slug.d.ts +23 -0
- package/dist/kernel/slug.js +67 -0
- package/dist/kernel/slug.js.map +1 -0
- package/dist/kernel/task.d.ts +208 -0
- package/dist/kernel/task.js +788 -0
- package/dist/kernel/task.js.map +1 -0
- package/dist/{flowrun → kernel/tdd}/adapter.d.ts +1 -1
- package/dist/kernel/tdd/adapter.js.map +1 -0
- package/dist/{flowrun → kernel/tdd}/digest.d.ts +1 -1
- package/dist/kernel/tdd/digest.js.map +1 -0
- package/dist/{flowrun → kernel/tdd}/evaluator.d.ts +1 -1
- package/dist/kernel/tdd/evaluator.js.map +1 -0
- package/dist/kernel/tdd/evidence.d.ts +42 -0
- package/dist/kernel/tdd/evidence.js +48 -0
- package/dist/kernel/tdd/evidence.js.map +1 -0
- package/dist/{flowrun → kernel/tdd}/state.d.ts +1 -1
- package/dist/kernel/tdd/state.js.map +1 -0
- package/dist/kernel/types.d.ts +180 -0
- package/dist/kernel/types.js +2 -0
- package/dist/kernel/types.js.map +1 -0
- package/dist/kernel/worktree.d.ts +45 -0
- package/dist/kernel/worktree.js +127 -0
- package/dist/kernel/worktree.js.map +1 -0
- package/dist/plugin/agents.d.ts +5 -17
- package/dist/plugin/agents.js +0 -23
- package/dist/plugin/agents.js.map +1 -1
- package/dist/plugin/flow-control.d.ts +80 -0
- package/dist/plugin/flow-control.js +254 -0
- package/dist/plugin/flow-control.js.map +1 -0
- package/dist/plugin/goal.d.ts +7 -46
- package/dist/plugin/goal.js +32 -116
- package/dist/plugin/goal.js.map +1 -1
- package/dist/plugin/prompt-lint.js +78 -5
- package/dist/plugin/prompt-lint.js.map +1 -1
- package/dist/plugin/release-control.d.ts +37 -0
- package/dist/plugin/release-control.js +304 -0
- package/dist/plugin/release-control.js.map +1 -0
- package/dist/plugin/server.d.ts +19 -0
- package/dist/plugin/server.js +147 -302
- package/dist/plugin/server.js.map +1 -1
- package/dist/plugin/setup-control.d.ts +45 -0
- package/dist/plugin/setup-control.js +80 -0
- package/dist/plugin/setup-control.js.map +1 -0
- package/dist/plugin/shell.d.ts +7 -34
- package/dist/plugin/shell.js +12 -137
- package/dist/plugin/shell.js.map +1 -1
- package/dist/plugin/skills.d.ts +1 -1
- package/dist/plugin/skills.js +16 -17
- package/dist/plugin/skills.js.map +1 -1
- package/dist/plugin/task-control.d.ts +90 -0
- package/dist/plugin/task-control.js +201 -0
- package/dist/plugin/task-control.js.map +1 -0
- package/dist/plugin/tdd-checkpoint.d.ts +118 -0
- package/dist/plugin/tdd-checkpoint.js +581 -0
- package/dist/plugin/tdd-checkpoint.js.map +1 -0
- package/dist/util/paths.d.ts +0 -2
- package/dist/util/paths.js +1 -7
- package/dist/util/paths.js.map +1 -1
- package/package.json +1 -1
- package/assets/agents/team/backend.md +0 -66
- package/assets/agents/team/frontend.md +0 -63
- package/assets/commands/handoff.md +0 -4
- package/assets/commands/test.md +0 -4
- package/assets/context/CONTEXT.md +0 -40
- package/assets/skills/flow-handoff/SKILL.md +0 -76
- package/assets/skills/flow-requirements/references/interview-guide.md +0 -35
- package/assets/skills/flow-test/SKILL.md +0 -75
- package/dist/flowrun/adapter.js.map +0 -1
- package/dist/flowrun/audit.d.ts +0 -5
- package/dist/flowrun/audit.js +0 -67
- package/dist/flowrun/audit.js.map +0 -1
- package/dist/flowrun/ci.d.ts +0 -64
- package/dist/flowrun/ci.js +0 -184
- package/dist/flowrun/ci.js.map +0 -1
- package/dist/flowrun/coverage.d.ts +0 -70
- package/dist/flowrun/coverage.js +0 -207
- package/dist/flowrun/coverage.js.map +0 -1
- package/dist/flowrun/digest.js.map +0 -1
- package/dist/flowrun/evaluator.js.map +0 -1
- package/dist/flowrun/gate.d.ts +0 -28
- package/dist/flowrun/gate.js +0 -139
- package/dist/flowrun/gate.js.map +0 -1
- package/dist/flowrun/github.d.ts +0 -24
- package/dist/flowrun/github.js +0 -154
- package/dist/flowrun/github.js.map +0 -1
- package/dist/flowrun/index.d.ts +0 -14
- package/dist/flowrun/index.js +0 -15
- package/dist/flowrun/index.js.map +0 -1
- package/dist/flowrun/merge.d.ts +0 -57
- package/dist/flowrun/merge.js +0 -180
- package/dist/flowrun/merge.js.map +0 -1
- package/dist/flowrun/migration.d.ts +0 -11
- package/dist/flowrun/migration.js +0 -276
- package/dist/flowrun/migration.js.map +0 -1
- package/dist/flowrun/resilience.d.ts +0 -18
- package/dist/flowrun/resilience.js +0 -80
- package/dist/flowrun/resilience.js.map +0 -1
- package/dist/flowrun/state.js.map +0 -1
- package/dist/flowrun/transitions.d.ts +0 -66
- package/dist/flowrun/transitions.js +0 -168
- package/dist/flowrun/transitions.js.map +0 -1
- package/dist/flowrun/types.d.ts +0 -356
- package/dist/flowrun/types.js +0 -21
- package/dist/flowrun/types.js.map +0 -1
- package/dist/flowrun/validator.d.ts +0 -19
- package/dist/flowrun/validator.js +0 -209
- package/dist/flowrun/validator.js.map +0 -1
- package/dist/plugin/broker.d.ts +0 -73
- package/dist/plugin/broker.js +0 -140
- package/dist/plugin/broker.js.map +0 -1
- package/dist/plugin/tdd-tool.d.ts +0 -62
- package/dist/plugin/tdd-tool.js +0 -336
- package/dist/plugin/tdd-tool.js.map +0 -1
- /package/dist/{flowrun → kernel/tdd}/adapter.js +0 -0
- /package/dist/{flowrun → kernel/tdd}/digest.js +0 -0
- /package/dist/{flowrun → kernel/tdd}/evaluator.js +0 -0
- /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
|
-
##
|
|
11
|
-
- PR 已创建
|
|
12
|
-
- 可选的 `/test` 已完成
|
|
11
|
+
## 核心:调用 task_control
|
|
13
12
|
|
|
14
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
- 如发现实现与设计偏差 → 追加到
|
|
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** —
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
-
|
|
125
|
-
- PR
|
|
126
|
-
-
|
|
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
|
|
52
|
+
- PR 编号与 Task Record(来源:`/code` 产出)
|
|
139
53
|
|
|
140
54
|
### Preconditions
|
|
141
55
|
- `/code` 已完成 → PR 已创建
|
|
142
56
|
|
|
143
57
|
### Procedure
|
|
144
|
-
1.
|
|
145
|
-
2. 双轴审查(规范轴 +
|
|
58
|
+
1. 在本地 worktree/分支获取 PR diff 与元数据
|
|
59
|
+
2. 双轴审查(规范轴 + 规格轴)+ TDD criterion coverage
|
|
146
60
|
3. 输出结构化审查报告
|
|
147
|
-
4.
|
|
148
|
-
5.
|
|
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 →
|
|
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
|
-
##
|
|
11
|
+
## 核心:调用 setup_control
|
|
11
12
|
|
|
12
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
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.
|
|
58
|
-
2.
|
|
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
|
-
-
|
|
63
|
-
-
|
|
58
|
+
- readiness 报告
|
|
59
|
+
- workflow 草案(可选)
|
|
60
|
+
- 根 AGENTS.md Profile 区块
|
|
64
61
|
|
|
65
62
|
### Failure
|
|
66
|
-
-
|
|
67
|
-
-
|
|
63
|
+
- gh auth 失败 → 提示用户执行 `gh auth login` 后重试
|
|
64
|
+
- workflow 生成失败 → 报告错误并停止
|
|
68
65
|
|
|
69
66
|
### Idempotency
|
|
70
|
-
-
|
|
71
|
-
- 已存在
|
|
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 任务拆解 →
|
|
3
|
+
description: DAG 任务拆解 → Task Record(task_control)
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# flow-tasks
|
|
7
7
|
|
|
8
|
-
将设计方案拆解为 DAG
|
|
8
|
+
将设计方案拆解为 DAG(有向无环图)任务,并用 `task_control{op:"create-task"}` 创建 Task Record(GitHub Sub Issue)。
|
|
9
9
|
|
|
10
|
-
##
|
|
11
|
-
- `/design` 已完成 → `docs/dev/specs/<title>.md` 存在
|
|
12
|
-
- Parent GitHub Issue 存在
|
|
10
|
+
## 核心:调用 task_control
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
`task_control{op:"create-task", title:"<英文功能标题>", acceptance_criteria:"<JSON>", ...}` 创建 Sub Issue。
|
|
13
|
+
内核负责 slug 派生与校验、标题规范(R3)、关联 Parent Issue——创建动作全部收敛到工具内。
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
将设计拆解为最小可执行单元,识别并行/串行关系。
|
|
15
|
+
## DAG 拆解
|
|
18
16
|
|
|
19
|
-
|
|
20
|
-
- 每个任务应在 1-2 小时内完成实现
|
|
21
|
-
- 无依赖的任务标记为可并行
|
|
22
|
-
- 任务粒度以"一个人可独立完成"为标准
|
|
17
|
+
#### 拆解前自检
|
|
23
18
|
|
|
24
|
-
|
|
19
|
+
1. **能否用一个任务完成?** — 如果功能足够内聚,不强拆多个任务
|
|
20
|
+
2. **拆开后能否独立验证?** — 每个任务必须有独立的验收标准
|
|
21
|
+
3. **拆开后耦合是否最低?** — 两个任务共享大量数据结构/模块 → 合并
|
|
25
22
|
|
|
26
|
-
|
|
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
|
-
|
|
25
|
+
| 反模式 | 示例 | 正确做法 |
|
|
26
|
+
|--------|------|----------|
|
|
27
|
+
| 技术分层拆分 | "建表任务" → "DAO 任务" → "Service 任务" | 垂直切片:一个任务包含完整链路 |
|
|
28
|
+
| 过度拆分 | 一个 CRUD 拆成四个任务 | 一个 CRUD 就是一个任务 |
|
|
29
|
+
| 预留式拆分 | "先搭框架,后面任务再填内容" | 不要有空壳任务 |
|
|
34
30
|
|
|
35
|
-
|
|
36
|
-
每个任务 `docs/dev/tasks/<task-name>.md`:
|
|
31
|
+
DAG 使用 Mermaid 语法绘制,保存为 `docs/dev/tasks/<YYYY-MM-DD-NNN-slug>/DAG.md`。
|
|
37
32
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
|
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
|
-
-
|
|
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.
|
|
168
|
-
3.
|
|
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
|
|
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 协议 —
|
|
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
|
-
|
|
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
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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
|
|
171
|
-
- Task
|
|
172
|
-
- Task
|
|
173
|
-
- Task
|
|
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
|
|
177
|
-
-
|
|
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.
|
|
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
|
|
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(工具亲自执行测试)
|