Журнал изменений
Что нового.
Каждое усовершенствование платформы, как только она появится.
· SecurityService
Add theme provisioning — NATS publisher, provision-theme endpoint, logo upload
· ConversionService
Add image resize and favicon generation endpoints
· InitializerService
Add migration runner for logo_full_ext column on orgs
· kamo-shared-library
Добавить логотипFullExt в организационную структуру; добавить список объектов в MinIOStorageService
· kamo-internal
Замените иконки смайликов на твердые иконки SVG для создания шага мастера
· kamo-shared-library
Добавить findByBranchTypeID производный запрос в OrganizationRepository
Поддерживает новую конечную точку /branch-types/{id}/usages в SecurityService для проверки того, имеет ли тип ветви активные детские организации перед удалением.
· SecurityService
Add GET /branch-types/creatable and /{id}/usages endpoints
/creatable returns branch types filtered by the caller's creator-type (OWNERS/TEAM_MEMBERS/MEMBERS) via AppliedModelEnforcementService. /{id}/usages returns the count and summary of orgs created under a given branch type, used by the frontend to block hard deletion.
· kamo-internal
Удаление типа защитной ветви против использования активных организаций
Прежде чем удалить чип типа ветви, интерфейс теперь вызывает **************************** Если существуют какие-либо орги, это показывает информационный диалог, перечисляющий их и инструктирующий администратора Отключите тип вместо того, чтобы удалять его.
· kamo-internal
Live support ticket badge on NavTop — SupportCountContext подписывается на NATS через STOMP, показы значков ожидают подсчета
· MediaService
Live pending support ticket count via NATS — notify org owner on new tickets, add pending-count REST endpoint
· kamo-shared-library
Добавить ожидающее графовое поле в SupportAgentNotificationDTO и считать запрос в SupportTicketRepository
· kamo-internal
Добавить поле доменного имени в мастер создания оргов
Добавляет необходимое поле домена на шаг Основы с автоматическим www. стриптиз. Проверено, включено в полезную нагрузку API и показано на этапе обзора.
· kamo-marketing
Добавить вызов модификации API на страницу ссылки kamo-api
Показанный только на /kamo-api-ссылке, предлагает пользователям представить изменение API Запросы через /requests или связаться через /contact.
· SecurityService
Add GET /branch-types/creatable endpoint with creator-type filtering
Returns only the branch types the calling member is permitted to create a child org under, based on their OWNERS/TEAM_MEMBERS/MEMBERS classification against the current org's applied security models. Mirrors the exact same getBranchTypesCreatableBy enforcement the POST /org endpoint applies at submission time, so the frontend can pre-filter the pick list and avoid showing options that would produce a 403. Response includes allowedMemberAgeRanges and allowedTeamMemberAgeRanges from each branch type's security model so the UI can gate AgeReqType options in the same request, without a second round-trip.
· kamo-internal
Заменить организацию Шаг мастера типов с выбором ветви Type/SecurityModel
Заменить OrgTypeStep (Организация) Type + Configuration dropdowns BranchTypeStep, который делает ****************** новая конечная точка возвращает только типы ветвей, которые абоненту разрешено создавать Детская организация под, отфильтрованная их владельцами / участниками / участниками Классификация по прикладным моделям безопасности организации - полностью удалить OrganizationType из полезной нагрузки; теперь ConfigType Автомобили, полученные из разрешенной модели безопасности (KIDS ONLY → KIDS CLUB, teen-range → CLUB, other ENTERPRISE) AgeRestrictionsStep теперь фильтрует доступные варианты AgeReqType разрешена выбранной моделью безопасности, с баннером, когда активный; нулевой возраст (не указан) остается безопасным без операции на бэкэнде После успешного создания перенаправить на /setup/dns?orgId=&orgName= CURRENT org (не новая детская организация) — DNS должна быть настроена до того, как Новая система доступна Добавить **************** Прокси-маршрут js - ReviewStep показывает название ветки + разрешенный возрастной диапазон вместо старого Org type / значки типа конфигурирования
· kamo-internal
/network create affordance защищена типом участника + право
BranchSetupManager: «Кто может создавать детские организации по этой модели» Карта с тремя переключателями (члены / члены команды / владельцы). ценности круглое путешествие по картеBackendModel и оба потока сохранения (детская модель) + мастер-модель. Пустое состояние по умолчанию все три ложные — модель не предлагает создание никому, пока администратор не выберет их. - /network page: fetches **************** монтировать и скрывать каждый «Создать новую организацию» (заголовок) кнопка, кнопка пустого состояния, нижняя карта), если только сервер Окончательно возвращается canCreateChildOrg=true. Пока чек будет В полете (ноль) доступность остается скрытой, поэтому мы никогда не мигаем. Для человека, который не должен этого видеть. Новый **************** Прокси маршрут вперед В новой конечной точке службы безопасности.
· SecurityService
Gate /network child-org creation by right + member-type applicability
Wires the applied-security-model child-org creation gate end-to-end: - SecurityModelController + MasterModelController round-trip the three new apply-to flags (appliesToMembers / appliesToTeamMembers / appliesToOwners) through create and update payloads. - New GET **************** resolves — for the caller's session — the creator-type bucket they fall into, whether their role carries CREATE_CHILD_ORG, the list of branch types available to them, and a combined canCreateChildOrg boolean the /network page uses to hide the create affordance when false. - **************** now rejects with 403 when the caller lacks CREATE_CHILD_ORG or picks a branch type that isn't among those their creator-type is offered — defense in depth against a client that bypasses the UI gate.
· kamo-shared-library
Врата типа участника + CREATE CHILD ORG право на создание детворы
Добавляет слой данных для создания gating/network child-org по типу участника: - Новое право CREATE CHILD ORG на RoleRightType (id 131). - Три новые булевые колонки на ChildOrgSecurityModel: AppsToMembers / AppsToTeamMembers / AppsToOwners Когда это правда, типы ветвей модели предлагаются этому ведру типа члена. в сети /network. Модель со всеми тремя ложными никогда не всплывает как творение. возможность для всех — она управляет только существующими организациями. - ChildOrgSecurityModelService получает 13-аргетные перегрузки, которые принять новые флаги; наследство 10-аргий подписей делегировать через. ChildOrgSecurityModelDTO обогнул три флага. AppliedModelEnforcementService раскрывает логику ворот, которую каждый абонент акции: enum ChildOrgCreatorType {MEMBERS, TEAM MEMBERS, OWNERS} getBranchTypesCreatableBy(org, CreatorType) → список типов ветвей которые относятся к типу создателя и имеют По крайней мере, один тип ветвей. ************* CreatorType) → булев предикат. Классификация типа создателя: OWNERS = члены команды Организация Владелец = правда, команда = члены команды, участники = всем остальным. Правильная проверка (CREATE CHILD ORG) намеренно не выпекается в этих помощников - звонящие объединяют оба чека, чтобы помощник также мог Запросы только для чтения.
· InitializerService
Master model applies to all three member types on init
provisionMaxedOutMasterModel now sets appliesToMembers, appliesToTeamMembers, and appliesToOwners all true so every member type sees the master model's branch types as creation options on /network. The Administrator template continues to GRANT every RoleRightType including the new CREATE_CHILD_ORG right (id 131) by virtue of iterating RoleRightType.values().
· kamo-marketing
Добавьте миллисекунды для запуска обратного отсчета, тикайте каждые 50 мс
· kamo-marketing
Заменить статическую дату запуска обратным отсчетом до 2PM PST Apr 20 2026
Каждую секунду показывает Xd XXh XXm XXs; возвращается к статической дате Пока клиент не гидратирует, показывает "Сейчас", когда цель достигнута.
· InitializerService
Administrator default role template starts with all rights GRANTED
provisionMaxedOutMasterModel now populates the Administrator template with every RoleRightType set to GRANTED. The other three templates (Team Member, Member, DEFAULT) still materialize with zero rights (NOT_SPECIFIED for everything), matching the intended blank baseline for non-admin roles. Why GRANTED (not FORCE_GRANTED): at child-org creation time ChildOrgTemplateSeedingService copies non-force template values into the new org's OrgRoleRight rows, so a GRANTED admin template gives every new child org a ready-to-use admin role with full permissions that the owner can still edit. FORCE_GRANTED would lock rights at runtime and hide them from the security-roles editor, which we don't want for the admin template baseline.
· InitializerService
Provision a maxed-out master security model for KamoCRM on init
DataLoader now creates and assigns a master ChildOrgSecurityModel to KamoCRM immediately after the org is created, with every setting maxed out to the most permissive / force-enabled value: - allowOwnersViewOtherOrgs / allowOwnersPrivateOrgs / allowSubChildOrgs = true - identityProviderSetting = ENABLED - teamMemberPayFeesSetting = FORCE_ENABLE - allowedMemberAgeRanges / allowedTeamMemberAgeRanges = every AgeReqType - appConfigs = every non-deprecated ServiceType at FORCE_ENABLED, with CRM's allowedCommerceTypes containing every CommerceType - Organization.masterModelID set to the new model The four default role templates (Administrator / Team Member / Member / DEFAULT) are materialized with zero rights so the UI renders tabs for each — every right stays NOT_SPECIFIED at runtime, the intended blank baseline. Admins can edit specific force rules later via the branch-types tab. Also bumps kamo-shared-library to 1.5.0 so the new ChildOrgSecurityModelService / AppConfigService / DefaultRoleService and related types resolve at compile time.
· kamo-internal
FeaturesManager чтит прикладную модель состояния с поддержкой силы
Принимает новую модель Доступность + заблокированные поля от FeatureController и покрывает их в UI: - Функции, моделью которых является FORCE ENABLED, позволяют переключаться в На состояние, инвалид, с пояснительной подсказкой — администраторы могут видеть Они включены, но не могут их сбросить. - Toggling a modelForced имеет короткие замыкания с четким тостом Это больше, чем общая ошибка из бэкэнда 403. Недоступные функции никогда не достигают клиента (фильтрованная серверная сторона) Таким образом, список UI уже является закрытым видом.
· SecurityService
Applied-model is the read-time source of truth for feature availability
Closes the "stale DB leaks a disabled feature" gap by gating every surface that touches OrgFeature / ServiceType through the applied security model. - **************** (the primary feeder of the frontend OrgContext): replaces the raw features serialization with **************** org.getFeatures()). The auto- provisioning loop now also skips apps the model marks NOT_AVAILABLE so we never create DB rows for blocked apps. - FeatureController.list: returns each feature with modelAvailability + locked metadata. NOT_AVAILABLE rows are filtered out, FORCE_ENABLED rows are reported as enabled=true + locked=true regardless of their DB state. The available list is also filtered down to apps the model permits. - New AppAvailabilityInterceptor + WebMvcConfig: installs a HandlerInterceptor on every service-scoped URL prefix (/api/security/pos, /api/security/commerce-markets, /api/security/leads*, /api/security/lead- imports, /api/security/lead-markets, /api/security/lead-vendors, **************** **************** **************** Each request is matched to a ServiceType, resolved against the caller's applied model, and rejected with HTTP 403 if the app is effectively off. This is the final line of defense: even with stale client state, a forgotten controller guard, or a direct API call, a blocked app returns 403. Net effect: the applied security model now wins at read time everywhere the org's features or apps are exposed — navigation, home page, settings slide-out, FeaturesManager, per-service endpoints. When the admin flips CRM to NOT_AVAILABLE on the model, the CRM UI disappears from the frontend and CRM endpoints start 403'ing — regardless of whether the DB still has OrgFeature.isActive=true for CRM.
· kamo-shared-library
Решитель эффективных характеристик для прикладной модели времени чтения
Добавляет ворота времени чтения, что делает прикладную модель безопасности окончательной. источник истины для доступности функций, поэтому устаревшее состояние DB не может утечь Функция отключена, и функция с поддержкой силы всегда видна Даже если ДБ не догнал. Новые методы в AppliedModelEnforcementService: - ComputeAvailabilitiesMap(org) - разрешение одного прохода каждого ServiceType Доступность для организации в одном поиске. Служит как партия примитивных Другие новые методы основаны на - isAppEffectivelyEnabled (org, serviceType, features) - канонический "is" Это приложение на чеке. Основные услуги всегда включены, обесценены всегда выключены, FORCE ENABLED always on, NOT AVAILABLE always off; OPTIONAL * Состояние OrgFeature является активным. **************** Функции — набор <ServiceType> Компаньон для абонентов, которым нужны «все эффективные приложения» в виде набора. - computeEffectiveFeatures (org, features) - возвращает новый ArrayList Строки OrgFeature, проецируемые через ворота: Not AVAILABLE FORCE ENABLED принудительно активируется (даже на отключенных DB-рядах), и Приложения FORCE ENABLED без DB-ряда, представленные переходными рядами (организационный, никогда не сохраняется). Звонящие, сериализующие функции организации для клиентов, теперь проходят через Вычислительные характеристики, а не чтение сырой коллекции, поэтому Frontend видит прикладную модель по умолчанию.
· kamo-internal
Добавьте вкладки настроек per-assocType с типами doc, порядками укладки и панелями конфигураций
Заменяет ComingSoonTab на /settings/features/docs полным интерфейсом настроек: - Общий обзор вкладки + одна вкладка на ImageAssocType (Учетная запись, Сервисное приложение, Сервисный заказ, Запись звонков, Мои документы, Запись встреч, Система-Широк) - Каждая вкладка AssocType имеет 3 подзадачи: Конфигурация (переключатели функций папки/docType), Типы документов (полный CRUD), Заказы на складывание (CRUD с визуальным ящиком трубопровода) Прокси-маршруты API Next.js для всех конечных точек настройки изображений - AssocConfigPanel, DocTypesManager, StackingOrdersManager, StackingOrderDrawer, компоненты AssocTypeSettings
· DocsService
Add ImagingSettingsController with doc type, stacking order, and assoc config CRUD
· kamo-shared-library
Добавьте объект ImgAssocConfig, репозиторий и сортировочный заказ в ImgStacking Порядок
· InitializerService
Add FEATURE_REQUESTS to Support category and all plan-feature mappings
Free: Community vote, Starter: Vote & request, Business: Priority requests, Enterprise: Custom dev included

Ваша вселенная ждет.
Начните бесплатно через несколько минут. Добавляйте продукты, когда будете готовы — без миграции, без новых логинов.
Бесплатно навсегда — не требуется кредитная карта