Defects C/D/E — title display name, toolbar layout, header lift
Defect C: Add GET proxy for /sessions/{guid}/members so ChatBox.loadMembers() can populate the SessionMember.name field. ChatTool already uses members[0].name f...
Derive and dispatch tool window title from session members
Adds onMembersChange callback to ChatBox; ChatTool derives the title (single name for 1-on-1, or '<name> (+N more)' for groups) and dispatches tool:title to upd...
Collapse toolbar, remove ChatHeader, add members intro row
- Delete ChatHeader row from embedded chat; move Add Member icon into unified toolbar - Toolbar: search input on left, VideoCall icon + PersonAdd icon + scroll-...
Lift search above tab strip, share query across Members and Chats tabs
Moves the search TextField from MemberList into NavTopPanel above the Tabs. Passes searchQuery as a prop to both MemberList and ChatsList so a single field filt...
Show upload error toast in Composer when attachments fail
Catches errors thrown by uploadAll() and renders an MUI Alert above the input row. Root cause of Defect 4 was the missing MinIO bucket (imaging-chat-attachments...
Empty Chats tab — frontend already expects {rows} paged shape (no change needed)
The ChatsList component already reads data.rows. Backend fix (shared-lib + MediaService) is the root cause: HAVING CAST(null AS TIMESTAMP) IS NULL did not work ...
Откажитесь от избыточных кнопок заголовка чата; интегрируйте вкладки Members/Chats с дизайном панели
У ChatHeader были свои собственные кнопки IconButtons, но окно инструмента чата. Хром уже предоставляет эти средства - они были дублированы, когда встроенный. C...
Бросьте неиспользуемый @ts-expect-error на стриминговое тело
Отливка «как RequestInit» уже заглушает ошибку типа; директива Излишний в строгом режиме ТС и ломает производственную сборку.
Список чатов с бесконечной прокруткой, виртуализированный через IntersectionObserver
Заголовок чата со стеком аватара, пополнением заголовка и сборщиком членов
Композитор с перетаскиванием, ожидающие фишки крепления, многолинейный вход
Пузырь сообщений с аватарами, действиями наведения и видимым индикатором
Прокси-маршруты для поиска или создания, члены, вложения, визуализация прокси, немой, отзыв
Выдержка из раздела **************** Helper to app/lib/mediaServiceUrl.ts. Добавить прокси-маршруты: find-or-create, members, квитанции, вложения (streaming), m...
Distinguish actively-translating vs queued messages
The streaming queue was already strictly sequential (one fetch at a time), but every queued message rendered "Translating…" because they all shared the same pen...
Show error icon when a message fails to translate
When the per-message translate call returns translated:false, errors out, or times out, the chat bubble now renders a small red ErrorOutline icon in place of th...
Persist language change and show current language in tooltip
The members endpoint accepts PUT not PATCH, so the language picker's PATCH was silently ignored — Member.language never actually updated, which is why refreshin...
Строка запросов ****************
Прокси Next.js отбрасывал строку запроса при пересылке на MediaService, что означало историю чата ?lang=<locale> парам Безмолвно заблудился. Без этого парама бэ...
Stream message translations newest-first on language switch
When the user picks a new language (or opens an existing chat in a language different from the messages' source), every bubble that needs translation immediatel...
Revert "fix(settings): show Plans & Billing tab regardless of root-org status"
This reverts commit ****************
Translate chat messages into the viewer's language
Adds a "My Language" flag picker in NavTop (left of the email tool, separated by a vertical rule). Selecting a language writes back to Member.language and syncs...
Show Plans & Billing tab regardless of root-org status
The !isRootOrg gate hid the tab on root orgs and blocked org owners and self-viewers from reaching their billing page from "My Account". The PlansBillingTab its...
Translate hardcoded UI strings
setup/dns (6 files): page, AliasStatusTable, DnsProgressView, DnsProvisioningPanel, DomainEntryForm, ManualDnsGuide. settings (10 files): diagnostics, essential...
Drop in place — jump every member, no softPush on release
The drift on release was softPushCluster firing on the user-drop path. A mega-cluster's bounds extend in all directions from the anchor, so the PADDING-margin /...
Translate hardcoded UI strings
account/view: 40 strings reused from existing namespace (no new keys). kb (13 files): translate article editor, viewer, reviews, resources, versions, navigation...
Перевод оставшихся жестких строк UI
Страница задач: Сохранить изменения, закрыть, добавить элемент задачи в поток автоматизации Отредактируйте название инструмента. Страница примечаний: Dismiss, L...
Replace hardcoded English with t() across leads pages
Translate remaining hardcoded UI strings in allotments, new, reports, and view/[id] to use next-intl. Add scripts/i18n-audit.py to detect remaining hardcoded st...
Drop firmly in place — tail-only throw + jump() to clear velocity
The previous fix still let heads drift on release because: 1. Throw detection averaged velocity across the full 110ms window. A user who flicked then decele...
Drop in place after a paused drag instead of drifting
Two cooperating bugs caused dropped heads (single or post-gather) to fly off to seemingly random positions when the user dragged fast, slowed to a stop, then re...
Добавить Personal + Chat/Docs/Notes/KB/HRS разделы
Индекс /settings не показывает разделы для не-администраторов, потому что каждый существующий раздел был закрыт справа от администратора (CONFIGURE SYSTEM, MANA...
Вращение открытия цели на основе соотношения сторон обзора
Рамка цели теперь наклонена на Atan2 (viewportH, viewportW), так что она открыта. правая сторона направлена к диагонали обзорного поля — для мониторов 16:9 точк...
Бросайте-удалить гол со счетом / пропущенные торжества
Рамка 132×132 цели появляется в верхнем левом углу, когда голова находится в соло-драг или активный бросок, смещение 56px из угла, чтобы головы могли Пропустить...
Бросьте физику с столкновениями с бассейном и следом кометы
Промахивая головой мимо порога броска, запускает его через видопорт в соответствии с эксплицитной физикой (трение, отскок ребра, упругость головы против головы)...
Отмена унаследованной скорости сопротивления при освобождении
Обработчик сопротивления обновляет значение движения головы с помощью быстрого mx.set(nx) Звонки, которые фреймер-движение использует для вычисления скорости. К...
Crispen hexagon outline at all sizes/states
Four sources of softness eliminated: - **************** on the SVG - **************** on the visible outline so the stroke width does not stretch (and blur) u...
Используйте OTK, отчеканенный сервером, для перехода в новую организацию
Предпочитаете otk, возвращенный POST/api/security/org, по сравнению с последующей версией. /api/security/enter-as round-trip. Сервер теперь чеканит нового владе...
Расстояние между кластерами + правила группировки одинакового размера
Кластерные ячейки и гекс-соседство теперь получены из крупнейшего кластера. член вместо глобального масштаба, а последующие MV включают в себя центр-выравнивани...
Скрыть попувер при приглашении на встречу открывает диалог
Потоп оставался открытым под диалогом встречи, потому что Диалог был условно рендеринг внутри целевых ворот. Захватите приглашенного в момент щелчка, отклоните ...
Перезапись системы перетаскивания/кластера с помощью магнитного захвата и сбора жестов
Заменить монолитную HexHeadGroup (847 линий) модульным кластерным двигателем Приложение/компоненты/чат/хексхеды/. Источник истины: каждая голова живет в кластер...
Robust English fallback for missing and empty locale translations
- mergeWithFallback now treats empty-string locale values as untranslated, falling back to the English value instead of rendering nothing - Replace bare NextI...
Update orders page account uid type from number to string
AccountSummary.uid is now a string (Long precision fix). Also remove parseInt comparison and type="number" from the manual account ID field.
Как вы видите судоходство?
Каждое из этих обновлений автоматически попадает в ваше рабочее пространство. Начните бесплатно и смотрите, как он растет неделю за неделей.