Skip to content

ci: stop the review gate passing on a review that never happened - #60

Merged
daniel-pittman merged 1 commit into
developfrom
ci/review-gate-stub-guard
Aug 12, 2026
Merged

ci: stop the review gate passing on a review that never happened#60
daniel-pittman merged 1 commit into
developfrom
ci/review-gate-stub-guard

Conversation

@daniel-pittman

Copy link
Copy Markdown
Owner

Shared-infrastructure fix. This workflow is byte-identical across the lab's repos, so the bug is too.

When the review agent cannot run (API rate limit — the lab's repos share one Anthropic account, so concurrent CI across repos trips it), the action still posts its placeholder and exits 0. The gate then reports PASS — Review reported no HIGH/CRITICAL findings on a pull request nobody reviewed.

Detection is by size, not text: matching the placeholder string rejects any real review that quotes it. Measured corpus — shortest real review 836 bytes, placeholders ≤190.

Validated in roadrunner-connect-app (#926): a 2851-byte review quoting the placeholder is accepted, a 190-byte stub is rejected.

Note this PR modifies the review workflow, so the review action will refuse to run on it (a deliberate guard against a PR rewriting its own reviewer). It cannot self-review; merged on the strength of the validation above.

When the review agent cannot run — an API rate limit is the usual cause, and
the lab's repos share one Anthropic account so concurrent CI across repos
trips it — the action still posts its "I'll analyze this and get back to you"
placeholder and exits 0. The gate's REVIEW_RESULT check never fires, the
extractor truthfully finds no HIGH/CRITICAL in a comment containing nothing,
and the gate reports PASS on a pull request nobody reviewed.

Observed across four repos on 2026-08-12, with successes and failures
interleaved minute by minute, and it put a green gate on four release PRs.

Detection is by size, not by matching the placeholder text: matching the text
rejects any real review that quotes it. Measured corpus: shortest real review
836 bytes, placeholders 190 and under.

The error message names the remedy this failure needs and no other does —
`gh run rerun --failed` re-runs only the extractor, which re-reads the same
placeholder and fails identically; the whole workflow has to run again.

Implementation matches the one already proven in didakt and validated in
roadrunner-connect-app (#926), where a 2851-byte review that quotes the
placeholder is correctly accepted.
@github-actions

Copy link
Copy Markdown

Semgrep (OSS): no findings

Clean scan. Posted before the Claude review.

@github-actions

Copy link
Copy Markdown

CI Tests

Tests passed: the pytest suite across Python 3.10/3.11/3.12 (and bash syntax checks) is green on c5a7042d4.

Posted before the Claude review so the test outcome is folded into the review.

@github-actions

Copy link
Copy Markdown

Review Gate

⚠️ Gate: INCONCLUSIVE — The verdict extractor did not complete (job result: failure). Push a new commit to re-run the checks (they re-run on every push), or a maintainer can apply the review-ack label.

@daniel-pittman
daniel-pittman merged commit 0375dd5 into develop Aug 12, 2026
11 of 13 checks passed
@daniel-pittman
daniel-pittman deleted the ci/review-gate-stub-guard branch August 12, 2026 20:50
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.

1 participant