🤖 Generated by the Agentic Engineer
Part of #2838. It follows #3846, whose resolver merged in #3847.
Evidence
Audience and impact
This serves the platform operator. It closes the last path by which prod can silently disagree with main after a merge.
Smallest useful change
After a merge lands on main, run the resolver against the digest :latest names:
CONVERGED: do nothing.
BEHIND or DIVERGED: run the normal production deploy of main, through the same composite and the shared prod-deploy lock.
UNKNOWN: do not deploy; fail visibly, so a broken check is never mistaken for a converged prod.
Because this job reaches production, it inherits every gate the existing deploy paths carry: the publication gate, the authorization and signing contracts, and the per-workflow coverage guards. It lands behind an opt-in switch, defaulting off, and is activated separately.
Acceptance criteria
Size
M: one workflow job plus contract-test updates, behind an opt-in switch.
Part of #2838. It follows #3846, whose resolver merged in #3847.
Evidence
scripts/resolve-prod-convergenceanswers from signed evidence whether prod's published artifact matchesmain. The answer isCONVERGED,BEHIND,DIVERGEDorUNKNOWN.mainuntil an unrelated deploy happens to land.packages: read, so its last acceptance point (a liveCONVERGEDread) is proven here, not in Tell whether prod has converged on main from the published artifact's signed provenance #3846.Audience and impact
This serves the platform operator. It closes the last path by which prod can silently disagree with
mainafter a merge.Smallest useful change
After a merge lands on
main, run the resolver against the digest:latestnames:CONVERGED: do nothing.BEHINDorDIVERGED: run the normal production deploy ofmain, through the same composite and the sharedprod-deploylock.UNKNOWN: do not deploy; fail visibly, so a broken check is never mistaken for a converged prod.Because this job reaches production, it inherits every gate the existing deploy paths carry: the publication gate, the authorization and signing contracts, and the per-workflow coverage guards. It lands behind an opt-in switch, defaulting off, and is activated separately.
Acceptance criteria
main, the job readsCONVERGEDand does not deploy (proven on a real merge).BEHINDorDIVERGEDverdict triggers exactly one deploy ofmain, and a second evaluation afterwards readsCONVERGED.UNKNOWNnever deploys and fails the job with the resolver's reason.prod-deploylock and cannot run concurrently with a merge-group deploy or heal.CONVERGEDacceptance point is recorded from this job's first real run.Size
M: one workflow job plus contract-test updates, behind an opt-in switch.