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
August 14, 2026
Fixkamo-internal

Dock popup windows beside the page scrollbar, not on top of it

Tool windows are fixed to the viewport and dock right-to-left from its edge, and the layout was told about exactly one thing occupying that edge: the interactio...

kamo·1mo ago
FixSecurityService

Enforce the doc-share search rights server-side

/members-subscribers and /team-members-contractors enumerate the organisation's people — names and ids — to fill the document-share autocomplete, and required o...

Kamo·1mo ago
FixDocsService

Enforce the doc-share alias rights server-side

GET /shares/resolve-alias turns a guessable alias into a real person's NAME and required only a valid session. The rule lived solely in ShareDocumentDialog, and...

Kamo·1mo ago
Fixkamo-internal

Stop the reminder lurching to the screen edge when an option opens

The card kept framer's `layout` after it grew a fold-out options panel. `layout` animates size and position by transform, so that one height change was being an...

kamo·1mo ago
Fixkamo-internal

47 unenforced — five more were falsely reported

CREATE_ORG_CALENDAR_EVENTS is enforced: MemberCalendarService throws OrgCalendarForbiddenException when a member without it writes to the org calendar. The chec...

kamo·1mo ago
Fixkamo-internal

52 unenforced, not 58 — six were falsely reported

The audit's gate detection recognised hasRight and checkRight but not denyUnless, hasAnyRight, sessionHasRight or forbidden. Six rights that ARE enforced were t...

kamo·1mo ago
Fixkamo-internal

Make the emoji picker's search actually filter

The picker's search matched the query against the translated category name only, and fell back to pushing every emoji into the results when nothing matched — so...

kamo·1mo ago
Fixkamo-internal

Sticky scrollbars, a toolbar that never scrolls, and a dialog that clears the note

Three things, all in the floating sticky. The scrollbar was still grey. The rules were written as **************** which styles only the element CARRYING the c...

kamo·1mo ago
Fixkamo-internal

Stop the launchpad backdrop painting over the page scrollbar

The launchpad is the only page that renders the full-bleed Backdrop, and it was the only page whose scrollbar stayed invisible after the -webkit-/standard confl...

kamo·1mo ago
Fixkamo-internal

The sticky's watermark is centred from the moment it opens

It only landed correctly after the note was resized. The measurement used getBoundingClientRect, which reports the PAINTED box — and a sticky opens by animating...

kamo·1mo ago
Fixkamo-internal

Centre the sticky's watermark on the writing surface

It was centred on the whole note, so it sat high — pulled up behind the title bar — and in rich mode it drifted further every time the toolbar wrapped to a seco...

kamo·1mo ago
FixDocsService

Writing the org legal settings needs BOTH HR rights

The Legal & Compliance settings tab is the only writer and is now offered only to a member holding MANAGE_HRS_SETTINGS *and* MANAGE_LEGAL_AND_COMPLIANCE, so the...

Kamo·1mo ago
Fixkamo-internal

The floating sticky's pin is the same pin /notes draws

The sticky was drawing a hand-rolled bookmark path while the notes wall, the editor, the rail and the bulk bar had all moved to MUI's PushPin — outlined when lo...

kamo·1mo ago
Fixkamo-internal

Stop the page scrollbar's two halves cancelling each other out

The main content scroller declared both **************** and a block of `::-webkit-scrollbar` rules, on the theory that whichever the browser understood would w...

kamo·1mo ago
Fixkamo-internal

Draw the main content scrollbar, in the org's colour

html/body are pinned to height:100%, so the element that actually scrolls a page is the main content div in layout.tsx — and it carried no scrollbar styling at ...

kamo·1mo ago
Fixkamo-internal

Hold a launchpad card's pin chip back until its pane arrives

The panes reveal themselves on scroll (whileInView, opacity 0 -> 1), but the pin control is a sibling overlay rather than part of that animation — it has to be,...

kamo·1mo ago
Fixkamo-internal

Solid sticky paper, and a scrollbar in the note's own colour

The note's background faded to `rgba(0,0,0,0.045)` at one corner. That is not a shade — it is 95% TRANSPARENT, so the corner of a sticky showed the page scrolli...

kamo·1mo ago
Fixkamo-internal

Stop the docket flickering a scrollbar, and centre the step counter

THE FLICKER. The docket row set `overflow-x: auto` and left the other axis alone — but CSS computes `overflow-y: visible` to `auto` the moment the other axis is...

kamo·1mo ago
FixInitializerService

Match the enum-whitelist CHECK sweep to the YugabyteDB rendering

dropStaleEnumWhitelistChecks() looked for '% IN (%', which is how CockroachDB stored a @Enumerated(EnumType.STRING) whitelist. PostgreSQL and YugabyteDB normali...

Kamo·1mo ago
Fixkamo-internal

Catch npm silently dropping Next's native SWC binary

The image build died in `next build` with Downloading swc package @next/swc-linux-x64-gnu... unhandledRejection TypeError: terminated (UND_ERR_SOCKET)...

kamo·1mo ago
FixSecurityService

Stop copying lead details onto the calendar event

The event carried the lead's name, number, email and best time to call, copied into its description when the call was booked. A copy of a record that is still b...

Kamo·1mo ago
FixSecurityService

Stop writing the lead path into the callback's description

It read "Open the lead: /leads/view/123" and was not a link. It could not be: a description is edited in a textarea, where text is text — and outside the applic...

Kamo·1mo ago
Fixkamo-shared-library

Stop an omitted date window failing every event lookup

The calendar page could never list anything. It asks for every event a member has, with no window, and these queries took the range as nullable and tested it wi...

Kamo·1mo ago
FixEmailService

Put a callback on a calendar the member can actually see

Callbacks were not reaching the calendar at all. This service picked the target calendar by account — findPrimaryByUser — and a user is global while a member is...

Kamo·1mo ago
Fixkamo-internal

Stop the event dialog throwing "Invalid time value" on open

wallClockToInstant called toISOString() on a date it had not checked, so any unreadable input threw RangeError instead of returning something unusable. The dia...

kamo·1mo ago
Fixkamo-internal

Let "not established" be a value the images gate can see

Follows EmailService boxing **************** A folder listing now reports null for it rather than a primitive's false, so the types here admit null and the gate...

kamo·1mo ago
FixEmailService

Stop envelopes claiming a consent answer nobody asked for

remoteImagesAllowed was a primitive boolean, and only the three endpoints that fetch a whole message ever assign it. The folder listing does not — answering it ...

Kamo·1mo ago
FixEmailService

Make event reminders actually notify someone

Three faults, one symptom. Members reported that calendar notifications did not work, and all three reasons were on this side. Reminders were never written. Th...

Kamo·1mo ago
Fixkamo-internal

Stop flashing the external-images prompt at members who allow them

Opening a message showed the "display external images" banner for a moment and then withdrew it, for anyone who had already chosen to allow images everywhere. ...

kamo·1mo ago
Fixkamo-internal

Stop storing which side a message is on

The mirrored rule was right; what was wrong is that the answer was computed once, when a message arrived, and kept. Placement needs three things — the sender, t...

kamo·1mo ago
Fixkamo-internal

Keep the session document name as the consent card's fallback heading

Extracting FieldLayer dropped detailTitleFor, and with it the fallback to session.documents[0].name — a document with a null fileName would have headed its cons...

kamo·1mo ago
Fixkamo-internal

Render the document the wizard was measuring into a node that did not exist

The execution wizard showed a blank surface for every signable document — no pages, no field overlays, no PDF request, and nothing in any log. DocumentStep mea...

kamo·1mo ago
FixEmailService

Record all three IMAP flags, and say why the index cannot serve a list yet

The migration has run, so is_answered exists and SearchIndexService now writes it alongside is_read and is_starred. The index has recorded two of the three flag...

Kamo·1mo ago
FixEmailService

Do not read or write is_answered before its column exists

Follows the shared-library change unmapping the field. Nothing in the deployed path now touches a column that KamoInitializer has not yet created. The index-ba...

Kamo·1mo ago
Fixkamo-shared-library

Unmap is_answered until its migration has run

Mapping the column ahead of the migration that creates it is armed, and I armed it. SearchIndexEntity is hydrated from fullTextSearch, which is a native SELECT ...

Kamo·1mo ago
Fixkamo-internal

Only the requestor is asked how the support went

Closing a ticket put "How was your experience?" in front of every agent in the conversation — the people who did the work, invited to score themselves. Since a ...

kamo·1mo ago
Fixkamo-internal

A read clears the indicators immediately, not on the next reload

Reading a conversation updated the server and then waited for the news to come back: PUT /read commits, MediaService broadcasts a fresh count over core NATS, th...

kamo·1mo ago
FixESigService

Resolve a native PDF's source bytes instead of demanding a rendition

**************** required dat.convertedDat to be non-null. ConversionService only mints a second ImgDat when it actually converts something -- a document that a...

Kamo·1mo ago
FixMediaService

The ticket list survives a broken indicator

The unread read threw and took the whole ticket list with it — the page came back empty, which is a far worse outcome than a page with no markers on it. It is g...

Kamo·1mo ago
Fixkamo-shared-library

Bind the system-event pattern — a brace in native SQL never reaches the database

Hibernate scans native SQL text for its legacy {alias.path} placeholders, so the inlined '{"systemEvent"%' raised QueryException: Unmatched braces for alias pat...

Kamo·1mo ago
FixDocsService

Connect DocsService to NATS so the badge lights without a refresh

LegalPendingCountPublisher takes its NATS Connection as required=false and returns quietly when it is null. The shared NatsConfig is **************** and this C...

Kamo·1mo ago
Fixkamo-internal

Remove the payroll registration fields nothing reads

Six fields on the payroll cards were never consumed by anything. A registration field nobody loads is worse than a missing one: an operator fills it in, believe...

kamo·1mo ago
Fixkamo-shared-library

ADP takes per-org credentials, not a platform registration

ADP shipped classified PLATFORM_OAUTH on the strength of ADP publishing a Marketplace ISV model, where Kamo would hold one partner client id, secret and certifi...

Kamo·1mo ago
Fixkamo-internal

The needs-attention mark stops lying when you open a ticket

Clicking a row cleared its amber dot while the badge beside it stayed put, and a refresh brought the dot back. The badge was right and the dot was wrong. A tic...

kamo·1mo ago
Fixkamo-internal

Mark the items the navtop badge is actually counting

The badge read "5 support items need attention" and the list marked none of them. Both numbers were right about their own question and neither was the question ...

kamo·1mo ago
FixMediaService

The ticket list marks the same items the badge counts

countForMember sized a set it built privately, so the list had no way to ask which tickets were in it and approximated instead — it flagged unread chat messages...

Kamo·1mo ago
August 13, 2026
Fixkamo-internal

Side a message by which side sent it, not by who is reading

A support conversation has exactly two sides, and they are not "me" and "everyone else". One side is the person who asked for help — always exactly one member. ...

kamo·1mo ago
FixMediaService

A ticket can never be answered by the member who raised it

A support conversation has two sides — someone asking and someone answering — and nothing enforced that they were different people. A member holding ACCEPT_SUPP...

Kamo·1mo ago
FixMediaService

Send an outbound attachment to the endpoint its type belongs to

Every social attachment went out through the adapter's sendImage, which on Telegram is /sendPhoto. A PDF or a zip posted there is rejected by the provider, and ...

Kamo·1mo ago
Fixkamo-internal

Department speed dial hung on Loading forever

The loader effect listed departmentsState in its deps and set it to 'loading' on entry, so React tore that effect instance down immediately, the cleanup flipped...

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