Keep Greptile's pause notice out of head coverage, and its notices out of claims - #926
Conversation
…t of claims Greptile, out of open-source review credits, posts a COMMENTED review on the head whose whole body says reviews are paused (manaflow-ai/cmux pr10764, review 5025193699). The gate counts any non-empty review body as coverage of its commit, so once a disposition answered that notice the head read as reviewed: `a greptile pause review on the head, answered` reported CLEAR (rc=0) on the unfixed gate. - covers: a body that is Greptile's pause notice covers nothing, whoever posts it. - The pause review from Bot greptile-apps needs no disposition. Reviews are now fetched with author.__typename in both reads, so a human account posting the same text stays claimable. - A top-level comment from Bot greptile-apps whose whole body is one of its observed <!-- greptile-status --> notices (file limit in both wordings it has used, error; pr12342, pr7670, pr6705) is a notice: no disposition, no coverage. Anything appended, or another account, stays claimable. - TRIGGER_RE accepts @greptileai and @greptile-apps, alone or followed by review. `@greptileai is this thread-safe?` stays claimable. - Greptile is not added to VERDICT_BOTS; its summary comment stays claimable until no-findings coverage is bound to its check run. - .greptile/config.json: findings stay in comments and threads the gate reads (shouldUpdateDescription false, updateSummaryOnly false), results post as a check run (statusCheck true), auto-approval off, and pushes do not trigger reviews (triggerOnUpdates false; each review spends a free open-source credit). - AGENTS.md names the Greptile notices, the trigger and the config. Tests, written against the unfixed gate: - scripts/test-check-review-threads.sh, finding 47: 11 cases red before the fix, 7 guards green before and after. - tests/test_log_scan.rs: greptile_pause_notice_covers_nothing_and_its_notices_are_not_findings, greptile_config_keeps_its_results_where_the_gate_reads_them. Shell harness, fix applied: passed=292 failed=0 Shell harness, fix reverted: passed=281 failed=11 Rust Greptile test, fix applied: 1 test run: 1 passed Rust Greptile test, fix reverted: 1 test run: 0 passed, 1 failed scripts/gate-discard-sites.sh: 28 discarding call(s) in VERDICT_JQ, 0 unaccounted Config pin, no .greptile/config.json: 1 test run: 0 passed, 1 failed Config pin, with it: 1 test run: 1 passed Config pin, shouldUpdateDescription flipped: 1 test run: 0 passed, 1 failed test_log_scan, whole binary: 30 tests run: 30 passed
|
@codex review |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (5)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughThe change adds Greptile configuration and updates the review gate to recognize Greptile bots, triggers, status notices, and pause notices. Greptile pause notices no longer provide head coverage. Tests validate classification, coverage, claims, and configuration. ChangesGreptile review-gate integration
Priority: ⬇️ Low Estimated code review effort: 3 (Moderate) | ~25 minutes Change: Bug fix Sequence Diagram(s)sequenceDiagram
participant GitHubAPI
participant CheckReviewThreads
participant ReviewGate
GitHubAPI->>CheckReviewThreads: return reviews and comments
CheckReviewThreads->>CheckReviewThreads: classify Greptile notices and triggers
CheckReviewThreads->>ReviewGate: pass claims and coverage
ReviewGate->>ReviewGate: evaluate review status
Merge Risk: ⚪ Minimal · up to The Greptile notice and coverage behavior matches the documented, tested contract. No actionable merge risk remains. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches 💡 1🛠️ Fix failing CI checks 💡
📝 Generate docstrings
🧪 Generate unit tests (beta)
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 |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
ejc3
left a comment
There was a problem hiding this comment.
NOT-A-DEFECT: the @greptileai comment on this PR is a trigger command asking Greptile to review this head, not a finding. This PR is the change that teaches the gate to exempt it.
|
@coderabbitai full review |
✅ Action performedFull review finished. |
ejc3
left a comment
There was a problem hiding this comment.
NOT-A-DEFECT: CodeRabbit's walkthrough is the summary of its review of 89139943, which generated no actionable comments, so it carries no finding to answer. Its pre-merge check notes, such as docstring coverage, are documentation thresholds, not defect claims.
Installing Greptile on this repo can no longer mark an unreviewed head as reviewed, and its notices and triggers stop reading as findings.
Contract
<!-- greptile-status -->notices, from the Greptile bot, need no disposition. The same text with anything added, or from another account, stays claimable.@greptileaiand@greptile-apps, alone or followed byreview, are triggers. Any other comment that mentions Greptile is a comment like any other..greptile/config.jsonkeeps Greptile's findings where the gate reads them.Greptile is not added to
VERDICT_BOTS, so it grants no no-findings coverage and its summary comment stays claimable. Binding a clean Greptile result to the head through its "Greptile Review" check run is a follow-up PR stacked on this one.The hole
Out of open-source review credits, Greptile posts a COMMENTED review on the head whose whole body is:
(manaflow-ai/cmux pr10764, review 5025193699.) The gate counts any non-empty review body as coverage of its commit. Once a disposition answered that notice, the gate reported CLEAR for a head nobody reviewed. On the unfixed gate, the case
a greptile pause review on the head, answered, is still an unreviewed headgot rc=0.Changes
scripts/check-review-threads.shcoversrejects a body that is Greptile's pause notice.author.__typename, so only Botgreptile-appsis exempt from answering the pause notice.gate-discard-sites.shlists.TRIGGER_REadds the Greptile trigger forms..greptile/config.json:shouldUpdateDescription: falseandupdateSummaryOnly: false(the gate never reads the PR description),statusCheck: true(a check run, not a status comment the gate has no shape for),autoApprove.enabled: false(an APPROVED review covers the head), andtriggerOnUpdates: false(each review spends a free open-source credit, so ask with@greptileai).AGENTS.mdnames the Greptile notices, the trigger and the config.Tests
All written against the unfixed gate, in both harnesses:
scripts/test-check-review-threads.sh, finding 47: 11 cases red before the fix, and 7 guards green before and after (appended text, a human author, the wrong bot, a question for Greptile, no coverage from a notice).tests/test_log_scan.rs:greptile_pause_notice_covers_nothing_and_its_notices_are_not_findingsandgreptile_config_keeps_its_results_where_the_gate_reads_them.Fixture bodies are byte-identical to what
greptile-apps[bot]posted on manaflow-ai/cmux, converted to the GraphQL shape the gate fetches.Downstream impact: the merge gate. Every change narrows what counts as coverage, or exempts one observed notice or trigger shape from the Greptile bot account.
Summary by CodeRabbit
New Features
Bug Fixes