Repository navigation
Session Handoff [auto-1904]: Detect a Copilot Review Request That Adds No Timeline Event #1977
Description
Activity
- addedhandoffA link in the session handoff chain, one open issue per trackA link in the session handoff chain, one open issue per track
on Sep 28, 2026 Parked, waiting on #1978
Done. Both next steps are implemented on branch
feature/auto-1904, pushed at638b779f, three signed commits ondevelopat86c6edb7:scripts/pr_review.pywaitreads the pull request's review-request state (reviewRequestsandREVIEW_REQUESTED_EVENTtimeline items) before its Copilot auto-request. TherequestReviewsmutation now answers with the same state. Where the request left neither a pending Copilot reviewer nor a new Copilot review-request event id, and the final read does not show the reviewer pending, the poll is skipped and the wait exits 48status=REQUEST_NOT_RECORDED, naming an exhausted Copilot allowance as the likely cause and routing it to the maintainer. A drifted reviewer login in that state reads as unknown, and the wait polls as before. The module docstring documents 48. It ranks above 47 and below every other terminal code.- Tests in
tests/test_pr_review.pycover these cases: unrecorded, a first-ever request, recorded by the event alone, recorded by the pending set alone, a review on the final read, the reviewer pending on the final read, precedence over the quota signal, a missing field, and a drifted login. The detection was mutation-tested, so reverting it fails the 48 cases. The full suite passes (1778 tests at the first commit), and ruff, mypy, the prose gate, the eol gate,build_dist.py --checkandspec/validate.pyare clean. - Step 2 is done.
.github/copilot-instructions.md,.agents/skills/pr-review-conduct/SKILL.md(with its regenerated copies) anddocs/pr-reviewer-reference.mdeach name the state beside the clear-and-re-request recovery.
Why it parked. Three local strict review passes are recorded, with 3, 6 and 1 findings. The third pass raised one
introducedfinding after two edit rounds. At that pointlocal-strict-review"Disposing of Findings" stops editing and hands the finding to the maintainer. #1978 carries the finding, the proposed fix and the options.The worktree is left standing at
/home/pieter/repos/worktrees/ProjectTemplate-auto-1904, clean. Its branch has no upstream set, so push with an explicit refspec.What remains:
- Act on the answer to #1978. Under option 1, print the 48 note in place of the quota note whenever
recorded is False, and assert the note text intest_an_unrecorded_request_outranks_the_repo_wide_quota_signal. Then run one more local pass and record it. - Open the feature -> develop pull request with
Closes on promotion: #1904in its body, and drive it withdrive-pr.
Accepted during review, do not re-raise:
gh_graphqlraising on a failed pre-request read or readback is the script's convention for every read.- Drift that appears only in the request set is not itself reported.
- The 47 docstring's omission of 44 predates this change.
No lesson was filed.
- addedblockedBlocked on another issue: one in another repository, or a decision issue here for a parked handoffBlocked on another issue: one in another repository, or a decision issue here for a parked handoff
on Sep 28, 2026 Decision #1978 answered by the maintainer: option 1, one more edit round: print the exit-48 note instead of the quota note when the request recorded nothing, and assert the note text in the test. The
blockedlabel is removed, so this lane can resume with that answer.- removedblockedBlocked on another issue: one in another repository, or a decision issue here for a parked handoffBlocked on another issue: one in another repository, or a decision issue here for a parked handoff
on Sep 28, 2026 Parked, waiting on #2024
Done this round. The worker resumed on the answer to #1978 (option 1). Branch
feature/auto-1904is pushed ateb66c38f, all commits signed. It merged currentdevelop(c0467a5e) with no conflict, then added three commits:b025d2dfmakeswaitprint the exit-48 note in place of the quota note when both hold, and asserts the note text intest_an_unrecorded_request_outranks_the_repo_wide_quota_signal. This is the Allow a Third Edit Round on the Unrecorded-Request Note in auto-1904 #1978 fix.8a00469banswers local pass 1 (4introducedfindings). An unrecorded answer is confirmed by a digest read before the poll is skipped, and that same read decides the digest and exit 48. A null request-state field is treated as unread.REQUEST_STATEreadsreviewRequests(first:100). The stale ranking comment above exit 47 is removed.eb66c38fanswers local pass 2 (2introducedfindings). An unrecorded answer is read again withQ_REQUEST_STATEand judged byrequest_recorded. The contradicted "No re-read here" comment is removed.
Each new test was mutation-checked against the code it guards. Checks run clean: the full suite (1804 tests), ruff check and format, mypy, the prose gate
--diff origin/develop, the eol gate,build_dist.py --check, andspec/validate.py. Three local passes are recorded (4, 2 and 2 findings), and the last one coverseb66c38f.Why it parked. Pass 3 raised 2
introducedfindings after the budget of two edit rounds. Both come from one root: the wait now decides exit 48 with no pause between reads, so recording lag reads as an unrecorded request. The last check is alsoreviewer_requestedoverQ_FULLrather thanrequest_recorded. #2024 carries the findings and the design options.The worktree is left standing at
/home/pieter/repos/worktrees/ProjectTemplate-auto-1904, clean ateb66c38f. Its branch has no upstream set, so push with an explicit refspec.What remains:
- Act on the answer to Decide How Long wait Looks Before Calling a Copilot Request Unrecorded #2024. Under option 1: on an unrecorded answer, sleep the first poll delay, read
Q_REQUEST_STATEand judge it withrequest_recorded(before, …), exit 48 only if still unrecorded and the digest read does not show the reviewer pending, and otherwise poll as before.request_copilot_reviewwould need to returnbefore, or the wait would need to own the confirmation. Then run one more local pass and record it. - Open the feature -> develop pull request with
Closes on promotion: #1904in its body, and drive it withdrive-pr.
Accepted during review, do not re-raise:
gh_graphqlraising on a failed read is the script's convention.- Drift that appears only in the request set is not itself reported.
- The 47 docstring's omission of 44 predates this change.
- The
reviewRequests(first:10)window inQ_LIVEandQ_FULLpredates this change.
No lesson was filed.
- addedblockedBlocked on another issue: one in another repository, or a decision issue here for a parked handoffBlocked on another issue: one in another repository, or a decision issue here for a parked handoff
on Sep 29, 2026 Continued in #2042, round 2 on track
auto-1904.
Next steps, in priority order
scripts/pr_review.py: after a successful CopilotrequestReviews, read the pull request back, and where the request added noreview_requestedevent and the pending reviewer set is still empty, report a distinct state (the issue suggestsrequest_not_recorded) naming the likely cause, the Copilot allowance or entitlement, instead of waiting out the full timeout as if the review were merely slow. Done looks like:waitandstatussurface that state promptly, a test drives it with a constructed request that leaves no timeline event, the existing pending and quota paths are unchanged, and a feature -> develop pull request carryingCloses on promotion: #1904is merged to develop..github/copilot-instructions.mdand thepr-review-conductmechanics describe clearing and re-requesting as the remedy, name this shape there too, since clearing and re-requesting does not clear it. Done looks like: the same pull request carries that wording, or the step is recorded as not needed.External blockers
None known. A Copilot allowance that is exhausted during the drive is itself this shape, and is a
STOPfor the run rather than something the worker routes around.Internal dependencies
Step 2 follows step 1, since the wording names the state step 1 introduces.
State
No branch, worktree, or pull request exists yet for this lane. #1897, a
pr_review.py waitfix, is merged to develop and not yet promoted, so the worker branches fromdevelopto build on it.The parked decision queue
Empty.
What the last round did
This link was created by an
unattended-handoffpicker from the open backlog. No work has been done on #1904.What not to repeat
Nothing yet.
New learnings
None yet.