ci(gh-merge-green): check merge-freeze issues instead of the WINDOW file
Merged
TE
19d ago+183+183+012345678901234567890123456789-346-346-012345678901234567890123456789
Summary
gh-merge-green read merge freezes from ~/agent-mailbox/WINDOW on cmux-lawrence over ssh. Every token there had lapsed by 2026-10-10, but the helper kept refusing on them, and a host without ssh to cmux-lawrence (Huge Blue) couldn't merge into feat-cmux-next at all.
It now runs the merge-freeze issue checker from #21706 instead:
python3 scripts/ci/merge_freeze.py check --repo "$repo" --pr "$num" --base "$base"
- It runs on every base, not only feat-cmux-next, since a freeze issue names its own
branch:(or none, for every branch).changedis still computed for every base, and merged-head checks keep using it. - Exit 1 refuses with the freezes the checker prints. Any other non-zero refuses as "freeze state unknown".
--overridestill doesn't lift a freeze; the owner'sfreeze-oklabel does. - merge_freeze.py lists the changed files itself, so the renamed-from side of a rename counts, and a list the files API cut short at 3000 refuses instead of clearing the freeze. Tests pass the list as
--fileswith fixtures instead. --freeze-tokenand--window-tokenprint a warning that they're retired and are ignored, so existing callers keep working.- The RELEASE mail that went into cmux-lawrence's coordinator inbox after a token merge is gone, along with all ssh to cmux-lawrence.
- Under
GH_MERGE_GREEN_TESTthe checker readsGH_MERGE_GREEN_FREEZE_ISSUESandGH_MERGE_GREEN_FREEZE_EVENTS(default/dev/null), so tests never read the real repository. docs/ci/merge-freeze.mdnow says gh-merge-green enforces the check.
Testing
- Regression first: 0a4d3fe32ca adds
FreezeRegression(issue fixtures) andRetiredTokenRegression. Against the old script,python3 -m unittest tests.test_gh_merge_green.FreezeRegression tests.test_gh_merge_green.RetiredTokenRegressiongave 11 of 12 failing. After the fix it gives 12 of 12 passing. After review, a 13th test checks that a merge intomainhits amainfreeze. Each test also puts a fakesshon PATH and asserts nothing called it. python3 -m unittest tests.test_gh_merge_green: 97 tests OK.python3 -m unittest tests/test_merge_freeze.py: 13 OK.tests.test_gh_merge_green_revert: OK.- A review subagent approved, and its two medium findings (renames on the GraphQL fallback, the 3000-file cap) are fixed in the last commit. The rename and file-cap paths are covered by merge_freeze.py's own logic, not by a gh-merge-green test.
- Live and read-only:
merge_freeze.py checkagainst real PRs exits 0, andlistshows no open freezes right now. scripts/verify-local.py --affected origin/maincouldn't give a useful result here: this worktree is a sparse checkout without app sources, so the app-tree checks (xcstrings, project, package-groups and others) fail on missing files. No app code changed. CI's linux-guard lane runs both test files.
Changelog
none
Proof
CI and tooling only.
🤖 Generated with Claude Code