Skip to content

Promote Develop: Hold a Rollup of Only Unreadable Nodes as an Empty One - #3633

Merged
ptr727 merged 1 commit into
mainfrom
develop
Oct 30, 2026
Merged

ptr727 merged 1 commit into
mainfrom
develop

Conversation

@ptr727

@ptr727 ptr727 commented Oct 30, 2026

Copy link
Copy Markdown
Owner

Promotes the #3488 unread-only rollup hold from develop to main.

  • #3632 Holds a rollup of only unreadable nodes as an empty one, so wait holds a BLOCKED, BEHIND, or DRAFT merge and exits 45 under DIRTY rather than releasing on checks it never read.

Closes #3488

🤖 Generated with Claude Code

## Summary

`check_nodes` in `scripts/pr_review_checks.py` reads a rollup node of an
unrecognized GraphQL union member as a node with empty values and an
`unreadable` key. `held_checks_open` and `checks_never_ran` tested for
an empty rollup with `not nodes`. So a rollup holding only such nodes
was not read as empty. It released a `BLOCKED`, `BEHIND`, or `DRAFT`
merge that an empty rollup holds, and under `DIRTY` it let `wait` exit
`0` rather than `45`.

Both readers now count readable checks through the existing
`checks_tally`, so a rollup of only unreadable types is judged as one
with no check. The `DIRTY` release names the unread types.
`checks_unread` now returns each unread typename once, sorted, so that
message and the digest's `CHECKS PARTIALLY UNREAD` line share one form.
The `wait` help, the `CHECKS_PENDING` status line, and
`scripts/README.md` say the same.

`scripts/pr_review_checks.py` is at 447 lines against its 450 ceiling.

Refs #3488

## Verification

- A new end-to-end test holds a rollup of only an unreadable node to
`30` under `BLOCKED`, `BEHIND`, and `DRAFT`, and exits it `45` under
`DIRTY` with the unread type named. It fails on the unfixed code for all
four merges.
- The `checks_never_ran` unit test adds a mixed rollup, which still
releases, and an unread-only one of two nodes, which names the type
once.
- The full suite ran 3091 tests, OK (skipped=7).
- The local strict review ran three rounds at the `frontier` tier. Round
one found a stale status line, two stale help paragraphs, a repeated
type name, and two sentences over the bound. Round two found the fix's
wording problems and a duplicated dedupe. All were fixed. Round three
found one, which spent the edit budget and was listed here as open.
Splitting the exit-45 help sentence had dropped "Either", so the payload
case read as true of every exit `45`. It is fixed in 1b86688, which
names each case as one of three, and its own recorded pass found
nothing.
- A Copilot round on 3885af8 raised the same help finding, answered by
1b86688. It also found that no test pinned the sorted order. 31a86e7
adds two distinct types in reverse order, and that test fails against an
input-order dedupe. Its recorded pass found nothing.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings October 30, 2026 00:43
@coderabbitai

coderabbitai Bot commented Oct 30, 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.

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.

🟢 Approval recommended

No active review issues remain for the unreadable-only rollup handling change.

No open issues 🎉

What changed in this PR

Promotes unreadable-only rollup handling from develop to main, treating rollups without readable checks as empty during merge-wait decisions.

Changes:

  • Holds BLOCKED, BEHIND, and DRAFT merges with unreadable-only rollups.
  • Returns exit code 45 for DIRTY merges and reports sorted, deduplicated unreadable types.
  • Updates wait messaging and documentation.
  • Adds end-to-end and unit test coverage.
File Summary
tests/​test_pr_review.py Adds coverage for unreadable-only rollups and diagnostic ordering.
scripts/​README.md Documents updated exit-code and wait behavior.
scripts/​pr_review.py Updates wait help and pending status messaging.
scripts/​pr_review_checks.py Counts readable checks and normalizes unreadable-type reporting.

Review effort: Lite

@codecov

codecov Bot commented Oct 30, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 81.63%. Comparing base (15d4c30) to head (e15559f).
⚠️ Report is 446 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #3633   +/-   ##
=======================================
  Coverage   81.62%   81.63%           
=======================================
  Files          26       26           
  Lines        9078     9081    +3     
=======================================
+ Hits         7410     7413    +3     
  Misses       1668     1668           
Flag Coverage Δ
python-3.13 81.63% <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.

@ptr727
ptr727 merged commit d6c2e13 into main Oct 30, 2026
14 checks passed
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.

A Rollup of Only Unreadable Nodes Is Not Read as Empty by the Held Wait

2 participants