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
September 28, 2026
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·13h 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·13h 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·13h 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·13h 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·14h 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·14h 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·14h 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·14h 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·14h 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·14h 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·15h 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·15h 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·15h 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·15h 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·15h 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·16h 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·16h 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·16h 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·16h 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·16h 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·16h 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·16h 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·17h 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·17h 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·18h 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·18h 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·18h ago
FixMediaService

An impersonating admin may not set the member's status text

PUT /api/media/presence/status accepted a sudo session. It is now refused 403: unlike the heartbeat, which nobody chose to send and is ignored quietly, setting ...

Kamo·18h ago
FixMediaService

A session type without its own gate takes no messages, and a session is described only to its readers

POST **************** authorized CHAT, SUPPORT_TICKET and SOCIAL and then simply ended, so a POST, SYSTEM_BUG or EXEC2EXEC session fell through every gate: any ...

Kamo·18h ago
FixMediaService

Another org's agent, topic or AI member is a 400 naming the field

The sales agent and support topic checks threw a bare IllegalArgumentException that nothing caught, so saving one the org does not own answered 500. They, and t...

Kamo·18h ago
FixSecurityService

Close the AI identity edge cases the SP02 review left open

- A never-hired AI relabelled a person no longer keeps ai_state and the pause columns (master 6.1: NULL for a person). They are written only by SQL, so the ...

Kamo·18h ago
FixSecurityService

A lead you may not open takes no status change and no note

PUT /api/security/leads/{id} and POST /api/security/media/posts checked only the lead's organization, so a member without VIEW_UNASSIGNED_LEADS could change the...

Kamo·18h ago
FixAIService

An in-cluster model gets the time to read its prompt, inside the walk's budget

kamo-llm reads a prompt at about 110 tokens a second on k3m1 before it writes a word, so an E2 prompt past ~6k tokens spent E2's whole 60 s per-attempt bound (a...

Kamo·18h ago
FixAIService

A Hugging Face text stream is metered as the router counted it

HuggingFaceAdapter streamed through the interface's text-only default: every chunk was read for its text and nothing else, so no usage ever reached the executor...

Kamo·18h ago
FixAIService

An Ollama model's context is the window the server serves, not the trained one

OllamaDiscovery took model_info.*.context_length from /api/show: the window the model was TRAINED for. The registry listed granite4:tiny-h at 1 048 576 (and qwe...

Kamo·18h ago
FixVOIPService

Read a FreePBX sweep's mailboxes over one manager session

The voicemail sweep runs inside syncInstance's database transaction and asked FreePBX extension by extension, each over a fresh AMI connect and login. A manager...

Kamo·18h ago
FixEmailService

Basic sign-in asks SecurityService's real credential check

DavAuthFilter posted Basic credentials to **************** which never existed (405), so every username-and-password sign-in from iOS or DAVx5 was answered 401 ...

Kamo·19h ago
FixSecurityService

CalDAV and CardDAV sign in with a username and password, through every sign-in gate

EmailService's DavAuthFilter posted Basic credentials to **************** a route that never existed (405), so since 2026-03-19 no phone (iOS, DAVx5) could add ...

Kamo·19h ago
Fixkamo-internal

A retired AI's hiring checklist says Retired, not "Everything is set up"

A retire skips every open hire step and adds TASK_HANDOFF, so by the server's count the hire is COMPLETE and the checklist read "Complete — Everything is set up...

Kamo·19h ago
Fixkamo-internal

The confirmation dialog and the landings' empty state follow a dark theme

ConfirmationDialog was drawn in fixed Tailwind greys: a #1f2937 title, #6b7280 small print, a #f9fafb well and a #f3f4f6 disabled button, so on a dark paper the...

Kamo·19h ago
Fixkamo-internal

Hosted Computers on the App Shelf, and a pinned band that opens it

The launchpad's sectionsForTool had no case for hostedComputers and fell through a default to an empty list. A parent tool with no sections is dropped from the ...

Kamo·19h ago
Fixkamo-internal

The rest of the red on a clean install — registry mocks, shared-lib lookup, a typed fetch mock

- ToolDock and MaximizedTabStrip mocked ../registry/tools without windowIcon, which both now call for every window (af879443f), so 36 tests threw on the fir...

Kamo·19h ago
Fixkamo-internal

Render the dev machine menu hook in a real root, and cover the cloud session row

devMachineSections.test.tsx called useDevMachineSections() bare, outside any render. It worked while useTranslations (mocked) was the hook's only React dependen...

Kamo·19h ago
FixSecurityService

Clear the session cookie on the bare apex, not ".apex"

Logout built the cookie domain as ".kamocrm.com". Tomcat's RFC 6265 cookie processor refuses a leading dot and throws, so logout answered 500 "Logout failed" af...

Kamo·19h ago
Fixkamo-internal

The DNS page opens on the org's primary domain, not whichever row came first

The domains list comes back in database order. The platform organization has three roots (kamocrm.com, kamouniverse.com, localhost), and each of the last two pa...

Kamo·19h ago
FixSecurityService

A platform apex can't be removed from the DNS page

The platform organization gained kamouniverse.com as a second root domain, and the DNS page then offered "Remove" on kamocrm.com. Deleting it took kamocrm.com a...

Kamo·19h ago
FixTranslateService

Send en->es, en->fr and en->pl to LibreTranslate, not Bergamot's tiny models

Bergamot's enes, enfr and enpl models are student.tiny11 builds decoded with beam-size 1, and they write words that do not exist: the charter message "Ask an ad...

Kamo·19h ago
FixMCPGatewayService

A long workstation wake is asked about less often

An AI workstation's wake took 9 min 19 s against ComputeService's 75 s estimate (SP11 Task 30). Every computer_* call on a waking machine answered WORKSTATION_W...

Kamo·21h ago
FixVOIPService

Read FreePBX voicemail over the Asterisk Manager Interface

FreePBX's API has no voicemail messages: its voicemail module serves mailbox settings only. FreePBXProvider.getVoicemails GET /admin/api/api/rest/voicemail, a r...

Kamo·22h ago
FixEmailService

A mail domain, and every account on it, belongs to the organization that proved it

The KamoMail server's virtual_domains and virtual_users are shared by every tenant, and nothing stopped one tenant from writing to another's part of them: - PO...

Kamo·22h 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