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 3, 2026
Fixkamo-shared-library

Editing a draft order's seats or cycle now reprices it

updateDraftOrder set seatCount and billingCycle and saved. Both are price drivers, and neither the order's money fields nor its line items were touched, so the ...

Kamo·1mo ago
Fixkamo-internal

The order wizard must name the organization it entitles

The wizard collected a customer and never a target organization, so every order it wrote carried target_org_id NULL. On approval provisionCompSubscription falls...

Kamo·1mo ago
Fixkamo-shared-library

A comped order now grants the add-ons it sold

Comping an account granted the plan and nothing else. provisionCompSubscription copied plan, seats, cycle, source and status onto the AccountSubscription and ne...

Kamo·1mo ago
Fixkamo-internal

Never send a cid: the message is not carrying

Completes the inline-image work that landed inside b08f3b34, whose message describes only the KB and sales-scripts fix it was committed alongside. extractInlin...

Kamo·1mo ago
Fixkamo-internal

ReadOnly now actually stops you typing

REPORTED: the script blocks in the Interaction Center are editable. They were, and so is every other "read-only" rich-text surface in the app. `readOnly` on Kb...

Kamo·1mo ago
FixSecurityService

Do not mail a tenant its own domain until that domain is verified

A domain typed into the create form is a CLAIM, not a host. Ownership is proven by a DNS TXT record afterwards and a certificate is issued after that, so betwee...

Kamo·1mo ago
FixSecurityService

Stop a failed welcome email from destroying the member

MemberCreationService documented steps 4-6 as best effort, and for the emails it was not true. sendVerificationEmail is @Transactional, so it joined the member-...

Kamo·1mo ago
FixEmailService

Restore the transaction the attachment overload left behind

baf3c88 added an attachment parameter to sendToUser by moving the whole body into a new six-argument overload. The @Transactional stayed on the five-argument si...

Kamo·1mo ago
Fixkamo-internal

The composer is a sub-page, and collapsing no longer eats your text

Four reported problems, one of them destructive. COLLAPSING A PART DESTROYED IT. Collapse UNMOUNTED the editor, and KbArticleEditor is seeded once from a value...

Kamo·1mo ago
Fixkamo-shared-library

Bind content_json as JSON, or every insert fails

REPORTED: "Failed to create sales script". The server said exactly why: column "content_json" is of type jsonb but expression is of type character varying ...

Kamo·1mo ago
Fixkamo-internal

Impersonate was disabled on every row

Gated on canEnterOrg, which is the VIEWER's own membership — and a platform operator has no membership in the organizations impersonation exists for. So the but...

Kamo·1mo ago
Fixkamo-internal

Archived is a SUB-TAB of Sales Scripts, and pad the page

Two bugs, both mine. ARCHIVED WAS A PEER TAB. Active Scripts and Archived Scripts are two views of one screen, not two screens, and they belong as sub-tabs the...

Kamo·1mo ago
Fixkamo-asterisk-support

Pin direct_media=no, and correct the "(+) cannot override" claim

FreePBX's PJSip driver defaults direct_media to YES (generateDefaultDeviceSettings, PJSip.class.php:210) and the GraphQL addExtension mutation has no field to o...

Kamo·1mo ago
FixEmailService

Stop an attachment holding an IMAP connection open forever

getAttachment returned Jakarta Mail's lazy IMAPInputStream straight out of withStore, which puts the Store back in the pool the instant the lambda returns. Two ...

Kamo·1mo ago
September 2, 2026
FixKlusterServices

Add 8777 to the WebRTC endpoint roster

Aiden Perry's extension was created from KamoCRM, which cannot write this file — so it registered over WSS with no DTLS or ICE and its calls would have carried ...

Kamo·1mo ago
FixEmailService

Show a pasted screenshot instead of a broken image

Jakarta Mail hands back a MIME header exactly as it arrived, folds and all: RFC 5322 lets a mail header run over several lines by breaking it at a CRLF followed...

Kamo·1mo ago
FixVOIPService

Apply FreePBX config after every write, or the extension never reaches Asterisk

Extension 8777 (Aiden Perry, kamocrm) was created from KamoCRM on 2026-09-02 and never rang. The FreePBX GraphQL `addExtension` mutation had written `users`, `d...

Kamo·1mo ago
Fixkamo-internal

The owner can see the tab that grants the right

REPORTED: "I am also an admin and I don't see the new Sales Scripts tab under /settings/features/crm." Correct, and it was invisible to EVERY organization, not ...

Kamo·1mo ago
FixKBService

Admit the organization owner, or nobody can turn this on

A brand-new right is granted to NOBODY on the day it deploys. These two are deliberately absent from **************** — seeding them from an existing right woul...

Kamo·1mo ago
Fixkamo-internal

Un-skip the parity guards, and pin without blocking the page

TWO PARITY TESTS HAVE NEVER RUN. Both resolved RoleRightType.java through **************** — that is ~/Java/kamo-shared-library, while the checkout is *********...

Kamo·1mo ago
Fixkamo-internal

Price every line against the seat count, everywhere it is shown

The row Amount under 'What you are quoting' was still previewLineTotal, so the quantity cell showed the quote's seat count while the Amount beside it priced the...

Kamo·1mo ago
Fixkamo-internal

Reprice the live totals when the seat count changes

A line that opts into the quote's shared 'Seats / units' driver is priced against it, not against its own quantity. The editor's live rail summed the lines with...

Kamo·1mo ago
Fixkamo-internal

Putting a script back into use should not need a password

ConfirmationDialog always makes you type a challenge word. That is right for archiving — the script leaves every agent's panel mid-shift — and right for deletin...

Kamo·1mo ago
Fixkamo-shared-library

An archived market's scripts leave the Interaction Center

findMarketIdsWithActiveScripts asked only whether the SCRIPT was active, so a market the organization had retired still appeared as a sub-tab for as long as any...

Kamo·1mo ago
Fixkamo-internal

Mirror the two rights, and parent MANAGE on VIEW client-side

checkRight matches plain strings, so the gates worked without this — but the security role editor cascades grants through RIGHT_PARENT, and with the pair missin...

Kamo·1mo ago
Fixkamo-internal

Move a message's controls to the side facing the conversation

The hover rail sat on the message's outer edge — right for your own messages, left for everyone else's. It now sits on the inner side, the one facing the middle...

Kamo·1mo ago
FixESigService

Redact when the document is served, not only when it is signed

The redaction was applied at flatten time, which is after signing. Everything before that — the whole signing session — was served the raw source: fetchDocument...

Kamo·1mo ago
FixSecurityService

Open a workspace on its OWN domain, not the host the sign-in was served from

A member who signed in on login.kamocrm.com, picked a workspace from the chooser, and landed inside it — on internal.kamocrm.com, wearing the platform's hostnam...

Kamo·1mo ago
FixESigService

OrgBranding gained a sixth component and this stub kept passing five

Broken on main since e9faf11. The image build runs mvn package -DskipTests, so nothing has been compiling the test tree and no red build ever said so — but it m...

Kamo·1mo ago
FixEmailService

Report a failed association at WARN, not at DEBUG

Lead association swallows its failures on purpose — a problem attaching a message must never break the sweep that was reading the mailbox — so the log line is t...

Kamo·1mo ago
Fixkamo-shared-library

Flush the link, so a refused write reaches the catch that reports it

link() is @Transactional(REQUIRES_NEW), so its transaction commits in the proxy after the method body returns. A plain save() of an entity whose id is generated...

Kamo·1mo ago
Fixkamo-internal

Print the whole quote, not just its first page

The print stylesheet reset the Dialog's container and its Paper to static flow but left the Dialog ROOT alone — the element this component labels quote-print-po...

Kamo·1mo ago
Fixkamo-signer-monorepo

Keep an option card and its lines off a page break

The per-option line table was added without the page-break rules its sibling table has, so a long option could be cut across pages mid-row.

Kamo·1mo ago
Fixkamo-internal

Save the Primary Contact country, state and time zone

The Primary Contact card's country, state and time zone are top-level Lead fields — neither members of primaryContact nor of addressMailing — and the two wire b...

Kamo·1mo ago
Fixkamo-shared-library

Return the contact's country, state and time zone

LeadDTO carried neither Lead.country, Lead.subdivision nor Lead.timezone, so the three fields were write-only: UpdateLeadRequest accepted them and LeadService w...

Kamo·1mo ago
FixSecurityService

Stop dropping setupFee on save, and unbreak the build

withTermsUnchanged rebuilds UpdateQuoteRequest positionally for a member who may not rewrite the terms. setupFee was added to that record and not added here, so...

Kamo·1mo ago
Fixkamo-signer-monorepo

Read either address shape so the block cannot go blank

Reading only the new addressLines makes the address disappear when the API has not been rebuilt yet and is still sending addressLine plus addressDetails. A blan...

Kamo·1mo ago
Fixkamo-internal

Read either address shape so the block cannot go blank

Reading only the new addressLines made the address disappear from the printed quote outright, because this shipped ahead of the API that sends it and a server s...

Kamo·1mo ago
Fixkamo-internal

Print the address as the lines it is written on

Splitting the suite into its own field left the street and the city still sharing a line, with the unit printed beneath them. The address now arrives already sp...

Kamo·1mo ago
Fixkamo-shared-library

An address is several lines, so send it as several lines

Splitting the suite out of addressLine was not enough — it left the street and the city sharing a line with the unit printed beneath them, which is worse than t...

Kamo·1mo ago
Fixkamo-signer-monorepo

Print the address as the lines it is written on

The address arrived as one string, so a real one came out as '4300 West Tropicana Ave Building A Main Floor Suites 110-132, Las Vegas, NV 89103' — not something...

Kamo·1mo ago
FixSecurityService

A share link's email was dropped twice before it could be sent

"I created a link and got no email." Two independent silent drops, both of which return a swallowed false that the panel rendered as plain success. 1. kamo.ema...

Kamo·1mo ago
Fixkamo-shared-library

Restore the timestamp that every lead association depends on

A method was inserted between @CreationTimestamp and the dateCreated field it annotates, so the annotation bound to subject() instead. These entities are read b...

Kamo·1mo ago
Fixkamo-internal

Re-derive the rail's hover-peek instead of trusting two events

The collapsed rail's peek state was written by exactly two things, pointerenter and pointerleave on the rail itself, and nothing ever re-derived it from where t...

Kamo·1mo ago
Fixkamo-internal

Send MUI's styles with the markup that needs them

internal.kamocrm.com was serving a 1.34 MB document containing 123 `css-xxxx` class names — `MuiBox-root css-e26q24` among them — and not one rule for any of th...

kamo·1mo ago
Fixkamo-internal

A reopened conversation is the one you were having

A member started a chat about KB articles, minimized it to its hexhead, went to their mail and brought the window back to a blank conversation — "having to star...

Kamo·1mo ago
Fixkamo-internal

Read a new lead's phone number against the country it is in

The New Lead form asks which country the lead is in, then ignored the answer when reading their phone number. Both PhoneField instances and the validator fell t...

Kamo·1mo ago
Fixkamo-internal

Do not follow a protocol-relative link in-app

"//example.com" starts with a slash but is another origin. The in-app branch matched it and would have handed router.push an off-site destination; it belongs in...

Kamo·1mo ago
Fixkamo-internal

Mirror the monthly-rate reading in the editor preview

previewOption divided the line-item sum down to a monthly figure the same way the server did, so the card and the print preview showed one month of any term. A ...

Kamo·1mo ago
Fixkamo-shared-library

A unit price is a MONTHLY rate, so the term multiplies it

The engine treated an option's line-item sum as the price for the whole billing period and divided down to reach a monthly figure. It is the other way round. 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