From 5cdf067c77f4383a73d543098288b0bfae241ffb Mon Sep 17 00:00:00 2001 From: Justin Boyson Date: Fri, 21 Aug 2026 09:36:38 -0500 Subject: [PATCH] Require inferred-vs-verified disclosure; deny turbo in review shell MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two additions to the reusable review workflow, both surfaced by reviewers on downstream PRs (isapp/ht-platform#3602, isapp/AIDLC#214). Both are generic — they apply to every repo that consumes this workflow — so they belong here rather than in any single repo's extra_prompt. 1. Inferred-vs-verified disclosure rule in the base prompt. The reviewer runs in a sandbox with no execution, so nearly everything it reports is inferred from reading. The rule requires it to say which part of a finding it could not confirm by reading, instead of presenting the inference as verified. Prose-only by nature; there is nothing to enforce mechanically. 2. Bash(turbo:*) in --disallowedTools. pnpm/npm/npx/yarn were already denied; turbo — the task runner those repos front build, test, lint and migrations with — was not. Placed next to Bash(pnpm:*) and matching the list's existing Bash(...)-patterns-only constraint. Co-Authored-By: Claude Opus 5 --- .github/workflows/claude-review.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/claude-review.yml b/.github/workflows/claude-review.yml index eb4699a..9e7625a 100644 --- a/.github/workflows/claude-review.yml +++ b/.github/workflows/claude-review.yml @@ -116,6 +116,14 @@ jobs: instead of retrying. The checkout already contains full history and `origin/` — do not `git fetch` or `git pull`. + Because nothing here can be executed, most of what you report is + inferred from reading rather than confirmed by running it. Disclose + which is which. When a finding depends on something you could not + confirm by reading — a runtime value, whether a test actually fails + without the change, how a dependency behaves internally, whether a + migration succeeds against real data — say that part is inferred and + name what would confirm it. Do not present an inference as verified. + Review primarily from the diff (`git diff origin/...HEAD`), opening additional files only when a finding needs cross-file confirmation. @@ -240,5 +248,5 @@ jobs: --model ${{ inputs.model }} --max-turns ${{ inputs.max_turns }} --allowedTools 'Read,Glob,Grep,LS,Bash' - --disallowedTools 'Bash(git push:*),Bash(git commit:*),Bash(git add:*),Bash(git rm:*),Bash(git fetch:*),Bash(git pull:*),Bash(gh:*),Bash(curl:*),Bash(wget:*),Bash(nc:*),Bash(ncat:*),Bash(ssh:*),Bash(scp:*),Bash(rsync:*),Bash(npm:*),Bash(npx:*),Bash(yarn:*),Bash(pnpm:*),Bash(pip:*),Bash(pip3:*),Bash(poetry:*),Bash(uv:*),Bash(bundle:*),Bash(gem:*),Bash(pod:*),Bash(brew:*),Bash(apt:*),Bash(apt-get:*),Bash(sudo:*),Bash(make:*),Bash(cmake:*),Bash(gradle:*),Bash(./gradlew:*),Bash(xcodebuild:*),Bash(swift:*),Bash(pytest:*),Bash(tox:*),Bash(tsc:*),Bash(cargo:*),Bash(go:*),Bash(docker:*),Bash(terraform:*)' + --disallowedTools 'Bash(git push:*),Bash(git commit:*),Bash(git add:*),Bash(git rm:*),Bash(git fetch:*),Bash(git pull:*),Bash(gh:*),Bash(curl:*),Bash(wget:*),Bash(nc:*),Bash(ncat:*),Bash(ssh:*),Bash(scp:*),Bash(rsync:*),Bash(npm:*),Bash(npx:*),Bash(yarn:*),Bash(pnpm:*),Bash(turbo:*),Bash(pip:*),Bash(pip3:*),Bash(poetry:*),Bash(uv:*),Bash(bundle:*),Bash(gem:*),Bash(pod:*),Bash(brew:*),Bash(apt:*),Bash(apt-get:*),Bash(sudo:*),Bash(make:*),Bash(cmake:*),Bash(gradle:*),Bash(./gradlew:*),Bash(xcodebuild:*),Bash(swift:*),Bash(pytest:*),Bash(tox:*),Bash(tsc:*),Bash(cargo:*),Bash(go:*),Bash(docker:*),Bash(terraform:*)' track_progress: true