Repository navigation
pr-merge: enable-auto-merge drops the verdict reader's babysit-listing-miss stderr #10887
Description
Problem
enable-auto-merge runs babysit_verify_evidence.py once per candidate and keeps only one line of its stderr, the babysit-gh-calls line. The reader prints a babysit-listing-miss {...} line on stderr for every incremental read that misses GitHub's live artifact count (Reader._incremental, LISTING_MISS_PREFIX). Those lines never reach the job log. When a candidate falls back to the full repository listing, the log cannot show why.
Where the line is dropped
.github/scripts/pr-merge/enable-auto-merge.mjs at 82432cf, in pythonVerify:
- L1007:
spawn("python3", ...)withencoding: "utf8"captures the reader's stderr intodone.stderr. - L1022-L1025:
ghCallsLine(done.stderr)prints only thebabysit-gh-callsline. Every other stderr line is discarded. - A refusal such as
verify:unreadableexits 0, so the error branch, which would print the last stderr line, does not run either.
Evidence
In enable-auto-merge run 40817220695, candidate #10867 logged:
enable-auto-merge: #10867 calls=128 github-token=124 paginated=0 ms=107111 cached=0
babysit-gh-calls {"calls":{..."override GET repos/{}/{}/actions/artifacts":7,"override GET {}/{}/actions/artifacts":117},...}
enable-auto-merge: #10867 left: pr-merge's gate refuses its verifier verdict (verify:unreadable)
That is 7 incremental page calls, then 117 full-listing pages over 107 s, ending in a refusal. No babysit-listing-miss line appears anywhere in the job log. Three possible causes remain open: the incremental reads missed the live count, a page failed, or the base was rejected.
Fix
Print each babysit-listing-miss line from done.stderr beside the babysit-gh-calls line. Better: print every stderr line except the gh-calls line when the reader's verdict is a refusal. enable-auto-merge.test.mjs would need a case for it. Note that #10743 also edits that test file.
Refs: #10880
Activity
github-actions commentedon Oct 29, 2026
Proposed work class: work-class: scoped
Basis: automated intake triage; the lanes App applied this class.
Size: Small
Complexity: Low
Uncertainty: Known
Flags: none
Blocked by: none
Understood: enable-auto-merge's pythonVerify keeps only the babysit-gh-calls stderr line from the verdict reader. It drops every babysit-listing-miss line, including when the reader exits 0 with a refusal such as verify:unreadable. The fix is to print those lines beside the gh-calls line and add tests. The refinement comment's acceptance criteria already cover this, so nothing is missing. The overlap with PR #10743 on the test file may need a rebase. I found no duplicate. #9497 and the logging work in the open issue list are related but cover different lines.
Automated triage, applied by the lanes App.
melodic-automation-lanes commentedon Oct 29, 2026
Not admitted to the issue lane: no trusted-human acceptance criteria: a listed human must put the confirmed
- [ ]criteria in the body or post them as their own comment, or, on an issue a listed human filed, intake's newest refinement comment must hold them unedited. Admission takes the issue once each of those is met, when intake triages it again (.github/actions/resolve-config/admission-rules.json).melodic-automation-lanes commentedon Oct 29, 2026
The latest triage verdict holds nothing: the issue is at
status: ready.melodic-automation-lanes commentedon Oct 29, 2026
Refinement. A read-only run explored this repository, searched its issues and pull requests, and read the allowed docs to draft what follows. On an issue a listed human filed, it counts as the issue's spec once posted, while unedited; it is still model text, so check it.
Intended outcome: enable-auto-merge's pythonVerify prints every babysit-listing-miss stderr line from the verdict reader to the job log beside the babysit-gh-calls line, with a test.
Acceptance criteria
babysit-listing-miss(CR trimmed), in order, and an empty array when there are nonebabysit-gh-callsline, after the cost lineExternal state: none
Dependencies
Related work
Sources read
Automated refinement by the lanes App. Intake triages the issue again with it.