c0011b49a3feat(users): выбор колонок в реестре пользователей + кликабельная Оценка и доработанный график историиИльяс Султанов2026-09-29 15:09:22 +03:00
c56ec26b49НДС в DI2: линии начислено/вычет на графике, таблицы с прокруткойИльяс Султанов2026-09-29 12:02:58 +03:00
6ef0621d63НДС в DI2: трекер авансовых УПД, доработка графика и виджета «Контроль квартала»Ильяс Султанов2026-09-29 11:35:30 +03:00
5fe0e30ea0fix(files): get_task_file отдаёт внешний presigned-URL через прокси приложения вместо внутреннего minio:9000Ильяс Султанов2026-09-29 11:04:02 +03:00
102f5410b1fix(files): backfill — regexp_replace вместо substring FROM (возвращал префикс, а не ключ) + удаление мусорных ключей со слэшамиИльяс Султанов2026-09-29 10:41:53 +03:00
4bac21ff71fix(files): бот может скачивать файлы — API-ключ на /api/files и /uploads + трекинг абсолютных URLИльяс Султанов2026-09-29 10:36:41 +03:00
b9ef0b2152НДС в DI2: дефолтный период — вся история витрины, KPI «К уплате» — за кварталИльяс Султанов2026-09-29 09:15:43 +03:00
de9bbfe17aНДС в DI2: вкладка «Расчёты → НДС» переведена на декларационную витрину 1СИльяс Султанов2026-09-29 07:49:23 +03:00
c0b8910094fix(gps): плавное движение маркеров при зуме — позиции обновляются напрямую в DOM на actiontick (без React-рендера), кластеры перестраиваются на actionend/zoomchangeИльяс Султанов2026-09-24 21:36:48 +03:00
69039e14a1fix(gps): маркеры Яндекса — собственный DOM-слой поверх карты (клики React, пиксельная кластеризация); отказ от Clusterer/ObjectManager с их багами кастомных макетовИльяс Султанов2026-09-24 16:36:34 +03:00
0409a547fcdiag(gps): тестовый объект со стандартной иконкой в ObjectManager — разделение рендер vs layoutИльяс Султанов2026-09-24 08:37:12 +03:00
d54d2db351diag(gps): перехват ошибки загрузки маркеров в ObjectManagerИльяс Султанов2026-09-23 15:09:39 +03:00
4b532540befix(gps): формат объектов ObjectManager — GeoJSON Feature с coordinates [lng,lat]Ильяс Султанов2026-09-23 14:49:27 +03:00
e9f072c0c3fix(gps): слой маркеров Яндекса переведён с Clusterer на ObjectManager — кастомные макеты в Clusterer теряли кликабельность (известный баг), ObjectManager лишён этой болезниИльяс Султанов2026-09-23 14:33:49 +03:00
a231f64837fix(gps): iconShape задан от точки привязки маркера (anchor), а не от угла — активная область перекрывает маркерИльяс Султанов2026-09-23 13:41:07 +03:00
345c34730ffix(gps): iconShape у кастомных маркеров Яндекса — без него hit-test не находил метку, клики уходили в events-paneИльяс Султанов2026-09-23 13:07:13 +03:00
1353b23c7dfeat(gps): совпадающие точки задач раскидываются веером (~30 м) — кластер из одной координаты раскрывается зумомИльяс Султанов2026-09-23 12:52:18 +03:00
a1e05c4cdbdiag(gps): временные логи доставки клика на Яндексе (container/placemark) для точной диагностикиИльяс Султанов2026-09-23 12:48:34 +03:00
3964d861aefix(gps): yandexMapDisablePoiInteractivity — отключены POI-хотспоты Яндекса (403 search/v2, вмешательство в клики по маркерам)Ильяс Султанов2026-09-23 10:58:19 +03:00
5c68d84cfffix(csp): разрешён core-renderer-tiles.maps.yandex.net (script-src) — Яндекс.Карты 2.1 грузит JSONP hit-test объектов с него, блокировка CSP ломала клики по маркерамИльяс Султанов2026-09-23 10:25:27 +03:00
d238b005f4fix(gps): двойной путь доставки клика по маркеру — data-gps-action на корне (capture-делегирование) + placemark.eventsИльяс Султанов2026-09-23 10:04:06 +03:00
dadd49c15ffix(gps): свои панели вместо попапов карт — клик по точке показывает карточку задачи, клик по кластеру — вертикальный список (устранена ненадёжность balloon/popup)Ильяс Султанов2026-09-23 09:16:55 +03:00
6c1cea39b4fix(gps): клик по точке открывает попап с названием (делегирование только по data-gps-action); спайдерфай кластеров в одной координате на max zoomИльяс Султанов2026-09-23 08:49:15 +03:00
27a14ec513feat(gps): клик по точке объекта показывает название (попап + «Открыть задачу»); точки объектов кластеризуются, список кластера вертикальныйИльяс Султанов2026-09-22 22:11:38 +03:00
dfedb3ebfafeat(gps): настройки слоя «Объекты» сохраняются (форма/поле/названия), подписи в две строки: объект / заказчикИльяс Султанов2026-09-22 21:39:27 +03:00
fe174535b7feat(gps): кнопка «Названия» для слоя объектов (по умолчанию скрыты); подписи сокращены до «объект · заказчик» (≤40 символов)Ильяс Султанов2026-09-22 21:15:31 +03:00
42894aaf8ffeat(gps): на вкладке «Карта» слой задач формы (селектор формы+geo-поля) + создание объекта правым кликом с координатамиИльяс Султанов2026-09-22 20:59:54 +03:00
fe57e368dafix(gps): подложка OSM-режима на Esri World Street Map (CARTO теперь требует API-ключ — водяные знаки)Ильяс Султанов2026-09-22 20:08:19 +03:00
db6b18f679fix(gps): OSM-подложка переведена с tile.openstreetmap.org (403 Access blocked в проде) на CARTO BasemapsИльяс Султанов2026-09-22 19:54:13 +03:00
8d11ad3b33fix(auth): список сессий без мусора ротаций — фильтр isReplaced, перенос UA/IP, чистка старыхИльяс Султанов2026-09-22 09:01:59 +03:00
13db5be030fix(chat): React #310 — ChatSection вынесен на module level вместо useCallbackИльяс Султанов2026-09-21 22:10:57 +03:00
693834ac27fix(chat): настоящая первопричина дёрганья — remount чата из-за inline-компонента ChatSection + первый кадр не у низаИльяс Султанов2026-09-21 21:33:26 +03:00
d0d73a59f2ci(deploy): app-образ собирается в GitHub Actions и пушится в GHCR — сервер только скачиваетИльяс Султанов2026-09-21 20:59:31 +03:00
34838a302dfeat(chat): онлайн-доставка как в Telegram — watchdog SSE, тихий скролл, персистентный кэш сообщений, невидимое обновление SWИльяс Султанов2026-09-21 20:29:13 +03:00
f8d78afd2efeat(auth): retry рефреша при 401 + вкладка «Сессии» в профиле с отзывом устройствИльяс Султанов2026-09-21 18:13:47 +03:00
c957a70260feat(auth): access 24ч, jti против гонок ротации, транзакционная ротация, отзыв сессий по sidИльяс Султанов2026-09-21 18:13:46 +03:00
2f9d049718fix(chat): catch-up сообщений при возврате на вкладку; fix(sw): фокус на открытой вкладке вместо навигации всех; fix(history): числа не резолвятся в имена пользователейИльяс Султанов2026-09-21 17:03:01 +03:00
e3f0ebfb89feat(fields): мягкое удаление полей формы — архив удалённых с восстановлением и блок «Удалённые поля» в задачеИльяс Султанов2026-09-21 14:35:45 +03:00
d5f2925886feat(tags): полный тинт строк/карточек, цветное значение поля вместо чипа в шапке; защита от дубль-клика при открытии задачИльяс Султанов2026-09-21 14:35:45 +03:00
267af046a3fix(chat): автоскролл задач только у низа, картинки с фикс. размером, упоминания по @ и 3+ буквам имени/фамилииИльяс Султанов2026-09-17 22:00:10 +03:00
d0112657b8fix(auth): живая сессия на устройстве — рефреш на холодном старте, grace-окно ротации, без логаута при временных ошибкахИльяс Султанов2026-09-17 21:59:51 +03:00
e32def495dfeat(registry): горизонтальная прокрутка внизу области, sticky-шапка, ресайз колонок, лимит строк в ячейкеИльяс Султанов2026-09-14 23:21:02 +03:00
c8b7741b11fix(ui): мобильный main стал flex-колонкой — flex-1 PageTransition больше не игнорируется, h-full-цепочки страниц восстановленыИльяс Султанов2026-09-14 23:08:30 +03:00
5af274cd0ffix(ui): двойной Sidebar на реестре задач и карточке задачи — TaskView/TaskDetail рендерили свой Sidebar поверх AppShellИльяс Султанов2026-09-09 08:22:41 +03:00
b94406e057feat(ui): фаза 7 — self-host шрифты Inter/DM Mono (woff2, precache в SW v13), возвращён focus-visible (кольцо --ring), active:scale для кнопок (фикс мёртвого not-disabled), плавные появление/исчезновение биллинг-оверлея, длительности тостов по шкале токеновИльяс Султанов2026-09-08 22:11:32 +03:00
820e8865a5refactor(chat): фаза 6 — общий useMessagePolling, TaskChat на общий MessageBubble (слоты под task-специфику) и groupByDate, виртуализация мессенджера + автоскролл только у низа, TaskChat без RHF/zod (локальный стейт), анимация появления последнего сообщения; TaskChat 2023→1754 строкИльяс Султанов2026-09-08 21:58:03 +03:00
aa8bf6ac33feat(ui): фаза 5 — Тема 2.0 во всех базовых ui/* (select/textarea/tabs/popover/tooltip/dropdown-menu/checkbox/dialog на рецептах и токенах), data-density/control-variant/button-radius на html, консолидация размеров кнопок (44 места → size=sm), max-h+скролл диалоговИльяс Султанов2026-09-08 21:23:25 +03:00
113ed458b6feat(ui): фаза 4 — скелетоны PageSkeleton/ListSkeleton/CardSkeleton/FormSkeleton (мигрированы ~19 страниц вместо спиннеров), PageTransition на framer-motion (fade 150ms, MotionConfig reducedMotion=user, гейт skinComponents.motion.enabled), StaggerList для списков задач/диалогов/справочниковИльяс Султанов2026-09-08 21:10:08 +03:00
c4fdfe4eabrefactor(ui): фаза 3 — единый AppShell (Sidebar не размонтируется при навигации), Layout стал тонким контейнером, SPA-навигация вместо location.href (уведомления, тосты, TableEditor), scroll restoration, плавное появление биллинг-оверлеяИльяс Султанов2026-09-08 20:48:28 +03:00
5d219ac794fix(ui): фаза 2 — стабилизация данных: throttle+invalidate вместо refetch-пачек на SSE, единый useUnreadBadges (polling только при обрыве SSE), TaskChat polling только при потере SSE, one-shot guard в safeLazy, плавная смена скина (transition цветов)Ильяс Султанов2026-09-08 20:38:01 +03:00
7a98bf7bf3feat(ui): фаза 1 — шкалы motion/z-index в токенах, boot-скрипт темы в index.html, рецепты компонентов (design-system/recipes.ts) для button/input/badge/card/table, layout.taskDetail в скине, удалён мёртвый CSS (.btn-compact и др.) и зависимость tw-animate-cssИльяс Султанов2026-09-08 20:26:14 +03:00
c8d7f9b336fix(auth-ui): тихий фейл 400 при смене пароля, валидация, пароль при созданииИльяс Султанов2026-09-08 16:42:59 +03:00
0b2319b11dfeat(automations): ctx.tasks.sendMessage — сообщение в чат задачи от Системы; userId в triggerData status_changedИльяс Султанов2026-09-08 16:31:59 +03:00
163351b345docs(log): шаги 0.3, 0.6, 0.14 — подтверждены на проде, этап E закрытИльяс Султанов2026-09-08 15:15:17 +03:00
a5ab294608ci(deploy): compose из инфра-репо напрямую через -f (чистый git status на сервере)Ильяс Султанов2026-09-08 15:02:33 +03:00