Skip to content

Say a Missing Required Check May Sit in a Partly Unread Rollup - #3486

Merged
ptr727 merged 6 commits into
developfrom
fix/3471-unread-rollup-note
Oct 25, 2026
Merged

ptr727 merged 6 commits into
developfrom
fix/3471-unread-rollup-note

Conversation

@ptr727

@ptr727 ptr727 commented Oct 25, 2026 •

Copy link
Copy Markdown
Owner

Summary

The promotion review of #3484 found exit 45 saying a required check had not registered while the head's rollup holds a type the reader drops, which the digest names CHECKS PARTIALLY UNREAD. The required check could sit there.

  • Where the rollup is partly unread, the CHECKS_MISSING clause 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.
  • The BLOCKED hold's CHECKS_PENDING note says an unmet required check may sit in the unread part, on the same condition.
  • The wait help and scripts/README.md say so for both, and the help's hold precondition names the head's own rollup read and not CHECKS TRUNCATED.
  • Exit codes are unchanged. GitHub's rollup union holds only CheckRun and StatusContext today, so this is reachable only after an API change.

Part of #3471, which the promotion pull request closes.

Local pass findings

Every introduced finding the local passes raised is fixed on this branch, the earlier list in this body included.

Pre-existing findings, filed:

Declined as style on text this change wrote, a preference between defensible forms per fleet-code-review's rule to omit preferences:

  • _unmet_note with several unmet contexts reads "A, B, which may sit in the rollup's unread part", where "which" can attach to the last name alone.
  • The help, README, and digest each name the unreadable type in slightly different words.

Test plan

  • python -m unittest test_pr_review test_pr_review_size test_pr_review_copilot from tests/: 534 tests pass, with positive and negative cases for each conditional clause and remedy.
  • The pre-commit gates pass, and prose_lint.py --check sentence-length is clean over the diff.

🤖 Generated with Claude Code

ptr727 and others added 3 commits October 25, 2026 15:37
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>
Copilot AI lite review requested due to automatic review settings October 25, 2026 22:44
@ptr727

ptr727 commented Oct 25, 2026

Copy link
Copy Markdown
Owner Author

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

@coderabbitai

coderabbitai Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

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

Run configuration
  • 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.

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>

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 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.md for 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

Comment thread scripts/pr_review_checks.py Outdated
Comment thread scripts/pr_review.py Outdated
Comment thread tests/test_pr_review.py
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

codecov Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 81.04%. Comparing base (41ed0d7) to head (1f9fde0).

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           
Flag Coverage Δ
python-3.13 81.04% <100.00%> (+<0.01%) ⬆️

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.

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>
@ptr727

ptr727 commented Oct 25, 2026

Copy link
Copy Markdown
Owner Author

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

@ptr727
ptr727 merged commit 6a1990f into develop Oct 25, 2026
13 checks passed
@ptr727
ptr727 deleted the fix/3471-unread-rollup-note branch October 25, 2026 23:07
ptr727 added a commit that referenced this pull request Oct 26, 2026
)

## 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)
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