Add configurable beta test plans and staged rollout

This commit is contained in:
2026-09-17 21:35:28 -04:00
parent 5b5266da3a
commit a50eae9d21
26 changed files with 1518 additions and 44 deletions
+48
View File
@@ -129,6 +129,54 @@ CREATE TABLE IF NOT EXISTS beta_servers (
);
CREATE INDEX IF NOT EXISTS idx_beta_servers_stage ON beta_servers(stage);
-- Immutable test configuration, durable attempts and append-only evidence.
-- Keeping test outcome separate preserves artifact holds until explicit closure.
CREATE TABLE IF NOT EXISTS beta_test_plans (
beta_id INTEGER PRIMARY KEY REFERENCES betas(id) ON DELETE CASCADE,
plan TEXT NOT NULL,
outcome TEXT NOT NULL DEFAULT 'active',
reason TEXT
);
CREATE TABLE IF NOT EXISTS beta_test_runs (
id TEXT PRIMARY KEY,
beta_id INTEGER NOT NULL REFERENCES betas(id) ON DELETE CASCADE,
server TEXT NOT NULL REFERENCES servers(name),
phase INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL,
observing_at TEXT,
retired_at TEXT,
metrics TEXT NOT NULL DEFAULT '{}',
cursors TEXT NOT NULL DEFAULT '{}'
);
CREATE TABLE IF NOT EXISTS beta_test_coverage (
beta_id INTEGER NOT NULL REFERENCES betas(id) ON DELETE CASCADE,
server TEXT NOT NULL,
game TEXT,
map TEXT,
PRIMARY KEY (beta_id, server)
);
CREATE UNIQUE INDEX IF NOT EXISTS idx_beta_test_current_run ON beta_test_runs(beta_id, server) WHERE retired_at IS NULL;
CREATE TABLE IF NOT EXISTS beta_test_evidence (
id INTEGER PRIMARY KEY AUTOINCREMENT,
run_id TEXT NOT NULL REFERENCES beta_test_runs(id) ON DELETE CASCADE,
event_id TEXT NOT NULL,
received_at TEXT NOT NULL,
kind TEXT NOT NULL,
payload TEXT NOT NULL,
UNIQUE(run_id, event_id)
);
CREATE INDEX IF NOT EXISTS idx_beta_evidence_run ON beta_test_evidence(run_id, id);
CREATE TABLE IF NOT EXISTS beta_file_changes (
beta_id INTEGER NOT NULL REFERENCES betas(id) ON DELETE CASCADE,
server TEXT NOT NULL,
rel_path TEXT NOT NULL,
PRIMARY KEY (beta_id, server, rel_path)
);
CREATE TABLE IF NOT EXISTS beta_test_presets (
name TEXT PRIMARY KEY,
plan TEXT NOT NULL
);
-- Many-to-many: which scripts (and pinned versions) are bundled into a beta.
-- Replaces the deprecated betas.script_id / betas.script_version_id columns.
CREATE TABLE IF NOT EXISTS beta_scripts (