Repository navigation
Say a Missing Required Check May Sit in a Partly Unread Rollup - #3486
Conversation
The promotion review of #3484 found exit 45 asserting a required check had not registered while the rollup holds a type the reader drops, which the digest names CHECKS PARTIALLY UNREAD. The status now says the check is not among those read and may sit in the unread part. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The local pass found the new clause claiming a check was not read when it was read from another app, and dropping the remedy. The partly unread rollup is now one more cause in the original clause, which keeps the other causes and the remedy, and the test asserts the name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The second local pass found the partly unread cause carrying no remedy that reads the check it may hide. The status now leads with reading the head commit's check runs there, and the help and README name the digest's CHECKS PARTIALLY UNREAD and CHECKS TRUNCATED states directly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
A recorded local strict-review pass covers head |
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars.
|
The open findings listed on #3486: the BLOCKED hold's CHECKS_PENDING note now says an unmet required check may sit in the rollup's unread part, the help's hold sentence names CHECKS TRUNCATED rather than a rollup read whole, reading the check runs is a first step before the fixes, and a test proves that remedy appears only on a partly unread rollup. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved documentation, diagnostic, and test-coverage findings remain across the reviewed files.
3 open issues
What changed in this PR
This pull request improves wait diagnostics for required checks hidden in a partly unreadable status rollup, documenting the CHECKS PARTIALLY UNREAD condition and guiding users to inspect check runs on the head commit.
Changes:
- Adds conditional unread-rollup context and remediation to missing-check diagnostics.
- Updates command help and
scripts/README.mdfor the new condition. - Adds regression coverage for partly unread rollups.
| File | Summary | Review findings |
|---|---|---|
tests/test_pr_review.py |
Adds coverage for a required check hidden in an unreadable rollup member. | P2 (4 votes): Add coverage confirming the reread advice is omitted for the normal, non-unread branch. |
scripts/README.md |
Documents the CHECKS PARTIALLY UNREAD status explanation. |
P2 (1 vote): Align the exit-code table’s whole-rollup wording with the newly documented partial-read behavior. |
scripts/pr_review.py |
Updates exit 45 help for partly unread rollups. |
P1 (4 votes): Update the BLOCKED hold description, which still says the rollup must be read whole. |
scripts/pr_review_checks.py |
Adds unread-rollup details and check-run inspection guidance to missing-check messages. | P2 (4 votes): Add the same unread-rollup qualification and reread remedy to the CHECKS_PENDING path. |
Review effort: Lite
The local pass found the docs naming the unread part only for exit 45, though the BLOCKED hold's CHECKS_PENDING note names it too, and nothing proving that note's clause is conditional. An unread node may be a commit status, so the remedy reads the head commit's checks and statuses rather than its check runs alone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #3486 +/- ##
========================================
Coverage 81.03% 81.04%
========================================
Files 25 25
Lines 8918 8922 +4
========================================
+ Hits 7227 7231 +4
Misses 1691 1691
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
The second local pass on this push found the exit 30 sentences naming the unread part with no condition, and "not CHECKS TRUNCATED" dropping the read-off-the-head precondition the hold needs. Both now say so, the docstrings share one phrasing, and the note says the unmet check may sit in the unread part rather than listing it as another item. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
A recorded local strict-review pass covers head |
) ## Summary Promotes the pull requests merged into develop since release 2.0.1184. - [#3483](#3483): a held `wait` exits `45` with `status=CHECKS_MISSING` where it used to exit `0` over checks that never ran. The cases are a payload with no commit matching the head, a `DIRTY` merge with no check posted, and a `DIRTY` or `BEHIND` merge whose required context is unregistered or came from another app. The `wait` help and `scripts/README.md` name each exception that stays at `0`. - [#3485](#3485): the exit-0 list in the help and README names a pull request no longer open, which this promotion's own review found missing. - [#3486](#3486): where the head's rollup holds a type the reader cannot parse, the `CHECKS_MISSING` clause and the `BLOCKED` hold's note say a required check may sit in that unread part, which this promotion's second review found missing. - [#3490](#3490): the no-check-posted cause of exit `45` is scoped to `DIRTY` in the help and README and names its remedy, which this promotion's third review found missing. - [#3491](#3491): the `wait` help and README restore the caveat that a review-present exit `0` does not poll the checks, which this promotion's fourth review found dropped. Closes #3471 ## Constituent coverage Each change this promotion carries had coverage on its own pull request into develop: | Pull request | Merged head | Coverage | | --- | --- | --- | | [#3483](#3483) | `8f29cadd` | attested local pass at the merged head, base `develop`. A Copilot round on the earlier head `ee530a4b` opened three findings, each fixed in `995ce78a` and resolved, so no Copilot round covers the merged head | | [#3485](#3485) | `275e4c8b` | attested local pass at the merged head, base `develop`, and a Copilot table on the merged head naming exactly its 2 changed files, no open findings | | [#3486](#3486) | `1f9fde03` | attested local pass at the merged head, base `develop`. A Copilot round on the earlier head `b8a74e8a` opened three findings, each fixed later on the branch and resolved, so no Copilot round covers the merged head | | [#3490](#3490) | `ba37c856` | attested local pass at the merged head, base `develop`, and a Copilot table on the merged head naming exactly its 4 changed files. Its headline's test-wording preference was declined in a comment | | [#3491](#3491) | `8c65e4d8` | attested local pass at the merged head, base `develop`, and a Copilot table on the merged head naming exactly its 2 changed files, verdict clean, no open findings | 🤖 Generated with [Claude Code](https://claude.com/claude-code)


Summary
The promotion review of #3484 found exit
45saying a required check had not registered while the head's rollup holds a type the reader drops, which the digest namesCHECKS PARTIALLY UNREAD. The required check could sit there.CHECKS_MISSINGclause names "sits in the rollup's unread part" as one more possible cause, and its remedy leads with reading the head commit's checks and statuses. The other causes and remedies are kept.BLOCKEDhold'sCHECKS_PENDINGnote says an unmet required check may sit in the unread part, on the same condition.waithelp andscripts/README.mdsay so for both, and the help's hold precondition names the head's own rollup read and notCHECKS TRUNCATED.CheckRunandStatusContexttoday, so this is reachable only after an API change.Part of #3471, which the promotion pull request closes.
Local pass findings
Every
introducedfinding the local passes raised is fixed on this branch, the earlier list in this body included.Pre-existing findings, filed:
scripts/pr_review_checks.py, the empty-rollup checks (pre-existing): a rollup of only unreadable nodes is not read as empty. Filed as A Rollup of Only Unreadable Nodes Is Not Read as Empty by the Held Wait #3488.Declined as
styleon text this change wrote, a preference between defensible forms per fleet-code-review's rule to omit preferences:_unmet_notewith several unmet contexts reads "A, B, which may sit in the rollup's unread part", where "which" can attach to the last name alone.Test plan
python -m unittest test_pr_review test_pr_review_size test_pr_review_copilotfromtests/: 534 tests pass, with positive and negative cases for each conditional clause and remedy.prose_lint.py --check sentence-lengthis clean over the diff.🤖 Generated with Claude Code