用途
Bloom 是 CocoPlus 工作流中的前置技能,用于在编写任何规格说明之前,通过结构化的「逆向工作法」(working-backwards)对话,让开发者先对预期成果做出明确承诺。生成的 bloom 文档会作为 $spec 的锚点,为 $discuss 的一致性检查提供依据,并在 $ship 阶段被 CocoWatch 引用。
主要能力
Bloom 通过四个问题引导开发者明确成果:
- 受益者(Beneficiary):谁从中受益,他们身上发生了什么变化?要求至少一句话点明受益者并说明变化;若回答过于笼统(如「用户受益」),会追问一次要求具体化。
- 核心能力(Core Capability):用一句话概括核心能力。若超过一句,会要求压缩为一句。
- 约束(Constraints):界定方案的三项约束(如 schema 限制、成本上限、PII 规则、性能要求)。少于三项会按编号追问,多于三项会要求优先排序到恰好三项。
- 新闻稿(Press Release):由开发者本人撰写一段新闻稿,假设功能已上线并正常工作,说明谁现在能做什么、多快、质量如何、成本多少。该段落必须由开发者自己写,代理不会代为生成。
此外还支持:
--skip:放弃 bloom 步骤,并在 $spec 中抑制所有 bloom 提示信息。--resume:从 .cocoplus/lifecycle/bloom-draft.json 恢复未完成的对话。--discard:确认后删除未完成的草稿。--template <type>:在 Q4 前展示对应项目类型的示例新闻稿模式,支持 ai-function、governance、analytics-pipeline、api-integration、data-quality。模板仅为示例,开发者仍需自行撰写实际段落。
使用方式
前置条件:.cocoplus/ 必须已初始化(先运行 $pod init)。
执行 $bloom 后,技能会:
- 校验初始化状态,未初始化则提示「CocoPlus not initialized. Run $pod init first.」并退出。
- 检查是否已存在 lifecycle/bloom.md,若存在则询问是否覆盖(旧版本保留在 git 历史中)。
- 依次提出四个问题,等待开发者完整回答后再继续;每接受一个答案,就将进度(current_step、已答字段、updated_at)持久化到 .cocoplus/lifecycle/bloom-draft.json。
- 汇总并写入 lifecycle/bloom.md,包含 bloom_date、status、Beneficiary、Core Capability、Constraints、Press Release 等章节。
- 创建 git 提交:feat(bloom): pre-commitment working backwards document。
- 写入成功后删除 bloom-draft.json(若存在),并输出确认信息,提示运行 $spec。
使用 --skip 时,会更新 .cocoplus/lifecycle/meta.json 加入 "bloom_waived": true(文件不存在则创建),之后 $spec 不再显示 bloom 提示,也不会读取 bloom 文档。
与下游阶段的集成
- $spec:若 lifecycle/bloom.md 存在,会先读取作为锚定上下文,并以 bloom 中的核心能力句作为规格说明的锚点。
- $discuss:将 bloom.md 纳入计划前校验,检查最终计划是否仍服务于 bloom 中声明的受益者和约束集;偏离会作为 Concern(而非 Block)呈现。
- $ship:若 bloom 文档存在,CocoWatch 会加入一行对齐说明:「Bloom commitment [met / partially diverged] — see lifecycle/bloom.md.」
适用场景
适用于使用 CocoPlus 工作流、希望在编写规格说明前先明确成果承诺的开发场景,尤其适合需要对齐受益者、核心能力、约束和预期效果的团队协作。
限制
- 必须已初始化 .cocoplus/,否则无法运行。
- Q4 新闻稿段落必须由开发者本人撰写,代理不会代为生成。
- Q3 约束数量固定为恰好三项,不可多也不可少。
- bloom 对 $spec 仅为建议性质,不会强制阻断 $spec。
- bloom 只写入 lifecycle/bloom.md,不会修改 spec.md、plan.md 或其他生命周期产物。
- 四个问题全部回答且开发者确认内容前,不会创建 git 提交。
- 模板仅作示例,不能替代开发者撰写的承诺段落。
错误情况
- .cocoplus/ 未初始化:提示运行 $pod init 并退出。
- bloom.md 已存在且开发者拒绝覆盖:不做更改退出。
- 无法写入 bloom.md、meta.json(--skip 时)或 bloom-draft.json:输出文件系统错误;写入 bloom-draft.json 失败时会在提出下一问题前停止。
完成标准
满足以下任一条件即视为完成:lifecycle/bloom.md 已写入四个章节并提交 git;或 lifecycle/meta.json 包含 "bloom_waived": true(--skip 路径)。未完成的会话可从 bloom-draft.json 恢复。