目标
建立 post-merge 验证 + 自动 revert 装置:合并到 main 后跑 smoke/canary 验证,失败则自动生成 revert PR 并 auto-merge。这是把"事前人审"换成"事后回滚"的核心装置——没有它,自动合并不成立(#81 结论:这是"敢不敢开"的两个前提之一)。
背景(源自 #81 §一 / §6)
一人公司的自动合并风险模型不是"坏代码进了 main",而是"坏代码进了 main 而我三天后才知道"。事前拦截永远有漏,事后快速回滚把爆炸半径从"天"压到"分钟"。本装置同时也是破玻璃回填超时(P3-2)和熔断机制的复用基础。
涉及文件
CI-Workflows/.github/workflows/release.yml 或新增 post-merge.yml(push to main 触发的 smoke 验证)
- 各业务仓 smoke 测试定义(什么算"合并后健康":服务起得来 / 关键导入可用 / 健康检查通过——按仓声明)
- revert 自动化(workflow 内:生成 revert PR → enable auto-merge → 开 issue 通知人)
governance/policy/(smoke 失败处置策略、熔断阈值)
执行步骤
- 为每个受管仓声明 smoke 验证内容(进 policy,机器可解析)。最小可行:构建通过 + 测试套件在 main 上重跑 + 仓特定的健康检查。
- 实现 post-merge workflow:push to main 触发 → 跑 smoke → 失败则:
a. 用 AG-1 token 生成 revert PR(git revert 该 merge commit);
b. 对该 revert PR enable auto-merge(走 P1-2 实测过的路径);
c. 开 issue(打 P0 label)通知人,内容含被 revert 的 commit、smoke 失败日志链接。
- 熔断:连续 N 次(建议 3)自动 revert 后,自动暂停该仓 auto-merge(repository variable / 或开 P0 issue 要求人工介入),防"坏了合、合了 revert"的振荡烧额度。
- revert PR 本身必须过 gate(不能为 revert 开 bypass——revert 也可能是坏的)。
验收标准
- 合入一个 smoke 必败的 commit 后,无需任何人工操作:main 在分钟级恢复绿,且产生 revert PR 记录 + P0 issue 通知。
- revert PR 过 gate 才合并(gate 红时 revert 也不合并,开 P0 issue 升级叫人)。
- 连续 3 次 revert 后该仓 auto-merge 自动暂停并有显式告警。
测试方法(预先指定)
T1 端到端自动 revert(核心):在测试仓 Use-up-Plan:
- 先声明一个 smoke 检查(如 "main 上某脚本退出码为 0")。
- 开一个 PR 使该 smoke 必败(如让脚本 exit 1),走正常流程合并进 main。
- 断言(全程零人工):
- post-merge workflow 在合并后自动触发且变红;
- 10 分钟内出现自动生成的 revert PR(标题/body 含被 revert 的 commit SHA);
- revert PR gate 绿后被 auto-merge;
- main HEAD 上 smoke 重新变绿;
- 存在一条 P0 issue,含 commit SHA 与失败 run 链接。
T2 revert 也要过 gate(负向):构造 revert PR 自身 gate 红的情形(可临时让 revert 内容触碰 C1 路径触发 adr-required)→ 断言 revert PR 不被合并,且出现升级通知(P0 issue 或追加评论)。
T3 熔断(负向):连续注入 3 次 smoke 必败合并(可用 workflow dispatch + 测试输入加速,不真等 3 个真实 PR)→ 断言:第 3 次后该仓 auto-merge 暂停标志被置位,后续自动 revert 流程不再尝试 auto-merge,而是直接开 P0 issue 叫人。测试后复位标志。
T4 不误报(正向):正常 PR 合并后 smoke 绿 → 断言不产生 revert PR、不产生 issue。
依赖
- P1-1(auto-merge 已开)
- P1-2(App token enable auto-merge 已实测——revert PR 的自动合并复用此路径)
- P1-3(gate 可信,revert 过 gate 才有意义)
目标
建立 post-merge 验证 + 自动 revert 装置:合并到 main 后跑 smoke/canary 验证,失败则自动生成 revert PR 并 auto-merge。这是把"事前人审"换成"事后回滚"的核心装置——没有它,自动合并不成立(#81 结论:这是"敢不敢开"的两个前提之一)。
背景(源自 #81 §一 / §6)
一人公司的自动合并风险模型不是"坏代码进了 main",而是"坏代码进了 main 而我三天后才知道"。事前拦截永远有漏,事后快速回滚把爆炸半径从"天"压到"分钟"。本装置同时也是破玻璃回填超时(P3-2)和熔断机制的复用基础。
涉及文件
CI-Workflows/.github/workflows/release.yml或新增post-merge.yml(push to main 触发的 smoke 验证)governance/policy/(smoke 失败处置策略、熔断阈值)执行步骤
a. 用 AG-1 token 生成 revert PR(
git revert该 merge commit);b. 对该 revert PR enable auto-merge(走 P1-2 实测过的路径);
c. 开 issue(打
P0label)通知人,内容含被 revert 的 commit、smoke 失败日志链接。验收标准
测试方法(预先指定)
T1 端到端自动 revert(核心):在测试仓
Use-up-Plan:T2 revert 也要过 gate(负向):构造 revert PR 自身 gate 红的情形(可临时让 revert 内容触碰 C1 路径触发 adr-required)→ 断言 revert PR 不被合并,且出现升级通知(P0 issue 或追加评论)。
T3 熔断(负向):连续注入 3 次 smoke 必败合并(可用 workflow dispatch + 测试输入加速,不真等 3 个真实 PR)→ 断言:第 3 次后该仓 auto-merge 暂停标志被置位,后续自动 revert 流程不再尝试 auto-merge,而是直接开 P0 issue 叫人。测试后复位标志。
T4 不误报(正向):正常 PR 合并后 smoke 绿 → 断言不产生 revert PR、不产生 issue。
依赖