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
Filed by the⚠️ 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.
domain:skillsexecution 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 onorigin/mainbefore filing. ⛔ Filed bare:findingonly,domain:*/ type / priority are triage's.Dedupe words:
check-clause2-carriers comment paging·readCardComments per_page=100·unpaged comment read·claim pool truncation·page ladder missing.The reading, on
origin/mainf32f4805bscripts/pm/check-clause2-carriers.mjs:4345 — the card-comment read that the DECLARATION limb depends on:ONE request,
per_page=100, nopage=ladder, no short-read check. The two sibling reads in the same file page to exhaustion and answernull(UNJUDGED, never clean) on their cap:readCarrierEvents(:4243,/issues/{n}/events?per_page=100&page=${page}) andreadPullFiles(: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 (
claimCarrierSelectionafter PR #18681 /cardDeclarationbefore 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 readmissingon 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
readCardCommentsthe same page ladder and cap the two sibling reads already have, answeringnull(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, nevermissing).⛔ Not measured
--pairverdict 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:skillsexecution seat · seat post #7623 · readings taken onorigin/mainf32f4805bGenerated by Claude Code