KamoCRM

Live Change Log

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

18,395
Total Changes
6,530
Features
5,537
Fixes
30
Projects
Filter by project
All Projects18,395AIService276APIService177BillingService161ConversionService117DaemonService146DocsService240ESigService93EmailService620InitializerService344KBService162KlusterServices769MCPGatewayService277MediaService620RAGService79SecurityService1,995TranslateService62VOIPService265VectorService11kamo-apps26kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,693kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,825kamo-signer-monorepo57kamolos114
Filter by type
All TypesBuild23CI525Chore794Docs3,286Feature6,530Fix5,537Other1,001Performance174Refactor281Revert23Style45Test175Upgrade1
October 12, 2026
October 11, 2026
FixSecurityService

An SI's charter read is retried on a YugabyteDB conflict instead of answering 503

GET **************** (I1) resolves the charter in one read-only transaction of 15-25 queries. One "Restart read required" (40001) answered 503 CHARTER_UNAVAILAB...

Kamo·4w ago
FixVOIPService

A FreePBX voicemail deleted on the PBX stops counting on the phone badge

A deleted message is just absent from its mailbox's listing, so the sync never touched its row again and it stayed unread, badged for good. A row whose mailbox ...

Kamo·4w ago
Fixkamo-internal

A FreePBX voicemail can be marked read, archived and deleted, and the phone badge follows

The message id (mailbox/msgId) went into the URL path, so its slash made a route nobody served and the click failed with only a console error: the PBX kept the ...

Kamo·4w ago
FixVOIPService

Marking a FreePBX voicemail heard reaches the phone server, and the badge follows at once

A FreePBX message id is mailbox/msgId, so PUT /voicemail/{id}/read never matched a route for it and the PBX was never told: the message stayed in INBOX and the ...

Kamo·4w ago
Fixkamo-internal

A visiting note offers no "use with SI" switch either (SP97 T13)

The switch on another member's note, opened read-only from a link, toggled a setting that never saves.

Kamo·4w ago
Fixkamo-internal

"Open the minutes note" opens an SI member's minutes for the participant who supervises it (SP97 T13)

The minutes are the SI's own note, on no participant's wall, and /notes?id= opened only ids on the reader's wall, so the button landed on the reader's own notes...

Kamo·4w ago
Fixkamo-internal

A contact's spelled-out display name follows its edited name parts (SP97 T9)

Create Contact fills a blank display name from the name parts, and the saved contact then carried that name as its own. Editing it showed the name in the displa...

Kamo·4w ago
Fixkamo-internal

An open contact's panel fits a window narrower than 1200 px, so its Save is on screen (SP97 T9)

Below lg the panel is the row's full width so it stands in for the list, but from md the books sidebar stays beside it and the panel could not shrink: it ran 28...

Kamo·4w ago
FixMCPGatewayService

An SI's key, text or click aimed at an app reaches the window it is working in (SP97 T9)

The bridge sends a call that names only an app (app_id, wm_class or pid) to that app's first window, focusing it first. After a take-over, Kamo's old window sit...

Kamo·4w ago
FixAIService

The first-contact approval rule says it is about reaching out, not saving a contact

"Contacting someone for the first time" read to an SI as "creating a contact needs approval", and it deferred an owner's request to save a contact record. The b...

Kamo·4w ago
Fixkamo-internal

A new email, phone or address row keeps its field while you type in it

A row without a server id was keyed by its object, and every keystroke replaced that object, so the row got a new React key and its field was remounted on each ...

Kamo·4w ago
Fixkamo-internal

A new email, phone or address row keeps its field while you type in it

A row without a server id was keyed by its object, and every keystroke replaced that object, so the row got a new React key and its field was remounted on each ...

Kamo·4w ago
FixMCPGatewayService

Workstation_open_kamo says where Kamo opened and never to type a password (SP97 T9)

After a supervisor's take-over (which ends the SI's session) the older browser windows on an SI workstation show Kamo's sign-in page. On the next request Ava op...

Kamo·4w ago
Fixkamo-internal

An SI's supervisor can open the SI's profile and its workstation controls

The member page sent every viewer without a member-administration right back to their own profile, so an SI's supervisor (SUPERVISE_AI_MEMBERS) or a Workforce v...

Kamo·4w ago
Fixkamo-internal

An SI's supervisor can open the SI's profile and its workstation controls

The member page sent every viewer without a member-administration right back to their own profile, so an SI's supervisor (SUPERVISE_AI_MEMBERS) or a Workforce v...

Kamo·4w ago
Fixkamo-internal

A reload mid-rematch reopened the finished game and said "You won"

A chess window restores the game id saved in its props, and it only ever saved the id it was opened with. Play again, a game started from the empty panel and an...

Kamo·4w ago
Fixkamo-internal

A reload mid-rematch reopened the finished game and said "You won"

A chess window restores the game id saved in its props, and it only ever saved the id it was opened with. Play again, a game started from the empty panel and an...

Kamo·4w ago
Fixkamo-internal

An SI's approval task opens its approval

The approval task SP10 files for the approver ("Approve: …", link APPROVAL:<id>) showed its link chip without a target, so the approver had to find the approval...

Kamo·4w ago
Fixkamo-internal

An SI's approval task opens its approval

The approval task SP10 files for the approver ("Approve: …", link APPROVAL:<id>) showed its link chip without a target, so the approver had to find the approval...

Kamo·4w ago
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·4w 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·4w 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·4w 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·4w 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·4w 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·4w 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·4w 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·4w 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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