Repository navigation
chore(repo): sync develop into next - #7156
Conversation
) ## Summary **TL;DR** When a command dies on an unclassified Effect `PlatformError` (a filesystem or stdio failure whose reason is not `NotFound`, `PermissionDenied`, or `BadArgument`), telemetry now names the reason and the Effect operation that raised it. Today every such failure collapses into one `error:Defect:PlatformError` fingerprint, which recent prereleases report on `status` / `stack status` for the new local stack without any way to tell which call fails. ### Before ```mermaid flowchart LR A["FileSystem / Stdio call fails"] --> B["PlatformError<br/>(Busy, Unknown, ...)"] B -->|orDie| C["error:Defect:PlatformError"] ``` ### After ```mermaid flowchart LR A["FileSystem / Stdio call fails"] --> B["PlatformError<br/>(Busy, Unknown, ...)"] B -->|orDie| C["error:Defect:PlatformError:<br/>Busy:FileSystem.readFile"] ``` ### Why The failures cluster right after `start` while other commands run in parallel, and a retry succeeds, which points at a race on shared state or on stdout. Several call sites turn a `PlatformError` into a defect, so the fingerprint has to carry the operation before the cause can be fixed. ### What changed - A `PlatformError` defect fingerprints as `error:Defect:PlatformError:<reason>:<Module>.<method>`, for example `…:Busy:FileSystem.readFile`. - Only the closed reason tag and Effect's module and method names are read, as data descriptors; `pathOrDescriptor` and `description` never reach telemetry. If any part is not a plain identifier, the fingerprint stays `error:Defect:PlatformError`. - `PlatformError` failures that are already classified (`not_found`, `filesystem`, `bad_argument`) are unchanged. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…rlays (#7130) ## Summary The published CLI reference describes pg-delta, but its source in this repo still describes migra. The next release would regenerate the reference and revert the September fixes made directly in supabase/supabase. This PR moves those fixes into the overlays so the generator produces the corrected text. Three files under `apps/cli/docs/` change. No code changes. - `db diff`: projects with `[experimental.pgdelta] enabled = true` use pg-delta. Other projects run migra. Storage buckets are data, so no engine diffs them. The known-miss list (publications, `security_invoker` views) now applies to migra only, since pg-delta tracks both. - `db pull`: initial-pull behavior is stated per engine. pg-delta diffs against an empty shadow database. migra seeds the migration with `pg_dump`. `--diff-engine pg-delta` is the single-run opt-in. Added the managed-schemas paragraph (triggers on `auth.users`, RLS on `storage.*`). Added a caveat for `--declarative` on projects without pg-delta: it also sets `[db.migrations].schema_paths` and breaks `db diff`. - `db pull` examples: the CLI no longer prints "auth and storage schemas are excluded" or "Try rerunning with --debug". The examples show current output. The custom-schemas example uses `public,extensions` instead of `auth,storage`. Verification: ran `bun scripts/generate-docs-spec.ts` and diffed the `db diff` and `db pull` sections against the yaml on supabase/supabase `master`. No stale sentence remains. The only other differences are flag descriptions, which come from the command code. ## Linked issue Closes # - [x] The linked issue is **open** and carries the `open-for-contribution` label (or I'm a Supabase maintainer). ## Checklist - [x] The PR title follows [Conventional Commits](https://www.conventionalcommits.org/) (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). --------- Co-authored-by: avallete <andrew.valleteau@supabase.io> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Andrew Valleteau <avallete@users.noreply.github.com>
This bumps storage from v1.82.0-r0 to v1.82.1-r0. https://github.com/supabase/slim-services/releases/tag/storage-v1.82.1-r0 Planned after supabase/slim-services published v1.82.1-r0. This branch is rewritten from develop whenever a newer relevant release arrives. Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
`supabase stop` no longer fails when another stack on the same Docker daemon is stopping at the same moment. Docker runs one prune at a time per daemon and rejects a concurrent container, volume, or network prune with `a prune operation is already running`, even when the label filters differ. `stop` now runs that prune again while Docker reports the conflict, with a short jittered wait and a bounded number of attempts; any other prune failure still fails immediately. The container CLI helper now also collects stderr so the conflict can be recognised. Split out of #7129, which runs CLI e2e files concurrently and depends on this. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ows and macOS jobs (#7129) Cuts CI time and cost: dependency and Docker caches come from Blacksmith sticky disks that only protected branches write, more end-to-end work runs in parallel, and PRs into `develop` run Windows and macOS jobs only when they touch platform-sensitive code. ## Gains ### Whole run Measured from every successful `test.yml` run between Oct 10 and Oct 14. Run time counts from run creation to the last job finishing, so it includes queueing. Values are median [range]; every run below ran the Windows and macOS jobs. | | Other branches, macOS native on `macos-latest` (Oct 10–13, 132 runs) | Other branches, macOS native on Blacksmith macOS since #7126 (Oct 13–14, 52 runs) | This PR, warm disks (7 runs) | This PR, empty disks (2 runs) | | --- | --- | --- | --- | --- | | Run time | 8.5 min [4.5–22.6] | 5.0 min [3.9–9.4] | 3.3 min [2.7–4.8] | 3.4–4.1 min | | Slowest job | 8.1 min [4.4–11.1] | 4.6 min [3.6–7.9] | 2.8 min [2.5–3.4] | 3.1–3.3 min | | macOS native scenarios | 8.1 min [4.4–11.1], one job | 3.4 min [2.9–7.9], one job | 2.1–3.4 min, slowest of up to four jobs | 1.7–1.9 min, slowest of four jobs | | Total job time | 62 min, 20 jobs | 65 min, 26 jobs | 44–56 min, 29–33 jobs | 58–62 min, 33 jobs | The macOS runner change in #7126 brought most of the drop between the two baselines. On top of it, this PR brings a run to about 3 minutes once disks are warm: the slowest Linux job goes from 4.3 min [3.6–5.0] on other branches since Oct 14 to 2.7 min [2.5–3.3], and Linux is now what bounds the run. One warm run took 15.9 min while its slowest job took 2.8 min; the rest was runner queueing, so it is left out of the range above. About half of PRs into `develop` will also skip the Windows and macOS jobs. ### Warm vs empty disks Measured on this PR by running the same commit twice: once with empty sticky disks, then again after the fill workflow populated them. | Linux jobs (Blacksmith) | Warm vs empty disks | | --- | --- | | Setup | ~80% faster | | Code quality | ~40% faster | | Unit tests | ~40% faster | | Integration shards (average) | ~30% faster | | CLI e2e shards (average) | ~25% faster | | Stack e2e, native (average) | ~25% faster | | Stack e2e, Docker (average) | ~20% faster | | Stack e2e, Podman (average) | ~15% faster | Compared with the base branch, Windows port tests setup is ~60% faster and macOS port tests setup ~40% faster. Splitting the declarative sync e2e into two files and letting its commands reuse the shadow baseline cache makes the slowest of those files ~65% faster than the original single file. Splitting the macOS native scenarios into four jobs and caching their native artifacts makes the slowest of them ~35% faster than the single job it replaces; with a warm cache the isolation job is ~45% faster than without. On warm disks every job finished in under three minutes; remaining time is test work rather than setup. ## Changes **Sticky disks.** On Blacksmith Linux runners, `test.yml` jobs mount the pnpm store, Go caches, and (for container jobs) Docker's image store from Blacksmith sticky disks instead of downloading them through `actions/cache`. Test jobs always mount them read-only; only the fill workflow commits, after pruning unused pnpm packages, containers, and volumes. Native stack jobs also mount the native artifact cache. Jobs that mount the Docker image disk stop Docker in a final step so the disk unmounts cleanly; the fill workflow also prunes containers and volumes first, even after a failure. Other workflows, including release builds, keep `actions/cache`. **Disk refill.** `fill-sticky-disks.yml` runs on pushes to protected branches, daily, and on demand. It installs dependencies, downloads the stack's native service artifacts, pulls both the `supabase start` images and the stack package's catalog images, so every disk stays warm. Default-branch fills also drop artifacts and images of older versions. It is the only writer, so Blacksmith's sticky-disk branch protection can be enabled. The disk keys are new, so the first fill after merge seeds every disk from protected-branch code. **Parallel CLI e2e.** CLI e2e files run four at a time in CI (`SUPABASE_E2E_WORKERS`); local runs stay serial. Each worker takes free ports only from its own slot, so a port one worker released is never handed to another. Files that cannot share the daemon run one at a time afterwards in an `e2e-exclusive` project: `start.health`, which tags a broken Mailpit image, and the files that provision pg-delta shadow databases on ports the CLI picks itself. Concurrent `supabase stop` teardowns rely on the prune retry from #7143. **Lighter Windows and macOS setup.** Port tests install only node, bun, and pnpm through mise instead of the full toolchain. Windows also skips the pnpm store archive because downloading packages is faster there than unpacking it. **Split slow e2e work.** The declarative sync e2e runs as two files that shard independently, and their commands share one home with the shipped shadow baseline cache on, so only the first sync provisions a cold shadow. macOS native scenarios run as separate lifecycle, confinement, idle, and isolation jobs, each restoring its native artifacts through `actions/cache`. **Windows and macOS on demand.** On PRs into `develop` or `next`, the Windows and macOS port tests and macOS native scenarios run only when the PR touches platform-sensitive paths (stack host, namespace, port, process, internal and artifact code, the CLI commands the Windows job covers, the lockfile, root config, and the test workflow). They always run in the merge queue, on PRs into `main` or `v*.x`, on `next` release runs, and when the `run-ci` label is added, which now also applies to ready PRs into `develop` and `next`. Replaying the last 50 merged PRs, about half would skip them. The summary jobs fail if change detection fails, so a skipped platform job never hides an error. **Concurrent whole-stack scenarios.** Stack e2e jobs run their scenarios concurrently. The write-confinement scenario watches the whole temp tree, so it runs in its own `confinement` job per runtime. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…emoved in v3 (#7154) ## TL;DR Users still relying on config keys, env vars or file conventions that v3 removes now get a warning on stable that says so. `SUPABASE_EXPERIMENTAL_ORIOLEDB_VERSION` was silently ignored after the rename to `SUPABASE_DB_ORIOLEDB_VERSION`; it now works as a deprecated alias with a warning. ## Before ```mermaid flowchart LR A["SUPABASE_EXPERIMENTAL_ORIOLEDB_VERSION set"] --> B[Ignored silently] --> C[Plain Postgres image] ``` ## After ```mermaid flowchart LR A["SUPABASE_DB_ORIOLEDB_VERSION set?"] -- yes --> D[OrioleDB image] A -- no --> E["SUPABASE_EXPERIMENTAL_ORIOLEDB_VERSION set?"] E -- yes --> F["Warn: removed in v3"] --> D E -- no --> G[config.toml value] ``` ## Why The v3 removals in CLI-2597 need a stable release that warns first. Several existing warnings did not mention v3, `INBUCKET_URL` in `status` had no warning, and a project using the old OrioleDB env var started plain Postgres with no message. ## What changed - `SUPABASE_EXPERIMENTAL_ORIOLEDB_VERSION` is used when `SUPABASE_DB_ORIOLEDB_VERSION` is unset and prints a deprecation warning; the new variable wins when both are set. Resolution lives in one helper used by every reader. - Warnings for `[inbucket]` / `[remotes.*.inbucket]`, `experimental.orioledb_version`, the `linkedin` / `slack` auth providers and `import_map.json` in `functions deploy` now say they will be removed in v3 and name the replacement. - `supabase status` warns that `INBUCKET_URL` is deprecated in favour of `MAILPIT_URL` for output formats that include it. - All warnings go to stderr; machine-readable stdout is unchanged. - Also touches `packages/config` warning wording, so this cuts an `@supabase/config` release. ## Terminal captures Recorded with vhs from source (`bun apps/cli/src/main.ts`) against a fresh `supabase init` project whose `config.toml` sets `[inbucket]`, `experimental.orioledb_version` and `[auth.external.slack]`. Each GIF runs `supabase stop` twice (it loads the config without a running stack): first with `SUPABASE_EXPERIMENTAL_ORIOLEDB_VERSION` unset, then with it set inline on the second run only. Before (merge-base with develop):  After:  Closes CLI-2601 Closes CLI-2569 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # .github/actions/setup/action.yml # .github/workflows/test.yml # apps/cli-go/pkg/config/templates/Dockerfile # apps/cli/docs/supabase/db/diff.md # apps/cli/docs/supabase/db/pull.md # apps/cli/src/command-internal/db-bootstrap/bootstrap-config.ts # apps/cli/src/command-internal/db-config.toml-read.ts # apps/cli/src/command-internal/db-pull-run.ts # apps/cli/src/command-internal/local-config-values.ts # apps/cli/src/command-internal/local-project-context.ts # apps/cli/src/command-internal/stack-config.ts # apps/cli/src/commands/bootstrap/SIDE_EFFECTS.md # apps/cli/src/commands/bootstrap/bootstrap.handler.ts # apps/cli/src/commands/db/diff/SIDE_EFFECTS.md # apps/cli/src/commands/db/diff/diff.handler.ts # apps/cli/src/commands/db/diff/diff.integration.test.ts # apps/cli/src/commands/db/dump/SIDE_EFFECTS.md # apps/cli/src/commands/db/dump/dump.handler.ts # apps/cli/src/commands/db/push/SIDE_EFFECTS.md # apps/cli/src/commands/db/push/push.handler.ts # apps/cli/src/commands/db/reset/reset.handler.ts # apps/cli/src/commands/db/schema/declarative/generate/generate.handler.ts # apps/cli/src/commands/experimental/stack/start/start.handler.ts # apps/cli/src/commands/gen/types/SIDE_EFFECTS.md # apps/cli/src/commands/gen/types/types.handler.ts # apps/cli/src/commands/migration/down/down.handler.ts # apps/cli/src/commands/services/SIDE_EFFECTS.md # apps/cli/src/commands/services/services-local-stack.ts # apps/cli/src/commands/services/services.handler.ts # apps/cli/src/commands/status/status.handler.ts # apps/cli/src/commands/status/status.integration.test.ts # packages/config/src/io.ts
Claude resolved the merge of
|
| File | Resolution |
|---|---|
.github/actions/setup/action.yml |
Kept develop's sticky-disk, tools, pnpm-store-cache, docker-images and native-artifacts inputs and steps. Dropped the go-cache input and all Go cache and disk steps, since next removed Go. |
.github/workflows/test.yml |
Kept develop's sticky-disks, docker-images, native-artifacts, tools, pnpm-store-cache and SUPABASE_E2E_WORKERS settings. Dropped go-cache, the cli-go keyring unlock and SUPABASE_GO_BINARY. |
.github/workflows/fill-sticky-disks.yml |
Non-conflicted file from develop: removed SUPABASE_GO_BINARY (apps/cli-go no longer exists) and the Go mention in the header comment. |
apps/cli/docs/supabase/db/diff.md |
Took next's wording: pg-delta is the default engine and migra is the fallback. |
apps/cli/docs/supabase/db/pull.md |
Took next's default-engine text. Added develop's declarative path note and its warning against --declarative on a project that falls back to migra, with recovery steps. |
packages/config/src/io.ts |
Kept next's onWarning callback with develop's 'deprecated and will be removed in v3' messages. Updated the next-only io.stages.unit.test.ts expectations to match. |
apps/cli/src/config/cli-config-key-annotations.ts |
Added CLI_CONFIG_ENV_ALIASES mapping db.orioledb_version to SUPABASE_EXPERIMENTAL_ORIOLEDB_VERSION, porting develop's alias into next's registry. |
apps/cli/src/config/cli-config-keys.ts |
Schema leaves listed in CLI_CONFIG_ENV_ALIASES get [canonical, ...aliases] as their env names, using the existing 'rest are deprecated aliases' convention. |
apps/cli/src/config/cli-config-values.layer.ts |
After resolving keys, prints the 'WARN: is deprecated and will be removed in v3, use instead.' warning once per runtime when an alias is set. |
apps/cli/src/command-internal/db-config.toml-read.ts |
Took next's CliConfigValues-based reader. Dropped develop's envOverrideLookup, warnDeprecatedOrioleDBVersionEnv, the ENV_OVERRIDE_NAMES list and the raw-TOML alias read; the registry alias and loader warning replace them. |
apps/cli/src/command-internal/local-config-values.ts |
Took next (the envOverride helpers are removed), dropping develop's OrioleDB alias and warning helpers. Removed the Context and Ref imports that became unused. |
apps/cli/src/command-internal/local-project-context.ts |
Took next's loadLocalResolvedConfigContext version; the alias warning now comes from the loader. |
apps/cli/src/command-internal/db-bootstrap/bootstrap-config.ts |
Took next: values come from the materialized config, which applies the alias. |
apps/cli/src/command-internal/db-pull-run.ts |
Took next's import (loadProjectEnvValues) and its resolvedConfig load. Dropped develop's handler-level warning call. |
apps/cli/src/command-internal/stack-config.ts |
Took next's key-based endpoint settings (StackEndpointKey, stackMajorVersionKey). develop's only change in that region was the deprecatedEnvVar alias, which the registry alias now covers. |
apps/cli/src/commands/experimental/stack/start/start.handler.ts |
settingKeyLabel now reports the winning origin's envName, so a deprecated alias is named as itself (develop's intent). Kept develop's single cached config load, rebased on next's loadResolvedConfigContext, and dropped the second load during storage seeding. |
apps/cli/src/commands/bootstrap/bootstrap.handler.ts |
Took next's import; removed develop's warnDeprecatedOrioleDBVersionEnv call. |
apps/cli/src/commands/db/diff/diff.handler.ts |
Took next: the --use-pg-schema Go delegate is removed and the explicit mode loads resolvedConfig. Dropped develop's alias handoff to the Go child and its warning calls. |
apps/cli/src/commands/db/diff/diff.integration.test.ts |
Took next: tests for the removed --use-pg-schema Go delegate are dropped, including develop's alias handoff test. |
apps/cli/src/commands/db/dump/dump.handler.ts |
Took next's imports (rejectPasswordWithDirectTarget, loadProjectEnvValues); removed the warning call. |
apps/cli/src/commands/db/push/push.handler.ts |
Took next's resolvedConfig and seed consent block; removed the warning call. |
apps/cli/src/commands/db/reset/reset.handler.ts |
Took next's import; removed the warning call. |
apps/cli/src/commands/db/schema/declarative/generate/generate.handler.ts |
Took next's pgdelta import; removed the warning call and the withSingleOrioleDBVersionEnvWarning wrapper. |
apps/cli/src/commands/db/schema/declarative/sync/sync.handler.ts |
Non-conflicted file from develop: removed the withSingleOrioleDBVersionEnvWarning wrapper and restored the exported dbSchemaDeclarativeSync. |
apps/cli/src/commands/migration/up/up.handler.ts |
Non-conflicted file from develop: removed the warnDeprecatedOrioleDBVersionEnv call (toml.envLookup no longer exists). |
apps/cli/src/command-internal/test-db.handler.ts |
Non-conflicted file from develop: removed the envOverrideLookup, loadProjectEnv and warning call, which referenced symbols that no longer exist. |
apps/cli/src/commands/gen/types/types.handler.ts |
Took next (projectId = config.projectId); removed the warning call. |
apps/cli/src/commands/migration/down/down.handler.ts |
Took next's import; removed the warning call. |
apps/cli/src/commands/services/services-local-stack.ts |
Took next: the database version comes from the materialized config, which applies the alias. |
apps/cli/src/commands/services/services.handler.ts |
Took next's failOnInvalidConfigValue import; removed the warning call. |
apps/cli/src/commands/status/status.handler.ts |
Kept develop's INBUCKET_URL deprecation warning for machine formats, ported from develop's goFmt variable to next's outputFlagFormat. |
apps/cli/src/commands/status/status.integration.test.ts |
Kept develop's INBUCKET_URL warning assertions, using next's outputFlag setup option. |
apps/cli/src/commands/bootstrap/SIDE_EFFECTS.md |
Next's rows plus develop's SUPABASE_EXPERIMENTAL_ORIOLEDB_VERSION row, with column widths realigned. |
apps/cli/src/commands/db/diff/SIDE_EFFECTS.md |
Next's env rows (SUPABASE_DB_PASSWORD scoping, SUPABASE_EXPERIMENTAL_PGDELTA_ENABLED) plus develop's two OrioleDB rows. Took next's text for the removed --use-pg-schema note. |
apps/cli/src/commands/db/dump/SIDE_EFFECTS.md |
Next's table plus develop's SUPABASE_DB_ORIOLEDB_VERSION and deprecated alias rows. |
apps/cli/src/commands/db/push/SIDE_EFFECTS.md |
Next's rows (password scoping, SUPABASE_DB_SEED_ENABLED, config overrides) plus develop's deprecated alias row. |
apps/cli/src/commands/gen/types/SIDE_EFFECTS.md |
Next's table plus develop's deprecated alias row. |
apps/cli/src/commands/services/SIDE_EFFECTS.md |
Develop's OrioleDB rows with next's SUPABASE_EXPERIMENTAL_STACK wording. |
docs/adr/0032-config-value-precedence.md |
next's config-value-precedence ADR renumbered from 0031, with the deprecated env alias rule added as the ADR requires for new exceptions. |
docs/adr/README.md |
Added the 0032 row to the index and removed a stray 0031 config-precedence line from the template section. |
apps/cli/AGENTS.md |
ADR link updated to 0032-config-value-precedence.md. |
packages/config/docs/cli-config-loading.md |
Config-precedence ADR reference updated from 0031 to 0032. |
apps/cli/src/commands/{start,migration/squash,migration/list,migration/repair,functions/download,functions/deploy,db/pull,config/push,db/reset}/SIDE_EFFECTS.md |
Config-precedence ADR references updated from 0031 to 0032. |
Deleted: apps/cli-go/pkg/config/templates/Dockerfile.
Decisions for @supabase/cli. Confirm them, or push a change to this branch:
- How to keep develop's deprecated SUPABASE_EXPERIMENTAL_ORIOLEDB_VERSION alias and its warn-once behavior, given next removed envOverride and the per-command TOML reader it relied on? Chose: Registered it as a deprecated env alias of db.orioledb_version, so the canonical name wins and the alias applies everywhere config resolves. The CliConfigValues loader prints the warning once per runtime, replacing develop's per-handler warnDeprecatedOrioleDBVersionEnv calls and withSingleOrioleDBVersionEnvWarning wrappers. Unlike develop, the warning now prints whenever a config load sees the alias set.
- Which wording to use for the config deprecation warnings (inbucket, experimental.orioledb_version, linkedin and slack providers) where develop says 'will be removed in v3' and next says 'Please use'? Chose: develop's 'will be removed in v3' text, delivered through next's onWarning hook; next's io.stages test expectations are updated to match. A maintainer may want to reword this if next ships as v3.
- develop modified apps/cli-go/pkg/config/templates/Dockerfile; next deleted apps/cli-go. Chose: Deleted it: next's apps/cli/src/shared/services/Dockerfile already has identical pins, including develop's storage v1.82.1 bump.
- Both branches claim ADR 0031 (develop: Go CLI Removal after adding 0030 Hotfix Releases; next: Config Value Precedence), and the tree holds next's older 0030-go-cli-removal.md, identical apart from the number. Chose: Kept develop's numbering, which the auto-merged index already shows. Renumbered next's config-value-precedence ADR to 0032, updated all references, and deleted the duplicate 0030-go-cli-removal.md.
Quick checks. pnpm run check:all --continue (exit 1) failed on the merged tree.
Claude's fix. I fixed both types:check errors, which came from the merge. reset-local-database.ts now calls loadStackConfig(workdir) because next replaced the context option with projectRef. The import_map warning test that develop added now provides cliConfigValuesTestLayer, which next requires for functions deploy.
Approve to fast-forward next once checks pass (workflow run).
next removed apps/cli-go, so the Go build, cache, and keyring steps synced from develop fail. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
🤖 AI Review
Verified all six findings against the checked-out files. Confirmed one minor documentation issue: the renumbered config-precedence ADR leaves an outdated duplicate behind. Refuted the other five findings because the reported Go-specific workflow code is absent from the current checkout.
Findings
| Severity | Location | Category | Sources | Claim |
|---|---|---|---|---|
| 🟡 MINOR | docs/adr/0032-config-value-precedence.md:1 |
documentation |
claude | Adding ADR 0032 leaves the outdated config-precedence ADR 0031 in place, creating duplicate guidance and an ADR-number collision with Go CLI Removal. |
Refuted findings (kept for transparency, not posted as review comments)
.github/workflows/test.yml:398(merge-resolution): The test-e2e job caches and builds the removed Go CLI, causing every CLI end-to-end shard to fail.
Refuted: Read the complete test-e2e job. Neither the claimed Go cache/build steps nor SUPABASE_GO_BINARY entries exist. The missing apps/cli-go directory therefore does not cause the reported workflow failure..github/actions/setup/action.yml:17(merge-resolution): The setup action enables obsolete Go caches by default and invokes go env even though the Go workspace and toolchain configuration are absent.
Refuted: Read the entire setup action. It has no go-cache input, Go cache-path resolution, Go sticky disks, or Go actions/cache entries. The claimed unnecessary work and missing-tool failure path are absent..github/workflows/test.yml:76(merge-resolution): The check job unnecessarily runs a third-party keyring-unlock action for the removed Go CLI tests.
Refuted: Read the complete check job. There is no keyring-unlock step or reference to the reported third-party action..github/workflows/fill-sticky-disks.yml:59(merge-resolution): The fill workflow sets an unused SUPABASE_GO_BINARY path and incorrectly describes filling Go caches.
Refuted: Read the entire workflow. Its header does not mention Go, and the reported SUPABASE_GO_BINARY entry is absent. The actual environment entry points to the CLI built immediately beforehand..github/workflows/test.yml:403(cache-invalidation): The Go binary cache omits the compiler version, allowing E2E tests to reuse a binary compiled with an older Go toolchain.
Refuted: Read the complete test-e2e job. It contains no Go binary cache, cache-hit compilation guard, or SUPABASE_GO_BINARY environment variable. Consequently, the claimed stale Go executable cannot be reused through this workflow.
Stats
Claude findings: 5 · Codex findings: 1 · Confirmed: 1 · Refuted: 5 · Uncertain: 0
Models: claude-opus-5-5 + gpt-6.1-sol · Trigger: manual · Workflow run
This review runs once per PR. A maintainer can request another with a /ai-review comment.
next already removed the deprecated config, env vars and import maps that #7154 warns about, so its warnings, env alias and tests do not apply here. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Remove the pre-renumber Go CLI removal and config precedence ADRs and point config precedence references at ADR 0032. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Merging
developintonextconflicts. This branch starts at the tip ofdevelop(8a549df);nextis atc9956c3.Conflicting files:
.github/actions/setup/action.yml.github/workflows/test.ymlapps/cli-go/pkg/config/templates/Dockerfileapps/cli/docs/supabase/db/diff.mdapps/cli/docs/supabase/db/pull.mdapps/cli/src/command-internal/db-bootstrap/bootstrap-config.tsapps/cli/src/command-internal/db-config.toml-read.tsapps/cli/src/command-internal/db-pull-run.tsapps/cli/src/command-internal/local-config-values.tsapps/cli/src/command-internal/local-project-context.tsapps/cli/src/command-internal/stack-config.tsapps/cli/src/commands/bootstrap/SIDE_EFFECTS.mdapps/cli/src/commands/bootstrap/bootstrap.handler.tsapps/cli/src/commands/db/diff/SIDE_EFFECTS.mdapps/cli/src/commands/db/diff/diff.handler.tsapps/cli/src/commands/db/diff/diff.integration.test.tsapps/cli/src/commands/db/dump/SIDE_EFFECTS.mdapps/cli/src/commands/db/dump/dump.handler.tsapps/cli/src/commands/db/push/SIDE_EFFECTS.mdapps/cli/src/commands/db/push/push.handler.tsapps/cli/src/commands/db/reset/reset.handler.tsapps/cli/src/commands/db/schema/declarative/generate/generate.handler.tsapps/cli/src/commands/experimental/stack/start/start.handler.tsapps/cli/src/commands/gen/types/SIDE_EFFECTS.mdapps/cli/src/commands/gen/types/types.handler.tsapps/cli/src/commands/migration/down/down.handler.tsapps/cli/src/commands/services/SIDE_EFFECTS.mdapps/cli/src/commands/services/services-local-stack.tsapps/cli/src/commands/services/services.handler.tsapps/cli/src/commands/status/status.handler.tsapps/cli/src/commands/status/status.integration.test.tspackages/config/src/io.tsTo resolve:
git fetch origin git switch sync/develop-into-next git merge origin/next # resolve the conflicts, then commit git push origin sync/develop-into-nextApprove to fast-forward
next; do not use the merge button.