Без этого на Android при открытии клавиатуры viewport не уменьшался,
и поле ввода сообщения в чате/задаче перекрывалось клавиатурой
или «убегало» вверх вместе с контентом.
- openOrFocusChat: includeUncontrolled=true, логирование, try/catch, fallback на clients.openWindow.
- notificationclick: логирование data, fallback построения URL из вложенного data.data.
- markNotificationRead: поддержка type/messageId/conversationId на верхнем уровне и во вложенном data.
- Bump CACHE_NAME до v12 для принудительного обновления SW.
- В настройках кнопки «Создать задачу по форме» добавлен выбор связи: новая задача — родительская или дочерняя (task_relations).
- Добавлено копирование значений полей из текущей задачи в новую через визуальный маппинг в отдельном диалоге (ButtonCopyFieldsDialog).
- Маппинг хранится в form_fields.options.copyFields, связь — в options.relationType.
- CreateTaskDialog/CreateTaskFormContent поддерживают initialValues (объектные значения) и parentTaskId.
- enqueueEmbedding: onConflictDoNothing без предиката не находил
частичный уникальный индекс embedding_queue_pending_entity_idx
(WHERE processed_at IS NULL) — каждая постановка в очередь индексации
падала. Добавлен where: isNull(processedAt).
- finance ensureViews: CREATE OR REPLACE VIEW не умеет менять тип столбца
(stavkands text↔varchar во внешней БД omegaprom) — заменено на
DROP VIEW IF EXISTS + CREATE VIEW (зависимых объектов нет).
- /profile теперь обёртка MyProfilePage над UserProfilePage (один экран для своего и чужого профиля)
- self-вкладки из ProfileSettings перенесены: Уведомления, Offline, Интерфейс, Безопасность (components/profile/*)
- ProfileSettings.tsx удалён
- админ видит вкладки Уведомления и Offline на чужой карточке с данными целевого пользователя
(userId-параметр в GET/POST /api/subscriptions, PATCH/DELETE по владельцу, GET /api/sync/config?userId=; проверка canManageUser)
- Роль/Активен/Статус disabled для не-админа (сервер их и раньше игнорировал)
- пункт меню «Настройки профиля» переименован в «Мой профиль»
- таблица user_delegations (миграция 0067) + колонки delegated_from_user_id/pending_review в task_assignees
- delegation.service: резолвер с цепочкой и защитой от циклов, bulk-до-назначение чанками, чистка истёкших замещений
- центральный хук в addTaskAssignee: заместитель добавляется при любом назначении (ручном, автопереходе, user-поле, MCP)
- контур ознакомления: после перехода отсутствующий остаётся в исполнителях с pending_review, снимается кнопкой «Ознакомлен»
- inbox reasons delegation/delegation_review + фильтр «Замещение» на главной
- блок «Замещение» в профиле пользователя, бейдж «за <имя>» и баннер ознакомления в карточке задачи