Rewind 是 Snowflake Labs 的 CocoPlus 项目内的一个生命周期回滚技能,目标是把 CocoBrew 生命周期回退到先前的某个阶段提交。
用途 它用于在 CocoBrew 生命周期中撤销某个阶段之后的提交,让项目回到较早的阶段状态,并保持 CocoPlus 记录的状态与 git 历史一致。
前置检查 执行前会先确认当前目录存在 .cocoplus/。若不存在,则提示“CocoPlus not initialized in this directory. Run $pod init to begin.”并停止。
使用方式 命令形式为 $rewind [step-id],例如 $rewind spec-20260405-001;也支持 $rewind --tag [tag-name],例如 $rewind --tag cocoplus/harvest/hr-20260511-4a2f/task-007,或缩写形式 $rewind --tag task-007(对 harvest 标签仅取最后一段)。 若未提供 step-id 或标签,则列出可用的阶段提交与 CocoPlus 标签:使用 git log 按 feat(spec)、feat(plan)、build:、test:、docs(review)、release: 等关键字检索,并用 git tag 列出 cocoplus/* 标签(按创建时间倒序取前 20 条)。
主要能力
- 按标签回滚:若标签为缩写,会先在 cocoplus/harvest// 下搜索完整名称;找不到则提示用 git tag --list 'cocoplus/' 查看可用标签并停止。找到后用 git rev-list -n 1 解析出提交 SHA,再进入确认环节。
- 子阶段标签:资料说明 CocoHarvest 会创建两类标签——cocoplus/harvest/[run-id]/task-[N](每个 CocoHarvest 任务完成时创建)和 cocoplus/fn/[function-name]/v[N](每次 Cortex 函数部署阶段创建)。
- 确认步骤:展示 git log [target-commit]..HEAD --oneline,列出回滚将移除的提交,并警告 Rewind 只恢复 git 与 CocoPlus 生命周期状态,无法逆转 Snowflake 或其他外部副作用(包括已执行的 SQL、创建或变更的对象、Dynamic Tables、ML 模型、部署、API 调用、数据变更等),这些系统需手动核对;同时说明 git 重置可通过 git reflog 恢复,但外部副作用不会自动回退。用户回答 yes 才继续。
- 执行回滚:按阶段提交信息找到 step-id 对应提交 SHA,执行 git reset --soft [target-commit-sha]。
- 清理过期工作树:重置后,尽力删除已移除的 Build 阶段遗留的 CocoHarvest 工作树(路径匹配 agent/stage- 的工作树),并执行 git worktree prune,避免后续构建出现命名冲突。该清理为尽力而为,失败不影响主流程。
- 更新状态:从 step-id 解析阶段(如 spec-* 对应 spec),把 .cocoplus/lifecycle/meta.json 的 current_phase 设为目标阶段,并从 phases_completed 中移除后续阶段;同时更新 AGENTS.md 中的阶段行。最后输出回滚结果、当前阶段、后续阶段产物已取消暂存、过期工作树已清理,并提示如需同时丢弃工作区改动可用 git checkout -- .cocoplus/。
适用场景 适用于使用 CocoPlus/CocoBrew 管理开发生命周期、需要撤销某阶段之后提交并回退阶段状态的场景,尤其是需要按阶段或按 CocoHarvest 任务标签精确回退时。
限制 只回滚 git 与 CocoPlus 生命周期状态,不回滚 Snowflake 或其他外部副作用;必须存在 .cocoplus/;回滚需用户显式确认;标签不存在时会报错并给出查看命令。