Optional Cache-Control on object upload
Used by theme provisioning so globals.css and config.json instruct browsers and proxies to revalidate instead of serving stale cached objects.
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...
Fall back to org_domains when no email_provider_domains default set
KamoMailDomainValidator was hard-failing with 403 for orgs that have a DNS-verified domain in org_domains but never added it to the email provider domain regist...
Use getMemberIdString() in NavTop to prevent int64 precision loss
getMemberId() converts the CockroachDB unique_rowid to a JS number, truncating IDs > MAX_SAFE_INTEGER (e.g. 1168485658174423046 → ...000). Switch all NavTop mem...
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 ...
Send avatar UUID strings to member PUT, not parseInt
Avatar IDs are UUIDs; parseInt produced NaN or truncated values so member avatar updates were skipped or wrong after refresh. Use string IDs for upload, Avatar ...
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...
Show message when photo crop source image is missing
Helps when storage files were removed but the avatar row still exists.
Add **************** for avatar cleanup
Used when removing an avatar so member overrides referencing the same row can be cleared before delete.
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. ...
Handle provision-theme HTTP errors and reset provisioning UI
Await POST /provision-theme after branding and background saves; on non-202 show the API error and clear the panel. Increment themeProvisionSession for backgrou...
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 ...
Connect STOMP before POST to avoid lost progress
WebSocket was only started when provisioning became true, while provision-theme fired in the same turn; async backend could publish before STOMP subscribed. Con...
Relay theme provision from core NATS
Match SecurityService core publish: subscribe with Dispatcher on security.theme.provision.* instead of JetStream (stream only covers chat).
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...
Forward query string to APIService so org-scoped routes like domains list resolve correctly
Use string org IDs for security org API and theme WS
getOrgId() coerced orgID with Number(), corrupting int64 Cockroach IDs in /api/security/org/{id}/* URLs (404/failed saves). Add getOrgIdString(), use it in Labe...
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 ...
Clear wizard sessionStorage on fresh create via ?fresh=1
Navigate from Network to create with ?fresh=1, strip the query, and use a short-lived lock so React Strict Mode does not restore an old draft before persist run...
Normalize JSON Content-Type and surface Spring error fields
Force a single application/json header for JSON proxy bodies; org route always sets it. Map Problem Details title/detail in createOrganization errors.
Set application/json for JSON bodies forwarded to SecurityService
RestTemplate to upstream could leave Content-Type incompatible with Spring @RequestBody, causing 415. After reading the raw body, force APPLICATION_JSON when th...
Skip compliance step when policies are fixed; resync branch type from API
Alcohol/tobacco/firearms compliance policies
- CHILD_ORG_SECURITY_MODELS columns and entity defaults MEMBER_SELECT - DTO and ChildOrgSecurityModelService create/update normalization - AppliedModelEnforceme...
Je, unaona nini kuhusu usafiri?
Kila moja ya hizi updates ardhi katika nafasi yako ya kazi moja kwa moja. Kuanza bure na kuangalia kukua wiki baada ya wiki.