Skip to content

Share One Bounded Backoff Loop Between pr_review.py wait's Two Polls - #2732

Merged
ptr727 merged 4 commits into
developfrom
feature/auto-2723
Oct 10, 2026
Merged

ptr727 merged 4 commits into
developfrom
feature/auto-2723

Conversation

@ptr727

@ptr727 ptr727 commented Oct 10, 2026

Copy link
Copy Markdown
Owner

Summary

  • scripts/pr_review.py wait now runs both of its polls through one backoff helper on the POLL_DELAYS schedule, so a fix to the timeout check or the delay schedule lands once. The Copilot poll passes in its initial (done, answer, drift) tuple, so the --ignore-quota-signal path that forces done false still holds for the first evaluation, and re-reads through live_state, now extended to return those three readings rather than left as an unused sibling.
  • The held-head check poll re-reads a narrower Q_HELD document, the fields its readers use, sharing one HELD_FIELDS fragment with Q_FULL. A Q_HELD read that would end the poll is re-read as Q_FULL first, so the poll stops only on the full payload the verdict then grades, and a poll that never sleeps grades its first read with no extra call. On the timeout the verdict takes a fresh Q_FULL.
  • Tests: two new backoff cases pin the delay schedule and the timeout bound, a case pins Q_HELD leaving out the threads and files, and two wait cases pin the query sequence and the full-read confirmation. The existing wait tests pass unchanged. Two other existing tests changed: the contract test that scraped a local delays list now reads POLL_DELAYS, and the two live_state tests take its new return shape.

Closes on promotion: #2723

Local review

Three local-strict-review passes ran, and the edit budget is spent. Disposed of so far:

Still open, each introduced:

  • Test gap. The answer fake ignores the query, so every Q_HELD read in the suite carries reviewThreads and files. Replacing final = polled if any(polled is f for f in fulls) else None with final = polled passes the suite, although on a held timeout ending on a Q_HELD read the digest would raise a KeyError on reviewThreads.
  • Design. The fulls list and its identity scan do more than the job needs, since only the last full read can be the returned value.

🤖 Generated with Claude Code

ptr727 and others added 3 commits October 10, 2026 05:56
Both wait polls now call one backoff helper on the POLL_DELAYS schedule, so a fix to the
timeout check or the delays lands once. The held-head check poll reads a narrower Q_HELD
document, the fields its readers use, and the verdict keeps its own Q_FULL read for the
threads and files only the digest needs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A held poll that never sleeps grades its first Q_FULL read again, so the narrow query costs
it no extra call. The Copilot poll reads through live_state, extended to return the three
readings the wait stops on, rather than a nested sibling of it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A narrow read ending the held poll is now re-read in full before the poll stops, so the payload
that ends the poll is the payload graded, and a merge reading UNKNOWN on that read keeps the
poll going rather than returning 30 with time left.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings October 10, 2026 13:10
@coderabbitai

coderabbitai Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Repository: ptr727/ProjectTemplate/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 2b382dad-a246-4b51-b9fa-8a90ceeff674

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Only the last full read can be the poll's returned value, so one reference replaces the list.
A case serving Q_HELD without threads or files pins the timeout's fresh Q_FULL read, which no
case reached while the fake ignored the query.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@codecov

codecov Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
⚠️ Please upload report for BASE (develop@c286e95). Learn more about missing BASE report.

Additional details and impacted files
@@            Coverage Diff             @@
##             develop    #2732   +/-   ##
==========================================
  Coverage           ?   59.83%           
==========================================
  Files              ?       16           
  Lines              ?     8367           
  Branches           ?        0           
==========================================
  Hits               ?     5006           
  Misses             ?     3361           
  Partials           ?        0           
Flag Coverage Δ
python-3.13 59.83% <100.00%> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Unresolved moderate findings affect timeout handling coverage and polling efficiency.

2 open findings
What changed in this PR

This PR centralizes bounded polling in pr_review.py wait, narrows held-head queries, and expands regression coverage.

Changes:

  • Adds shared backoff and held/full query handling.
  • Updates live-state and polling tests.
  • Adds coverage for timing and confirmation reads.
File Summary Findings
scripts/​pr_review.py Adds shared polling and held/full query logic. P1 narrow-payload timeout test gap; P2 full-read retention and snapshot reuse issues.
tests/​test_pr_review.py Updates and expands polling coverage. P2 test does not exercise the actual narrow payload.

🧠 Review effort: Lite


💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread scripts/pr_review.py Outdated
Comment thread tests/test_pr_review.py
@ptr727

ptr727 commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

Local review dispositions since this pull request opened:

@ptr727

ptr727 commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

A recorded local strict-review pass covers head d5d13ccc2ef9327f88d2ea5b89f3723677adf3f2, the content this pull request carries at that commit against develop, and it recorded 1 finding.

@ptr727
ptr727 merged commit 744d303 into develop Oct 10, 2026
13 checks passed
@ptr727
ptr727 deleted the feature/auto-2723 branch October 10, 2026 13:22
ptr727 added a commit that referenced this pull request Oct 10, 2026
… Corrections to Main (#2740)

## Summary

Promotes 20 changes from `develop` to `main`:

- #2737: Flag a Lone Semicolon After an Explanatory Colon in the Prose
Gate
- #2734: Share pr_review.py wait's Liveness Readings and Open the Held
Poll on Its Snapshot
- #2732: Share One Bounded Backoff Loop Between pr_review.py wait's Two
Polls
- #2729: Document pr_review.py wait's Immediate 44 and check_nodes's
Node Keys
- #2727: Narrow pr_review.py wait's Exit 44 to Required Checks
- #2722: Poll an Attested Head's Checks in pr_review.py wait
- #2720: Name the Command That Enumerates Open Feature Pull Requests in
backlog-burndown
- #2718: Point the Skills Refresh Cadence at host-setup.md
- #2716: Fall Back to os.defpath for PATH in Two Test Harnesses
- #2714: State the Pip Form's Root-Config Type-Check Command in
python-codestyle
- #2712: State the Build Profile's CI Type Check as the Validator Runs
It
- #2709: Bring the Fleet-Map workflow-ci-contract Entry and G9 Gap Up to
the Skill Description
- #2707: Bring the Line-Endings Reference and a Test Docstring to the
Corrected Wording
- #2705: Drop the Stale Utilities driftNote From the Registry
- #2703: Remove the Inert SC2016 Directives in configure.sh and Correct
the shell-codestyle Claim
- #2701: Report Whether the Fleet Skills Plugin Is Installed and Enabled
in the Live Channel
- #2699: Align the Audit Report Template Dimensions With AUDIT.md
Section 4
- #2697: Harden the Source-Pinning Assertions in test_pr_review.py
- #2695: Name the Off-Grammar --branch Outcome in AUDIT.md
- #2693: Count Every Unresolved Review Thread in pr_review.py

Closes #1396
Closes #2731
Closes #2723
Closes #2725
Closes #2724
Closes #2685
Closes #1308
Closes #2191
Closes #1862
Closes #2711
Closes #2025
Closes #1243
Closes #1237
Closes #1115
Closes #1156
Closes #1757
Closes #1593
Closes #1732
Closes #1509
Closes #1404

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants