Repository navigation
feat(pr-review-cli): add a generated-data input for files no review reads - #971
Conversation
…eads A generated data file no review can read whole, such as claude-code-plugins#12558's 184 KB verify-legacy-fails.json, made every review partial. The new generated-data input names a list file of paths or globs, read at the merge base only. A changed file it declares leaves the diff, files.txt, the file total, the size and the copy groups in the full-diff step, and the incremental list, count and diff in the scope step, in all three legs. An executable file, a symlink, a rename, a hold-paths or SENSITIVE_PATHS match, or a path outside plain characters is still reviewed. The extract step names each left-out file in the coverage (data_files), and the marker's status line and the shadow report state the count and names. The completion notice is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VcupomBPg7kuobwLoNpxEW
…t the scope Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VcupomBPg7kuobwLoNpxEW
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
claude-security-review reviewed No security findings in the change since 151999f. I read
Pre-existing design, not part of this diff: a PR author can still put content in a data file the base branch already declares, and it goes unreviewed once its diff exceeds the floor. The floor narrows this rather than widening it. critical-findings: 0 |
|
claude-review reviewed No findings. I reviewed the incremental change ( What changed:
Checked and found sound:
Not a finding: the full-diff step sizes a file by its whole-PR diff, and the incremental step by the change since the last review. A file's classification can differ between the two on edge cases, such as a file that was left out and later gets a small edit. Both outcomes are safe, because the file is reviewed rather than silently skipped. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 151999fb61
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
… data patches incremental - A declared data file leaves the review only when its diff section is over DATA_FLOOR_BYTES (7500: one review's 300000-byte read budget over the 40 files it reads whole), so a one-record edit is still reviewed. - sinceLastReview drops data files before the missing-patch check, so a data file whose large patch the API omitted keeps the push incremental. - The status line names the first 10 data files, then "and N more". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VcupomBPg7kuobwLoNpxEW
Refs: melodic-software/claude-code-plugins#12558 <!-- session: poteto --> ## Summary Adds `generated-data` to the reviewed `allowedInputs` of `melodic-software/ci-workflows/.github/workflows/pr-review-cli.yml` in `components/runner-policy/policy.json`. ## Fix melodic-software/ci-workflows#971 (merged) added the opt-in `generated-data` input. Without this entry, a caller that passes it fails `runner-policy` with "the reusable workflow call has inputs absent from its reviewed contract: generated-data" (seen on claude-code-plugins#12601). The input names a repository file listing generated data files the review skips. It carries no secret and does not affect runner routing. ## Verification - `node --test components/runner-policy/runner-policy.test.mjs`: 226/226 pass. ## Related - melodic-software/ci-workflows#971 (the input); melodic-software/claude-code-plugins#12601 (the caller opt-in, waiting on this through the sync). Same shape as #940. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01VcupomBPg7kuobwLoNpxEW Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Refs: melodic-software/claude-code-plugins#12558
Summary
pr-review-cli.ymlgains agenerated-datainput: the repository path of alist file (one path or glob per line, blank lines and
#comments skipped)naming generated data files the review never reads. melodic-software/claude-code-plugins#12558
adds a 184 KB generated
verify-legacy-fails.json, which no review readswhole, so every head fails
publish-reviewwithfailure-class=partial("read 2 of 3 changed file(s)").
generated-copies, the only exemption today,needs a source file.
Fix
git cat-file blob "$base:$PATH"),as
generated-copiesis, so a pull request's own copy of the list declaresnothing (see Residuals for the limits of that). A list missing there warns
and declares nothing.
files are computed first, and one
:(exclude,literal)<path>pathspec arraygoes to every git call (the
pr.difftee, the deleted-bytes count, thefiles.txtlist, the--rawfeeding the copy groups). A data file leavesthe diff, the list, the file total, the size and the copy groups together,
so the split and extract steps' copy arithmetic still agrees. The glob
function the copy groups use is now shared by both awk programs.
the change from the merge base and drops data files from
incremental-files.txt, its count andincremental.diff. It does so beforethe missing-patch check, so a data file whose large patch the API omitted
keeps the push incremental; a missing patch on any other file still forces
a whole review. A push of data files alone skips as
no-changewith its ownreason.
regular file at a path of letters, digits and
._/@+-, whose diff sectionis over
DATA_FLOOR_BYTES(7500). Basis for 7500: one review reads at mostREAD_BUDGET(300000 bytes) acrossMAX_CHUNK_FILES(40) files, so 7500 isone file's even share; a smaller change, such as one deleted
FAILrecord,fits a review and is reviewed. An executable, a symlink, a rename, or a
hold-pathsor SENSITIVE_PATHS match is still reviewed, and an emptySENSITIVE_PATHS declares nothing, as the copy groups fail closed.
coverage.data_files(the names) anddata files left out: Nto its job summary. A count its list cannot backmakes the review incomplete.
publish.cjsvalidates the list and writes; N data file(s) not reviewed: <path>, ...into the marker's status lineand the shadow report's coverage line, naming the first 10 and then
and M more.claude-lane-review-completenotice is unchanged: both merge-gateparsers anchor on
$(claude-code-plugins.github/scripts/pr-merge/clear-escalations.mjsandbabysit_review_evidence.py), so a new field there would break them.file.
Verification
node --testover every.github/**/*.test.cjs: 1057 pass, 0 fail.7500 bytes) and leave the review;
data/small.json, also declared, loses onerecord and stays in the list. Setting the floor to 0 failed both the
full-diff and incremental tests.
scope=incremental; the same push with the code file's patch missing isscope=whole.and 2 more.files.txt,files=,pr.diffand the copy groups; no list, a list the baselacks, and a list only the head holds declare nothing; an executable, a
SENSITIVE_PATHS match, a hold-paths match, a symlink and a non-plain path are
not exempted. The same rules hold in the incremental scope step. The extract
step names the files, and a mismatched list is incomplete. The status line
and shadow report name the file.
in the JS rule, failed the matching test each time.
files.
Residuals (accepted, not built)
Raised by the Automation Lanes review and accepted for this pull request:
change (
R/T) statuses, and a path over 500 characters have no test.Removing
s == 0/sensitive.length === 0,NF != 2/rest.length > 0,or the length cap leaves every test green. The incremental bytes assertion
computes its expected value from the same section format the code writes,
so it checks itself.
is read at the merge base, but the input itself is set by the caller
workflow in the pull request's own head (a change there is reviewed, since
.github/**is a SENSITIVE_PATHS match). A branch cut from an older mainalso keeps globs that main later removed. Also requiring the list at
pull_request.base.shawould close both.:(exclude,literal)<path>also drops paths under a base-side directory of the same name.
Related
Consumer order: this merges first, then claude-code-plugins adds the list file
and
generated-data:to itspr-review-cli.ymlcallers. Only once the claude-code-plugins pull request's merge base holds thelist does its review leave the file out.
https://claude.ai/code/session_01VcupomBPg7kuobwLoNpxEW
🤖 Generated with Claude Code