ci(repo): add /ai-dogfood-and-review staging CLI loop into /ai-review - #6495
ci(repo): add /ai-dogfood-and-review staging CLI loop into /ai-review#6495avallete wants to merge 17 commits into
Conversation
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.
|
Retriggering pull_request workflows that did not queue on open. |
The prior commit added workflow files; GitHub skipped Test and GitHub Scripts CI on that push.
Supabase CLI previewnpx --yes https://pkg.pr.new/supabase/cli/supabase@a7b3e6122e736109bcc0285cfe171feb0e28f834Preview package for commit |
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.
…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.
GITHUB_TOKEN cannot see supabase-config-real-world-samples (internal; GitHub returns 404), so the dogfood job never reached Codex.
The previous internal supabase/supabase-config-real-world-samples clone 404'd under GITHUB_TOKEN and the org GitHub App is not installed there.
Blacksmith still has working sudo after the action's deluser step, so the Codex action aborts before exec.
Functional dogfood:
|
| 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.
Functional dogfood:
|
| 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.
There was a problem hiding this comment.
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.
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.
|
/ai-review |
There was a problem hiding this comment.
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): Ifbun --no-configis unsupported by the pinned Bun version, all wrapper and preflight invocations fail.
Refuted: Running the repository-pinned Bun 1.4.1 asbun --no-config --versionsucceeds 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.
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.
|
/ai-review |
There was a problem hiding this comment.
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.
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.
|
/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.
|
|
||
| export SUPABASE_PROFILE="${SUPABASE_PROFILE:-supabase-staging}" | ||
|
|
||
| exec bun --no-config "${DOGFOOD_CLI_MAIN}" --profile supabase-staging "$@" |
There was a problem hiding this comment.
🟠 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.
| exec bun --no-config "${DOGFOOD_CLI_MAIN}" --profile supabase-staging "$@" | |
| exec bun --no-config "${DOGFOOD_CLI_MAIN}" "$@" --profile supabase-staging |
|
/ai-review |
There was a problem hiding this comment.
🤖 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'sOPENAI_API_KEY, a risk omitted from the documented security model.
Refuted: The pinned action does not injectOPENAI_API_KEYinto 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 identifiesdrop-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.
| 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 |
There was a problem hiding this comment.
🟡 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 . |
There was a problem hiding this comment.
🟡 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.
| - ".github/ai-dogfood/**" | ||
| - ".github/workflows/ai-review.yml" | ||
| - ".github/workflows/github-scripts-ci.yml" |
There was a problem hiding this comment.
🟡 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 }} | |||
There was a problem hiding this comment.
⚪ 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.
Summary
Adds a maintainer
/ai-dogfood-and-reviewcommand 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-reviewpipeline with that report as runtime evidence./ai-reviewstays 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_dispatchfrom the feature branch;/ai-dogfood-and-reviewcomments run the default-branch workflow.Linked issue
Supabase maintainer work. No GitHub issue.
open-for-contributionlabel (or I'm a Supabase maintainer).Checklist
fix(cli): …).pnpm check:allpasses; relevant package tests pass for every touched workspace, andpnpm types:checkpasses for each touched TypeScript workspace (or workspace declaring it).