Problem
The frontend's guards are Python tests in repo_tests/, for example i18n_untranslated_ratchet_test.py and frontend_reduced_motion_guard_test.py. A GUI PR that fixes strings or motion has to move one of those pins, which puts a .py file in its diff. .github/filters/python-paths.yml (**/*.py) then runs the whole 12-shard python suite.
Measured on 2026-09-11: of the 9 open PRs that touch the GUI, none is GUI-only. #16313's one non-GUI file is repo_tests/i18n_untranslated_ratchet_test.py, so a terminal-modal fix pays for 12 shards of backend tests (4–10 min of work each, plus 20–47 min queued; see #16332) that it can't affect. A separate "GUI train" wouldn't help, because the cost comes from this trigger, not from how PRs are grouped.
Proposal (the design is open)
When a PR's only Python changes are guard modules under repo_tests/, run those modules, plus anything that imports them, in one job instead of the full sharded suite. Constraints:
Acceptance criteria
Problem
The frontend's guards are Python tests in
repo_tests/, for examplei18n_untranslated_ratchet_test.pyandfrontend_reduced_motion_guard_test.py. A GUI PR that fixes strings or motion has to move one of those pins, which puts a.pyfile in its diff..github/filters/python-paths.yml(**/*.py) then runs the whole 12-shard python suite.Measured on 2026-09-11: of the 9 open PRs that touch the GUI, none is GUI-only. #16313's one non-GUI file is
repo_tests/i18n_untranslated_ratchet_test.py, so a terminal-modal fix pays for 12 shards of backend tests (4–10 min of work each, plus 20–47 min queued; see #16332) that it can't affect. A separate "GUI train" wouldn't help, because the cost comes from this trigger, not from how PRs are grouped.Proposal (the design is open)
When a PR's only Python changes are guard modules under
repo_tests/, run those modules, plus anything that imports them, in one job instead of the full sharded suite. Constraints:python_filter_covers_its_guards_test.pymust keep holding. A change to any tree a guard reads still triggers that guard.Acceptance criteria
.pychanges arerepo_testsguard modules runs those modules and their importers, not the 12 shards. Measured on a real PR.repo_testsand production Python together still runs the full suite.