Repository navigation
fix(ci): deploy main after a merge when prod is not converged on itΒ #3869
Description
π€ Generated by the Agentic Engineer
Evidence
#2838's decision splits the fix in two. The first half β reporting whether prod runs main from :latest's signed provenance β shipped in #3847 and was wired after every push to main in #3864.
Its verdicts are now observed on real pushes, not only in tests. Every run of π§ Observe Production Convergence since #3864 merged reported CONVERGED, naming the pushed commit:
main commit |
Verdict |
|---|---|
5e3049c9 (2026-09-16 21:07Z) |
CONVERGED |
56950579 (2026-09-17 07:35Z) |
CONVERGED |
b526999a (2026-09-17 07:49Z) |
CONVERGED |
So the reporter does not raise false alarms on ordinary merges. The race in #2838 is rare by design, so no real BEHIND has been seen yet; its handling is covered by the report's own tests (behind warns without failing, diverged warns without failing, unknown fails).
Problem
Today a BEHIND or DIVERGED verdict only leaves a warning on the main run. Nothing acts on it, so prod can still sit behind a merge until some later deploy happens to land β the exact outcome #2838 describes.
Hypothesis
If the post-merge check deploys main's tip whenever prod is behind it, a merge that lands just after another group's heal is always deployed within one run, and a converged prod is never redeployed.
Smallest useful change
After a push to main, when the convergence verdict is BEHIND, run the existing manual deploy of main (cd.yaml, under the same prod-deploy lock and gates). CONVERGED does nothing. UNKNOWN fails the check without deploying, as it does today.
DIVERGED keeps warning without deploying. The report itself notes it is expected for a moment whenever a queued merge group has deployed before it merges, so redeploying main on it would roll back a group that is about to land. The race in #2838 reads BEHIND once the later group merges, so BEHIND alone covers it.
Acceptance criteria
-
BEHINDstarts one deploy ofmain's tip under theprod-deployconcurrency lock, through the existing deploy gates (no new bypass). -
CONVERGEDandDIVERGEDstart no deploy;UNKNOWNstarts no deploy and stays red. - The decision is tested for all four verdicts, and an ablation that always deploys (or never deploys) makes those tests fail.
- After merge, the next
mainpush still reportsCONVERGEDand starts no deploy.
Success signal
Over the following month, every main run ends CONVERGED either directly or after its own redeploy, and no deploy starts on a CONVERGED verdict.
Rough size: SβM. Reaches production, so it carries the deploy lane's usual review and gates.
Metadata
Metadata
Assignees
Labels
Type
Fields
Priority
Effort
Projects
- StatusShow more project fieldsβ Done
Activity
coderabbitai commentedon Sep 17, 2026
π Issue Planner
Check the box below or use the
@coderabbitai plancommand to generate an implementation plan and prompts that you can use with your favorite coding assistant.π§ͺ Issue enrichment is currently in open beta.
You can configure auto-planning by selecting labels in the issue_enrichment configuration.
To disable automatic issue enrichment, add the following to your
.coderabbit.yaml:π¬ Have feedback or questions? Drop into our discord!
chore: agent-claim #3869 nonce=00b7a88e34698812bc2bdfd3ffc2db4d