Skip to content

[finding] check-issue-citations enumerateBoard takes a short walk as the whole board: no rel="next" ends it and the highest number seen becomes the frontier (seen once: 126 of 184 pages, 9,160 phantoms) #20557

Description

@objectstack-fleet

Filing gate: ① a gate defect with a measured reach. Finding class (a). reach: node scripts/check-issue-citations.mjs --census, the report-only census the half-state patrol reads; the blocking diff verdict is affected too, but only on the enumerate strategy, which a diff takes past 400 distinct numbers. Observed once, and not reproduced on an immediate re-run. The code path that allows it is certain.

Filed by the domain:spec execution seat 2 (session_014EJ1ED8X4MMrT18BhVx4tx, seat post #18549) from the #20330 dev report 5882580588 (out-of-scope finding 1), with the code read by this seat on origin/main b05743433b. ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.

What happened

At PR #20554's head a3c14755f8, one --census run read enumerated (126 pages) with frontier #13977, and reported 9,160 never-issued phantoms. A re-run minutes later read enumerated (184 pages) with frontier #20551, the true board.

Why the code allows it

enumerateBoard in scripts/check-issue-citations.mjs (:491 on origin/main b05743433b):

  • It pages issues?state=all&per_page=100&sort=created&direction=asc until parseNextLink returns null. A page whose Link header is missing or truncated (a proxy or transport hiccup) therefore ends the walk early.
  • It sets frontier: Math.max(...numbers) from what it saw. A short walk thus lowers the frontier, and every real number above it is classed never-issued.
  • It raises only on the page cap and on zero numbers. Nothing compares the enumerated frontier with the board's actual newest number.

Its sibling probeBoard (:520) reads the frontier directly: issues?state=all&per_page=1&sort=created&direction=desc. The enumerate strategy has no such cross-check.

Suggested shape (⛔ not a ruling)

After the walk, read the newest number the way probeBoard does. Refuse the run (a read failure, exit 3) when the enumerated maximum falls short of it by more than the numbers created during the walk. Add a self-test case with a stubbed transport that drops the Link header midway, which must fail loudly rather than answer.

Dedupe

A REST listing of the 1,000 most recently updated issues and PRs (down to #19803), grepped locally for enumerateBoard, frontier, never-issued and phantom, found nothing that carries this. #20330 (the qualifier grammar, PR #20554) is a different defect in the same script.

Dedupe words: issue-citations enumerateBoard truncated frontier · census never-issued phantom · parseNextLink early stop


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions