Repository navigation
feat(source-control): run a local AI review only where CI review lanes do not - #7735
Conversation
…s do not Add the pull-request `review-venue` read action and its shared reference. Per lane (code, security) it reports `ci` when the repository's CI review lane is present and its newest run with a verdict succeeded within the window, else `local`. Prep, ready and the work CI mode skip a local review the CI lane covers and name a local review as the lane's stand-in. Readiness no longer calls a usage-limited review lane safe to proceed. The CI code-review and security-review lanes gain round convergence: diff-only re-review after the first round, no repeated findings, the bug class named once, and a three-round cap. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-detection # Conflicts: # plugins/source-control/skills/pull-request/SKILL.md
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 finished @kyle-sexton's task in 3m 17s —— View job Security review complete
ScopeReviewed all 15 files changed in this PR ( Findings (1)IMPORTANT — Posted as an inline comment on Reviewed, no issues found
claude-lane-summary: lane=claude-security-review sha=26db4a586739fdc4e070188596b3d38793c5f377 run=39055838085 |
|
Claude finished @kyle-sexton's task in 4m 15s —— View job Code review complete
SummaryReviewed the full diff ( Most of the change is prose additions to skill/reference markdown ( I looked hardest at
No findings met the high-signal bar (something a careful senior reviewer would block or flag with a Not independently verified (author-claimed only): the claude-lane-summary: lane=claude-review sha=26db4a586739fdc4e070188596b3d38793c5f377 run=39055838087 |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 26db4a5867
ℹ️ 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".
|
claude-security-review has reviewed this pull request through b1358cb; a later push is reviewed from there. |
|
claude-review has reviewed this pull request through b1358cb; a later push is reviewed from there. |
review-venue now reads the caller workflow's state and calls any state but active `local absent`, since a disabled workflow keeps its run history but runs on no trigger. It also lists only pull_request runs, so a manual or scheduled success cannot mask a failing pull request run. Spells "unparsable" the way the typos check expects. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YcPjcqFavvzkTGBKXMgdXR
…iew lanes The rules cited no observed stumble. Across the last 80 merged pull requests the claude review lanes posted findings on at most 3 distinct heads (PRs 7717 and 7615), so the three-round cap never fired, and no later round reposted an earlier finding. The section also restated the upstream round cap, and its "No repeats" rule trusted any PR comment as the lane's own history and read none of the inline review comments the lanes post findings in. Removing it resolves all of these; the review plugin is left unchanged by this PR. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YcPjcqFavvzkTGBKXMgdXR
|
Claude finished @kyle-sexton's task in 2m 36s —— View job Incremental code review complete
ScopeThis round's diff (
This push addresses the two prior Codex findings on Checked
No findings. 0 inline comments posted. claude-lane-summary: lane=claude-review sha=b1358cbd4cc056e0c46229c8111a761062b5f1f2 run=39056505193 |
|
Claude finished @kyle-sexton's task in 1m 7s —— View job Security review complete
ScopeIncremental review of the diff since Findings (0)This diff is a hardening-only change that fixes exactly the two issues
No new vulnerability surface: The test-stub additions in No inline comments posted (nothing met the high-signal bar). claude-lane-summary: lane=claude-security-review sha=b1358cbd4cc056e0c46229c8111a761062b5f1f2 run=39056505177 |
No related issue: implements the owner-approved review policy (one review venue per lane, decided at run time); the workflow-side changes it needs are listed under Related.
Summary
Keeps the local review skills but runs a local AI review only where CI does not cover it. A new read action,
/source-control:pull-request review-venue, reports per lane (code-review,security-review) whether the repository's CI review lane is present and healthy (ci) or a local review must stand in (local: absent, failing, which includes a usage-limit stop, or stale). Prep, ready and theworkCI mode act on it. Also fixes the readiness contradiction that called a usage-limited lane "safe to proceed".Fix
skills/pull-request/scripts/review-venue.sh(+review-venue.test.sh) andreference/review-venue.mdown the rule; the GitHub facts sit inreference/providers/github/pull-request/review-venue.md(ADR 0060: generic skill text names the operation, the provider file namesgh). A lane is a caller workflow whose pull_request runs referencemelodic-software/ci-workflows/.github/workflows/pr-review.ymlorpr-review-security.yml(referenced_workflows). A lane whose workflow is notactive(disabled manually, for inactivity, or deleted) islocal absent. Healthy = its newest pull_request run with a verdict (completed, not skipped or cancelled) succeeded within 7 days (--max-age-days). Any read failure treats every lane aslocal, so an unread venue never skips a review.code-reviewreadsci, report the venue line; otherwise run it as the CI lane's stand-in.cilane is a built-in skip like docs-only; reports name the venue line either way.review-venueaction row, argument hint, read-action list, a short section, and theprep/readyrows.workCI mode step 4: skip the review when the runner-writtenreview-venue.txthas acode-review ciline (recordreviewasskipped, note it innot_done); otherwise review as before.source-controlandwork-items(minor each).All edits to existing skill text are additions or rewording; nothing was cut.
Verification
review-venue.test.sh: 38 assertions pass, black-box with a stubbedgh; two hand mutants (skipped counted as a verdict; non-failure counted as healthy) each fail 2 assertions.review-venue.sh:melodic-software/claude-code-pluginsandmelodic-software/standardsboth lanesci healthy;cli/clibothlocal absent./skill-quality:checkoverplugins/{source-control,work-items,review}/skills: 26 passed, 0 failed (pull-request, work, code-review, security-review PASS; warnings are advisory length/growth notes).scripts/check-affected.sh --tests: 8 passed, 1 skipped (no changed.py).workCI-mode path is unexercised until the runner writesreview-venue.txt.Review round 1 (Codex, claude-review, claude-security-review) found 6 issues plus a typo CI failure; all were VALID and fixed. The "Converge across rounds" section was removed, not patched: it had no observed-stumble evidence (no lane posted findings on more than 3 heads across the last 80 merged PRs), restated a volatile upstream cap, and its no-repeat rule trusted any PR comment.
Related
Needed outside this PR (not edited here;
.github/**is out of scope):.github/workflows/work-resolve-issue.yml(or its runner script): before the agent step, runplugins/source-control/skills/pull-request/scripts/review-venue.shwith a token holdingactions: readand write its stdout toreview-venue.txtin the scratchpad directory the agent readsissue.jsonfrom. On a non-zero exit, write nothing (the skill then reviews)..github/scripts/work-resolve-issue/post-statuses.mjs: areviewstep reportedskippedcurrently posts nopipeline/reviewstatus. If the merge gate or a ruleset expectspipeline/review, post it assuccesswith fixed text such as "Covered by the CI code-review lane." when the outcome'snot_donecarries thecode-review ciline, and updatepost-statuses.test.mjs.account=parsing) stay separate.🤖 Generated with Claude Code