-- Идемпотентность сообщений чата задач: клиентский ключ (uuid). -- Защита от дублей при повторной отправке одного сообщения: -- multi-tab replay офлайн-очереди (каждая вкладка реплеит независимо), -- ретраи после сетевых сбоев, двойные клики. -- Partial unique index: NULL-значения (старые сообщения, боты, автоматизации) не конфликтуют. ALTER TABLE task_messages ADD COLUMN IF NOT EXISTS client_message_id varchar(64); CREATE UNIQUE INDEX IF NOT EXISTS task_messages_client_message_id_unique ON task_messages (client_message_id) WHERE client_message_id IS NOT NULL;