Re-split of #811 (2/2 of #803), which timed out at the 2100s action budget bundling the fetch refactor + sync-issues + tests. This is the fetch-refactor half only. Builds on #810 (merged: _run_json backoff + error surfacing).
Scope — scripts/canary-rollout.sh (fetch mechanism only)
Replace the per-workflow gh run list --repo <r> --workflow <wf> enumeration (one call per workflow × per agent × per tier — the burst that trips secondary rate limits) with one paginated gh run list --repo <repo> per repo, cached for the run, then filter to the target workflow locally. Keep _run_json's public contract/return shape identical so callers and #810's backoff are unchanged.
Out of scope
Acceptance criteria
- Per-evaluation
gh run list call count materially reduced (state before/after in the PR).
- Same promote/block decisions on good data (return shape unchanged).
- Fails closed; existing canary-rollout bats stay green; add a test for the per-repo cache + local filter.
Re-split of #811 (2/2 of #803), which timed out at the 2100s action budget bundling the fetch refactor + sync-issues + tests. This is the fetch-refactor half only. Builds on #810 (merged:
_run_jsonbackoff + error surfacing).Scope —
scripts/canary-rollout.sh(fetch mechanism only)Replace the per-workflow
gh run list --repo <r> --workflow <wf>enumeration (one call per workflow × per agent × per tier — the burst that trips secondary rate limits) with one paginatedgh run list --repo <repo>per repo, cached for the run, then filter to the target workflow locally. Keep_run_json's public contract/return shape identical so callers and #810's backoff are unchanged.Out of scope
Acceptance criteria
gh run listcall count materially reduced (state before/after in the PR).