KamoCRM

Live Change Log

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

17,374
Total Changes
5,891
Features
5,258
Fixes
30
Projects
Filter by project
All Projects17,374AIService242APIService174BillingService157ConversionService110DaemonService137DocsService223ESigService91EmailService568InitializerService329KBService151KlusterServices738MCPGatewayService235MediaService592RAGService79SecurityService1,822TranslateService62VOIPService248VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,321kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,631kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,252Feature5,891Fix5,258Other993Performance165Refactor278Revert23Style42Test159Upgrade1
September 28, 2026
Fixkamo-internal

A post or note is edited, liked and deleted by its own id

Every item of a feed (the Clubhouse, a lead's or a pipeline record's notes) carries its stream's guid, so PostCard's edit, like and delete went to /posts/<strea...

Kamo·3w ago
Fixkamo-internal

Add Lead goes to the list when its creator may not open the new lead

A lead created with "Auto Assign / Unassigned" joins the assignment pool, owned by nobody, and the lead page refuses a member without VIEW_UNASSIGNED_LEADS on a...

Kamo·3w ago
FixTranslateService

Guard ampersands for every spelling of Spanish, keyed on the resolved language

guardAmpersands compared the caller's raw targetLang with {"es"}, so "ES", "es-419" or "es_MX" reached the same en->es model without the guard and came back wit...

Kamo·3w ago
FixVOIPService

Phone OAuth hops return the platform's members to internal.kamouniverse.com

kamouniverse.com is the platform's primary apex (kamo-shared-library 0e8cf90f). Sign-in ranks it first for the platform organization, the one organization holdi...

Kamo·3w ago
FixMediaService

The bridge dials the room Meet uses; an AI joins a future meeting at its start; an AI that heard nobody is dialled again

- The dial-in resolver (I1), KM2's roomName and M1's join.roomName name the room Meet uses (the Kamo Meet provider's own room, else the typed name cleaned the...

Kamo·3w ago
FixMediaService

OAuth return URLs accept both platform consoles; webinar cancel links keep the page that exists

kamouniverse.com is now the platform's primary apex (kamo-shared-library 0e8cf90f): OrgLinkHosts falls back to it, and ROOT_PREFERENCE makes it the platform org...

Kamo·3w ago
FixSecurityService

Edit, like and delete one post or note by its own id, never the whole stream

A feed, the organization's (the Clubhouse) or a lead's notes, is ONE POST session and every post or note is a message in it, so every item the feed lists carrie...

Kamo·3w ago
FixKlusterServices

Never ban k3m1 — its node network joins the fail2ban allowlist

FreePBX runs with hostNetwork on k1m1. A pod on k3m1 reaches it SNATed to k3m1's InternalIP, 10.0.50.1, which none of the [DEFAULT] ignoreip ranges covered (the...

Kamo·3w ago
FixKlusterServices

A lone call waits five minutes for company, not thirty seconds

Jigasi hangs up a call that nobody else joins within JIGASI_JVB_TIMEOUT (the image's default 30 s): Jicofo invites a participant only once there are two. An AI ...

Kamo·3w ago
FixSecurityService

SPF advice recognises kamouniverse.com; the brand's aliases are reserved on both apexes

SPF: kamouniverse.com publishes the same record as spf.kamocrm.com (v=spf1 ip4:47.181.8.84 mx -all), so a customer who wrote include:kamouniverse.com has alread...

Kamo·3w ago
FixSecurityService

Platform fallbacks name the primary apex, not a kamocrm.com literal

Four places kept their own "kamocrm.com" literal as the platform host they fall back to, so they could never follow the brand to kamouniverse.com. Each now read...

Kamo·3w ago
Fixkamo-shared-library

A quote's letterhead falls back to the primary platform apex

QuoteMapper kept its own "kamocrm.com" literal as the theme host of last resort, so a quote for an organization with no live domain still named the old brand's ...

Kamo·3w ago
Fixkamo-marketing

Send Careers and the LLM registration link to kamouniverse.com

kamouniverse.com is now the platform's primary apex. Two links on the legacy www.kamocrm.com site that send visitors into the platform, and carry nothing tied t...

Kamo·3w ago
FixVOIPService

Read JustCall voicemail with INCOMING_VOICEMAIL, and file each under its agent

JustCall answers call_type=VOICEMAIL with 400 ("call_type must be one of ... INCOMING_VOICEMAIL"), so not one of the 241 voicemails on the JustCall account ever...

Kamo·3w ago
FixKlusterServices

Docs trusts api.kamouniverse.com as a WOPI host

A member signed in on internal.kamouniverse.com (the platform's primary apex since 2026-09-28) opens documents with **************** DocsService takes the last ...

Kamo·3w ago
FixDocsService

Docs trusts api.kamouniverse.com and serves docs.kamouniverse.com

A member signed in on internal.kamouniverse.com (the platform's primary apex since 2026-09-28) opens a document with **************** because DocumentController...

Kamo·3w ago
FixKlusterServices

Kamouniverse.com refuses unknown recipients at RCPT instead of bouncing them

kamouniverse.com, the platform's primary apex, is an alias domain of kamocrm.com: every <x>@kamouniverse.com is the <x>@kamocrm.com mailbox. It was mapped by a ...

Kamo·3w ago
FixKlusterServices

The desktop-ws route reaches only the terminal socket, not every SecurityService path

**************** matched PathPrefix(`/desktop-ws`) on internal.* and stripped the prefix, so **************** reached ANY SecurityService path from the internet...

Kamo·3w ago
FixEmailService

KamoMail binds only an address on a domain the organization holds; the provider needs its right

The cross-tenant read path parked as SP99-T1-f. A self-registered organization could point its provider at its own IceWarp or Exchange (PUT /api/email/provider ...

Kamo·3w ago
FixSecurityService

One organization can no longer take another's <alias>.kamocrm.com routing

Any member of an organization with no root could add the root victim.kamocrm.com (POST /api/security/domains checked no right). Listing the domains then self-he...

Kamo·3w ago
FixSecurityService

A lead's notes stream, addressed by its guid, keeps the lead's own read rule

Every note on a lead now sends the lead stream's guid on /topic/media/feed/<orgId> (SP99-T3), which any member of the organization may subscribe to. The guid-ad...

Kamo·3w ago
FixKlusterServices

A caller an AI member transfers rings the person from its own channel

FreePBX sends every blind transfer to its global TRANSFER_CONTEXT, from-internal-xfer-dest, which dials the target through a Local channel. A Local channel take...

Kamo·3w ago
FixSecurityService

A new commit log is translated at once, not behind the sweep's backlog

The first translation of a commit log and the sweep's retries shared one three-thread executor, first come first served. With the SP99 T6 repair's 326 commit lo...

Kamo·3w ago
Fixkamo-asterisk-support

An AI extension's AOR block adds to the AOR, not to the endpoint of the same name

FreePBX names an extension's endpoint and its AOR alike, and pjsip.conf includes pjsip.endpoint.conf before pjsip.aor.conf. A bare [7900](+) in pjsip.aor_custom...

Kamo·3w ago
FixSecurityService

The translation recount is the first statement of its own transaction

A locale save was an upsert and then a recount that reads the commit log's rows, in one transaction. Yugabyte restarts a read transparently only when it is the ...

Kamo·3w ago
Fixkamo-internal

A lead's Notes tab goes live — the feed listens on the shared media socket

The Hot Reassign ship check showed a note reaching the lead's All tab live but not its Notes tab. MediaStream (a lead's Notes, a pipeline record's notes, the Cl...

Kamo·3w ago
Fixkamo-internal

A lead's Notes tab goes live — the feed listens on the shared media socket

The Hot Reassign ship check showed a note reaching the lead's All tab live but not its Notes tab. MediaStream (a lead's Notes, a pipeline record's notes, the Cl...

Kamo·3w ago
FixSecurityService

One pod at a time translates a commit log, and a finished one is not redone

Both SecurityService pods run the translation sweep: its lock lasts only as long as the dispatch. Each took up the same 50 commit logs, and a pod's in-flight se...

Kamo·3w ago
Fixkamo-internal

Say what a VoIP API key can do

The FreePBX helper's uploads key now also rings members' mobiles (only on this organization's phone servers) and already pulled the managed dial plan; the API M...

Kamo·3w ago
Fixkamo-internal

Say what a VoIP API key can do

The FreePBX helper's uploads key now also rings members' mobiles (only on this organization's phone servers) and already pulled the managed dial plan; the API M...

Kamo·3w ago
FixVOIPService

A PBX ring event rings only members of the key's own org

APIService vouches for the API key's org in X-Org-Id and takes the phone server id from a header the key holder writes. The ring seam ignored the org, so any ke...

Kamo·3w ago
FixAPIService

The FreePBX helper's one key rings a phone

kamo-asterisk-support holds a single API key, documented and issued as a VOIP_RECORDING_UPLOADS key, and sends its ring events with it. The ring endpoint accept...

Kamo·3w ago
FixKlusterServices

Cap llama-server's prompt cache below the memory limit, so it stops being OOMKilled

llama-server's host-RAM prompt cache defaults to 8192 MiB (--cache-ram), the container's whole limit, so it grew until the kernel killed ollama: on 2026-09-28 i...

Kamo·3w ago
FixKlusterServices

The workstation probe shows its results and ends

Run live against an awake AI workstation, the probe printed the descriptor and then nothing: kubectl debug -i (1.36) returned as soon as it had sent the probe t...

Kamo·3w ago
Fixkamo-internal

A Watch waits out the wake the server announced

An AI workstation's wake is now estimated at 600 seconds (one resume took 9 min 19 s), and the launch tab's ring counts that down, but the tab still gave up at ...

Kamo·3w ago
Fixkamo-shared-library

A lead that was ever assigned or opened can be deleted

LeadService.deleteLead cleared only lead_custom_form_data before deleting the row, and six other tables carry a foreign key onto leads(uid). Every assignment wr...

Kamo·3w ago
FixKlusterServices

The meet bridge writes the dial status at hangup, so answered calls record it

Once Jigasi answers, Dial never returns (no 'g' option): either side hanging up ends the channel, so the **************** after Dial ran only for calls that wer...

Kamo·3w ago
FixKlusterServices

A call joins its room as jigasi@auth.meet.Meet, not anonymously; config changes restart it

Each call joins its room over its own XMPP login. Without ENABLE_AUTH the image makes that login ANONYMOUS on meet.Meet, which Prosody's JWT host refuses ("SASL...

Kamo·3w ago
FixKlusterServices

Probe the XMPP session, not /about/health, which a SIP gateway answers 500

Jigasi 1.1.369's Health.check throws "GW not ready." whenever it has a SIP gateway and no HEALTH_CHECK_SIP_URI, registered or not, so the health probes restarte...

Kamo·3w ago
FixSecurityService

A re-translation no longer deletes the translation it replaces

Since 1f715e4 (2026-09-23) saveLocaleTranslation loaded the locale's row to decide whether the count moved, bulk-deleted it and saved a new one. The load left t...

Kamo·3w ago
FixEmailService

Indexing a listed page can no longer fail the listing

recordSyncedPage was @Transactional and caught every exception of its own. The index repositories join the caller's transaction, so a write that met a concurren...

Kamo·3w ago
FixMediaService

The viewer's theme host is read before the transaction, never inside it

The Exec2Exec roster, its participant list and every conversation's faces read the viewer's organization's domains lazily, as a late statement of a read-only tr...

Kamo·3w ago
FixAIService

A streamed member turn retries once without an optional parameter the provider refused

Member chat streams through the adapter itself, outside ProviderCallExecutor, so it had no ParameterFallback. Since SP99-T12 every Hugging Face stream asks for ...

Kamo·3w ago
FixVOIPService

Store inbound RingCentral texts, and stop re-registering live JustCall webhooks

RingCentral: the SMS subscription was the bare /message-store filter, whose notifications are a change summary with no message in it, and the reader looked for ...

Kamo·3w ago
Fixkamo-shared-library

A team member is equal to another only when their ids are (SP10)

SP10 T47, live: MediaService answered "one or more memberIds not found" to a group chat of the owner and two AI members. Lombok's @EqualsAndHashCode(callSuper =...

Kamo·3w ago
Fixkamo-shared-library

Publish routes another stream's subject instead of pinning ours; lead notes reach the feed after commit

**************** asserted expectedStream(<own stream>) on every subject, so a subject another stream captures was refused with "expected stream does not match [...

Kamo·3w ago
Fixkamo-internal

Keep the OTK route's CRLF line endings

The previous commit rewrote them; only its one comment line changes. SP99-T10.

Kamo·3w ago
FixTranslateService

Keep ampersands out of LibreTranslate's en->es model, which quotes or truncates them

Moving en->es to LibreTranslate (27888ca) exposed a fault in its model: a spaced ampersand comes back as a double quote ("Billing & Payments" -> 'Billing " Paym...

Kamo·3w ago
FixAIService

The streamed member turn runs the member's tools and cites its sources, and a browser can open it

The /ws/ai-chat turn was text only: no Tool Plane tools, no tool loop, no knowledge-base citations, and its handshake took only the raw session id, which kamo-i...

Kamo·3w ago
FixMediaService

An AI invite settles the caller's authority before it looks at the target

invite() answered 409 NOT_AN_ACTIVE_AI_MEMBER before 403 NOT_ALLOWED_TO_INVITE, so a member who could reach M1 but not invite could tell an active AI's member i...

Kamo·3w 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