Repository navigation
Description
Refs: #3716
Problem
/source-control:pull-request ready runs the verify gate locally on the merged head before flipping the PR. On #8714 that run took about 27 minutes: scripts/check-affected.sh --tests selected about 140 *.test.sh suites, and one of them failed until the run did an npm ci. CI then ran the same suites in about 8 minutes (pr-require-checks, measured on the branch's runs). The local run bought nothing CI did not also check, and it was the largest single delay between PR creation and merge.
Fix
When the CI test lanes are present and healthy for the change (the same venue check review-venue already does for the AI review lanes), ready skips the local full-suite verify. It runs locally only what CI cannot, and says which suites it skipped. ready --verify-local keeps the current behavior on request.
"Healthy for the change" means: a successful test-lane run (pr-require-checks test jobs) exists at the merged head SHA. A draft has none ("A draft skips the test lanes", AGENTS.md), so the local verify runs as today. ci-status still gates the merge either way.
Verification
A ready run on a PR whose CI lanes are healthy reports the verify step as skipped (CI covers it) and flips the PR in minutes.
Split to #8994: that live ready run, observed after this merges.
Done when (lane)
-
plugins/source-control/skills/pull-request/scripts/review-venue.shreports a test-lane row:ciwhen a successful test-lane run exists at the given head, otherwiselocal. Check: the PR's CI runsreview-venue.test.shwith a fixture for each state, and it passes. -
plugins/source-control/skills/pull-request/reference/ready-for-review.md(the verify step at :204) skipscheck-affected.sh --testswhen that row isci, records--result skippedthroughverify-gate.sh, reportsskipped (CI covers it)and names the skipped suites; it runs the suites when the row islocalor with--verify-local. Check: the PR's CI runsverify-gate.test.shand the markdown lint, and they pass. - The
--verify-localflag and the skip line exist in the skill text. Check: the PR's CI runs a skill-text test for both strings (new or extended*.test.shin that skill), and it passes. - A
.changes/source-control/fragment exists. Check: the PR's CI runsscripts/check-changelog-fragments.sh --checkand it passes. - Out of scope:
AGENTS.md(its wording still holds).
Activity
github-actions commentedon Oct 21, 2026
Thanks for the report. Automated triage handed this issue to a maintainer.
Proposed work class: work-class: scoped
Basis: automated intake triage; a maintainer confirms or changes it.
Automated triage. A maintainer reviews it.