feat(ci): audit the fleet for the Supabase we retired - #4
Merged
Conversation
The fleet self-hosts Supabase on bitbaum. Two managed-cloud projects are dead —
orangecat's ohkueislstxomdjavyhs, retired 2026-06, and botsmann's
jkjmhtirxwhljpkcfxqe before it. The repos kept describing them in the present
tense.
botsmann's setup doc opened with "Completed Setup" for its dead project and
said to apply migrations by pasting SQL into a supabase.com dashboard. Two
scripts printed the same instruction, one handing out a psql string against
pooler.supabase.com, and the CLI's cache with the old project ref was committed
twice. Nobody pasted anything, its eleven migrations were never applied, and
/api/health served PGRST205 for months while every deploy went green. The docs
were not stale clutter; they were the outage. A wrong pointer to a real-looking
place is worse than no pointer: no pointer makes someone ask, a plausible one
makes them assume it was handled.
The first live sweep found one more of the same shape, which is the argument
for auditing rather than trusting the cleanup: printcraft's seed script
hardcoded the retired host AND omitted `db: { schema }`, so repointing it
naively at the box would have written one customer's rows into orangecat's
`public`. Deleted in bitbaum/printcraft#30.
Central, not a copy per repo — the rule this repo exists to keep. Three repos
use Supabase and thirty do not. botsmann additionally keeps a local
check:selfhost in its own verify, deliberately: it is the repo the outage
happened in, and blocking the commit beats finding it a week later.
Two judgements decide whether this is useful or merely loud, and both are
pinned by 28 tests. It allows supabase.com/docs, because the product
documentation is still correct for us, and your-project.supabase.co, because a
placeholder misleads nobody — a gate that fires on either gets muted. And
legitimate mentions, like a decommission runbook naming what it
decommissioned, live in the baseline WITH A REASON rather than widening the
pattern: a ratchet that may fall or hold, never rise.
Unlike verify-floor-audit.sh this reads local checkouts, because it is a
full-text sweep and GitHub code search returns nothing for these repos — even a
known-present token finds no hit. So the workflow shallow-clones the fleet and
runs the same script unchanged. When it sweeps nothing it says SKIPPED, loudly,
rather than printing a tick: a vacuous pass reads exactly like coverage, which
is the failure this audit exists to prevent.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018waGt1ieA9TjpscqrbrnGb
This was referenced Aug 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The fleet self-hosts Supabase on bitbaum. Two managed-cloud projects are dead — orangecat's
ohkueislstxomdjavyhs(retired 2026-06) and botsmann'sjkjmhtirxwhljpkcfxqebefore it. The repos kept describing them in the present tense.botsmann's setup doc opened with "✅ Completed Setup" for its dead project and said to apply migrations by pasting SQL into a supabase.com dashboard. Two scripts printed the same instruction, one handing out a psql string against
pooler.supabase.com, and the CLI's cache with the old project ref was committed twice. Nobody pasted anything, its eleven migrations were never applied, and/api/healthservedPGRST205for months while every deploy went green.The docs were not stale clutter — they were the outage. A wrong pointer to a real-looking place is worse than no pointer: no pointer makes someone ask, a plausible one makes them assume it was handled.
Why audit, rather than trust the cleanup
The first live sweep found one more of exactly the same shape.
printcraft/scripts/seed-roli-project.tshardcoded the retired host and omitteddb: { schema }— so repointing it naively at the box would have written one customer's project rows into orangecat'spublic. Deleted in bitbaum/printcraft#30. The remaining live instruction,orangecat/.env.example, is fixed in bitbaum/orangecat (linked below).What it is
scripts/ci/hosted-supabase-audit.sh— central, not a copy per repo, the rule this repo exists to keep. Three repos use Supabase and thirty do not. botsmann additionally keeps a localcheck:selfhostin its own verify, deliberately: it's the repo the outage happened in, and blocking the commit beats finding it a week later.Two judgements decide whether this is useful or merely loud, both pinned by 28 tests:
supabase.com/docs— the product documentation is still correct for us, only the control plane isn't — andyour-project.supabase.co, because a placeholder misleads nobody. A gate that fires on either gets muted, and a muted gate protects nothing.hosted-supabase.baselineis a ratchet: it may fall or hold, never rise without a human deciding so in the same PR.Transport, stated rather than hidden
Unlike
verify-floor-audit.sh, this reads local checkouts: it's a full-text sweep, and GitHub code search returns nothing for these repos (verified — even a known-present token finds no hit), so the only remote option would be fetching every text file of every repo. The workflow shallow-clones the fleet into a tempDEV_ROOTand runs the same script unchanged.When it sweeps nothing it prints SKIPPED, loudly, instead of a tick — a vacuous pass reads exactly like coverage, which is the failure this audit exists to prevent.
Verification
28/28 unit tests pass. Run live against all 35 local checkouts it correctly reported printcraft's hit gone after #30 merged, and named
orangecat/.env.exampleas the one remaining — tracking reality, not a snapshot.