delete the global push from the server, keep the warning

`pushSchema()` had no callers left once installs stopped using it, and it is not
the kind of dead code worth keeping around: it is a one-line way to run the exact
command that stopped applying anything on a real server, and dropped tables when
forced.

The doc comment stays in its place, because the useful artefact is the reason
rather than the function. `bun db:push` remains correct in exactly one situation —
`officer-setup`'s build step, on a machine with no tables yet, where "make the
database match this schema" is an instruction with no ambiguity to resolve. Every
other caller now has a scoped path.

tsgo clean, frontend builds, 873 pass / 7 fail unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-16 10:17:25 +00:00
co-authored by Claude Opus 5
parent 221e370442
commit 8d8fbe2903
+9 -14
View File
@@ -190,20 +190,15 @@ export default defineConfig({
}
/**
* Apply the schema to Postgres.
* The global push — `bun db:push` over the whole schema — is deliberately NOT used by installs.
*
* Shells out to the same `bun db:push` a human runs, rather than driving drizzle-kit in-process: it is
* one definition of "apply the schema" instead of two that can disagree, and an owner can reproduce
* exactly what an install did with a command they already know.
* It was removed as a plugin's install step on 2026-08-16 and is not replaced by anything here: nothing
* in the server should run it. `scripts/setup/officer-setup/lib/build.sh` still does, once, on a machine
* that has no tables yet, which is the only situation where "make the database match this schema" is a
* safe instruction.
*
* `--force` because there is nothing to prompt about by construction — the barrel only ever gains entries
* unless a plugin's source is deleted — and a prompt with no terminal attached would hang the install
* forever rather than fail it.
* On any machine that already holds tables the schema does not declare, that command is a trap. It stops
* on an interactive rename prompt no non-TTY caller can answer (applying nothing and exiting 0), and
* `--force` converts that into dropping every one of those tables. Both were observed on a real server:
* see `pushPluginSchema` below for the full account and for what installs do instead.
*/
export async function pushSchema(onLog?: OnLog): Promise<PushResult> {
// Streamed rather than captured. drizzle writes progress to stderr and results to stdout, and this is
// the command that reported success while creating nothing — so what it says is worth showing at the
// time it says it, not summarised into a exit code afterwards.
const result = await runLogged(['bun', 'run', 'db:push', '--force'], { cwd: PLATFORM_DIR, onLog });
return { ok: result.ok, ms: result.ms, output: result.output.slice(-600) };
}