Skip to content

Session Handoff [auto-1904]: Detect a Copilot Review Request That Adds No Timeline Event #1977

Description

@ptr727

Next steps, in priority order

  1. Fix A Copilot Review Request That Adds No Timeline Event Reads as Patience #1904 in scripts/pr_review.py: after a successful Copilot requestReviews, read the pull request back, and where the request added no review_requested event and the pending reviewer set is still empty, report a distinct state (the issue suggests request_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: wait and status surface 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 carrying Closes on promotion: #1904 is merged to develop.
  2. Where the runbook's "accepted but never picked up" paragraph in .github/copilot-instructions.md and the pr-review-conduct mechanics 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 STOP for 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 wait fix, is merged to develop and not yet promoted, so the worker branches from develop to build on it.

The parked decision queue

Empty.

What the last round did

This link was created by an unattended-handoff picker from the open backlog. No work has been done on #1904.

What not to repeat

Nothing yet.

New learnings

None yet.

Activity

  1. added
    handoffA link in the session handoff chain, one open issue per track
    on Sep 28, 2026
  2. ptr727 commented on Sep 28, 2026

    @ptr727
    OwnerAuthor

    Parked, waiting on #1978

    Done. Both next steps are implemented on branch feature/auto-1904, pushed at 638b779f, three signed commits on develop at 86c6edb7:

    • scripts/pr_review.py wait reads the pull request's review-request state (reviewRequests and REVIEW_REQUESTED_EVENT timeline items) before its Copilot auto-request. The requestReviews mutation 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 48 status=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.py cover 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 --check and spec/validate.py are clean.
    • Step 2 is done. .github/copilot-instructions.md, .agents/skills/pr-review-conduct/SKILL.md (with its regenerated copies) and docs/pr-reviewer-reference.md each 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 introduced finding after two edit rounds. At that point local-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:

    1. 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 in test_an_unrecorded_request_outranks_the_repo_wide_quota_signal. Then run one more local pass and record it.
    2. Open the feature -> develop pull request with Closes on promotion: #1904 in its body, and drive it with drive-pr.

    Accepted during review, do not re-raise:

    • gh_graphql raising 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.

  3. added
    blockedBlocked on another issue: one in another repository, or a decision issue here for a parked handoff
    on Sep 28, 2026
  4. ptr727 commented on Sep 28, 2026

    @ptr727
    OwnerAuthor

    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 blocked label is removed, so this lane can resume with that answer.

  5. removed
    blockedBlocked on another issue: one in another repository, or a decision issue here for a parked handoff
    on Sep 28, 2026
  6. ptr727 commented on Sep 29, 2026

    @ptr727
    OwnerAuthor

    Parked, waiting on #2024

    Done this round. The worker resumed on the answer to #1978 (option 1). Branch feature/auto-1904 is pushed at eb66c38f, all commits signed. It merged current develop (c0467a5e) with no conflict, then added three commits:

    • b025d2df makes wait print the exit-48 note in place of the quota note when both hold, and asserts the note text in test_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.
    • 8a00469b answers local pass 1 (4 introduced findings). 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_STATE reads reviewRequests(first:100). The stale ranking comment above exit 47 is removed.
    • eb66c38f answers local pass 2 (2 introduced findings). An unrecorded answer is read again with Q_REQUEST_STATE and judged by request_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, and spec/validate.py. Three local passes are recorded (4, 2 and 2 findings), and the last one covers eb66c38f.

    Why it parked. Pass 3 raised 2 introduced findings 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 also reviewer_requested over Q_FULL rather than request_recorded. #2024 carries the findings and the design options.

    The worktree is left standing at /home/pieter/repos/worktrees/ProjectTemplate-auto-1904, clean at eb66c38f. Its branch has no upstream set, so push with an explicit refspec.

    What remains:

    1. 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_STATE and judge it with request_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_review would need to return before, or the wait would need to own the confirmation. Then run one more local pass and record it.
    2. Open the feature -> develop pull request with Closes on promotion: #1904 in its body, and drive it with drive-pr.

    Accepted during review, do not re-raise:

    • gh_graphql raising 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 in Q_LIVE and Q_FULL predates this change.

    No lesson was filed.

  7. added
    blockedBlocked on another issue: one in another repository, or a decision issue here for a parked handoff
    on Sep 29, 2026
  8. ptr727 commented on Sep 29, 2026

    @ptr727
    OwnerAuthor

    Continued in #2042, round 2 on track auto-1904.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    blockedBlocked on another issue: one in another repository, or a decision issue here for a parked handoffhandoffA link in the session handoff chain, one open issue per track

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions