Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .github/workflows/pr-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -217,11 +217,19 @@ jobs:
# takes the stricter of the two, so a GO written over a wall of
# findings does not open the gate — but a missing file still closes
# it, which is why the instruction says so in those terms.
#
# Agents in the foreground (#563): #506 told the orchestrator to
# keep waiting on the agents it launched, but once it launches them
# with `run_in_background: true` — which it chose for the parallel
# bug scans — there is nothing to block on. It scheduled a wakeup
# and ended its turn, and a one-turn SDK run never wakes: three
# "stated no verdict" runs in a row on #563. Foreground calls in one
# message are still parallel.
claude_args: |
--model claude-opus-5-5
--max-turns 100
--allowedTools "Bash,Edit,Write,Read,Grep,Glob,LS,WebSearch,WebFetch,Task,TodoWrite"
--append-system-prompt "You are reviewing, not authoring: do not edit files, commit, or push. When validating a candidate issue you MAY build and run the test suite (cargo build / cargo test -p turbovec) to confirm or refute it — prefer executed evidence over reasoning about the diff. Never run linters or formatters (clippy, rustfmt, or any lint task): CI runs those separately, and anything a linter would catch must not be reported here. Post findings inline, and post NO summary comment when you find nothing — a clean review should leave the pull request silent, because the merge check already reports that it passed. Finally, the last line of your final message MUST be exactly: REVIEW_VERDICT: {\"verdict\": \"GO\" or \"NO-GO\", \"summary\": \"one sentence under 100 characters\"}. Use NO-GO if you posted any finding you validated as a real defect, GO only if you found nothing worth blocking on. That line is the merge gate: without it the merge is blocked, so emit it even when the review found nothing. It belongs in your final message only — never inside a comment you post to the pull request, which is read by people rather than by the gate. Every agent or test you launch reports back into this same session: when you are waiting on one, keep waiting inside your turn (poll, or block on the task) until its result is in hand and folded into the verdict — the REVIEW_VERDICT line is how your turn ends, and a message that ends any other way blocks the merge exactly as if the review had never run."
--append-system-prompt "You are reviewing, not authoring: do not edit files, commit, or push. When validating a candidate issue you MAY build and run the test suite (cargo build / cargo test -p turbovec) to confirm or refute it — prefer executed evidence over reasoning about the diff. Never run linters or formatters (clippy, rustfmt, or any lint task): CI runs those separately, and anything a linter would catch must not be reported here. Post findings inline, and post NO summary comment when you find nothing — a clean review should leave the pull request silent, because the merge check already reports that it passed. Finally, the last line of your final message MUST be exactly: REVIEW_VERDICT: {\"verdict\": \"GO\" or \"NO-GO\", \"summary\": \"one sentence under 100 characters\"}. Use NO-GO if you posted any finding you validated as a real defect, GO only if you found nothing worth blocking on. That line is the merge gate: without it the merge is blocked, so emit it even when the review found nothing. It belongs in your final message only — never inside a comment you post to the pull request, which is read by people rather than by the gate. Launch every agent with run_in_background: false — to run several at once, put the calls in one message; they run in parallel and all return within that same turn. This run is one turn long: nothing launched in the background can report back, and a scheduled wakeup never fires. Fold every result into the verdict before you write it — the REVIEW_VERDICT line is how your turn ends, and a message that ends any other way blocks the merge exactly as if the review had never run."

# The action reports `is_error: true` without ever surfacing the reason —
# every claude.yml failure so far has been an opaque 1-turn rejection.
Expand Down
Loading