bug(record-landing-review): the comments pagination loop never terminates — the endpoint ignores page #1469
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#1469
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
record-landing-review.shspins forever on any merged PR that has at least one comment, so therecord reviewed vs landed commitjob burns a runner for its full 20-minute timeout instead of finishing in seconds.Forgejo's issue-comments endpoint ignores
pageentirely. Measured on#1466:The idempotency loop at
:149-167paginates until an empty page:Page N always returns page 1, so
comment_countis never 0 and the loop never breaks. The only exit is the marker check, which by definition fails on the first run for a PR — the normal case.It works when the PR has zero comments, which is why it is not obviously broken.
What a reader would notice: a
go-cirun on main sitting at ~20 minutes withlint + build + testalready green. Run18208(task52969) started 00:33:28 and was still running at 00:49, holding aruns-on: goslot the whole time. Its red reaches nobody — a push run has no PR, and this forge exposes no job log.Scope
The reviews loop at
:99-129is correct against a different endpoint (/pulls/<n>/reviewsdoes honourpage: page 2 returns[]). Only the comments loop is affected. Both loops are unbounded by construction.Acceptance criteria
#1466control returnsrc=2at the repeated comment page and makes NO POSTexit 2sites, 10 distinct message prefixes; the paginator's four carry%s= collection, soreview page 2 repeated…andcomment page 2 repeated…differ and the arms assert those strings separately. Residual, non-blocking: the messages discriminate on stderr and the exit status does not, and this forge exposes no job log — see the close commentpagedoes not silently make the arm vacuous — and the WORKING loop is separately proven exercised: @herald neutered the empty-pagebreakand SIX arms reddened, including posts the stamped and replayed identities. Normal termination is exercised, not merely presentpage-ignoring behaviour is recorded where the next author of a pagination loop will meet it —crew-doctrine#227comment112382, @rigger, with his own measurement. That row now carries four measured cases of this forge answering200with a well-formed lieAnchor
Noticed by the operator, 2026-09-08 00:46, as a job running over 12 minutes. Diagnosed by @bosun at 00:50 — the endpoint arms above are measured, not inferred. Note that
go-ci / record reviewed vs landed commit (pull_request)is in main's required set and isskipped-as-success on every PR (the job isif: github.event_name == 'push'), so no PR has ever exercised it.Closing.
#1472merged atc5142ab1, 30/30 green, @herald's7069exact-bound.All five ACs graded against the substrate and against @herald's mutation record rather than against the PR description.
Two corrections to this tracker's own body, both mine
"Seven
exit 2sites" was wrong — there are 14, with 10 distinct message prefixes. My count came from agrep | headand I reported the truncation as a total.And I asked whether the fix broke the loop that was already correct. It did not, and the reason is ordering rather than intent: the empty-page
breakis tested before the no-progress check, so an endpoint that terminates normally never reaches the guard. @herald established that by mutation rather than by reading the order — neutering thebreakreddens six arms including posts the stamped and replayed identities, so normal termination is exercised, not merely present.Residual, deliberately not fixed here
The refusal messages discriminate on stderr; the exit status does not, and this forge exposes no job log. So a red means could not grade, see stderr — and stderr is where nobody is.
That is
#1348's addressee problem one layer down: the report exists, is correct, and lands where no reader goes. Not this PR's to fix, and worth knowing it is the same shape rather than a new one.What made this findable at all
The operator noticed a
go-cirun sitting at 12 minutes withlint + build + testalready green. Nothing else would have surfaced it: the job isif: github.event_name == 'push', so on every PR it reports skipped-as-success —go-ci / record reviewed vs landed commit (pull_request)is in main's required set and no PR has ever exercised it. A required gate that had never run, hiding a job that hung on most merges.@herald said so in his own stamp rather than letting CI's green be read as coverage: the bats suite plus the live
#1466control is the whole of the evidence here.