BEGIN; SET ROLE interaction_role; ALTER TABLE interaction.utterance_interpretations ADD COLUMN IF NOT EXISTS secondary_speech_act TEXT NOT NULL DEFAULT 'UNKNOWN', ADD COLUMN IF NOT EXISTS needs_cognition BOOLEAN NOT NULL DEFAULT FALSE, ADD COLUMN IF NOT EXISTS applicability TEXT NOT NULL DEFAULT 'APPLICABLE', ADD COLUMN IF NOT EXISTS selection_reason TEXT NOT NULL DEFAULT ''; ALTER TABLE interaction.utterance_interpretations DROP CONSTRAINT IF EXISTS utterance_interpretations_secondary_speech_act_check; ALTER TABLE interaction.utterance_interpretations ADD CONSTRAINT utterance_interpretations_secondary_speech_act_check CHECK (secondary_speech_act IN ('DIRECTIVE','ASSERTION','DECISION','PREFERENCE','QUESTION','HYPOTHESIS','CORRECTION','REQUEST_TO_INVESTIGATE','CONFIRMATION','REJECTION','CANCELLATION','CONVERSATIONAL','UNKNOWN')); ALTER TABLE interaction.utterance_interpretations DROP CONSTRAINT IF EXISTS utterance_interpretations_applicability_check; ALTER TABLE interaction.utterance_interpretations ADD CONSTRAINT utterance_interpretations_applicability_check CHECK (applicability IN ('APPLICABLE','LOW_CONFIDENCE','MIXED_INTENT','NEEDS_BROADER_INTERPRETATION','CLARIFICATION_REQUIRED')); CREATE TABLE IF NOT EXISTS interaction.semantic_candidates ( candidate_id TEXT PRIMARY KEY, utterance_id TEXT NOT NULL, source TEXT NOT NULL, selection_state TEXT NOT NULL, primary_speech_act TEXT NOT NULL, secondary_speech_act TEXT NOT NULL, confidence_millis BIGINT NOT NULL, applicability TEXT NOT NULL, requested_outcome TEXT NOT NULL DEFAULT '', clarification TEXT NOT NULL, needs_cognition BOOLEAN NOT NULL DEFAULT FALSE, selection_reason TEXT NOT NULL DEFAULT '', recorded_at_unix_millis BIGINT NOT NULL, CHECK (source IN ('DETERMINISTIC_V2','COGNITIVE_V1')), CHECK (selection_state IN ('SELECTED','OBSERVED','REJECTED')), CHECK (primary_speech_act IN ('DIRECTIVE','ASSERTION','DECISION','PREFERENCE','QUESTION','HYPOTHESIS','CORRECTION','REQUEST_TO_INVESTIGATE','CONFIRMATION','REJECTION','CANCELLATION','CONVERSATIONAL','UNKNOWN')), CHECK (secondary_speech_act IN ('DIRECTIVE','ASSERTION','DECISION','PREFERENCE','QUESTION','HYPOTHESIS','CORRECTION','REQUEST_TO_INVESTIGATE','CONFIRMATION','REJECTION','CANCELLATION','CONVERSATIONAL','UNKNOWN')), CHECK (confidence_millis BETWEEN 0 AND 1000), CHECK (applicability IN ('APPLICABLE','LOW_CONFIDENCE','MIXED_INTENT','NEEDS_BROADER_INTERPRETATION','CLARIFICATION_REQUIRED')), CHECK (clarification IN ('NOT_REQUIRED','REQUIRED')) ); CREATE TABLE IF NOT EXISTS interaction.semantic_candidate_capability_hints ( candidate_id TEXT NOT NULL, capability_kind TEXT NOT NULL, PRIMARY KEY (candidate_id, capability_kind), CHECK (candidate_id <> ''), CHECK (capability_kind <> '') ); RESET ROLE; COMMIT;