@devcxl/opencode-cabbage 0.3.2 → 1.1.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 -49
- package/assets/agents/team/architect.md +8 -1
- package/assets/agents/team/developer.md +89 -0
- package/assets/agents/team/goal-verify.md +5 -1
- package/assets/agents/team/reviewer.md +6 -0
- 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 +28 -79
- package/assets/skills/flow-release/SKILL.md +31 -51
- package/assets/skills/flow-requirements/SKILL.md +31 -196
- package/assets/skills/flow-review/SKILL.md +26 -123
- package/assets/skills/flow-setup/SKILL.md +40 -43
- package/assets/skills/flow-tasks/SKILL.md +23 -153
- 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 +84 -0
- package/dist/kernel/context.js.map +1 -0
- package/dist/kernel/flow.d.ts +175 -0
- package/dist/kernel/flow.js +467 -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 +45 -0
- package/dist/kernel/permission.js.map +1 -0
- package/dist/kernel/profile.d.ts +35 -0
- package/dist/kernel/profile.js +147 -0
- package/dist/kernel/profile.js.map +1 -0
- package/dist/kernel/records.d.ts +103 -0
- package/dist/kernel/records.js +240 -0
- package/dist/kernel/records.js.map +1 -0
- package/dist/kernel/release.d.ts +106 -0
- package/dist/kernel/release.js +241 -0
- package/dist/kernel/release.js.map +1 -0
- package/dist/kernel/review.d.ts +34 -0
- package/dist/kernel/review.js +82 -0
- package/dist/kernel/review.js.map +1 -0
- package/dist/kernel/session-index.d.ts +45 -0
- package/dist/kernel/session-index.js +136 -0
- package/dist/kernel/session-index.js.map +1 -0
- package/dist/kernel/setup.d.ts +95 -0
- package/dist/kernel/setup.js +401 -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 +213 -0
- package/dist/kernel/task.js +873 -0
- package/dist/kernel/task.js.map +1 -0
- package/dist/{flowrun → kernel/tdd}/adapter.d.ts +1 -1
- package/dist/{flowrun → kernel/tdd}/adapter.js +27 -26
- package/dist/kernel/tdd/adapter.js.map +1 -0
- package/dist/{flowrun → kernel/tdd}/digest.d.ts +2 -1
- package/dist/{flowrun → kernel/tdd}/digest.js +6 -4
- package/dist/kernel/tdd/digest.js.map +1 -0
- package/dist/{flowrun → kernel/tdd}/evaluator.d.ts +1 -1
- package/dist/{flowrun → kernel/tdd}/evaluator.js +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 +2 -2
- package/dist/{flowrun → kernel/tdd}/state.js +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 +156 -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 +91 -0
- package/dist/plugin/flow-control.js +287 -0
- package/dist/plugin/flow-control.js.map +1 -0
- package/dist/plugin/goal.d.ts +17 -46
- package/dist/plugin/goal.js +47 -117
- package/dist/plugin/goal.js.map +1 -1
- package/dist/plugin/prompt-lint.js +78 -6
- package/dist/plugin/prompt-lint.js.map +1 -1
- package/dist/plugin/release-control.d.ts +39 -0
- package/dist/plugin/release-control.js +343 -0
- package/dist/plugin/release-control.js.map +1 -0
- package/dist/plugin/server.d.ts +19 -0
- package/dist/plugin/server.js +198 -320
- package/dist/plugin/server.js.map +1 -1
- package/dist/plugin/setup-control.d.ts +59 -0
- package/dist/plugin/setup-control.js +111 -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 +1 -7
- package/dist/plugin/skills.js.map +1 -1
- package/dist/plugin/task-control.d.ts +90 -0
- package/dist/plugin/task-control.js +208 -0
- package/dist/plugin/task-control.js.map +1 -0
- package/dist/plugin/tdd-checkpoint.d.ts +128 -0
- package/dist/plugin/tdd-checkpoint.js +664 -0
- package/dist/plugin/tdd-checkpoint.js.map +1 -0
- package/dist/util/gh.d.ts +5 -0
- package/dist/util/gh.js +12 -0
- package/dist/util/gh.js.map +1 -1
- package/dist/util/paths.d.ts +6 -2
- package/dist/util/paths.js +15 -7
- package/dist/util/paths.js.map +1 -1
- package/package.json +4 -4
- package/assets/agents/team/backend.md +0 -100
- package/assets/agents/team/frontend.md +0 -98
- package/assets/commands/handoff.md +0 -4
- package/assets/commands/test.md +0 -4
- package/assets/context/CONTEXT.md +0 -41
- package/assets/skills/flow-handoff/SKILL.md +0 -76
- 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
|
@@ -1,140 +1,38 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: flow-code
|
|
3
|
-
description:
|
|
3
|
+
description: 编码实现 — task_control 创建 worktree + TDD(flow-tdd 协议)
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# flow-code
|
|
7
7
|
|
|
8
|
-
认领 Sub Issue
|
|
8
|
+
认领 Task Record(Sub Issue),在 worktree 内按 TDD 实现代码与单测。
|
|
9
|
+
worktree 创建、PR 提交由内核工具 `task_control` 完成,本 skill 不复制 shell 实现。
|
|
9
10
|
|
|
10
|
-
##
|
|
11
|
-
- `/tasks` 已完成 → Sub Issues 就绪
|
|
12
|
-
- 阅读 `docs/adr/` 确保实现与 ADR 兼容
|
|
13
|
-
- 确认 task 的 `worktree_root` 字段(来自 task 文件 frontmatter)
|
|
14
|
-
|
|
15
|
-
## Workflow
|
|
16
|
-
|
|
17
|
-
### 1. 选择任务
|
|
18
|
-
选择一个可执行的 Sub Issue(前置依赖已满足)。
|
|
19
|
-
|
|
20
|
-
### 2. 检查 ADR 约束
|
|
21
|
-
阅读相关 ADR,确保实现方案不违反已有架构决策。
|
|
22
|
-
|
|
23
|
-
### 3. 创建/复用 Worktree
|
|
24
|
-
```bash
|
|
25
|
-
# 探测默认分支
|
|
26
|
-
BASE=$(gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name' 2>/dev/null || git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@' || echo "main")
|
|
27
|
-
|
|
28
|
-
# 检查和创建 worktree
|
|
29
|
-
WORKTREE=".worktree/<task-slug>"
|
|
30
|
-
BRANCH="feat/<task-slug>"
|
|
31
|
-
|
|
32
|
-
if [ -d "$WORKTREE" ]; then
|
|
33
|
-
# Worktree 目录已存在 → 验证一致性
|
|
34
|
-
EXISTING=$(git -C "$WORKTREE" rev-parse --abbrev-ref HEAD 2>/dev/null)
|
|
35
|
-
if [ "$EXISTING" != "$BRANCH" ]; then
|
|
36
|
-
echo "ERROR: $WORKTREE exists but tracks branch '$EXISTING' (expected '$BRANCH')"
|
|
37
|
-
exit 1
|
|
38
|
-
fi
|
|
39
|
-
echo "Worktree 已存在,复用:$WORKTREE"
|
|
40
|
-
else
|
|
41
|
-
# 检查分支是否已存在
|
|
42
|
-
if git show-ref --verify "refs/heads/$BRANCH" >/dev/null 2>&1; then
|
|
43
|
-
# 分支已存在,检查是否已合并
|
|
44
|
-
if git branch --merged "$BASE" | grep -q "$BRANCH"; then
|
|
45
|
-
git branch -D "$BRANCH"
|
|
46
|
-
else
|
|
47
|
-
echo "ERROR: 分支 '$BRANCH' 已存在,请先处理"
|
|
48
|
-
exit 1
|
|
49
|
-
fi
|
|
50
|
-
fi
|
|
51
|
-
# 创建 worktree + 分支
|
|
52
|
-
git worktree add -b "$BRANCH" "$WORKTREE" "$BASE"
|
|
53
|
-
fi
|
|
54
|
-
|
|
55
|
-
# 进入 worktree
|
|
56
|
-
cd "$WORKTREE"
|
|
57
|
-
```
|
|
58
|
-
### 4. 安装依赖
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
npm install
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### 5. 编码 + 单测
|
|
65
|
-
```bash
|
|
66
|
-
# 实现代码 + 单元测试
|
|
67
|
-
npm test
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
#### TDD Advisory Protocol
|
|
71
|
-
|
|
72
|
-
编码阶段必须遵循 `flow-tdd` skill 定义的 TDD 流程。Agent 在编写任何功能代码前加载 `flow-tdd` skill。
|
|
73
|
-
|
|
74
|
-
**TDD 检查点(commit 前自检):**
|
|
75
|
-
- [ ] 每个功能的代码变更都有对应的测试
|
|
76
|
-
- [ ] 测试在修改前是 RED(失败),修改后是 GREEN(通过)
|
|
77
|
-
- [ ] 已完成 `final-regression`(全部测试通过)
|
|
78
|
-
- [ ] 已完成 `final-verification`(对照 acceptance_criteria)
|
|
79
|
-
- [ ] self-report 已写入 commit message 或 PR body
|
|
80
|
-
|
|
81
|
-
> 引用:`flow-tdd` skill 是 TDD 协议的唯一来源,包含完整的 RED→GREEN cycle 状态机、abandon-cycle 规则和 final-regression/verification 流程。
|
|
82
|
-
|
|
83
|
-
### 6. 文档同步检查
|
|
84
|
-
完成编码后,逐项检查以下文档是否需要同步更新:
|
|
85
|
-
|
|
86
|
-
```
|
|
87
|
-
## 文档同步检查清单
|
|
88
|
-
□ guides/quickstart.md — 安装方式或前置条件有变化吗?
|
|
89
|
-
□ guides/configuration.md — 新增/修改了配置项吗?
|
|
90
|
-
□ guides/usage.md — 命令或行为有变化吗?
|
|
91
|
-
□ guides/architecture.md — 架构或流程有变化吗?
|
|
92
|
-
□ docs/dev/guides/contributing.md — 开发流程有变化吗?
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
- 逐项评估,无需修改的跳过
|
|
96
|
-
- 需要修改的文档随代码一起提交到同一个 PR
|
|
97
|
-
- PR body 中列出已同步的文档
|
|
98
|
-
|
|
99
|
-
### 7. 提交 PR
|
|
100
|
-
```bash
|
|
101
|
-
# 在 worktree 内执行
|
|
102
|
-
|
|
103
|
-
# 根据 task 预期文件和 git status 确定待暂存文件
|
|
104
|
-
# Task 文件通常包含 frontmatter expected_files 字段
|
|
105
|
-
git status --short
|
|
106
|
-
|
|
107
|
-
# 显式暂存任务相关文件(不是 git add .)
|
|
108
|
-
# 示例:git add src/plugin/goal.ts test/goal.test.ts assets/agents/team/reviewer.md
|
|
109
|
-
git add <file1> <file2> ...
|
|
110
|
-
|
|
111
|
-
# 提交前检查:确保无密钥、无超大文件、无任务范围外文件
|
|
112
|
-
git diff --cached --name-only
|
|
113
|
-
|
|
114
|
-
git commit -m "feat(<scope>): <title>"
|
|
115
|
-
git push origin feat/<task-slug>
|
|
116
|
-
mkdir -p docs/dev/handoff
|
|
117
|
-
echo "Closes #<issue-num>" > docs/dev/handoff/pr-body.md
|
|
118
|
-
gh pr create --title "<title>" --body-file docs/dev/handoff/pr-body.md
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
### 8. 更新开发文档
|
|
122
|
-
如涉及 API 变更 → 更新 `docs/dev/api/`
|
|
123
|
-
如涉及数据模型变更 → 更新 `docs/dev/db/`
|
|
11
|
+
## 核心:调用 task_control + flow-tdd
|
|
124
12
|
|
|
125
|
-
|
|
126
|
-
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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"}` 完成
|
|
18
|
+
|
|
19
|
+
## 编码约束
|
|
20
|
+
|
|
21
|
+
- 只改 Task 相关的文件;遵循项目现有代码规范与分层结构
|
|
22
|
+
- 遵循工程原则(KISS/YAGNI/DRY/SRP/最小变更,单份引用仓库 AGENTS.md)
|
|
23
|
+
- 文档同步:涉及 guides/api/db 变更时随代码同 PR 更新
|
|
132
24
|
|
|
133
|
-
##
|
|
134
|
-
|
|
25
|
+
## TDD 引用
|
|
26
|
+
|
|
27
|
+
> `flow-tdd` skill 是 TDD 协议的唯一来源,包含完整的 RED→GREEN cycle 状态机、
|
|
28
|
+
> abandon-cycle 规则和 final-regression/verification 流程,以及 `tdd_checkpoint` 各 op 的调用方式。
|
|
29
|
+
|
|
30
|
+
## Output
|
|
31
|
+
- Worktree 已创建(task_control)
|
|
32
|
+
- TDD evidence 已提交(tdd_checkpoint)
|
|
33
|
+
- 本地 commit 就绪(分支推送与 PR 由 task_control 完成)
|
|
135
34
|
|
|
136
35
|
## 后续
|
|
137
|
-
- **/test** — 触发 CI E2E 测试
|
|
138
36
|
- **/review** — 审查 PR
|
|
139
37
|
|
|
140
38
|
## Contract
|
|
@@ -143,33 +41,33 @@ gh pr create --title "<title>" --body-file docs/dev/handoff/pr-body.md
|
|
|
143
41
|
由 `/code` 命令或 `@dev-lifecycle` Phase 3 触发。
|
|
144
42
|
|
|
145
43
|
### Inputs
|
|
146
|
-
- Sub Issue
|
|
147
|
-
- task 文件 frontmatter 中的 `worktree_root`(来源:task 文件)
|
|
44
|
+
- Task Record(Sub Issue 编号与标题,来源:`/tasks` 产出)
|
|
148
45
|
|
|
149
46
|
### Preconditions
|
|
150
47
|
- `/tasks` 已完成 → Sub Issues 就绪
|
|
151
|
-
-
|
|
48
|
+
- Planning Baseline 已合入;前置依赖任务已合并(task_control 门禁)
|
|
152
49
|
|
|
153
50
|
### Procedure
|
|
154
|
-
1.
|
|
155
|
-
2.
|
|
156
|
-
3.
|
|
157
|
-
4.
|
|
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
|
|
158
56
|
|
|
159
57
|
### Outputs
|
|
160
58
|
- Worktree 已创建(`.worktree/<task-slug>/`)
|
|
161
|
-
-
|
|
162
|
-
-
|
|
59
|
+
- TDD evidence(Task Record 单评论)
|
|
60
|
+
- 本地 commit
|
|
163
61
|
|
|
164
62
|
### Failure
|
|
165
|
-
-
|
|
166
|
-
- 测试失败 →
|
|
63
|
+
- worktree 创建失败 → 检查分支冲突或目录残留(task_control 报错)
|
|
64
|
+
- 测试失败 → 修复后重试(不跳过 RED)
|
|
167
65
|
|
|
168
66
|
### Idempotency
|
|
169
|
-
-
|
|
67
|
+
- worktree 已存在 → task_control 校验分支一致性后复用
|
|
170
68
|
- 代码已提交 → 追加提交
|
|
171
69
|
|
|
172
70
|
### Prohibited Actions
|
|
173
|
-
-
|
|
71
|
+
- 不 push、不创建 PR、不操作 Issue(由 task_control 完成)
|
|
174
72
|
- 不使用 `git add .`
|
|
175
|
-
-
|
|
73
|
+
- 不绕过 task_control 直接执行 worktree 创建 / PR 创建 / 分支推送
|
|
@@ -1,26 +1,22 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: flow-design
|
|
3
|
-
description: 技术方案设计 → 方案文档 + ADR
|
|
3
|
+
description: 技术方案设计 → 方案文档 + ADR(planning worktree + Planning PR)
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# flow-design
|
|
7
7
|
|
|
8
|
-
基于 PRD
|
|
8
|
+
基于 PRD 进行技术方案设计,architect 在 planning worktree 产出 CONTEXT.md + PRD + Design + ADR,
|
|
9
|
+
并由 `flow_control` 通过 Planning PR 合入形成 Planning Baseline。
|
|
9
10
|
|
|
10
|
-
##
|
|
11
|
-
- `/requirements` 已完成 → `docs/prd/<title>.md` + Parent Issue 存在
|
|
12
|
-
- 阅读 `../_context/CONTEXT.md` 了解领域术语
|
|
11
|
+
## 核心:调用 flow_control
|
|
13
12
|
|
|
14
|
-
|
|
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)
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
- 阅读 PRD:`docs/prd/<title>.md`
|
|
18
|
-
- 阅读已有 ADR:`docs/adr/`(确保设计不与已有架构决策冲突)
|
|
19
|
-
- 阅读 `docs/dev/out-of-scope.md`(了解已排除范围)
|
|
17
|
+
worktree 创建与 Planning PR 创建均由内核工具完成,创建动作全部收敛到工具内。
|
|
20
18
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
#### 简单性约束
|
|
19
|
+
## 设计约束
|
|
24
20
|
|
|
25
21
|
技术方案必须遵循以下原则:
|
|
26
22
|
|
|
@@ -29,65 +25,16 @@ description: 技术方案设计 → 方案文档 + ADR 输出
|
|
|
29
25
|
3. **方案自检** — 每个设计决策必须能回答"为什么不用更简单的替代方案?"
|
|
30
26
|
4. **ADR 记录简化决策** — 如果选择复杂方案,必须在 ADR 中说明为何简单方案不够
|
|
31
27
|
|
|
32
|
-
|
|
33
|
-
- 技术选型与理由
|
|
34
|
-
- 架构与数据流
|
|
35
|
-
- API / 数据模型
|
|
36
|
-
- 与已有的 ADR 的兼容性检查
|
|
37
|
-
|
|
38
|
-
### 3. 记录 ADR
|
|
39
|
-
为每个关键决策记录 ADR 到 `docs/adr/<YYYY-MM-DD>-<slug>.md`。
|
|
40
|
-
ADR 格式参考 `_prompts/adr-format` 中的格式要求。
|
|
41
|
-
|
|
42
|
-
ADR 至少记录:
|
|
43
|
-
- 技术选型决策
|
|
44
|
-
- 架构模式决策
|
|
45
|
-
- 任何可能有争议的方案选择
|
|
46
|
-
|
|
47
|
-
### 4. 附到 GitHub Issue
|
|
48
|
-
```bash
|
|
49
|
-
mkdir -p docs/dev/handoff
|
|
50
|
-
cat > docs/dev/handoff/design-comment.md << 'EOF'
|
|
51
|
-
## 技术方案
|
|
52
|
-
|
|
53
|
-
...(摘要)
|
|
54
|
-
|
|
55
|
-
## ADR
|
|
56
|
-
|
|
57
|
-
...(ADR 列表)
|
|
58
|
-
|
|
59
|
-
完整文档:docs/dev/specs/<title>.md
|
|
60
|
-
EOF
|
|
61
|
-
gh issue comment <issue-number> --body-file docs/dev/handoff/design-comment.md
|
|
62
|
-
```
|
|
28
|
+
## CONTEXT.md 术语
|
|
63
29
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
```bash
|
|
68
|
-
# 探测默认分支
|
|
69
|
-
BASE=$(gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name' 2>/dev/null || echo "main")
|
|
70
|
-
|
|
71
|
-
# 创建 planning 分支
|
|
72
|
-
git checkout -b chore/plan-<slug> $BASE
|
|
73
|
-
git add docs/dev/specs/<title>.md docs/adr/<date>-<slug>.md
|
|
74
|
-
git commit -m "docs: <title> — 技术方案 + ADR"
|
|
75
|
-
git push origin chore/plan-<slug>
|
|
76
|
-
|
|
77
|
-
# 创建 PR
|
|
78
|
-
gh pr create --title "docs: <title> — 技术方案 + ADR" \
|
|
79
|
-
--body "Planning PR:完整技术方案和架构决策记录" \
|
|
80
|
-
--base $BASE
|
|
81
|
-
|
|
82
|
-
# 合并 PR 后切回 $BASE
|
|
83
|
-
git checkout $BASE && git pull origin $BASE
|
|
84
|
-
```
|
|
30
|
+
阅读项目根 CONTEXT.md(领域术语权威,已自动注入内容与 digest);
|
|
31
|
+
设计中发现的新术语经用户确认后写入根 CONTEXT.md(术语权威)。
|
|
85
32
|
|
|
86
33
|
## Output
|
|
87
34
|
- `docs/dev/specs/<title>.md` — 技术方案
|
|
88
35
|
- `docs/adr/<date>-<slug>.md` — ADR 决议
|
|
89
|
-
-
|
|
90
|
-
-
|
|
36
|
+
- 根 CONTEXT.md 术语更新(如发现新术语)
|
|
37
|
+
- Planning PR(由 flow_control 创建)
|
|
91
38
|
|
|
92
39
|
## 后续
|
|
93
40
|
- **/tasks** — 基于设计方案拆解为 DAG 任务
|
|
@@ -99,31 +46,33 @@ git checkout $BASE && git pull origin $BASE
|
|
|
99
46
|
|
|
100
47
|
### Inputs
|
|
101
48
|
- `docs/prd/<title>.md` — 上游 PRD(来源:requirements 阶段产出)
|
|
102
|
-
-
|
|
49
|
+
- Flow Record 编号(来源:requirements 阶段产出)
|
|
103
50
|
|
|
104
51
|
### Preconditions
|
|
105
|
-
- `/requirements` 已完成 →
|
|
106
|
-
-
|
|
52
|
+
- `/requirements` 已完成 → PRD 与 Flow Record 存在
|
|
53
|
+
- requirements 基线已用户确认
|
|
107
54
|
|
|
108
55
|
### Procedure
|
|
109
|
-
1.
|
|
110
|
-
2.
|
|
111
|
-
3.
|
|
112
|
-
4.
|
|
113
|
-
5.
|
|
56
|
+
1. 调用 `flow_control{op:"planning-start"}` 创建 planning worktree
|
|
57
|
+
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
|
|
114
61
|
|
|
115
62
|
### Outputs
|
|
116
|
-
-
|
|
117
|
-
-
|
|
63
|
+
- 技术方案 + ADR(planning worktree 内)
|
|
64
|
+
- Planning PR(Planning Baseline 的一部分)
|
|
118
65
|
|
|
119
66
|
### Failure
|
|
120
67
|
- ADR 与已有决策冲突 → 记录冲突并标注
|
|
121
|
-
- Planning PR
|
|
68
|
+
- Planning PR 创建失败 → 通知用户手动处理
|
|
122
69
|
|
|
123
70
|
### Idempotency
|
|
124
71
|
- 技术方案已存在 → 读取并更新
|
|
125
72
|
- ADR 已存在 → 不重复创建
|
|
73
|
+
- planning worktree 已存在 → 复用(工具校验分支一致性)
|
|
126
74
|
|
|
127
75
|
### Prohibited Actions
|
|
128
|
-
-
|
|
76
|
+
- 不绕过 flow_control 手工创建 worktree / Planning PR(由内核工具完成)
|
|
129
77
|
- 不跳过 ADR 兼容性检查
|
|
78
|
+
- 不直接 push 到默认分支
|
|
@@ -1,54 +1,34 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: flow-release
|
|
3
|
-
description: 版本 →
|
|
3
|
+
description: 版本 → Release PR → GitHub Actions 发布(release_control,仅人工)
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# flow-release
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
通过 `release_control` 完成版本提议、Release PR、合并发布与发布监控。
|
|
9
|
+
发布流程技术栈无关:按 Profile 的版本规则(version file / tag format / release workflow)执行,
|
|
10
|
+
最终发布走项目自己的 GitHub Actions release workflow(不假设 npm 或任何特定生态)。
|
|
9
11
|
|
|
10
|
-
##
|
|
11
|
-
- main 分支最新,所有 PR 已合并
|
|
12
|
-
- CI 通过
|
|
12
|
+
## 核心:调用 release_control
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
1. `release_control{op:"propose-version"}` — 聚合上一 tag 后全部 commit,按 Profile 版本规则分类,输出提议版本
|
|
15
|
+
2. `release_control{op:"open-release-pr"}` — 固定顺序:release branch → 按 Profile 写规则更新版本 → Release PR(人工确认后)
|
|
16
|
+
3. `release_control{op:"merge-release-pr"}` — CI + 人工批准 → merge → SHA 校验 → 打 tag push
|
|
17
|
+
4. `release_control{op:"monitor"}` — 轮询 GitHub Actions release workflow 至成功;瞬时失败 rerun;代码/配置缺陷 → Corrective Flow
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
从 conventional commits 自动确定 semver bump:
|
|
18
|
-
```bash
|
|
19
|
-
git log $(git describe --tags --abbrev=0)..HEAD --oneline
|
|
20
|
-
```
|
|
21
|
-
- `fix:` → patch | `feat:` → minor | `BREAKING:` → major
|
|
19
|
+
## 版本规则(Profile)
|
|
22
20
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
# 更新 CHANGELOG.md
|
|
27
|
-
git commit -m "chore(release): v<version>"
|
|
28
|
-
BASE=$(gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name')
|
|
29
|
-
git tag v<version>
|
|
30
|
-
git push origin $BASE --tags
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
### 3. Release 草稿(自动)
|
|
34
|
-
tag 推送触发 `.github/workflows/release-draft.yml`:
|
|
35
|
-
- 构建 + 测试
|
|
36
|
-
- 生成 Release 草稿(含自动 release notes)
|
|
37
|
-
|
|
38
|
-
### 4. 人工审核发布
|
|
39
|
-
GitHub Releases 页面 → 检查 Release 草稿 → 点击 **Publish release**。
|
|
40
|
-
|
|
41
|
-
发布触发 `.github/workflows/release-publish.yml`:
|
|
42
|
-
- 自动 `npm publish`(需要 `NPM_TOKEN` 仓库 Secret)
|
|
21
|
+
版本分类依赖 AGENTS.md `## Project Profile` 的 `version bump rule`:
|
|
22
|
+
`breaking→major, feature→minor, fix→patch`(0.x breaking 也 major)。
|
|
23
|
+
未分类 commit → release_control 要求用户分类后重试。
|
|
43
24
|
|
|
44
25
|
## Output
|
|
45
|
-
-
|
|
46
|
-
- tag
|
|
47
|
-
-
|
|
48
|
-
- 发布后自动推送 npm
|
|
26
|
+
- 提议版本
|
|
27
|
+
- Release PR(合并 + tag push)
|
|
28
|
+
- GitHub Actions release workflow 运行结果
|
|
49
29
|
|
|
50
30
|
## 后续
|
|
51
|
-
|
|
31
|
+
- 发布完成后 Flow 结束(goal-verify 独立验证 → complete-flow)
|
|
52
32
|
|
|
53
33
|
## Contract
|
|
54
34
|
|
|
@@ -56,31 +36,31 @@ GitHub Releases 页面 → 检查 Release 草稿 → 点击 **Publish release**
|
|
|
56
36
|
由 `/release` 命令触发。**仅手动触发**,不包含在自动流程中。
|
|
57
37
|
|
|
58
38
|
### Inputs
|
|
59
|
-
-
|
|
39
|
+
- 用户对提议版本/Release 的确认
|
|
60
40
|
|
|
61
41
|
### Preconditions
|
|
62
42
|
- 所有 PR 已合并
|
|
63
|
-
-
|
|
64
|
-
-
|
|
43
|
+
- 默认分支最新且 CI 通过
|
|
44
|
+
- Release Profile 已确认(AGENTS.md Project Profile)
|
|
65
45
|
|
|
66
46
|
### Procedure
|
|
67
|
-
1.
|
|
68
|
-
2.
|
|
69
|
-
3.
|
|
70
|
-
4.
|
|
71
|
-
5. 人工审核发布 → npm publish
|
|
47
|
+
1. 调用 `release_control{op:"propose-version"}` 确定版本
|
|
48
|
+
2. 调用 `release_control{op:"open-release-pr"}` 创建 Release PR(人工确认)
|
|
49
|
+
3. 调用 `release_control{op:"merge-release-pr"}` 合并 + 打 tag
|
|
50
|
+
4. 调用 `release_control{op:"monitor"}` 监控发布 workflow
|
|
72
51
|
|
|
73
52
|
### Outputs
|
|
74
|
-
- GitHub Release
|
|
75
|
-
-
|
|
53
|
+
- GitHub Release(经项目 release workflow)
|
|
54
|
+
- tag 已推送
|
|
76
55
|
|
|
77
56
|
### Failure
|
|
78
|
-
-
|
|
57
|
+
- 发布 workflow 失败 → monitor 识别瞬时失败并 rerun;代码/配置缺陷 → Corrective Flow + 新版本
|
|
79
58
|
- tag 已存在 → 提示版本冲突
|
|
80
59
|
|
|
81
60
|
### Idempotency
|
|
82
|
-
- 相同版本号 →
|
|
61
|
+
- 相同版本号 → 阻止重复发布
|
|
83
62
|
|
|
84
63
|
### Prohibited Actions
|
|
85
|
-
-
|
|
86
|
-
-
|
|
64
|
+
- 不在自动模式中执行(release 为人工流程)
|
|
65
|
+
- 不假设 npm 或其他特定技术生态(按 Profile 规则 + 项目 GitHub Actions release workflow)
|
|
66
|
+
- 不跳过测试/CI 直接发布
|