-- Permission 2.0: user and inference task lifecycle tombstones. -- Additive migration, safe to execute repeatedly. ALTER TABLE users ADD COLUMN IF NOT EXISTS deleted_at TEXT; ALTER TABLE users ADD COLUMN IF NOT EXISTS deleted_by TEXT; ALTER TABLE compare_tasks ADD COLUMN IF NOT EXISTS deleted_at TEXT; ALTER TABLE compare_tasks ADD COLUMN IF NOT EXISTS deleted_by TEXT; ALTER TABLE eval_tasks ADD COLUMN IF NOT EXISTS created_by TEXT; ALTER TABLE eval_tasks ADD COLUMN IF NOT EXISTS tenant_id TEXT; ALTER TABLE compare_tasks ADD COLUMN IF NOT EXISTS created_by TEXT; ALTER TABLE compare_tasks ADD COLUMN IF NOT EXISTS tenant_id TEXT; ALTER TABLE data_convert_tasks ADD COLUMN IF NOT EXISTS deleted_by TEXT; ALTER TABLE storage_objects ADD COLUMN IF NOT EXISTS deleted_at TEXT; ALTER TABLE storage_objects ADD COLUMN IF NOT EXISTS deleted_by TEXT; ALTER TABLE storage_objects ADD COLUMN IF NOT EXISTS cleanup_attempts INTEGER NOT NULL DEFAULT 0; ALTER TABLE storage_objects ADD COLUMN IF NOT EXISTS last_cleanup_error TEXT; ALTER TABLE storage_objects ADD COLUMN IF NOT EXISTS last_verified_at TEXT; CREATE INDEX IF NOT EXISTS idx_users_active ON users(status, deleted_at); CREATE INDEX IF NOT EXISTS idx_compare_tasks_active ON compare_tasks(status, deleted_at);