用途
Auto Ship 用于把一项已经“验证通过”的变更,以有纪律的方式推进到“已发布”状态。它的核心价值在于:让发布是“可证明已就绪”的,而不是因为跳过了门禁而“看起来就绪”。
主要能力
- 发布前门禁(fail closed):运行常设的就绪门禁,任何未运行或未通过的门禁都算作 BLOCKER,包括:
- 最终校验(final validate):在集成状态上运行整套 typecheck+lint+test,RED 或未运行即阻塞。
- 评审干净(review clean):auto-review 中已确认的阻塞性发现已解决,否则阻塞。
- 安全(security):审查不可信输入/认证/数据处理,无泄露密钥,依赖已审计。
- 可观测性(observability):新增关键路径有日志/指标/追踪。
- 回滚(rollback):任何有风险的变更都有回滚路径(开关、回退、分阶段发布、迁移回退)。
- 文档(docs):用户可见/API 变更已记录,重要决策有 ADR。
- 对抗性验证:对“可以发布”这一总体结论使用 adversarial-verify,让怀疑者尝试找出“名义上绿色”的门禁,并如实报告每个门禁的真实状态(已运行且通过 / 失败 / 未运行)。
- 准备发布产物:原子提交、按项目方案(semver)做版本号提升、基于真实提交/差异生成变更日志与发布说明、最终确定文档。
- 打开 PR / 暂存发布:默认通过 gh 推送分支并打开 PR(安全、可逆、自主完成);若走部署路径,则先呈现分阶段计划(先特性开关、增量放量、监控指标、回滚触发条件),部署本身需人类明确签字。
- 报告:关闭检查点并报告门禁结果、发布产物、PR 链接/发布状态、回滚路径以及等待人类签字的事项。
使用方式
该技能按阶段运行:
- Phase 0:预检——解析范围($target,默认当前分支)与要发布的变更(diff + commits);确认状态(干净的工作树、正确分支、构建检查点无阻塞任务);打开 checkpoint-resume 运行,并用 budget-guard 声明发布预算/升级点。
- Phase 1:发布前门禁——运行就绪门禁,未运行或未通过即阻塞;用 adversarial-verify 检验总体就绪声明。
- Phase 2:准备发布产物——组装发布内容(原子提交、版本号提升、变更日志/发布说明、文档),此阶段仍为自主、无不可逆操作。
- Phase 3:打开 PR / 暂存发布——PR 路径默认自主完成;部署路径需在不可逆步骤前 STOP 并通过 AskUserQuestion 获得人类明确签字,部署后确认监控信号并保持回滚就绪。
- Phase 4:报告——如实报告门禁结果、发布产物、PR 链接/发布状态、回滚路径及待人类签字事项。
适用场景
- 需要把已验证的代码变更推进到可发布状态,并希望有可证明的就绪证据。
- 需要确保发布前门禁真实运行、不被跳过。
- 需要基于真实差异生成版本号、变更日志和文档。
- 需要在部署等不可逆步骤前获得人类签字,并保留回滚路径。
限制与约束
- 绝不把跳过/未运行的门禁当作干净;fail closed。
- 绝不在未运行的情况下声称最终校验通过。
- 绝不在没有人类明确批准的情况下执行不可逆步骤(部署/迁移/发布)。
- 绝不发布没有回滚路径的高风险变更。
- 绝不编写不基于真实变更的发布说明。
- 优先小步、带开关、可回滚的发布,而非大爆炸式发布。
- 该技能激活时,一个技能作用域的 PreToolUse 钩子会在每次 Bash 调用时运行 scripts/guard-ship-irreversibles.sh:普通的 git push --force(不带 --force-with-lease)和 git push --delete 会在工具层被阻止;部署本身仍由流程(Phase 3)进行人类门控。
相关参考
- adversarial-verify(技能)——对总体“可以发布”声明施压,捕捉名义上绿色的门禁。
- auto-review(技能)——若评审门禁尚未运行/完成,则运行/完成它。
- checkpoint-resume(技能)——持久的发布运行状态。
- budget-guard(技能)——人类门控部署的升级契约。
输出契约
报告内容:
- 发布前门禁——每个门禁的真实状态(已运行且通过 / 失败 / 未运行 → 阻塞项)
- 发布产物——版本号提升、变更日志/说明(基于真实变更)、文档
- PR 链接或暂存发布计划 + 回滚路径
- 等待人类签字的事项(不可逆步骤)及任何剩余阻塞项