KamoCRM

Live Change Log

Every feature, fix and improvement, posted as it ships. Nothing is held back for a launch.

15,120
Total Changes
5,169
Features
4,935
Fixes
30
Projects
Filter by project
All Projects15,120AIService197APIService161BillingService143ConversionService107DaemonService129DocsService215ESigService88EmailService518InitializerService318KBService105KlusterServices697MCPGatewayService85MediaService546RAGService71SecurityService1,658TranslateService55VOIPService205VectorService11kamo-apps25kamo-asterisk-support24kamo-capcha17kamo-capcha-widget4kamo-internal6,937kamo-login330kamo-marketing625kamo-nowww20kamo-register213kamo-shared-library1,455kamo-signer-monorepo53kamolos108
Filter by type
All TypesBuild11CI523Chore738Docs2,167Feature5,169Fix4,935Other986Performance157Refactor274Revert23Style42Test94Upgrade1
August 13, 2026
FixMediaService

A ticket can never be answered by the member who raised it

A support conversation has two sides — someone asking and someone answering — and nothing enforced that they were different people. A member holding ACCEPT_SUPP...

Kamo·1mo ago
FixMediaService

Send an outbound attachment to the endpoint its type belongs to

Every social attachment went out through the adapter's sendImage, which on Telegram is /sendPhoto. A PDF or a zip posted there is rejected by the provider, and ...

Kamo·1mo ago
August 11, 2026
FixMediaService

Declare the object-storage secret the ConfigMap no longer carries

The MinIO key was moved out of the ConfigMap into the minio-app-credentials secret, but the envFrom that supplies it was only ever applied to the live deploymen...

Kamo·1mo ago
FixMediaService

Stop shipping a shared credential as a config default

The platform's shared password was baked in as the fallback for DB_PASSWORD and MINIO_ROOT_PASSWORD, so it lived in this repo and in the built image as well as ...

Kamo·1mo ago
FixMediaService

Assigning by hand must not consume the PRE_TICKET status

assignToAgent and reassignAgent set ASSIGNED unconditionally, which quietly made a chat request impossible to convert afterwards — convertPreTicket accepts noth...

Kamo·1mo ago
August 10, 2026
FixMediaService

Validate who a ticket may be handed to by hand

assignToAgent and reassignAgent checked only that the id resolved to a member. Assignment adds that member to the ticket's chat session, so an id from another o...

Kamo·1mo ago
FixMediaService

Auto Assignment offers the ticket, it does not allocate it

Auto Assignment pages every available support agent and goes to the first one who accepts. It was implemented as "silently pick the least-busy agent who is onli...

Kamo·1mo ago
FixMediaService

Run the topic's strategy for widget chats too

A chat opened in the web widget is the same unit of work as one filed inside the app, but this path skipped the topic's assignment strategy entirely — the only ...

Kamo·1mo ago
FixMediaService

Put the session type on the activity frame too

The unread/ACTIVITY broadcast is published for every session type and carried no indication of which. The chats list, having nothing to go on, typed an unseen s...

Kamo·1mo ago
FixMediaService

Tell the client which kind of conversation a message arrived in

Every member of a media session receives the incoming-message notification, and assigning a support ticket makes the agent a member of that ticket's session. Th...

Kamo·1mo ago
FixMediaService

A live chat is claimed through the popup, never allocated

Routing chat requests through round-robin was the wrong model and it broke the thing it was meant to fix. An assigned ticket leaves the claimable queue (Support...

Kamo·1mo ago
FixMediaService

Stop assignment failures destroying the ticket that triggered them

Routing a new ticket ran inside the creation transaction, so anything it hit rolled the ticket back with it and the member asking for help got "Failed to create...

Kamo·1mo ago
FixMediaService

Route a chat request through the topic's assignment strategy

A support chat request is filed as a PRE_TICKET, and createTicket skipped assignment for those outright. The guard was written for the web-chat widget, where a ...

Kamo·1mo ago
August 9, 2026
FixMediaService

Stop renewing the shared *** TTL for idle users

This service keeps its own copy of KSessionService, and it slid the TTL on every read. Gating SecurityService alone therefore fixed nothing: kamo-internal point...

Kamo·1mo ago
August 8, 2026
FixMediaService

Fail a dead upload in minutes instead of holding it for an hour

connectionUploadTimeout is the tolerated SILENCE between reads, not a budget for the whole transfer. Setting it to an hour to 'match Traefik' confused the two: ...

Kamo·1mo ago
FixMediaService

Stop Tomcat's 60s connection timeout killing a long upload

A 2 GiB chat attachment failed after nearly four minutes of successful transfer with MultipartException wrapping a bare SocketTimeoutException, and the member w...

Kamo·1mo ago
August 7, 2026
FixMediaService

Catch OptimisticLockException, the type 40001 actually wraps as

Round 3 review fix: hibernate-core's **************** tests LockAcquisitionException (what SQLState 40001 converts to) against four specific types in order, non...

Kamo·1mo ago
FixMediaService

Catch the exception type the claim conflict actually throws

Round 2 review fix: the statement-level 40001 (the common case, detected inside executeUpdate() rather than at commit) surfaces as **************** via Hibernat...

Kamo·1mo ago
FixMediaService

Return 409 on every lost claim race, add manager claim path

Round 1 review fixes for the accept-popup claim endpoint: - an ordinary lost race (loser's isClaimableBy already false post-commit) now raises TicketAlreadyCl...

Kamo·1mo ago
FixMediaService

Scan the email repositories DepartmentService now needs

MediaService CrashLooped on every pod since shared-lib 1.5.0: DepartmentService is a @Service, so the wildcard @ComponentScan("com.kamo") builds it here whether...

Kamo·1mo ago
FixMediaService

Accept the timeline provider filter as repeated params

The web client sent ?providers=facebook,x as one CSV value. A comma in a query VALUE has to travel as %2C, and a hop that re-encodes turns that into %252C; we d...

Kamo·1mo ago
FixMediaService

Send missed-message emails to the user account, not the org mailbox

The notice existed to say "you have a message waiting, sign in and read it", and it was being delivered to the mailbox this organization assigned the member — w...

Kamo·1mo ago
August 6, 2026
FixMediaService

Give every agent a live badge instead of one owner an unread count

The nav badge and /support?tab=tickets answered different questions. The page lists every ticket in the org; the badge counted unread chat messages belonging to...

Kamo·1mo ago
FixMediaService

Drop client SENDs to guarded topics, and repair the build at HEAD

TWO THINGS, both of which stop MediaService main from shipping. 1. main does not compile. MediaController:1361 calls **************** which does not exist: ...

Kamo·1mo ago
FixMediaService

Announce a message once, when it is whole

Both callers that finish building a message after the row is saved now tell createMessage not to announce it: MediaController attaches the images and publishes ...

Kamo·1mo ago
FixMediaService

Store attachments through the dedup pipeline instead of one object per upload

Attachments wrote their own "<imgId>/<fileName>" object on every upload, bypassing the content-addressed store entirely — the same logo-draft.png attached three...

Kamo·1mo ago
August 3, 2026
FixMediaService

Scan the shared MFA repositories

MfaEnrollmentService is a @Service in kamo-shared-library, so the wildcard @ComponentScan("com.kamo") in this application constructs it whether or not this serv...

Kamo·1mo ago
FixMediaService

Harden the kubectl download against flaky egress [skip ci]

dl.k8s.io over the runner's egress intermittently drops mid-transfer: curl: (56) OpenSSL SSL_read: decryption failed or bad record mac which fails the deploy ...

Kamo·1mo ago
July 22, 2026
FixMediaService

Mount the live per-host cert instead of the expired wildcard secret

The cert-converter init container built its PKCS12 keystore from wildcard-kamocrm-com, a legacy multi-SAN secret that cert-manager orphaned when its Certificate...

Kamo·2mo ago
July 19, 2026
FixMediaService

Reject cross-org sales agents; widen bootstrap cache busting

salesAgentId was persisted from the request body unchecked, so a cross-org or dangling agent id could be stored on a WebChatIntegration. It failed safe only bec...

Kamo·2mo ago
July 17, 2026
FixMediaService

Exclude non-ACTIVE members from chat participation & routing

A non-ACTIVE **************** member must not appear as, or be targeted as, a live chat participant. Gate every chat path on the shared-lib **************** pre...

Kamo·2mo ago
July 16, 2026
July 15, 2026
FixMediaService

Resolve public-chat system member per-org (drop hardcoded snadjafinia alias)

createSupportSession, createPublicTicket, and the owner notification helpers all resolved the org's "system member" via a hardcoded usernameAlias="snadjafinia" ...

Kamo·2mo ago
July 14, 2026
FixMediaService

Stop putting message content into missed-message emails

Remove messagePreview computation, the ledger PREVIEW write, and the messagePreview template variable; drop the includePreview preference. Emails now carry send...

Kamo·2mo ago
July 8, 2026
FixMediaService

Persist scheduled-material thumb flags via targeted update

Same detached-entity orphanRemoval issue as the conversion pipeline: the headless sweep held a detached ImgDat and save()/merge() cascaded into the images colle...

Kamo·2mo ago
FixMediaService

Wrap recording upload so MediaService compiles

MinIOStorageService.upload throws a checked Exception that ingest() neither caught nor declared — build break on top of the isGuest fix. Wrap it and rethrow as ...

Kamo·2mo ago
FixMediaService

MeetingParticipant.isGuest() (was getGuest, won't compile); repoint transcribe to generic endpoint

MeetingParticipant exposes isGuest() (primitive boolean getter), not getGuest(). Also point the summary transcribe call at the shared /api/conversion/transcribe...

Kamo·2mo ago
July 7, 2026
FixMediaService

Persist invited participants, enforce MANAGE_MEET_SETTINGS, drop double-invite path

- createMeeting: invited members are numeric snowflake IDs, not UUID strings — route them through longToUUID like the creator. Previously UUID.fromString th...

Kamo·2mo ago
July 1, 2026
May 1, 2026
FixMediaService

Publish NATS CREATE event after transaction commit to fix image attachment race

The NATS message was published inside the @Transactional body, which meant recipients could receive the CREATE event and request the image via /imaging/proxy/{o...

Kamo·5mo ago
FixMediaService

Serialize attachments in WS relay and message history; allow attachment-only sends

Three bugs fixed: 1. ChatSessionSubscriptionManager was building the STOMP messageMap manually and omitting attachments, sourceLanguageId, readMemberId, msg...

Kamo·5mo ago
FixMediaService

Fix NPE in getChatSessions from Map.of() rejecting null nextcoder

java.util.Map.of() throws NullPointerException when nextcoder is null (no more pages). Replace with HashMap that accepts null values. Also wrap entire handler i...

Kamo·5mo ago
FixMediaService

Fix upload 500 (missing EmbRecordState) and empty chats tab (Timestamp cast)

Defect A: ChatAttachmentService.upload omitted **************** causing a NOT NULL violation on imgs.is_active. Added the default recordState. Also hardened Cha...

Kamo·5mo ago
FixMediaService

Prefer usernameAlias over User.name in memberDisplayName

Switches display name priority to: Member.usernameAlias → User.name → User.alias → User.username. Also includes the paged query dispatch fix from the previous c...

Kamo·5mo ago
FixMediaService

Use split First/After queries for chat sessions paged endpoint

Addresses empty Chats tab by dispatching to ****************

Kamo·5mo ago
April 30, 2026
FixMediaService

Raise client read timeout to 120s for long messages

LibreTranslate runs CPU-only argos models — a paragraph-length chat message takes 20-30s to translate, and longer ones can push past 60s. The 8-second read time...

Kamo·5mo ago
April 26, 2026
FixMediaService

Track public support chat by session GUID in Redis

Marketing visitors use /ws/public-chat-native without memberId; tickets still reference the org placeholder member as requestor. Increment PRESENCE_PUBLIC keys ...

Kamo·5mo ago
April 25, 2026
FixMediaService

Expand JPA repository scan to include commerce package

The new kamo-shared-library brings in **************** which requires **************** (in com.kamo.z.shared.commerce). MediaService only scanned donotmodify.da...

Kamo·5mo ago

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.

Start Free ForeverView Pricing