Replace -beta sidecar and .OLD backup with DB snapshots
Beta deploys used to rename foo.gsc -> foo.OLD and write beta bytes to a foo-beta.gsc sidecar, forcing the mod loader to know the naming convention. Now the beta content lives at the actual target filename (same as configs already did) and the pre-beta bytes are captured in a new beta_file_snapshots table for rollback. - schema.sql: new beta_file_snapshots(beta_id, server, rel_path, prior_content BLOB, prior_sha256, prior_size). Handles scripts, plugins, and the composed dedicated_sp.cfg uniformly. - db/index.ts: assertSnapshotSchemeSafe boot guard refuses to start if a legacy running/ready-promote beta is present on first upgrade. A settings sentinel (snapshots_v1) makes it one-shot. - beta.ts openBeta: read prior bytes, insert snapshot, overwrite target directly. - beta.ts rollbackBeta: restore from snapshot if had_original, else delete the fresh file. Drop snapshot rows after restore. - beta.ts promoteBeta: no more rm -beta / rm .OLD calls, pull prior content from the snapshot table for the deployment audit, drop snapshots after promote. - files.ts: delete betaFile() and oldFile(). - drift.ts: docstring updated; no special-casing needed since beta bytes and inventory now agree on the target rel_path. - servers/[name]/+page.svelte: drop dead -beta/.OLD row filters. - tests: plugin write asserts the target filename; unused betaFile/oldFile tests removed. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -78,9 +78,11 @@ async function walkFiles(root: string): Promise<string[]> {
|
||||
|
||||
/**
|
||||
* Scan every managed destination tree on a server (scripts, configs, plugins)
|
||||
* and return every file that isn't tracked in server_scripts. Beta artifacts
|
||||
* (-beta.gsc, .OLD, -beta.dll, composed dedicated_sp.cfg) are tracked while
|
||||
* a beta is active so they don't appear as drift.
|
||||
* and return every file that isn't tracked in server_scripts. During a beta,
|
||||
* the beta bytes live at the actual target filename and the inventory row is
|
||||
* updated to reflect them, so beta files register as tracked with no
|
||||
* special-casing (pre-beta bytes are snapshotted to beta_file_snapshots for
|
||||
* rollback rather than left on disk as .OLD).
|
||||
*
|
||||
* The inventory table (server_scripts) keys on (server, rel_path) with no
|
||||
* destination discriminator. Rel_paths across destinations don't collide in
|
||||
|
||||
Reference in New Issue
Block a user