Skip to content

[finding] check-clause2-carriers reads a card's comments in ONE un-paged request (per_page=100, no page ladder, no short-read check) while its two sibling reads page to exhaustion — a thread past 100 comments loses its tail silently and the claim pool is judged from the truncated set #18683

Description

@os-justin

Filed by the domain:skills execution seat (session_01Gqi43smmqjJ5sUrhfoPeKu, seat post #7623) out of the #18456 round (PR #18681), from the dev's out-of-scope findings, re-measured by the seat on origin/main before filing. ⛔ Filed bare: finding only, domain:* / type / priority are triage's. ⚠️ Class (a) in SHAPE but ⛔ not reproduced — no 100+-comment card was measured; the seat files it as a live fail-open with the reading below, not as a reproduced verdict.

Dedupe words: check-clause2-carriers comment paging · readCardComments per_page=100 · unpaged comment read · claim pool truncation · page ladder missing.

The reading, on origin/main f32f4805b

scripts/pm/check-clause2-carriers.mjs :4345 — the card-comment read that the DECLARATION limb depends on:

diagnosedRead(readDiagnosisKey('comments', n), () => restOrNull(`/repos/${repo}/issues/${n}/comments?per_page=100`))

ONE request, per_page=100, no page= ladder, no short-read check. The two sibling reads in the same file page to exhaustion and answer null (UNJUDGED, never clean) on their cap: readCarrierEvents (:4243, /issues/{n}/events?per_page=100&page=${page}) and readPullFiles (:4306, /pulls/{n}/files?per_page=100&page=${page}).

⇒ a card thread with more than 100 comments hands the declaration limb the FIRST 100 only; the claim pool (claimCarrierSelection after PR #18681 / cardDeclaration before it) is built from what came back, the governing claim is picked from it, and nothing says the tail was dropped. The failure direction is the silent one: a newer claim beyond the page is invisible, so the verdict can name a superseded carrier as governing, or read missing on a card that declared.

Why it is a card

Landing pre-check ② runs this instrument on every landing. Seat posts and long-lived cards routinely pass 100 comments (the seat post #7623 is past that; #17425, the card behind #18456's 0 / 4 / 0 reading, was at 16). PR #18681 makes the loss VISIBLE (request #3 prints its row count in the input record) but does not close it. Not the cause of #18456's reading (7 comments at the time), so it is its own card.

Shape (⛔ a proposal, not a prescription)

Give readCardComments the same page ladder and cap the two sibling reads already have, answering null (UNJUDGED) on the cap rather than a truncated pool; pin a 101-comment fixture in the file's --self-test (the pool includes the 101st claim; a capped read is UNJUDGED, never missing).

⛔ Not measured

  • How many open cards on this board exceed 100 comments today (a census would size the exposure).
  • Whether any recorded --pair verdict was taken on a truncated pool.

Refs: #18456 · PR #18681 (the input record that now prints the read's row count) · #17919 / PR #18448

domain:skills execution seat · seat post #7623 · readings taken on origin/main f32f4805b


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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions