Repository navigation
ci: pick tests from the diff for PRs to main; explicit full triggers - #311
Merged
Merged
Conversation
A pull request to main without the full-ci label no longer gets the cheap-only lane and a red gate. It goes through the diff selector (ci_plan.py) like every other PR: tier1 for the closure of the changed packages, or full when the selector's own rules say so (core prefixes, fan-out, guard files). The gate passes on the receipts the plan expects.
Full validation stays an explicit, separate request: the full-ci label, a commit-message line "CI: full" in any commit of the PR, a manual run from the Actions tab with the new boolean input "full", or a push to main. The directive is parsed by commit_requests_full in ci_gate_decide.py (exact line match, case-insensitive) and can only add validation.
Removed: the cheap_only lane, the minimal-plan subcommand and the unlabeled-PR early branch of gate_cli. Documented in .github/ci-structure.md ("Requesting validation").
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
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.
What
A pull request to
mainwithout thefull-cilabel used to get a cheap-only lane and a red gate (Full validation not requested for this revision.), so every PR needed a full run. It now goes through the diff selector that other PRs already use (ci_plan.py):tier1for the closure of the changed packages, orfullwhen the selector's own rules say so (core prefixes, fan-out thresholds, guard files such as.github/scripts/and.githooks/, see.github/ci-policy.toml). The gate passes on the receipts the plan expects ("Tier 1 validation passed." / "Full validation passed.").Full validation is an explicit, separate request, any of:
full-cilabel on the PR (unchanged);CI: full(case-insensitive) in any commit of the PR; for examplegit commit -m "fix: x" -m "CI: full". It can only add validation;full; without it a manual run goes through the selector;main(unchanged).Removed: the
cheap_onlylane, theminimal-plansubcommand and the unlabeled-PR early branch ofgate_cli. Documented in.github/ci-structure.md("Requesting validation", gate truth table).Unchanged on purpose: job names and graph,
run-name(it keeps sayingci [quick]for a run escalated to full by the directive or by the selector; the expression cannot see commit messages), concurrency groups,cancel-full-on-unlabel,ci-tests.yml,ci-windows-shards.yml,ci-security.yml,ci-policy.toml.Tests
python -I -m unittest discover -s .github/scripts: 39 tests;.github/ci-shards: 13; YAML parse andactionlint .github/workflows/ci.ymlclean.NO_FULLrejection, thecheap_onlyexpression forheavy_allowed, dropping the labeled-PR full check, a case-sensitive directive,searchinstead offullmatch, allowing trailing text or dropping the CR allowance in the directive,%sinstead of%Bin the git log format, disabling the stale-head check, changing the success reasons, the summary row, the "missing jobs" reason - every one makes the tests named for it fail.mode: full(the change touches guard files), everything ran, andci-gatesaw only the knownsecurity / dependency-reviewfailure (the fork's Dependency graph is off). First attempt (run 41003782502) also had a Windows shard failure, a flaky MCP test, fixed separately in test(mcp): stale-candidate close watcher lives for the test, not for 5 seconds #310; attempt 2 of the same head was green apart from dependency-review.Known limits
tier1path (a small PR that the selector does not escalate) is not exercised by this PR, because a change to.github/scripts/always falls back to full. It is exercised by the next small PR.actionlintdo not prove live Actions behaviour (theinputscontext on dispatch, checkout history forgit log BASE..HEADonpull_request); the fork run above covers the pull_request path, the dispatch input is untested until it is used once.🤖 Generated with Claude Code