Skip to content

ci(repo): add /ai-dogfood-and-review staging CLI loop into /ai-review - #6495

Open
avallete wants to merge 17 commits into
developfrom
avallete/0ff1bf33
Open

ci(repo): add /ai-dogfood-and-review staging CLI loop into /ai-review#6495
avallete wants to merge 17 commits into
developfrom
avallete/0ff1bf33

Conversation

@avallete

@avallete avallete commented Sep 7, 2026

Copy link
Copy Markdown
Member

Summary

Adds a maintainer /ai-dogfood-and-review command that installs the PR CLI, runs it against a pinned real-world corpus on staging (gpt-5.6-luna), posts one functional report comment, then dispatches the existing /ai-review pipeline with that report as runtime evidence.

/ai-review stays code-only (no CLI execution, no staging token). Dogfood is same-repo PRs only, maintainer-gated, and split so the staging token is not present during untrusted install.

Until this lands on the default branch, iterate with workflow_dispatch from the feature branch; /ai-dogfood-and-review comments run the default-branch workflow.

Linked issue

Supabase maintainer work. No GitHub issue.

  • The linked issue is open and carries the open-for-contribution label (or I'm a Supabase maintainer).

Checklist

  • The PR title follows Conventional Commits (e.g. fix(cli): …).
  • Tests added or updated for the change.
  • From the repository root, pnpm check:all passes; relevant package tests pass for every touched workspace, and pnpm types:check passes for each touched TypeScript workspace (or workspace declaring it).

Give maintainers a same-repo command that exercises the PR CLI against a pinned corpus on staging, posts a functional report, and feeds that report into the existing review pipeline as runtime evidence.
@avallete
avallete requested a review from a team as a code owner September 7, 2026 12:26
@avallete

avallete commented Sep 7, 2026

Copy link
Copy Markdown
Member Author

Retriggering pull_request workflows that did not queue on open.

@avallete avallete closed this Sep 7, 2026
@avallete avallete reopened this Sep 7, 2026
The prior commit added workflow files; GitHub skipped Test and GitHub Scripts CI on that push.
Comment thread .github/workflows/ai-dogfood-and-review.yml Outdated
Comment thread .github/ai-review/claude-review-prompt.md
Comment thread .github/workflows/ai-dogfood-and-review.yml Outdated
Comment thread .github/workflows/ai-dogfood-and-review.yml Outdated
Comment thread .github/ai-review/claude-review-prompt.md
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Supabase CLI preview

npx --yes https://pkg.pr.new/supabase/cli/supabase@a7b3e6122e736109bcc0285cfe171feb0e28f834

Preview package for commit a7b3e61.

Comment thread .github/ai-dogfood/install-pr-cli.sh Outdated
Comment thread .github/scripts/ai-dogfood/post-report.ts
New workflows cannot be dispatched until they exist on the default branch, so this temporarily triggers on pull_request for #6495, trusts the PR head, and uses danger-full-access so staging/Docker actually work. Revert to comment/dispatch-only before merge.
@supabase supabase deleted a comment from github-actions Bot Sep 7, 2026
…ilure

The PR's mise.toml requires 2026.9.0, so the pinned 2026.7.0 action aborted before the CLI ran. Also skip post-report/review dispatch when dogfood never started, so a toolchain miss does not post a fake no-go.
Root package.json dropped packageManager, so corepack prepare received null. mise already installs pnpm 12.3.0.
The legacy path was removed; `pnpm dev:legacy` runs src/main.ts.
@supabase supabase deleted a comment from github-actions Bot Sep 7, 2026
GITHUB_TOKEN cannot see supabase-config-real-world-samples (internal; GitHub returns 404), so the dogfood job never reached Codex.
@supabase supabase deleted a comment from github-actions Bot Sep 7, 2026
Comment thread .github/workflows/ai-dogfood-and-review.yml Outdated
The previous internal supabase/supabase-config-real-world-samples clone 404'd under GITHUB_TOKEN and the org GitHub App is not installed there.
@supabase supabase deleted a comment from github-actions Bot Sep 9, 2026
Blacksmith still has working sudo after the action's deluser step, so the Codex action aborts before exec.
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Functional dogfood: go

The PR changes only CI, workflow, documentation, and reporting scripts; it does not alter a user-facing CLI surface. The CLI wrapper version command passed, and staging/project flows were skipped as not applicable.

CLI HEAD: a7b3e6122e736109bcc0285cfe171feb0e28f834

Journeys

Id Result Commands Notes
cli-version pass --version Reported 0.0.0-dev and exited successfully.
changed-surface skip orgs · projects · link Skipped staging because the diff contains no user-facing CLI behavior; it only adds GitHub Actions, docs, and supporting report/install scripts.

Blockers

None.

Cleanup

None recorded.


Model: gpt-5.6-luna · Workflow run

This report is advisory. A maintainer can request another with /ai-dogfood-and-review.

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Functional dogfood: go

The PR only adds or updates GitHub Actions, repository scripts, prompts, schemas, tests, and documentation under .github; it does not change a user-facing Supabase CLI command family. The CLI wrapper ran successfully for --version, so staging project setup was correctly skipped.

CLI HEAD: c143dd81d55a614631107c555413e1acc32aa250

Journeys

Id Result Commands Notes
cli-version pass --version ./bin/sb --version completed successfully and reported 0.0.0-dev.
changed-surface skip orgs list · projects create · link Skipped staging and project lifecycle commands because the diff is CI/repository automation and documentation only; no user-facing CLI surface is changed.

Blockers

None.

Cleanup

None recorded.


Model: gpt-5.6-luna · Workflow run

This report is advisory. A maintainer can request another with /ai-dogfood-and-review.

Comment thread .github/workflows/ai-dogfood-and-review.yml Outdated
Comment thread .github/scripts/ai-review/post-review.ts Outdated

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Superseded by a newer AI review

🤖 AI Review

Both independent reviews completed. After deduplication, 16 findings are confirmed and one is refuted. The two critical issues are execution of PR-controlled workflow/scripts with privileged credentials and pnpm hook execution despite --ignore-scripts. The pre-merge dogfood-to-review handoff is also silently ineffective.

Findings

Severity Location Category Sources Claim
🔴 CRITICAL .github/workflows/ai-dogfood-and-review.yml:18 security claude+codex The temporary pull_request path executes PR-head scripts and workflow definitions with write tokens and repository secrets.
🔴 CRITICAL .github/ai-dogfood/install-pr-cli.sh:9 security claude+codex The untrusted installation can execute PR-authored pnpm hooks despite --ignore-scripts.
🟠 MAJOR .github/workflows/ai-dogfood-and-review.yml:374 correctness claude Dispatching ai-review.yml on the PR branch does not make post-report.ts available in its default-branch checkouts, so the pre-merge dogfood handoff is silently empty.
🟡 MINOR .github/workflows/ai-dogfood-and-review.yml:247 security claude The staging token is placed directly in Codex's danger-full-access working directory, increasing accidental credential exposure.
🟡 MINOR .github/workflows/ai-dogfood-and-review.yml:243 error-handling claude A missing staging secret creates an empty token file instead of failing before dogfood begins.
🟡 MINOR .github/scripts/ai-dogfood/post-report.ts:140 correctness claude Infrastructure failures are encoded as no-go product verdicts and can be mistaken for runtime evidence by review prompts.
🟡 MINOR .github/workflows/ai-dogfood-and-review.yml:190 correctness claude The harness does not build the supabase-go sidecar, so residual Go-proxied command paths fail for harness reasons.
🟡 MINOR .github/workflows/ai-dogfood-and-review.yml:312 error-handling claude A build-cli failure prevents both the report comment and the promised follow-up AI review dispatch.
🟡 MINOR .github/scripts/ai-dogfood/post-report.ts:174 correctness claude Unescaped model text can break Markdown table cells and inline code spans in the posted report.
🟡 MINOR .github/scripts/ai-dogfood/post-report.ts:251 correctness codex AI review can consume a dogfood report created for an older PR head.
🟡 MINOR .github/workflows/ai-dogfood-and-review.yml:45 concurrency codex Valid multiline dogfood commands receive unique concurrency groups and can run concurrently for the same PR.
⚪ NIT .github/scripts/ai-review/post-review.ts:1189 input-validation claude DOGFOOD_VERDICT is rendered without local validation or sanitization.
⚪ NIT .github/workflows/github-scripts-ci.yml:11 ci claude The GitHub scripts CI path filter omits the new dogfood workflow and asset directory.
⚪ NIT .github/workflows/ai-dogfood-and-review.yml:225 correctness claude The project-prefix file contains a trailing newline while the cleanup prefix does not.
⚪ NIT .github/workflows/ai-dogfood-and-review.yml:336 correctness claude The missing-artifact fallback report always identifies the CLI head as unknown.
⚪ NIT .github/scripts/ai-dogfood/post-report.ts:288 maintainability claude The new report poster duplicates GitHub HTTP, JSON-validation, pagination, and output helpers already present in post-review.ts.
Refuted findings (kept for transparency, not posted as review comments)
  • .github/workflows/ai-review.yml:394 (security): Setting allow-bots: true unconditionally disables the Codex action's write-access check for every trigger path.
    Refuted: The pinned codex-action's src/checkActorPermissions.ts only bypasses permission lookup when allowBotActors is true and the actor is exactly the trusted github-actions[bot]. Human actors still proceed through the normal collaborator-permission check, so a literal true is already actor-conditional internally.

Stats

Claude findings: 15 · Codex findings: 4 · Confirmed: 16 · Refuted: 1 · Uncertain: 0


Models: claude-opus-5 + gpt-5.6-sol · Trigger: manual · Workflow run

This review runs once per PR. A maintainer can request another with a /ai-review comment.

Comment thread .github/workflows/ai-dogfood-and-review.yml Outdated
Comment thread .github/ai-dogfood/install-pr-cli.sh Outdated
Comment thread .github/workflows/ai-dogfood-and-review.yml Outdated
Comment thread .github/workflows/ai-dogfood-and-review.yml Outdated
Comment thread .github/workflows/ai-dogfood-and-review.yml Outdated
Comment thread .github/scripts/ai-review/post-review.ts Outdated
Comment thread .github/workflows/github-scripts-ci.yml
Comment thread .github/workflows/ai-dogfood-and-review.yml Outdated
Comment thread .github/workflows/ai-dogfood-and-review.yml Outdated
Comment thread .github/scripts/ai-dogfood/post-report.ts
The #6495 pull_request path was only for pre-merge exercise. Restore
shadow-mode trust, then land the SHA, redact, token, and markdown nits
from the review threads.
@avallete

avallete commented Sep 9, 2026

Copy link
Copy Markdown
Member Author

/ai-review

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Superseded by a newer AI review

🤖 AI Review

Both independent reviews completed. After deduplication, 14 of 15 findings are confirmed. The confirmed issues include two security gaps, two major workflow/resource-handling bugs, and several reliability and documentation concerns. The bun --no-config finding is refuted because the repository-pinned Bun 1.4.1 accepts that flag.

Findings

Severity Location Category Sources Claim
🔴 CRITICAL .github/ai-dogfood/install-pr-cli.sh:25 security claude The untrusted install does not disable pnpm package-manager self-management, allowing PR-controlled package-manager metadata to select executable code in a job that later receives the staging token.
🔴 CRITICAL .github/scripts/ai-review/post-review.ts:533 secret-redaction claude+codex Dogfood artifacts and public comments can retain project credentials because the redactor covers sbp_ tokens but not Supabase secret keys, JWTs, or credentialed database URLs.
🟠 MAJOR .github/workflows/ai-dogfood-and-review.yml:137 workflow-control-flow claude+codex A build-cli failure skips dogfood, report posting, and review dispatch, leaving the maintainer's combined-review request without either requested result.
🟠 MAJOR .github/workflows/ai-dogfood-and-review.yml:288 resource-cleanup codex The staging-project sweep is not guaranteed after job timeout, cancellation, or runner loss because it is only a later step in the token-bearing dogfood job.
🟡 MINOR .github/scripts/ai-dogfood/post-report.ts:304 output-bounds claude+codex An oversized dogfood report can exceed GitHub's comment limit, fail the post-report job, and prevent the requested AI review from being dispatched.
🟡 MINOR .github/scripts/ai-dogfood/post-report.ts:213 correctness claude A model-authored CLI HEAD: line in the multiline summary can override the harness-rendered line during report selection.
🟡 MINOR .github/workflows/ai-dogfood-and-review.yml:271 revision-consistency claude A valid report retains the model-supplied head_sha instead of the SHA recorded by the harness, so a copying error prevents the review pipeline from consuming otherwise valid runtime evidence.
🟡 MINOR .github/workflows/ai-dogfood-and-review.yml:217 large-diff-handling codex Fetching the required dogfood diff through gh pr diff makes the workflow fail on PRs exceeding GitHub's diff-generation limits.
🟡 MINOR .github/workflows/ai-review.yml:180 revision-consistency codex Runtime evidence is matched to resolve's captured SHA while review jobs fetch the mutable PR head, allowing evidence for one revision to be paired with a later revision's code.
🟡 MINOR .github/ai-dogfood/dogfood-prompt.md:49 test-reliability codex The prescribed journey links immediately after asynchronous project creation without waiting for project and API-key readiness, so provisioning latency can produce false failures.
🟡 MINOR .github/ai-review/README.md:115 documentation claude The AI review security/design documentation is stale after adding issue permissions, dogfood evidence, bot-dispatched Codex runs, and Supabase token redaction.
⚪ NIT .github/workflows/github-scripts-ci.yml:11 ci claude A PR changing only ai-dogfood-and-review.yml does not trigger the scripts CI that tests and type-checks the workflow's supporting scripts.
⚪ NIT .github/scripts/ai-dogfood/post-report.ts:336 maintainability claude post-report.ts duplicates record guards and several GitHub I/O helpers instead of sharing existing implementations.
⚪ NIT .github/scripts/ai-dogfood/post-report.ts:298 ux claude Repeated dogfood runs continually create new report comments even though consumers use only the latest one.

Findings outside the diff

  • 🟡 MINOR .github/ai-review/README.md:115 — The AI review security/design documentation is stale after adding issue permissions, dogfood evidence, bot-dispatched Codex runs, and Supabase token redaction.
Refuted findings (kept for transparency, not posted as review comments)
  • .github/ai-dogfood/sb.sh:16 (correctness): If bun --no-config is unsupported by the pinned Bun version, all wrapper and preflight invocations fail.
    Refuted: Running the repository-pinned Bun 1.4.1 as bun --no-config --version succeeds and prints 1.4.1, providing concrete counter-evidence to the claimed incompatibility.

Stats

Claude findings: 11 · Codex findings: 7 · Confirmed: 14 · Refuted: 1 · Uncertain: 0


Models: claude-opus-5 + gpt-5.6-sol · Trigger: manual · Workflow run

This review runs once per PR. A maintainer can request another with a /ai-review comment.

Comment thread .github/scripts/ai-dogfood/post-report.ts Outdated
Comment thread .github/scripts/ai-dogfood/post-report.ts
Comment thread .github/workflows/ai-dogfood-and-review.yml
Comment thread .github/ai-dogfood/install-pr-cli.sh Outdated
Comment thread .github/scripts/ai-review/post-review.ts
Comment thread .github/scripts/ai-dogfood/post-report.ts
Comment thread .github/workflows/ai-dogfood-and-review.yml
Comment thread .github/workflows/ai-dogfood-and-review.yml Outdated
Comment thread .github/workflows/ai-review.yml
Comment thread .github/ai-dogfood/dogfood-prompt.md Outdated
Stop the untrusted install from downloading a PR-declared pnpm, scrub
project credentials in public reports, and keep prefix cleanup on a
separate runner after a dogfood timeout.
@avallete

avallete commented Sep 9, 2026

Copy link
Copy Markdown
Member Author

/ai-review

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Superseded by a newer AI review

🤖 AI Review

Both independent reviews completed. Of 13 distinct findings, 11 are confirmed and 2 refuted. The most serious issue is that the full-access dogfood agent can tamper with trusted redaction tooling or abort redaction before its report is uploaded, exposing the staging token. The missing Go sidecar and review-SHA race are also confirmed major defects. Claims about ./bin/sb requiring a cwd change and allow-bots trusting every bot are refuted by the CLI's global --workdir support and the pinned action's explicit github-actions[bot]-only allowlist.

Findings

Severity Location Category Sources Claim
🔴 CRITICAL .github/workflows/ai-dogfood-and-review.yml:259 security codex The full-access dogfood agent can bypass the report-redaction boundary and expose the staging token through the uploaded artifact.
🟠 MAJOR .github/workflows/ai-dogfood-and-review.yml:174 correctness claude The dogfood environment does not build or configure supabase-go, so journeys exercising a residual Go-delegated command path fail as harness errors and can create false regression evidence.
🟠 MAJOR .github/workflows/ai-review.yml:180 correctness codex The workflow can select dogfood evidence for the resolve-time SHA while generating and reviewing a diff from a newer live PR head.
🟡 MINOR .github/ai-dogfood/sb.sh:9 error-handling claude The wrapper silently runs without SUPABASE_ACCESS_TOKEN when its token file is missing, turning a harness credential failure into misleading unauthenticated CLI failures.
🟡 MINOR .github/workflows/ai-dogfood-and-review.yml:329 ci claude If build-cli fails, the workflow posts no crash report and dispatches no AI review, contrary to its documented end-to-end behavior.
🟡 MINOR .github/ai-dogfood/dogfood-prompt.md:35 cleanup claude The required staging project-name prefix is only a model instruction; incorrectly named projects are outside both cleanup sweeps and can leak indefinitely.
🟡 MINOR .github/scripts/ai-review/post-review.ts:535 security codex The project-key redaction patterns omit hyphens and therefore leave valid suffixes of URL-safe Supabase API keys visible.
🟡 MINOR .github/workflows/github-scripts-ci.yml:13 test-coverage claude The GitHub Scripts CI path filter omits the new dogfood workflow and dogfood support files, so changes limited to those integration surfaces do not run the script tests and type-check.
⚪ NIT .github/ai-review/codex-review-prompt.md:17 prompt-correctness claude The Codex review prompt says there is one input immediately before listing two inputs.
⚪ NIT .github/workflows/ai-dogfood-and-review.yml:84 ci claude Separate build-cli and dogfood runners duplicate the complete toolchain setup and workspace install without cache or artifact reuse.
⚪ NIT .github/ai-review/adjudicate-prompt.md:26 prompt-correctness claude The adjudication prompt says there are three absolute-path inputs immediately before listing four.

Findings outside the diff

  • 🟡 MINOR .github/workflows/github-scripts-ci.yml:13 — The GitHub Scripts CI path filter omits the new dogfood workflow and dogfood support files, so changes limited to those integration surfaces do not run the script tests and type-check.
  • ⚪ NIT .github/ai-review/adjudicate-prompt.md:26 — The adjudication prompt says there are three absolute-path inputs immediately before listing four.
Refuted findings (kept for transparency, not posted as review comments)
  • .github/ai-dogfood/dogfood-prompt.md:21 (prompt-correctness): Using ./bin/sb prevents project commands from running against a copied sample because those commands require changing into the sample directory.
    Refuted: The prompt does not require cd into a nested copy: the sample contents can be copied into the scratch root. More decisively, apps/cli/src/command-internal/global-flags.ts:64-70 defines a global --workdir flag, command-settings.layer.ts:182-203 applies it to native commands, and cli/root.ts:139-144 forwards it to Go commands, so ./bin/sb --workdir works from the scratch root.
  • .github/workflows/ai-review.yml:397 (security): allow-bots: true bypasses the pinned Codex action's write-access check for every bot actor, rather than only github-actions[bot].
    Refuted: The exact pinned action's src/checkActorPermissions.ts:74-89 and :181-184 bypass permission checks only when the actor is in TRUSTED_GITHUB_BOT_ACTORS, whose sole member is github-actions[bot]. Its tests explicitly reject arbitrary and Dependabot actors when allow-bots is true. The workflow is already scoped as the finding requests.

Stats

Claude findings: 10 · Codex findings: 3 · Confirmed: 11 · Refuted: 2 · Uncertain: 0


Models: claude-opus-5 + gpt-5.6-sol · Trigger: manual · Workflow run

This review runs once per PR. A maintainer can request another with a /ai-review comment.

Comment thread .github/workflows/ai-dogfood-and-review.yml
Comment thread .github/workflows/ai-dogfood-and-review.yml
Comment thread .github/workflows/ai-review.yml
Comment thread .github/ai-dogfood/sb.sh Outdated
Comment thread .github/workflows/ai-dogfood-and-review.yml
Comment thread .github/ai-dogfood/dogfood-prompt.md
Comment thread .github/ai-review/codex-review-prompt.md Outdated
Comment thread .github/workflows/ai-dogfood-and-review.yml
Comment thread .github/scripts/ai-review/post-review.ts Outdated
Keep dogfood artifacts and /ai-review diffs on the authorized commit, and
re-checkout trusted scripts before redacting so a full-access agent cannot
skip scrubbing.
Flag values such as --db-password must not satisfy the sweep prefix check.
Comment thread .github/ai-dogfood/sb.sh Outdated
@avallete

avallete commented Sep 9, 2026

Copy link
Copy Markdown
Member Author

/ai-review

Keep sb.sh regressions covered when only the wrapper changes, and stop
trusting an agent-writable head_sha file for the posted report.
Comment thread .github/ai-dogfood/sb.sh

export SUPABASE_PROFILE="${SUPABASE_PROFILE:-supabase-staging}"

exec bun --no-config "${DOGFOOD_CLI_MAIN}" --profile supabase-staging "$@"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 Severity: HIGH

The fixed staging profile precedes attacker-controlled arguments, while the CLI's last-profile semantics allow the agent to pass a writable YAML profile with an arbitrary api_url. Authenticated requests can then send the staging token to an attacker-chosen host, bypassing the wrapper's staging confinement.
Helpful? Add 👍 / 👎

💡 Fix Suggestion

Suggestion: Move --profile supabase-staging to appear AFTER "$@" in the exec call. Since the CLI resolves --profile using last-occurrence semantics, placing the trusted profile flag last ensures it always takes precedence over any --profile flag an attacker might inject through $@. Change line 59 to: exec bun --no-config "${DOGFOOD_CLI_MAIN}" "$@" --profile supabase-staging

⚠️ Experimental Feature: This code suggestion is automatically generated. Please review carefully.

Suggested change
exec bun --no-config "${DOGFOOD_CLI_MAIN}" --profile supabase-staging "$@"
exec bun --no-config "${DOGFOOD_CLI_MAIN}" "$@" --profile supabase-staging

@avallete

avallete commented Sep 9, 2026

Copy link
Copy Markdown
Member Author

/ai-review

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 AI Review

Both independent reviews completed. After deduplication, four findings are confirmed, one is refuted, and one remains uncertain. The confirmed issues are the project-prefix guard bypass, missing workflow CI trigger, prompt wording error, and dead head_ref output. The alleged OpenAI-key exposure is refuted by the pinned action's proxy and privilege controls.

Findings

Severity Location Category Sources Claim
🟡 MINOR .github/ai-dogfood/sb.sh:21 input-validation claude+codex The projects create prefix guard can be bypassed, allowing creation of projects whose names are not matched by the cleanup sweep.
🟡 MINOR .github/workflows/ai-dogfood-and-review.yml:110 ci claude The staged trusted toolchain omits .node-version, and the installer changes into the untrusted PR checkout before invoking pnpm, potentially allowing PR-local tool metadata to affect resolution.
🟡 MINOR .github/workflows/github-scripts-ci.yml:13 ci-coverage claude+codex A PR changing only the new dogfood workflow will not trigger the GitHub Scripts CI job that tests and type-checks its supporting scripts.
⚪ NIT .github/workflows/ai-review.yml:90 maintainability claude The head_ref resolve output is dead after checkout consumers were migrated to head_sha.
⚪ NIT .github/ai-review/adjudicate-prompt.md:26 documentation claude The adjudication prompt says there are three absolute-path inputs but lists four.

Findings outside the diff

  • ⚪ NIT .github/ai-review/adjudicate-prompt.md:26 — The adjudication prompt says there are three absolute-path inputs but lists four.
Refuted findings (kept for transparency, not posted as review comments)
  • .github/workflows/ai-dogfood-and-review.yml:266 (security): The full-access dogfood agent and executed PR CLI can exfiltrate the workflow's OPENAI_API_KEY, a risk omitted from the documented security model.
    Refuted: The pinned action does not inject OPENAI_API_KEY into Codex or its child commands. Its action.yml:205-228 confines the key to the proxy startup path and removes it from the proxy environment; action.yml:303-330 removes and verifies sudo access. The action's security documentation explicitly identifies drop-sudo, which the workflow uses, as the key-protection mechanism.

Stats

Claude findings: 6 · Codex findings: 2 · Confirmed: 4 · Refuted: 1 · Uncertain: 1


Models: claude-opus-5 + gpt-5.6-sol · Trigger: manual · Workflow run

This review runs once per PR. A maintainer can request another with a /ai-review comment.

Comment thread .github/ai-dogfood/sb.sh
Comment on lines +21 to +55
if [[ "${1:-}" == "projects" && "${2:-}" == "create" ]]; then
if [[ ! -f "${PREFIX_FILE}" ]]; then
echo "sb: missing project prefix file ${PREFIX_FILE}" >&2
exit 1
fi
prefix="$(tr -d '[:space:]' < "${PREFIX_FILE}")"
if [[ -z "${prefix}" ]]; then
echo "sb: project prefix file ${PREFIX_FILE} is empty" >&2
exit 1
fi
# Positional name only — a flag value like --db-password must not satisfy this.
skip_next=0
name=""
for arg in "${@:3}"; do
if [[ "${skip_next}" -eq 1 ]]; then
skip_next=0
continue
fi
case "${arg}" in
--org-id|--db-password|--region|--size|--release-channel|--postgres-engine|--plan)
skip_next=1
continue
;;
--*|-*|--)
continue
;;
esac
name="${arg}"
break
done
if [[ -z "${name}" || "${name}" != "${prefix}"* ]]; then
echo "sb: projects create name must start with ${prefix}" >&2
exit 1
fi
fi

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 MINOR · input-validation · source: claude+codex

The projects create prefix guard can be bypassed, allowing creation of projects whose names are not matched by the cleanup sweep.

Evidence: .github/ai-dogfood/sb.sh:21 checks only when the first two wrapper arguments are projects create, although global flags are position-independent. At lines 40-48, unrecognized value-taking flags are skipped without consuming their values, allowing a prefixed flag value to be mistaken for the project name. The sweeps at .github/workflows/ai-dogfood-and-review.yml:324 and :345 delete only projects carrying the run prefix.

Suggested fix: Parse leading global flags and their values before identifying the command, then use a complete shared list of value-taking flags or reject unknown flags before validating the positional name.


- name: Stage trusted toolchain files at workspace root
run: |
cp trusted/mise.toml trusted/mise.lock trusted/.bun-version trusted/package.json .

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 MINOR · ci · source: claude

The staged trusted toolchain omits .node-version, and the installer changes into the untrusted PR checkout before invoking pnpm, potentially allowing PR-local tool metadata to affect resolution.

Evidence: .github/workflows/ai-dogfood-and-review.yml:110 and :162 copy mise.toml, mise.lock, .bun-version, and package.json but not the tracked .node-version. .github/ai-dogfood/install-pr-cli.sh:7 changes into the PR checkout before invoking pnpm at line 27.

Suggested fix: Copy the trusted .node-version and invoke an explicitly resolved trusted pnpm executable, or run the install from the trusted root with --dir targeting the PR checkout.

Adjudication (uncertain): The omitted file and PR-local working directory are verified, but the checked-out code does not establish whether the pinned mise action exports fixed executable paths or dynamic shims. The install also invokes a mise-pinned standalone pnpm and shows no direct external Node invocation, so actual PR-local toolchain substitution could not be verified.

Comment on lines +13 to 15
- ".github/ai-dogfood/**"
- ".github/workflows/ai-review.yml"
- ".github/workflows/github-scripts-ci.yml"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 MINOR · ci-coverage · source: claude+codex

A PR changing only the new dogfood workflow will not trigger the GitHub Scripts CI job that tests and type-checks its supporting scripts.

Evidence: .github/workflows/github-scripts-ci.yml:12-15 includes .github/scripts/**, .github/ai-dogfood/**, ai-review.yml, and itself, but omits .github/workflows/ai-dogfood-and-review.yml. The omitted workflow invokes .github/scripts/ai-dogfood/post-report.ts multiple times.

Suggested fix: Add .github/workflows/ai-dogfood-and-review.yml to the pull_request.paths filter.

@@ -89,6 +89,7 @@ jobs:
pr_number: ${{ steps.resolve.outputs.pr_number }}
head_ref: ${{ steps.resolve.outputs.head_ref }}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚪ NIT · maintainability · source: claude

The head_ref resolve output is dead after checkout consumers were migrated to head_sha.

Evidence: .github/workflows/ai-review.yml:90 and .github/workflows/ai-dogfood-and-review.yml:56 still export head_ref, and .github/scripts/ai-review/resolve.ts:436 still writes it. Repository-wide references show no functional consumer; PR checkouts use head_sha instead.

Suggested fix: Remove head_ref from resolve.ts and both workflows' output declarations, and update the resolver documentation.

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.

2 participants