Внутренняя чистка ядра: чат и звонки работают как раньше, код стал проще и надёжнее.
Техническое:
Rebase512 удалён; сервисы не вызывают статическое ядро (guard в smoke-container); App\Core\Format; ядра чата и звонков (DirectChat, CallSessions, CallLinks) — объекты из DI-контейнера, граф 255.
v5.17.0
2026-10-02
Что нового:
Настройки работают как прежде, но устроены заново: внутри стало в шесть раз меньше кода. Исправлено: загруженный логотип, favicon, PWA-иконка и свои звуки уведомлений сохранялись не туда и не показывались — теперь показываются.
Техническое:
Wave E: src/Service/Settings 132 classes -> 20 (one *Section per settings section with view()+save(), SettingsPage, SettingsSaveUseCase, SettingsRoutes, SettingsUi); view data, saves and rendered HTML checked 1:1 by a characterization snapshot; HomeBlocksLayoutCodec::decode replaces the Home copy; core calls via SettingsAdminRepository; SystemAssets/Files/Health modules used dirname(__DIR__) as the project root (uploads went to src/public/system) - fixed, deploy moves stray uploads; DI 365 -> 252.
v5.16.0
2026-10-02
Что нового:
Новая страница «Порталы» для администраторов: способ входа и почтовый домен портала, связи с направлением, политика порталов. «Мои порталы»: войти в ещё один портал по коду или выйти из лишнего. В «Пользователях» человек может состоять в нескольких порталах. Слово «домен» для порталов больше нигде не встречается.
Техническое:
D3: admin_portals (PortalsController -> PortalAdminViewDataUseCase/PortalAdminPostUseCase/MyPortalsUseCase -> PortalRepository -> Portals); admin_domains/admin_groups are aliases; portal policy moved out of Settings into Portals::policy/setPolicy; migration v4 20261004_0004_portal_settings renames settings keys and RBAC admin.domains/bridges -> admin.portals; registration ?portal=CODE (old ?domain= still prefills); DI 362 -> 365.
v5.15.0
2026-10-02
Что нового:
Новый экран после первого входа: если вы ещё не состоите ни в одном портале, выберите открытый портал, портал вашей компании (если почту подтвердил TSOY ID) или введите код портала. Раньше новичков молча помещали в корневой портал.
Техническое:
D2: onboarding route (PortalOnboardingController -> PortalOnboardingUseCase -> PortalRepository -> Portals) behind a RouterKernel gate for GET pages of accounts without a portal; verified TSOY ID e-mail domain remembered in the session; closed portals answer codes as unknown; migration v3 opens the root portal; global admins/testers always in root.
v5.14.0
2026-10-02
Что нового:
Домены стали порталами: то же разделение людей на пространства, но человек теперь может состоять в нескольких порталах, а связи между порталами бывают двусторонними и односторонними. Боковой чат показывает каналы ваших порталов. Для пользователей всё работает как раньше.
Техническое:
D1: portals/portal_members/portal_links replace domains/domain_members/domain_bridges and users.domain_*; App\Core\Portals decides who sees whom and the admin scope; migration v2 20261003_0002_portals moves data; module migrations (module_migrations), Vault drops write-only domain_id; upgrade from a real 5.12.0 schema verified schema-identical to a fresh install on MySQL 8.4.