DROP INDEX tool_bindings_live_package_bot; CREATE UNIQUE INDEX tool_bindings_live_package_bot ON tool_bindings(package_row_id, bot_id) WHERE status IN ('installing', 'ready', 'switching', 'retiring'); CREATE TABLE package_transitions ( id TEXT PRIMARY KEY, bot_id TEXT NOT NULL, computer_id TEXT NOT NULL REFERENCES computers(id) ON DELETE CASCADE, generation INTEGER NOT NULL, package_id TEXT NOT NULL, binding_id TEXT NOT NULL REFERENCES tool_bindings(id) ON DELETE CASCADE, source_id TEXT NOT NULL REFERENCES tool_packages(id) ON DELETE CASCADE, target_id TEXT NOT NULL REFERENCES tool_packages(id) ON DELETE CASCADE, retiring JSONB NOT NULL, status TEXT NOT NULL DEFAULT 'pending', schemas JSONB, created_at TIMESTAMPTZ NOT NULL DEFAULT now() ); CREATE UNIQUE INDEX package_transition_pending ON package_transitions(bot_id, package_id) WHERE status IN ('pending','cancelling');