Return only team members from by-department endpoint
Interaction Center should list TeamMember rows, not base Member records.
Interaction Center member line uses job titles
Replace RBAC role title with jobTitleOfficial, fallback to JobTitle catalog title for TeamMember, and the label Member for base Member records in the by-departm...
Expose and persist jobTitleOfficial for team members on profile and member-security APIs
Apply subscription gate to app routes and feature API
AppAvailabilityInterceptor now always uses isAppEffectivelyEnabled so FORCE_ENABLED respects subscription. FeatureController serializes enabled from the same ga...
Harden default template copy for org provisioning
Use explicit source prefix for destination keys, skip S3 folder markers, and fail fast when the template prefix is empty so silent partial copies do not reach g...
Include teamMember owner flag in *** for platform admin UI
Store teamMember { memberId, isOrganizationOwner } in Redis session at login so kamo-internal hasPlatformAdminAccess can satisfy the top-level org owner path. E...
Drop mail from required DNS CNAME aliases
Remove mail from KnownAliases so verify-dns and onboarding no longer require mail.example.com; new custom domains also skip auto-creating the mail child alias.
Parse session orgID and userID when stored as strings in AppliedModelController.
Correct applied-model source and normalize compliance in API
Use resolver resolution for BRANCH_TYPE vs MASTER instead of inferring from branchTypeID alone. Normalize FALSE/TRUE compliance literals in applied-model settin...
Propagate master model compliance and age rules to branch-type security models
ThemeRevision in config and cache headers on theme assets
Emit themeRevision (epoch ms) in config.json on each write; set Cache-Control on config, globals.css, and site.webmanifest uploads so edge caches revalidate.
Write globals.css before cleanup; run cleanup async
Reorder provisionUpdate so writeConfigFiles (colors, config, manifest) runs before background file cleanup. Reload org from DB for fresh colors. Run cleanupExt...
Apply committed org colors to MinIO globals.css
Reload Organization from the DB at the start of async provision so writeConfigFiles sees colors saved by PATCH /colors (controller snapshot could be stale). Nul...
Mark DNS-verified custom domains as isDefault in domain API
Previously only *.kamocrm.com subdomains were marked isDefault, so orgs with a verified custom apex domain (e.g. kamocrm.com) always got defaultDomain=null and ...
Allow branding when user is org owner TeamMember
Theme provisioning and logo/background uploads only checked Organization.owner FK; the app UI treats organization owner as TeamMember.isOrganizationOwner, which...
Clear user and member FKs before deleting avatar row
Deleting an avatar failed with a DB constraint when it was still the active user avatar or a member-specific override, which matched broken MinIO blobs where us...
Merge default template without wiping org folder
Full provision no longer deletes the org prefix before copy. Copy from public/default overwrites matching keys only; other objects under the org folder remain. ...
Resolve theme folder host without strict DNS verification
Theme provisioning required isDnsVerified for every domain, so orgs using only the default kamocrm.com subdomain never started async work (400, no STOMP). Fall ...
Publish theme provision progress on core NATS
JetStream CHAT_MESSAGES stream is configured for chat.> only, so publishes to **************** failed stream validation and the UI saw no progress. Use Connecti...
Set EmbRecordState.isActive on wizard create-org so orgs.is_active is not null
Return JSON-safe create-org body instead of serializing Organization entity
Parse create-org with plain ObjectMapper and return Jackson message on 400
Deserialize create-org body into CreateOrganizationPayload to avoid entity JsonIdentityInfo failure
Parse create-org JSON by stripping wizard domain field before Organization mapping
Parse create-org JSON without @RequestBody to avoid 415
Spring returns Unsupported Media Type when Content-Type is missing or not accepted for @RequestBody. Read bytes and use ObjectMapper instead so APIService/Next ...
Expose ATF compliance policies on models and creatable branch types
- OrganizationController applies model enforcement before age assertions - SecurityModelController and MasterModelController pass policy fields - BranchTypeCont...
Rebuild for kamo-shared-library update (remove OrganizationType, add isTopLevel)
Read session rights as list or legacy CSV for member endpoints
KSessionService and SecurityRoleController store rights as List<String> of RoleRightType names. MemberSecurityController cast to String and split on comma, caus...
Verify-dns checks every KnownAliases label; skip deprecated app/media in optional
Align KnownAliases with DNS and auto-cert (add mail, play, apps, sign; drop app, media)
Avoid transaction-poisoning DDL and harden multi-pod races
The previous self-heal put DDL inside a @Transactional syncAll(). When an ALTER TABLE ADD CONSTRAINT fired on an existing constraint (normal case after first bo...
Make RoleRightsSyncService fully self-healing on every boot
Adding or removing a RoleRightType must never again require running KamoInitializerService. syncAll() now runs three phases on every startup: 1. Heal constrain...
Remove getType() calls from OrganizationController after OrganizationType removal
Like what you see shipping?
All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.
