From 464b91d6afbbf00c0a95d402483e71e9c80963a4 Mon Sep 17 00:00:00 2001 From: Evan Rusackas Date: Tue, 22 Sep 2026 12:44:34 -0700 Subject: [PATCH] ci: require branches to be up to date before merging master Stacked on #44543. required_status_checks.strict is currently false, so a PR's required checks are evaluated against whatever base commit its branch last ran CI against, not the actual master it will land on top of. Two PRs can each individually pass, then merge back to back and collectively break master, with nothing re-validating the second one against what the first just changed. That's exactly what happened with #44465 and #44467: #44467 added check_pot_drift.py and regenerated messages.pot; #44465's branch predated that merge, so its own CI never saw the new check at all, and strict: false let it merge 18 minutes later anyway, silently reintroducing the drift #44467 had just fixed. #44543 (required babel-extract) narrows how that specific failure mode can happen again, but doesn't close the race itself -- a branch still doesn't have to be caught up with master to merge. strict: true does: every PR has to incorporate the latest master and re-run its required checks against it before merging, so the second PR in a sequence like this one would be forced to see the first one's changes and fail its own checks if the combination breaks something. This is repo-wide, not translation-specific, and affects merge velocity on busy days (a rebase/update-branch round trip before every merge), which is why it's a separate PR from #44543 rather than bundled with it. Co-Authored-By: Evan Rusackas Co-Authored-By: Claude Sonnet 5 --- .asf.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.asf.yaml b/.asf.yaml index 27b41d211526..c3749b6e85dc 100644 --- a/.asf.yaml +++ b/.asf.yaml @@ -71,7 +71,7 @@ github: master: required_status_checks: # strict means "Require branches to be up to date before merging". - strict: false + strict: true # contexts are the names of checks that must pass # unfortunately AFAICT for `matrix:` jobs, we have to itemize every # combination here.