ALTER TABLE runtime_instance ADD COLUMN IF NOT EXISTS owner_id text NOT NULL DEFAULT 'control-plane', ADD COLUMN IF NOT EXISTS purpose text NOT NULL DEFAULT 'session', ADD COLUMN IF NOT EXISTS lease_token text NOT NULL DEFAULT '', ADD COLUMN IF NOT EXISTS node_id text NOT NULL DEFAULT ''; ALTER TABLE runtime_instance DROP CONSTRAINT IF EXISTS runtime_instance_purpose_check; ALTER TABLE runtime_instance ADD CONSTRAINT runtime_instance_purpose_check CHECK (purpose IN ('session', 'task', 'listener')); CREATE UNIQUE INDEX IF NOT EXISTS runtime_instance_active_lease_token_idx ON runtime_instance (lease_token) WHERE released_at IS NULL AND lease_token <> ''; CREATE TABLE IF NOT EXISTS runtime_use_lease ( token text PRIMARY KEY, runtime_instance_id text NOT NULL REFERENCES runtime_instance(id), owner_id text NOT NULL, purpose text NOT NULL CHECK (purpose IN ('task', 'listener')), task_id text REFERENCES operation_task(id), lease_until timestamptz NOT NULL, acquired_at timestamptz NOT NULL DEFAULT now(), released_at timestamptz, CHECK (length(token) BETWEEN 16 AND 128), CHECK (length(owner_id) BETWEEN 1 AND 128) ); CREATE INDEX IF NOT EXISTS runtime_use_lease_active_runtime_idx ON runtime_use_lease (runtime_instance_id, lease_until) WHERE released_at IS NULL; CREATE UNIQUE INDEX IF NOT EXISTS runtime_use_lease_active_task_idx ON runtime_use_lease (task_id) WHERE released_at IS NULL AND task_id IS NOT NULL;