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
October 11, 2026
FixVOIPService

A re-read call keeps the member it was first credited to

CallLogIngestService.ingest set the member (and extension) on every re-read of a settled CDR, resolved from whoever holds the extension now. When ext 7900 passe...

Kamo·1w ago
October 10, 2026
FixEmailService

Labels page in one date order with an exact total; Microsoft 365 folders are counted

Labels - A label was paged through the join table by UID and each page sorted by date afterwards. UIDs only order mail within one folder and a label spans f...

Kamo·2w ago
FixKlusterServices

Auto-create standard IMAP folders for every mailbox

Dovecot now subscribes Drafts, Sent, Junk, Trash and Archive on first open with SPECIAL-USE flags so EmailService and the UI see real folders instead of client-...

Kamo·2w ago
FixEmailService

Lower-case NATS mailbox subjects for live updates

Mixed-case addresses like Sales@kamocrm.com published on different NATS subjects than subscribers used, so watched mailboxes never refreshed.

Kamo·2w ago
Fixkamo-internal

Mark not-yet-created folders when switching mailboxes

Secondary mailboxes often hold only INBOX while the sidebar still offered Drafts, Sent and the rest as if they were real — opening them looked like a failed swi...

kamo·2w ago
Fixkamo-internal

Mark not-yet-created folders when switching mailboxes

Secondary mailboxes often hold only INBOX while the sidebar still offered Drafts, Sent and the rest as if they were real — opening them looked like a failed swi...

kamo·2w ago
Fixkamo-internal

The reading pane shows who a sent message was Bcc'd to

The header was drawn from the list row, which comes from the search index, and the index keeps To and Cc but has no Bcc column. It now reads Bcc (as it already ...

kamo·2w ago
Fixkamo-internal

The reading pane shows who a sent message was Bcc'd to

The header was drawn from the list row, which comes from the search index, and the index keeps To and Cc but has no Bcc column. It now reads Bcc (as it already ...

kamo·2w ago
October 7, 2026
FixDocsService

Tell TranslateService to stop before this client does

The careers client reads for 60 seconds, and TranslateService worked to its own default of 100, holding a LibreTranslate worker for 40 seconds after nobody was ...

Kamo·2w ago
FixKBService

A translation with a failed field is a failure, and long articles get time to finish

TranslateService leaves a field it could not translate out of its reply and names it in failedKeys. This client returned the reply as it was, so the article was...

Kamo·2w ago
FixTranslateService

One deadline per request, never retry a timeout, and queue for LibreTranslate here

LibreTranslate keeps translating a request after its client stops waiting, so every timeout was work done for no one. Measured over six hours on 2026-10-07: 46 ...

Kamo·2w ago
Fixkamo-internal

A meeting invite from the composer actually sends

Two things kept it from ever reaching anyone. The request posted the meeting's fields flat, but EmailService reads them from a nested `meetingInvite` and refuse...

Kamo·2w ago
October 6, 2026
FixEmailService

An AI hire no longer waits forever on an email provider that was never connected

An org that chose Google Workspace (or another third-party provider) but left it at PENDING_SETUP, or switched it off, can never produce the AI's mailbox, so th...

Kamo·2w ago
FixMediaService

Webinar registrants' leads are indexed, so their calls, texts and emails link to them

PublicWebinarService creates a lead per public webinar registrant through LeadService.createLead, which indexes the lead's phones and addresses (LEAD_CONTACT_PO...

Kamo·2w ago
FixDaemonService

Intake makes a lead only of a person, once per person, with no placeholder names, assigned as mapped

Harmony Home Loans pointed every JustCall webhook at its "Justcall" intake endpoint, and the job made every event a lead: 287 in three days. 247 have no name, c...

Kamo·2w ago
FixVOIPService

The JustCall contact import finishes — paced, resumable, and no longer skipping pages

Harmony Home Loans' import had never once completed (no JustCall book or integration exists for any member). Three defects: 1. One burst per tick: it read ever...

Kamo·2w ago
FixDaemonService

Leads created by the intake job are indexed, so their calls, texts and emails link to them

LeadIntakeProcessingJob creates every lead that arrives through the intake endpoint, via LeadService.createLead, which indexes the lead's phones and addresses (...

Kamo·2w ago
FixVOIPService

JustCall calls are credited to the agent who took them, and Sales Dialer calls sync

Checked against Harmony Home Loans' JustCall account (read-only GETs): the newest 100 of its 1,058 /calls match PHONE_CALL_LOG one for one, so the ordinary log ...

Kamo·2w ago
FixSecurityService

The lead page names its Vendor and Product

Lead.vendorProduct is @Transient — only VENDOR_PRODUCT_ID is a column — so nothing loads it unless someone asks, and LeadDTO.fromLead then leaves vendorProduct,...

Kamo·2w ago
October 5, 2026
FixSecurityService

A change to a member's teams is on the security access log — one SECURITY_SETTING_CHANGE/MEDIUM row per member who joined or left, from the team, the member's profile, a deleted team or creation (KamoCollab CP01 final review I1)

A team is a level of the rights waterfall, so joining one is a grant (CP01-T14-1). The department and job-title change on the same Position card writes an acces...

Kamo·2w ago
FixSecurityService

Pin the heads' names query onto users_pkey — /*+ IndexScan(u users_pkey) */ first in the statement, as loadMembers and the org chart's people query; without it the legacy planner seq-scans all of users per head row (KamoCollab CP02 final fix)

Production EXPLAIN (sp00verify, read-only): the unhinted literal plan was a nested loop over Seq Scan on users (106 rows) for 1 and 2 ids; with the hint every p...

Kamo·2w ago
FixVOIPService

The phone badge counts voicemails in your own mailbox, not the whole phone server

The nav phone icon's voicemail line counted every unread message on the member's phone server **************** on the premise that the softphone's Voicemail tab...

Kamo·2w ago
Fixkamo-internal

Items of a section the editor does not know survive load and save (KamoCollab CP03 T1)

parseCharterItems dropped every item whose section the static mirror does not list, and every host (roles, departments, job titles, teams, the member card, the ...

Kamo·2w ago
FixEmailService

A provisioning race Yugabyte reports as a serialization conflict no longer 500s the calendar widget (SP98 T26)

listCalendars provisions the shared and the personal calendar find-then-create, each in its own transaction, and treated a lost race as done only when it surfac...

Kamo·2w ago
FixVOIPService

A shared voicemail box tells only members who manage the phone server (SP98 T26, final review M-2)

The box's list, audio, read and delete answer only MANAGE_VOIP_SETTINGS (or a god-mode window), and Settings' picker offers only those members, but SharedVoicem...

Kamo·2w ago
Fixkamo-internal

A second Verify says a check is already running, not "something went wrong" (SP98 T26, final review M-1)

AIService answers a Verify while the provider's check lease is held with 409 verify_in_progress, and one whose lease cannot be taken with 503 verify_unavailable...

Kamo·2w ago
FixKlusterServices

A help article no longer OOMKills the Tamil engine

KBService sends a help article's Lexical JSON to be translated: one long line with few sentence ends, ~0.46 model tokens a character. A 3,980-character article ...

Kamo·2w ago
FixMCPGatewayService

A colleague call refused for consent or hours says how to cite their own request (SP95-T29-1)

Task 29 step 3, live: the owner asked an AUTONOMOUS AI to call them. The model called phone_call without onRequestOf (nothing needed approval), K6 refused NO_VO...

Kamo·2w ago
FixMCPGatewayService

A perception read that hands over nothing from outside taints the run INTERNAL, so a cited request can stand (SP95-F-1)

Every run's PERCEIVE calls notifications_list, mail_list_unread and calendar_list_events with the run id. All three are untrusted and none said where its conten...

Kamo·2w ago
Fixkamo-internal

On a phone the date and its prev/today/next cluster share the toolbar without overlapping (SP98 T22)

Found live at 390px as the sp00verify owner: the app's rail leaves the toolbar about 280px, and the month title ran on under the prev/today/next cluster, so it ...

Kamo·2w ago
Fixkamo-internal

On a phone the date and its prev/today/next cluster share the toolbar without overlapping (SP98 T22)

Found live at 390px as the sp00verify owner: the app's rail leaves the toolbar about 280px, and the month title ran on under the prev/today/next cluster, so it ...

Kamo·2w ago
Fixkamo-internal

The countdown chip reads at AA on an unread row and in a producer's own colour (SP98 T22)

Found live as the sp00verify owner: on /notifications an overdue chip on an unread row read 4.32:1 (#c62828 on #e8dfe7). The chip was see-through, so the row's ...

Kamo·2w ago
Fixkamo-internal

The countdown chip reads at AA on an unread row and in a producer's own colour (SP98 T22)

Found live as the sp00verify owner: on /notifications an overdue chip on an unread row read 4.32:1 (#c62828 on #e8dfe7). The chip was see-through, so the row's ...

Kamo·2w ago
FixMediaService

Build each chat snapshot from a graph loaded now, so a lost org-graph event costs one minute, not two (KamoCollab CP02 T17)

The chat policy snapshot is itself a 60 s cache of member facts. Built from OrgGraphCache.get, it could start from a graph already up to 60 s old and keep it fo...

Kamo·2w ago
FixSecurityService

The failed-recalculation log names the repair path as /teams/{id}/recalculate-rights

SLF4J has no brace escape, so "{{id}}" was logged literally. "{id}" is not a placeholder and prints as written; the test now pins the path an operator would typ...

Kamo·2w ago
Fixkamo-internal

An AI with no computer, or whose computer cannot be read, keeps the AI room's heading outline (SP98 T21)

The live look after the sweep found an AI with no computer: the Workstation card's h3 was followed by EmptyState's h6 title, a two-level skip (axe heading-order...

Kamo·2w ago
Fixkamo-internal

An AI with no computer, or whose computer cannot be read, keeps the AI room's heading outline (SP98 T21)

The live look after the sweep found an AI with no computer: the Workstation card's h3 was followed by EmptyState's h6 title, a two-level skip (axe heading-order...

Kamo·2w ago
FixTranslateService

A long text that lost a protected name is translated whole, not piece by piece

Rebuilding a reply around the names takes one engine call per piece. For a help article that is dozens of calls, past KBService's 120-second read timeout, so a ...

Kamo·2w ago
FixTranslateService

Ask LibreTranslate again when it copies a Title-Case label

Argos reads a short capitalised label as a name and hands it back untranslated: live on 2026-10-05, en->tr "Delete" -> "Delete" and "Cancel" -> "Cancel", en->ar...

Kamo·2w ago
FixTranslateService

Never send a brand name to an engine, for every caller

The es locale rendered RingCentral as "RingConexión central" and JustCall as "SóloCall"; zh read "AI Members" as Amnesty International members. The dictionary's...

Kamo·2w ago
Fixkamo-internal

An AI member's line has an outside-calls switch in the extensions table, so one hired while new extensions were denied can be allowed (SP93 final fix)

The AI chip now sits beside the switch instead of replacing it, with the hint that the line starts with the phone server's setting for new extensions. VOIPServi...

Kamo·2w ago
FixVOIPService

An AI member's line has an outside-calls switch like anyone's, so one hired while new extensions were denied can be allowed (SP93 final fix)

V12 (PUT **************** no longer refuses an AI line with 409 AI_LINE. A new AI line starts as the phone server's setting for new extensions says (SP93-T5-1),...

Kamo·2w ago
FixVOIPService

Recordings and voicemail audio are written, not refused with a 500

The recording and voicemail audio endpoints are declared ResponseEntity<?>, because they also answer JSON, and returned a StreamingResponseBody lambda. Spring p...

Kamo·2w ago
FixVOIPService

Recordings and FreePBX voicemail play: the pod reaches MinIO

VOIPService streams every call recording and every FreePBX voicemail in Settings out of MinIO, but it never configured MinIO: the shared MinIOConfig defaults ap...

Kamo·2w ago
Fixkamo-internal

UI sweep C: theme tokens, plain errors, empty states and keyboard reach on calls, meetings, notifications, chat, tasks, notes, calendar and mail (SP98 T22)

- Light materials (chat, SMS, softphone, compose, the notes board) are declared to MUI by LightSurface, and draw from one palette each (chatColors, notesPalet...

Kamo·2w ago
Fixkamo-internal

UI sweep C: theme tokens, plain errors, empty states and keyboard reach on calls, meetings, notifications, chat, tasks, notes, calendar and mail (SP98 T22)

- Light materials (chat, SMS, softphone, compose, the notes board) are declared to MUI by LightSurface, and draw from one palette each (chatColors, notesPalet...

Kamo·2w ago
FixSecurityService

A created member's activation welcome waits for the commit, so a swallowed 40001 can no longer turn the create into a silent rollback

POST **************** answered 200 with a member id and a user id that never existed (KamoCollab CP00 Task 0, 2026-10-05, sp00verify). The activation welcome ra...

Kamo·2w ago
October 4, 2026
FixSecurityService

A rename clears the phonetic spelling of the name it changed (SP94-F-1)

The AI's speech pairs the org's CURRENT name with whatever spelling is stored. The Getting-Started wizard renames through PUT /org/{id} without sending a spelli...

Kamo·2w ago
FixVOIPService

A FreePBX address is judged when it is set or moved, and amiPort must be a port

The FreePBX settings form sends back every field it shows. Judging each submitted baseUrl and amiHost refused K1M1, whose two addresses are cluster-internal bec...

Kamo·2w ago
FixKlusterServices

Rotate the kamo_ops password

The operator password (Secret kamo/redis-ops-auth) reached an agent transcript in KamoAI SP01 Task 38 and had never been rotated (SP98-M-2). It was rotated live...

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