Repository navigation
Conversation
Run the existing three cheap checks on integration PRs while preserving all 26 runners and check names for main PRs. Promote immutable snapshots every four hours or manually with an App token, synchronize main back after a promotion, and document the merge-commit and bisect recovery procedures. Cover base and draft budgets, no-op gates, snapshot isolation, sync conflicts and races with code-health tests that use only tiny local Git repositories. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reject rewritten promotion history before synchronization, pin PR job dependencies and guards, and cover retry and no-op promotion ticks. Document safe bisect confirmation and workflow serialization. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Author
|
Closing on Max's decision (d1106, 2026-10-09): not adopting the integration-branch pilot for now. The branch Why:
Revive if: after the cap goes up, US PR jobs still wait more than 30 minutes at the 90th percentile over a week. Before reopening, replace the updated-order scan with a stable enumeration and rerun the review. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Draft pilot. Inert until someone creates an
integrationbranch; merging this alone changes no PR's CI. Adopting it is a decision for Max and the US maintainers (this repo's CLAUDE.md asks for authorization on runner-budget changes); it is queued for Max.What
An opt-in flow for small, independent fixes:
integrationrun the cheap tier only: PR validation (ReleaseLock), Package and compatibility, and Quick Feedback. The four heavy groups (Baseline,HouseholdAPIPartners,Contrib,PythonTests) getif: github.base_ref == 'main'.mainare unchanged: the same 26 runner jobs, the same draft behaviour. A code-health test proves the base-mainjob set and budget are identical to today's.promote-integration.yaml(every 4 hours at :17 UTC, and on dispatch) runs.github/promote_integration.py:integrationis absent or apromote/*PR intomainis already open (an open promotion is never restarted by new fixes); opens no promotion whenintegrationhas no commitsmainlacks, though it may still syncmainintointegration;mainback intointegration(picking up the last promotion's merge and the release bot's version bump) and pushes; on a conflict it stops with a warning;integration's head onpromote/<UTC timestamp>and opens a non-draft PR intomainwith the GitHub App token, so the PR gets CI. The body lists member PRs and commits and says to merge with a merge commit.CONTRIBUTING.md: which PRs targetintegration, what runs where, the merge-commit rule, and the red-promotion procedure (bisect the snapshot's first-parent history with the failing shard's command, revert the culprit onintegration, close the failed promotion, dispatch a new one).mainintegrationWhy
The PolicyEngine org is on GitHub Team: 60 concurrent standard-runner jobs across every repo (Actions limits). On Oct 6-7 the org averaged 58.5 of 60 busy all day, and this repo's
Pull requestworkflow was 80% of the org's runner-minutes (386 full runs over 153 PRs in 2.7 days, a median of 541 runner-minutes each). On Oct 8 at 21:35Z ten full runs started within 31 seconds (260 jobs).Rough arithmetic at Oct 6-8 volume: about 57 PRs a day × 2.5 pushes × about 14 runner-minutes of cheap tier, plus up to 6 promotions a day at about 1,090 runner-minutes each (PR run plus push-to-main run), is about 8,500 runner-minutes a day, against about 72,800 measured. That is an estimate from those volumes, not a measurement; a red promotion adds a bisection and a fresh promotion.
What the hub keeps (US + core hub, 2026-10-09)
main(the class of break Subtract Mississippi's HSA deduction once, from the account holder #9865 + Combine a negative Mississippi joint column with the other column #9885 caused on 10/7).integration.integration" and "released" become separate states in the hub's registry.Invariants and tests
main: runner jobs and budget identical to todaytest_main_runner_checks_and_matrix_members_are_unchanged,test_pr_runner_budget_keeps_the_heavy_suites_separateintegration: exactly the three cheap jobs can runtest_pr_jobs_and_runner_budget_by_base_and_drafttest_every_job_is_skipped_for_draftstest_open_promotion_freezes_every_remote_refand the pagination / concurrency-shape testsintegrationis absent or not ahead ofmain(a behind branch is still synced)test_promoted_integration_receives_version_bump_without_new_prtest_promote_integration.pyexercises the script against tiny local git repositories with a mockedgh: snapshot-name collisions, merge conflicts, and a concurrent push rejected during synchronization.Ran: the five affected code-health files (
test_pr_runner_budget.py,test_pr_workflow_skips_drafts.py,test_make_test_matches_ci.py,test_rest_python_groups.py,test_promote_integration.py) with--confcutdir=policyengine_us/tests/code_health: 41 passed.actionlinton the new workflow: clean. Onpr.yaml: the same single pre-existing SC2126 style note on base and head.ruff formatandruff checkclean.Before activating (unverified here)
APP_IDneeds contents, pull requests and workflows write on this repo for the synchronization push and the promotion PR. Not checked.workflow_dispatchwith one small fix onintegration, watching that the promotion PR's CI starts and runs all 26 jobs.Review round 1 (independent Codex lane): approve as an inert pilot, no blocking findings (
~/reviews/pe-actions-concurrency-2026-10-08/review-10018-out.md). Its notes (a squash-merged promotion would replay member commits; pin job dependencies in tests; bisect caveat) are being addressed in a second commit before this leaves draft.Built by a Codex lane from a written brief (
~/reviews/pe-actions-concurrency-2026-10-08/build-integration-prompt.md), read in full by the opening session, and independently reviewed before leaving draft.🤖 Generated with Claude Code