ALTER TABLE job_audit ADD COLUMN request_hash TEXT; ALTER TABLE job_audit ADD COLUMN request_sequence INTEGER NOT NULL DEFAULT 0; ALTER TABLE job_audit ADD COLUMN request_json TEXT; ALTER TABLE job_audit ADD COLUMN owner_id TEXT; ALTER TABLE job_audit ADD COLUMN lease_until TEXT; ALTER TABLE job_audit ADD COLUMN attempt INTEGER NOT NULL DEFAULT 0; ALTER TABLE job_audit ADD COLUMN fencing_token INTEGER NOT NULL DEFAULT 0; ALTER TABLE job_audit ADD COLUMN available_at TEXT NOT NULL DEFAULT '1970-01-01T00:00:00Z'; ALTER TABLE job_audit ADD COLUMN cancel_requested INTEGER NOT NULL DEFAULT 0; INSERT OR IGNORE INTO tenant (id, name, slug) VALUES ('00000000-0000-0000-0000-000000000000', 'EvoBGP system jobs', 'evobgp-system-jobs'); CREATE INDEX idx_job_audit_claim ON job_audit (available_at, created_at) WHERE status = 'queued'; CREATE INDEX idx_job_audit_expired_lease ON job_audit (lease_until) WHERE status = 'running'; UPDATE job_audit SET owner_id = 'legacy-unfenced', lease_until = strftime('%Y-%m-%dT%H:%M:%fZ', 'now', '+15 minutes'), attempt = 1 WHERE status = 'running' AND lease_until IS NULL;