fix(automation): dispatch review-comment and review-body agent mentions - #954
fix(automation): dispatch review-comment and review-body agent mentions#954seonghobae wants to merge 8 commits into
Conversation
Trusted @cwl-noema-review and @opencode-agent mentions on pull-request review comments and submitted reviews were ignored because parse_event required issue.pull_request. Accept those surfaces, sweep them, drop the case-sensitive workflow body filter, and require a per-changed-file review walk with staged compute allocation.
|
Warning Review limit reached
Next review available in: 11 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (22)
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. Comment |
|
@cwl-noema-review please review this exact head. Independent Noema review is required for the two-approval gate; this comment is the conversation-comment path that already works on main while the review-comment/review-body path in this PR is still landing. |
Live run 31670687388 queued @cwl-noema-review for #954 then failed the job on POST .../reactions with 403 Resource not accessible by integration, so no receipt was posted. Treat the reaction as optional, give the local job pull-requests: write for conversation receipts, and keep durable dispatch evidence authoritative.
Record that an exceptional eyes-reaction response cannot be treated as a missed dispatch. Force the trusted-uv installer tests onto the linux x86_64 runner path and add the control-plane architecture diagram.
Live router run 31672030631 queued Noema for #9560c253f0 and then failed OpenCode with HTTP 422: repository_dispatch allows 10 client_payload properties and the review-only flags made 14. Nest those flags under review_contract, bind the wrapper to that object, and leave the flat invocation-key claim unchanged.
|
@cwl-noema-review Please review this exact current head ( This head adds review-comment/review-body mention dispatch, keeps dispatch when the optional eyes reaction 403s, and nests OpenCode review-only flags under |
Doctoring already required skipping pending reviews, but parse_event and the sweep treated a dismissed body with submitted_at as a live mention. Dispatch only submitted, non-dismissed review bodies.
|
@cwl-noema-review Please review this exact current head ( |
route-local-agent-mention on main dies after a successful dispatch because GITHUB_TOKEN lacks the reactions permission (HTTP 403). Keep the reaction non-fatal and declare the write so the eyes receipt can actually appear.
|
@opencode-agent @cwl-noema-review Review-only request for exact current head |
|
@cwl-noema-review Please review this exact current head ( |
|
@cwl-noema-review exact current head |
Materialize a base Python lock only when every package line is an exact SHA-256 pin or a two-token relative -r/--requirement include of a candidate lock path. A lone --require-hashes directive, ./dotted paths, and -r other-hashes.txt no longer enter the trusted build context.
|
@cwl-noema-review exact current head |
There was a problem hiding this comment.
Pull request overview
OpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed.
Findings
1. HIGH Current-head GitHub Checks - Fix failed required checks before approval
- Problem: Failed same-head checks remain for
fb6e59385853cf57ab78635ca0e186afb3673dde. - Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
- Fix: Read and fix the failed check logs below, then rerun the current-head checks.
- Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.
Failed checks:
- Agent Mention Router Quality CI/quality: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927748/job/94497106812)
- Bandit (Python SAST) check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927641/job/94498362089)
- Close Empty PR/close-empty: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31714926576/job/94497103918)
- CodeQL PR/Detect CodeQL languages: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927532/job/94497106041)
- Detect CodeQL languages check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927532/job/94497106041)
- Detect Python check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927641/job/94497106386)
- OSV-Scanner PR/osv-scan / osv-scan: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31714928249/job/94497108931)
- Python Security/Bandit (Python SAST): CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927641/job/94498362089)
- Python Security/Detect Python: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927641/job/94497106386)
- Python Security/pip-audit (Python dependency audit): CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927641/job/94498362496)
- SAST Semgrep/Semgrep (multi-language SAST): CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927742/job/94497108092)
- SBOM Generation/generate-sbom: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927638/job/94497106484)
- Scorecard PR/Scorecard: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927763/job/94497107143)
- Scorecard check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927763/job/94497107143)
- Secret Scan/gitleaks (secret scan): CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927480/job/94497105987)
- Security Scan/dependency-review: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927626/job/94497106737)
- Security Scan/osv-scan: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927626/job/94497106730)
- Security Scan/scorecard: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927626/job/94497106665)
- Security Scan/trivy-fs: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927626/job/94497106769)
- Semgrep (multi-language SAST) check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927742/job/94497108092)
- close-empty check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31714926576/job/94497103918)
- dependency-review check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927626/job/94497106737)
- generate-sbom check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927638/job/94497106484)
- gitleaks (secret scan) check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927480/job/94497105987)
- osv-scan / osv-scan check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31714928249/job/94497108931)
- osv-scan check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927626/job/94497106730)
- pip-audit (Python dependency audit) check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927641/job/94498362496)
- quality check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927748/job/94497106812)
- scorecard check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927626/job/94497106665)
- trivy-fs check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31714927626/job/94497106769)
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Workflow (2 files)"]
S1 --> I1["GitHub Actions review job"]
I1 --> R1["Review risk: Workflow (2 files)"]
R1 --> V1["actionlint plus required checks"]
Evidence --> S2["Changed file (7 files)"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Changed file (7 files)"]
R2 --> V2["required checks"]
Evidence --> S3["Docs (2 files)"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs (2 files)"]
R3 --> V3["docs review"]
Evidence --> S4["CI script (4 files)"]
S4 --> I4["review and security gate shell path"]
I4 --> R4["Review risk: CI script (4 files)"]
R4 --> V4["bash -n plus Strix self-test"]
Evidence --> S5["Test (7 files)"]
S5 --> I5["regression suite"]
I5 --> R5["Review risk: Test (7 files)"]
R5 --> V5["targeted test run"]
OpenCode Review Overview
Pull request overviewOpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed. Findings1. HIGH Current-head GitHub Checks - Fix failed required checks before approval
Failed checks:
Changed-File Evidence Mapflowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Workflow (2 files)"]
S1 --> I1["GitHub Actions review job"]
I1 --> R1["Review risk: Workflow (2 files)"]
R1 --> V1["actionlint plus required checks"]
Evidence --> S2["Changed file (7 files)"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Changed file (7 files)"]
R2 --> V2["required checks"]
Evidence --> S3["Docs (2 files)"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs (2 files)"]
R3 --> V3["docs review"]
Evidence --> S4["CI script (4 files)"]
S4 --> I4["review and security gate shell path"]
I4 --> R4["Review risk: CI script (4 files)"]
R4 --> V4["bash -n plus Strix self-test"]
Evidence --> S5["Test (7 files)"]
S5 --> I5["regression suite"]
I5 --> R5["Review risk: Test (7 files)"]
R5 --> V5["targeted test run"]
|
Review-comment dispatch heads still declared a non-existent GITHUB_TOKEN scope. Issue-comment eyes use issues: write; review-comment eyes use pull-requests: write. NVIDIA_NIM_API_KEY only.
|
@cwl-noema-review exact current head |
Pull request was converted to draft
|
Returned to Draft because the exact current tree mixes the review-comment/review-body mention routing repair with an unrelated trusted-uv materializer branch. The buyer-visible slice is coherent: support GitHub-shaped Rebuild from protected |
|
Closing as superseded by canonical cumulative #991. #991 contains this review-comment/review-body dispatch foundation plus the correct review-comment REST reaction path, submitted-review GraphQL reaction with idempotent already-reacted handling, and cached |
Trusted
@cwl-noema-reviewand@opencode-agentmentions on pull-request review comments and submitted review bodies never reached the router.parse_eventrequiredissue.pull_request, GitHub'spull_request_review_comment/pull_request_reviewpayloads have noissueobject, the 5-minute sweep listed onlyissues/{n}/comments, and the local jobifrequired a case-sensitive conversation-comment body substring.Changes
parse_eventwhile still ignoring plain issues (nopull_requestmarker).pulls/{n}/commentsand submittedpulls/{n}/reviewsin the lookback window.pull_request_review_commentandpull_request_review; hydratePR_NUMBERfromissue.number || pull_request.number; drop the case-sensitive bodycontainsfilter (Python remains case-insensitive).edit: deny. LLM key remainsNVIDIA_NIM_API_KEY.Verification
parse_eventandbuild_requests_for_pull_request.scripts/ci/agent_mention_router.pyandagent_mention_sweep.pyare 100% statement/branch with 100% public docstrings.docs/doctoring/review-agent-mention-surfaces.md(APA 7th).Does not wait on Checks. Does not use
COPILOT_GITHUB_TOKEN.@cwl-noema-review