@devcxl/opencode-cabbage 1.2.0 → 2.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 (104) hide show
  1. package/.codex-plugin/plugin.json +36 -0
  2. package/README.md +67 -21
  3. package/README.zh.md +26 -13
  4. package/assets/agents/dev-lifecycle.md +6 -0
  5. package/assets/prompts/bootstrap.md +4 -0
  6. package/assets/skills/flow-change/SKILL.md +109 -0
  7. package/assets/skills/flow-design/SKILL.md +15 -0
  8. package/assets/skills/flow-docs/SKILL.md +112 -0
  9. package/assets/skills/flow-incident/SKILL.md +98 -0
  10. package/assets/skills/flow-research/SKILL.md +9 -0
  11. package/assets/skills/flow-setup/SKILL.md +13 -0
  12. package/codex-skills/agent-architect/SKILL.md +79 -0
  13. package/codex-skills/agent-dev-lifecycle/SKILL.md +311 -0
  14. package/codex-skills/agent-developer/SKILL.md +51 -0
  15. package/codex-skills/agent-goal-verify/SKILL.md +45 -0
  16. package/codex-skills/agent-researcher/SKILL.md +32 -0
  17. package/codex-skills/agent-reviewer/SKILL.md +109 -0
  18. package/codex-skills/flow-change/SKILL.md +109 -0
  19. package/codex-skills/flow-code/SKILL.md +71 -0
  20. package/codex-skills/flow-design/SKILL.md +161 -0
  21. package/codex-skills/flow-docs/SKILL.md +112 -0
  22. package/codex-skills/flow-incident/SKILL.md +98 -0
  23. package/codex-skills/flow-release/SKILL.md +90 -0
  24. package/codex-skills/flow-requirements/SKILL.md +90 -0
  25. package/codex-skills/flow-research/SKILL.md +86 -0
  26. package/codex-skills/flow-review/SKILL.md +110 -0
  27. package/codex-skills/flow-setup/SKILL.md +88 -0
  28. package/codex-skills/flow-tasks/SKILL.md +220 -0
  29. package/codex-skills/flow-tdd/SKILL.md +235 -0
  30. package/dist/hooks/session-start.d.ts +1 -0
  31. package/dist/hooks/session-start.js +72 -0
  32. package/dist/hooks/session-start.js.map +1 -0
  33. package/dist/index.d.ts +2 -5
  34. package/dist/index.js +1 -4
  35. package/dist/index.js.map +1 -1
  36. package/dist/plugin/agents.d.ts +20 -0
  37. package/dist/plugin/agents.js +79 -0
  38. package/dist/plugin/agents.js.map +1 -1
  39. package/dist/plugin/cabbage-cli.d.ts +28 -0
  40. package/dist/plugin/cabbage-cli.js +92 -0
  41. package/dist/plugin/cabbage-cli.js.map +1 -0
  42. package/dist/plugin/cabbage-tool.d.ts +103 -0
  43. package/dist/plugin/cabbage-tool.js +169 -0
  44. package/dist/plugin/cabbage-tool.js.map +1 -0
  45. package/dist/plugin/commands.d.ts +10 -0
  46. package/dist/plugin/commands.js +1 -1
  47. package/dist/plugin/commands.js.map +1 -1
  48. package/dist/plugin/continuation.d.ts +22 -0
  49. package/dist/plugin/continuation.js +233 -0
  50. package/dist/plugin/continuation.js.map +1 -0
  51. package/dist/plugin/goal-store.d.ts +64 -0
  52. package/dist/plugin/goal-store.js +57 -0
  53. package/dist/plugin/goal-store.js.map +1 -0
  54. package/dist/plugin/goal.d.ts +95 -38
  55. package/dist/plugin/goal.js +208 -199
  56. package/dist/plugin/goal.js.map +1 -1
  57. package/dist/plugin/install-dir.d.ts +13 -0
  58. package/dist/plugin/install-dir.js +46 -0
  59. package/dist/plugin/install-dir.js.map +1 -0
  60. package/dist/plugin/server.d.ts +4 -12
  61. package/dist/plugin/server.js +279 -423
  62. package/dist/plugin/server.js.map +1 -1
  63. package/dist/plugin/session-abort.d.ts +5 -0
  64. package/dist/plugin/session-abort.js +26 -0
  65. package/dist/plugin/session-abort.js.map +1 -0
  66. package/dist/plugin/skills.d.ts +15 -0
  67. package/dist/plugin/skills.js +47 -50
  68. package/dist/plugin/skills.js.map +1 -1
  69. package/dist/plugin.d.ts +2 -2
  70. package/dist/plugin.js +6 -2
  71. package/dist/plugin.js.map +1 -1
  72. package/dist/util/paths.d.ts +0 -6
  73. package/dist/util/paths.js +0 -15
  74. package/dist/util/paths.js.map +1 -1
  75. package/hooks/hooks.json +17 -0
  76. package/package.json +13 -8
  77. package/vendor/cabbage/MANIFEST.json +8 -0
  78. package/vendor/cabbage/cabbage_cli/__init__.py +1 -0
  79. package/vendor/cabbage/cabbage_cli/__main__.py +2 -0
  80. package/vendor/cabbage/cabbage_cli/assets/docs-site/.vitepress/config.ts +78 -0
  81. package/vendor/cabbage/cabbage_cli/assets/docs-site/README.md +31 -0
  82. package/vendor/cabbage/cabbage_cli/assets/docs-site/package.json +16 -0
  83. package/vendor/cabbage/cabbage_cli/assets/docs-site/pnpm-lock.yaml +2504 -0
  84. package/vendor/cabbage/cabbage_cli/assets/integrations/cabbage.yml +127 -0
  85. package/vendor/cabbage/cabbage_cli/assets/templates/adr.md +47 -0
  86. package/vendor/cabbage/cabbage_cli/assets/templates/api-design.md +45 -0
  87. package/vendor/cabbage/cabbage_cli/assets/templates/change-record.md +21 -0
  88. package/vendor/cabbage/cabbage_cli/assets/templates/database-design.md +37 -0
  89. package/vendor/cabbage/cabbage_cli/assets/templates/generic.md +20 -0
  90. package/vendor/cabbage/cabbage_cli/assets/templates/impact.md +41 -0
  91. package/vendor/cabbage/cabbage_cli/assets/templates/incident.md +48 -0
  92. package/vendor/cabbage/cabbage_cli/assets/templates/postmortem.md +43 -0
  93. package/vendor/cabbage/cabbage_cli/assets/templates/prd.md +71 -0
  94. package/vendor/cabbage/cabbage_cli/assets/templates/release-plan.md +45 -0
  95. package/vendor/cabbage/cabbage_cli/assets/templates/rfc.md +44 -0
  96. package/vendor/cabbage/cabbage_cli/assets/templates/security-review.md +35 -0
  97. package/vendor/cabbage/cabbage_cli/assets/templates/tasks.md +62 -0
  98. package/vendor/cabbage/cabbage_cli/assets/templates/tech-spec.md +87 -0
  99. package/vendor/cabbage/cabbage_cli/assets/templates/test-plan.md +44 -0
  100. package/vendor/cabbage/cabbage_cli/assets/workflows/change.yaml +11 -0
  101. package/vendor/cabbage/cabbage_cli/assets/workflows/incident.yaml +4 -0
  102. package/vendor/cabbage/cabbage_cli/cli.py +283 -0
  103. package/vendor/cabbage/cabbage_cli/core.py +606 -0
  104. package/vendor/cabbage/cabbage_cli/scaffold.py +313 -0
@@ -0,0 +1,90 @@
1
+ ---
2
+ name: flow-requirements
3
+ description: 渐进式需求澄清 → PRD → Parent Issue
4
+ ---
5
+
6
+ # flow-requirements
7
+
8
+ 通过渐进式需求澄清将松散想法凝固为 PRD,并创建 Parent Issue(Flow Record)作为后续阶段的权威来源。
9
+
10
+ ## 核心理念:战争迷雾(Fog of War)
11
+
12
+ 需求澄清不是一次性穷举——只定义**前沿**(当前可见的待决策问题),逐个解决,每解决一个迷雾推开一层,直到所有关键决策已定,PRD 自然成形。
13
+
14
+ ## Phase A:创建决策映射
15
+
16
+ 在 `docs/dev/decision-map.md` 创建映射,追踪所有待决策问题(Ticket 含 slug / Blocked by / Status / Type / Question / Answer)。初始只创建 2–4 个前沿 Ticket,不试图穷举。
17
+
18
+ Ticket 类型:Grilling(与用户对话澄清)/ Research(查文档)/ Prototype(低保真验证)。
19
+ Research 型 Ticket → 派发 `@agent-researcher` 加载 `flow-research` skill 产出调研文档后,据结论 resolved。
20
+
21
+ ## Phase B:渐进式解决
22
+
23
+ - 每次只处理**一个**已解除阻塞的 Ticket;处理前 Claim(`Status: in-progress`)
24
+ - Grilling 型:**一次只问一个问题**,每个问题给出推荐答案,沿决策树分支深入
25
+ - 追问技巧:"然后呢?"(第 3 层才触及本质)、"如果不做这个会怎样?"(验证优先级)、"谁来判断做对了?"(明确验收)
26
+ - 解决后 `Status: resolved` 并记录 Answer;检查是否有新问题浮现 → 追加 Ticket
27
+ - 循环直到所有前沿 Ticket 已 resolved
28
+
29
+ ## Phase C:凝固为 PRD
30
+
31
+ 从 Decision Map 的 Answer 提炼为 PRD,保存到 `docs/prd/<title>.md`。
32
+
33
+ ## Phase D:创建 Parent Issue
34
+
35
+ 用 gh 创建 Parent Issue(Flow Record),作为目标与验收标准的权威来源:
36
+
37
+ ```bash
38
+ gh issue create --title "<英文功能标题>" --body "<目标 + 验收标准>"
39
+ ```
40
+
41
+ 标题使用英文功能短语(kebab-case),后续分支名、目录名以其为基准。
42
+
43
+ ## CONTEXT.md 术语发现
44
+
45
+ 需求澄清中发现的领域术语写入根 `CONTEXT.md`(术语权威)。发现新术语或冲突时暂停提问,用户确认后更新。
46
+
47
+ ## Output
48
+ - `docs/dev/decision-map.md` — 决策映射(PRD 生成后可删除)
49
+ - `docs/prd/<title>.md` — PRD
50
+ - Parent Issue(Flow Record)
51
+
52
+ ## 下一阶段
53
+ - **/design** — 基于 PRD 进行技术设计
54
+
55
+ ## Contract
56
+
57
+ ### Trigger
58
+ 由 `/requirements` 命令或 `@agent-dev-lifecycle` 触发。
59
+
60
+ ### Inputs
61
+ - 用户提供的功能描述(来自消息文本)
62
+
63
+ ### Preconditions
64
+ - gh CLI 可用
65
+
66
+ ### Procedure
67
+ 1. 锚定核心问题,创建 Decision Map
68
+ 2. 渐进式解决所有前沿 Ticket(Grilling / Research / Prototype)
69
+ 3. 迷雾推至足够远 → 凝固为 PRD
70
+ 4. 记录领域术语到 CONTEXT.md
71
+ 5. 用 gh issue create 创建 Parent Issue
72
+
73
+ ### Outputs
74
+ - `docs/dev/decision-map.md`
75
+ - `docs/prd/<title>.md`
76
+ - Parent Issue
77
+
78
+ ### Failure
79
+ - gh 未认证 → 提示用户 `gh auth login` 后重试
80
+ - Issue 创建失败 → 记录错误,不阻塞 PRD 写入
81
+
82
+ ### Idempotency
83
+ - Decision Map 已存在 → 从中断点继续
84
+ - PRD 文件已存在 → 更新而非覆盖
85
+ - Parent Issue 已创建 → 复用其编号而非重复创建
86
+
87
+ ### Prohibited Actions
88
+ - 不跳过 Phase A 和 Phase B 直接输出 PRD
89
+ - 不一次问多个问题
90
+ - 不创建重复的 Parent Issue(复用已有编号)
@@ -0,0 +1,86 @@
1
+ ---
2
+ name: flow-research
3
+ description: 调研/事实核查 — 迭代深化 + 一手来源评分 + 反方搜索 + 置信度 → 调研文档(由 @researcher 加载)
4
+ ---
5
+
6
+ # flow-research
7
+
8
+ 针对调研问题系统性收集资料、验证来源、交叉对比,产出仅事实、带引用的调研文档。由独立子 agent `@researcher` 加载执行,可作为 Flow 的阶段,也可作为独立轻量路径。
9
+
10
+ ## 核心流程
11
+
12
+ 1. **理解任务**:辨明「真问题 vs 表象」、前置假设、输出形式与范围(技术/时间/地区/行业)。
13
+ 2. **制定计划**:拆成子问题,说明来源需求、关键项、预判信息偏差与迭代轮次。
14
+ 3. **迭代收集**(多轮深化):
15
+ - 来源优先级:官方文档/标准 → 学术/白皮书 → GitHub/Release/Issue → 权威博客 → 行业媒体 → 社区(社区仅作辅助)。
16
+ - 一手来源:优先追溯原始出处;来源评分卡(权威性/一手性/时效性/独立性/可验证性,综合 ≤12 仅作辅助参考)。
17
+ - 时间标注:关键引用标注发布时间;超时效门槛(技术选型>1年、安全/合规>6月、商业数据>1年、学术>3年)明确警告。
18
+ 4. **反方搜索 + 遗漏检查**:主动找反方观点、失败案例、替代方案隐藏成本;检查是否遗漏反例、边界场景、不熟悉但关键的部分。
19
+ 5. **评估与验证**:冲突来源列出各方观点→分析冲突原因→判断更可靠方;关键结论标注置信度(高/中/低/未知)。
20
+ 6. **综合分析**:方案全景 ≥3(保守/中间/激进)+ 成本全景 + 影响面 + 最坏情况(能否回滚、损失是否可控)。
21
+ 7. **元评审**(输出前自省):剩余未知、最弱证据、可能错误的假设、遗漏角度、边际收益。
22
+ 8. **输出**:写 `docs/dev/research/<topic>.md`,并在消息中给结论/可执行建议摘要。
23
+
24
+ ## 调研纪律
25
+
26
+ 1. **先定义决策,后收集资料**:开始前写下"要回答什么问题"和"什么条件下选哪个方案";结论不改变决策就不调研。
27
+ 2. **硬性约束优先于加权评分**:不满足硬性约束的方案直接淘汰,不进入评分表。
28
+ 3. **事实、推断、未知项分开**:不得把推断写成事实;无法验证就写"待验证",禁止补全式猜测。
29
+ 4. **优先验证失败路径**,不只验证正常路径。
30
+ 5. **PoC 边界**:只验证会导致方案被否决的那个假设,不开发完整系统。
31
+ 6. **推荐必须包含适用边界、代价和退出条件**(什么信号出现时需要重新评估)。
32
+
33
+ ## 何时停止迭代
34
+
35
+ - 所有关键问题 ≥2 个独立来源支持
36
+ - 最重要的反方观点已覆盖
37
+ - 剩余不确定性已标注,继续投入的边际收益递减
38
+
39
+ ## 输出
40
+
41
+ - `docs/dev/research/<topic>.md`
42
+ - 消息中的结论 / 可执行建议 / 待进一步盘问项
43
+
44
+ ## 获取仓库上下文(runnable)
45
+
46
+ ```bash
47
+ REPO=$(gh repo view --json nameWithOwner --jq '.nameWithOwner')
48
+ gh issue view <issue-number> # 若调研属于某 Flow/Task,读取其上下文
49
+ gh api repos/"$REPO"/issues/<issue-number>/comments --jq '.[].body'
50
+ ```
51
+
52
+ ## Contract
53
+
54
+ ### Trigger
55
+ 由 `@dev-lifecycle` Phase 0 调研场景派发 `@researcher` 触发。
56
+
57
+ ### Inputs
58
+ - 用户的调研问题 / 需求(含范围与输出形式)
59
+
60
+ ### Preconditions
61
+ - 调研目标与范围明确;gh/git 可读(获取仓库与 Issue 上下文)
62
+ - 需要外部资料时具备网络读取能力
63
+
64
+ ### Procedure
65
+ 1. 理解任务并制定研究计划
66
+ 2. 迭代收集并评分来源,追溯一手来源
67
+ 3. 反方搜索与遗漏检查
68
+ 4. 冲突处理与置信度标注
69
+ 5. 综合分析(方案/成本/影响面/最坏情况)
70
+ 6. 元评审后写 `docs/dev/research/<topic>.md` 并总结
71
+
72
+ ### Outputs
73
+ - `docs/dev/research/<topic>.md`
74
+ - 消息摘要
75
+
76
+ ### Failure
77
+ - 无法访问可靠外部来源 → 说明并基于本地证据降级
78
+ - 来源不足 → 明确标注「证据不足」,不编造
79
+
80
+ ### Idempotency
81
+ - `docs/dev/research/<topic>.md` 已存在 → 更新而非新建重复文件
82
+
83
+ ### Prohibited Actions
84
+ - 不编造来源、数据、案例或结论
85
+ - 不改动代码(仅产出调研文档)
86
+ - 不把未验证的二手/社区信息当作核心结论依据
@@ -0,0 +1,110 @@
1
+ ---
2
+ name: flow-review
3
+ description: 双轴审查(规范 + 规格)→ 发布审查结果 → 合并
4
+ ---
5
+
6
+ # flow-review
7
+
8
+ 沿两条轴线审查 PR 代码:规范(是否符合编码标准)和规格(是否实现了原始需求)。
9
+ reviewer 只读;写操作(review/merge)由 primary 编排器执行。
10
+
11
+ ## 核心流程
12
+
13
+ 1. **发布审查结果**(primary 执行)
14
+ ```bash
15
+ gh pr review <pr-number> --approve
16
+ gh pr review <pr-number> --request-changes --body "<原因>"
17
+ ```
18
+ 2. **合并**(CI + 审查通过后,primary 执行)
19
+ ```bash
20
+ HEAD_SHA=$(gh pr view <pr-number> --json headRefOid --jq .headRefOid)
21
+ gh pr merge <pr-number> --squash --delete-branch --match-head-commit "$HEAD_SHA"
22
+ ```
23
+ 3. 合并后清理 worktree:`git worktree remove ".worktree/<task-slug>"`(脏时提示用户手动处理)
24
+
25
+ reviewer 只读:不直接执行 `gh pr review` / `gh pr merge`(写操作由 primary 编排器执行)。
26
+
27
+ ## 双轴审查
28
+
29
+ 两条轴线独立审查、分别报告;不把发现项混排,也不允许一条轴线的通过掩盖另一条轴线的失败。
30
+
31
+ ### 规格轴(Specification)
32
+
33
+ 回答“是否实现了正确的行为”:
34
+
35
+ - 对照 PRD、Task `Builds`、`Acceptance Criteria` 与技术方案检查遗漏或不完整需求。
36
+ - 检查 diff 是否增加规格未要求的行为或抽象,识别 scope creep。
37
+ - 检查看似已实现但边界、错误或状态转换不符合规格的行为。
38
+ - 逐条核查 Acceptance Criteria 是否由 Design `Testing Decisions` 约定的 Test Seam 上的行为测试或验证命令证明。
39
+ - 测试存在不等于规格通过;实现与测试共同误解需求时仍应报告。
40
+
41
+ ### 规范轴(Convention / Code Quality)
42
+
43
+ 回答“实现是否写得正确”:
44
+
45
+ - 检查仓库文档化规范、AGENTS.md 与相关 ADR;仓库规则优先。
46
+ - 参考 `references/smell-baseline.md`,代码气味属于判断性问题,不冒充硬性规范。
47
+ - 检查 KISS、YAGNI、SRP,以及是否存在浅 Module、透传层或只有一个假设 Adapter 的 Seam。
48
+ - 检查测试是否描述行为、使用公共 Test Seam,并避免私有方法、内部调用次数/顺序、侧信道和循环论证。
49
+ - 跳过 formatter、lint、typecheck 等工具已经强制执行且没有实际风险的机械问题。
50
+
51
+ **明确不检查 commit order**:RED→GREEN 顺序是编码过程约束,reviewer 不审查 commit 历史。
52
+
53
+ ### 审查结论
54
+
55
+ - 任一轴存在阻断问题 → `CHANGES_REQUESTED`。
56
+ - 两轴都没有阻断问题 → `APPROVED`。
57
+ - 报告必须分别给出每条轴线的发现数量和最高严重度,不跨轴线重新排序。
58
+
59
+ ## 审查材料获取
60
+
61
+ 代码审查必须在本地分支/worktree 中进行,禁止通过 WebFetch 或浏览器访问远程 PR 页面获取代码。
62
+
63
+ ## Output
64
+ - 结构化审查报告(APPROVED / CHANGES_REQUESTED)
65
+ - PR 已合并(条件满足时)
66
+ - Worktree 已清理
67
+
68
+ ## 后续
69
+ - **/release** — 发布(如所有 PR 已合并)
70
+
71
+ ## Contract
72
+
73
+ ### Trigger
74
+ 由 `/review` 命令或 `@agent-dev-lifecycle` Phase 3 审查步骤触发。
75
+
76
+ ### Inputs
77
+ - PR 编号、Task 文件与 Task Record(来源:`/code` 产出)
78
+ - PRD 与技术方案(包含 Testing Decisions)
79
+
80
+ ### Preconditions
81
+ - `/code` 已完成 → PR 已创建
82
+ - Design 已包含本 Task 相关行为的 Testing Decisions;存量 Design 缺失时先返回 Design Gap,不提前给出审查结论
83
+
84
+ ### Procedure
85
+ 1. 在本地 worktree/分支获取 PR diff 与元数据
86
+ 2. 独立执行规格轴审查,核对行为、范围与 Acceptance Criteria 证据
87
+ 3. 独立执行规范轴审查,核对仓库规范、实现质量与测试质量
88
+ 4. 分轴输出结构化审查报告,不合并或重排发现
89
+ 5. primary 用 `gh pr review` 发布结果
90
+ 6. CI 通过后 primary 用 `gh pr merge` 合并并清理 worktree
91
+
92
+ ### Outputs
93
+ - 结构化审查报告(APPROVED / CHANGES_REQUESTED)
94
+ - PR 已合并(条件满足时)
95
+ - Worktree 已清理
96
+
97
+ ### Failure
98
+ - Critical/High → request-changes
99
+ - Testing Decisions 缺失或与仓库现实冲突 → 返回 Design Gap,由 primary 在当前 stage 完成 amendment 后重新审查
100
+ - Worktree 清理失败 → 记录警告,不阻塞
101
+
102
+ ### Idempotency
103
+ - 已合并的 PR → 跳过
104
+ - 已审查的 PR → 更新结论
105
+
106
+ ### Prohibited Actions
107
+ - **禁止使用 WebFetch 或任何 Web 工具获取远程 PR 代码** — 审查代码时必须本地读取源码文件
108
+ - reviewer 不直接执行 `gh pr review` / `gh pr merge`(由 primary 编排器执行)
109
+ - 不把规格轴与规范轴合并成单一问题列表或用一条轴线抵消另一条轴线
110
+ - 不使用默认 --force 清理
@@ -0,0 +1,88 @@
1
+ ---
2
+ name: flow-setup
3
+ description: 初始化 — 探测环境 → 确认 Profile
4
+ ---
5
+
6
+ # flow-setup
7
+
8
+ 初始化阶段:探测开发环境、确认 AGENTS.md Project Profile。
9
+ 纯 Prompt 流程:直接使用 git/gh 命令探测,Profile 由用户确认后写入根 AGENTS.md。
10
+
11
+ ## 核心流程
12
+
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
+ ```
19
+
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
26
+
27
+ 3. **写入根 AGENTS.md**:用户确认后,将 Profile 区块追加/替换到根 `AGENTS.md`:
28
+
29
+ ```markdown
30
+ ## Project Profile
31
+
32
+ - test command: `npm test`
33
+ - regression command: `npm test`
34
+ - test file patterns: `test/**/*.test.ts`
35
+ - implementation file patterns: `src/**/*.ts`
36
+ - version bump rule: `breaking→major, feature→minor, fix→patch`
37
+ - version file: `package.json`
38
+ - tag format: `v{version}`
39
+ - release workflow: `.github/workflows/release.yml`
40
+ ```
41
+
42
+ ## 存量项目接入(adopt)
43
+
44
+ 仓库已有文档时(`init` 只新增骨架、不改写已有文件;无 `.cabbage/` 时先经 flow-change 执行 `op:"init"`):
45
+
46
+ 1. `cabbage({op:"adopt"})` 盘点 `docs/` 树之外的 Markdown → 生成 `.cabbage/` 下的 `adoption-report.md`;
47
+ 每份文档得到四种动作:`keep`(已在编号目录)/ `migrate`(当前状态文档)/ `import`(历史记录)/
48
+ `review`(无法归类)。分类仅基于目录与文件名推断,**始终需要人工确认**。
49
+ 2. 逐行处理 `review`,与文档负责人确认归属;`import` 的历史记录(ADR/RFC/事故)原样归档,
50
+ **不改写内容**。
51
+ 3. `migrate` 用 `git mv` 保留历史,一个逻辑批次一个提交;移动后立即修正相对链接。
52
+ 4. 每批后 `cabbage({op:"validate"})` + 站点构建,确认无死链。
53
+ 5. 接入完成的判据:再次 `op:"adopt"` 应全部报告 `keep`。
54
+
55
+ ## Output
56
+ - readiness 报告(git/gh 可用性、CI/release workflow 存在性)
57
+ - 根 AGENTS.md `## Project Profile` 区块
58
+
59
+ ## Contract
60
+
61
+ ### Trigger
62
+ 由 `/setup` 命令触发。首次使用插件或切换新项目时执行。
63
+
64
+ ### Inputs
65
+ - 用户对 readiness 报告 / Profile 覆盖项的确认
66
+
67
+ ### Preconditions
68
+ - gh CLI 已认证(宿主 `gh auth`)
69
+
70
+ ### Procedure
71
+ 1. 用 gh/git 命令探测环境,输出 readiness 报告
72
+ 2. 缺失 CI/release workflow 时提示用户(可手工创建)
73
+ 3. 向用户逐项确认 Profile 配置
74
+ 4. 用户确认后写入根 AGENTS.md Profile 区块
75
+
76
+ ### Outputs
77
+ - readiness 报告
78
+ - 根 AGENTS.md Profile 区块
79
+
80
+ ### Failure
81
+ - gh auth 失败 → 提示用户执行 `gh auth login` 后重试
82
+
83
+ ### Idempotency
84
+ - Profile 已存在 → 覆盖为最新确认值
85
+
86
+ ### Prohibited Actions
87
+ - 不写入未获用户确认的 Profile 项
88
+ - 不假设测试命令为 npm(按用户确认的技术栈)
@@ -0,0 +1,220 @@
1
+ ---
2
+ name: flow-tasks
3
+ description: 将技术方案拆解为可独立实现的 tracer-bullet Task Plan 与 DAG
4
+ ---
5
+
6
+ # flow-tasks
7
+
8
+ 将设计方案拆解为 Task Plan 与 DAG(有向无环图)。每个 Task 都是一条完整但狭窄的行为切片,可以交给一个 fresh-context developer agent 独立实现和验证。
9
+
10
+ 本 skill 只定义任务拆解与 Task Plan 产出。`@agent-architect` 不创建 GitHub Issue、不操作 GitHub lifecycle;调用方负责检查并发布 Task Plan。
11
+
12
+ ## Task 拆解规则
13
+
14
+ 每个 Task 必须:
15
+
16
+ 1. 交付一个可以观察或验证的新行为。
17
+ 2. 是垂直切片,而不是 Controller / Service / DAO 等技术分层。
18
+ 3. 可以交给一个 fresh-context developer agent 独立理解和实现。
19
+ 4. 完成以后仓库处于可工作的状态,而不是为下一个 Task 留空壳。
20
+ 5. `Blocked By` 只声明“前者未完成时,本 Task 无法开始”的真实阻塞关系。
21
+
22
+ 每个 Task 应适合一个 fresh-context developer agent:
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
+ ## 反模式
60
+
61
+ | 反模式 | 示例 | 正确做法 |
62
+ |--------|------|----------|
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
97
+
98
+ - <blocking-task-slug>
99
+ - 或 None
100
+
101
+ ## Implementation Notes
102
+
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。`@agent-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:`@agent-dev-lifecycle` 检查后自动发布。
161
+ - 高风险 Flow:展示 Task Plan,用户确认后发布。
162
+ - 用户主动 `/tasks`:展示 Task Plan,等待用户确认后发布。
163
+ - `@agent-architect`:产出并返回 Task Plan 后停止,不执行发布。
164
+
165
+ ## Output
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 摘要与拓扑顺序
170
+
171
+ ## 后续
172
+
173
+ - `@agent-dev-lifecycle` 检查并发布 GitHub Sub Issues
174
+ - **/code** — 按 Task DAG 进入编码阶段
175
+
176
+ ## Contract
177
+
178
+ ### Trigger
179
+ 由 `/tasks` 命令或 `@agent-dev-lifecycle` Phase 2 委派 `@agent-architect` 触发。
180
+
181
+ ### Inputs
182
+ - `docs/dev/specs/<title>.md` — 技术方案
183
+ - 相关 PRD 与 ADR
184
+ - Parent Issue 编号
185
+
186
+ ### Preconditions
187
+ - `/design` 已完成,技术方案和 ADR 存在
188
+
189
+ ### Procedure
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。
197
+
198
+ ### Outputs
199
+ - Task 定义文件
200
+ - Task DAG
201
+ - 供调用方检查与发布的 Task Plan
202
+ - 或结构化 Design Gap(存量 Design 缺少 Testing Decisions 时)
203
+
204
+ ### Failure
205
+ - 无法从设计中确定可验证行为 → 暂停并指出缺失信息
206
+ - Design Amendment 后仍缺少稳定 Test Seam → 报告未解决的 Design Gap,由调用方暂停当前阶段
207
+ - DAG 存在环形依赖 → 阻止并报告
208
+ - Task 无法由 fresh-context developer 独立理解 → 重新拆分或补足契约
209
+
210
+ ### Idempotency
211
+ - Task 文件已存在 → 读取并更新,不创建重复定义
212
+ - 已有 `issue` 编号 → 保留并交给调用方核验,不重复发布
213
+
214
+ ### Prohibited Actions
215
+ - 不按技术层拆分 Task
216
+ - 不为制造并行度而拆分 Task
217
+ - 不创建完成后不可工作的空壳 Task
218
+ - 不用 pre-refactor 包装搭框架、清理代码或预留扩展点
219
+ - 不把非阻塞关系写入 `Blocked By`
220
+ - `@agent-architect` 不执行 `gh issue create`、`git push`、PR、merge 或 worktree 操作