Live Change Log

See what we're building, in real-time. Every feature, fix, and improvement shipped across the platform.

17,931
Total Changes
4,612
Features
4,543
Fixes
32
Projects
Filter by project
All Projects17,931AIService110APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService373InitializerService300KBService74KlusterServices546MCPGatewayService43MediaService461RAGService61SecurityService1,522TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,579kamo-login319kamo-marketing584kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,322kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI523Chore670Docs226Feature4,612Fix4,543Other6,781Performance136Refactor274Revert23Style48Test70Upgrade1
August 22, 2026
Fixkamo-internal

Restore the timezone fix, and take chat-core 0.1.5 / net 0.1.1

5d1cc23e was committed through a stale private index and reverted ec881208 wholesale — serverTime.ts, the member-timezone provider, the guard and all 216 call-s...

kamo·2w ago
Fixkamo-internal

Render every timestamp in the member's zone, read every one as UTC

A direct message sent at 3:33 AM Pacific displayed "10:33 AM" — the raw UTC clock, printed as though it were local. Two independent defects, present together on...

kamo·2w ago
Fixkamo-internal

Stop the master-note ring sweeping a gradient across the launchpad

LIVE ON PRODUCTION since b9b1fe08. The org master note's ring was a conic gradient in a pseudo-element sized 150% by 150%, centred and rotating once every six s...

kamo·2w ago
Fixkamo-internal

Make the pane logo visible, and stop the two seeding passes racing

Two bugs, either of which alone would have shown no logos. IT WAS PAINTED BEHIND FROSTED GLASS. The mark went in at z-index 0, under the pane's content — where...

kamo·2w ago
Fixkamo-internal

Do not offer form fields on files that cannot carry them

Replacing the two buttons dropped the isConverted gate the old "Edit PDF" had, so Modify offered form-fillable editing on audio and video — where there is no re...

kamo·3w ago
Fixkamo-internal

A form fillable row can still be opened in the editor

I had disabled "Edit In Form Fillable Mode" on a form-fillable row, which contradicts the rule: its fields stay editable in every tool the editor has — what a f...

kamo·3w ago
Fixkamo-shared-library

Do not bill an org twice for a version that owns no bytes

The org storage total is SUM(fileSize) over Img rows, and a derived version points at its original's ImgDat while copying its fileSize — so every modified versi...

Kamo·3w ago
Fixkamo-internal

Restore the pane fill fix reverted by 006fea03

006fea03 was a DocManager change built from a tree that predated 791b99a5, so it carried all eight of that commit's files back to their previous blobs. Its own ...

kamo·3w ago
Fixkamo-internal

Let a pane's contents fill the size the member gave it

A resized widget grew its frame and left its contents the size they were. The cause was one missing declaration. Adding the colour control and the resize handl...

kamo·3w ago
Fixkamo-internal

Send the event's instants, and keep the end after the start

The two datetime fields hold offsetless wall-clock text and the API binds them to a java.util.Date, so the server read them in ITS zone — UTC. A member setting ...

kamo·3w ago
FixEmailService

Actually move an event when its calendar is changed

The dialog has always offered a calendar picker when editing and the PUT has always carried the chosen calendarId, but updateEvent had no parameter for it — so ...

Kamo·3w ago
Fixkamo-internal

Widgets are configured by security rights, and nothing else

The timecard widget's rights mirror moves under MANAGE_TIMECARDS, so all five widgets have one shape. The availability-hook machinery is removed with it — useA...

kamo·3w ago
FixSecurityService

Drop the universal seed; the timecard widget follows MANAGE_TIMECARDS

UNIVERSALLY_SEEDED_RIGHTS is removed entirely. It existed only because the timecard widget had no parent right to inherit from, and now it has one — so the widg...

Kamo·3w ago
Fixkamo-shared-library

Put the timecard widget under the HR group, like every other widget

TIMECARD_TODAY_WIDGET now hangs off MANAGE_TIMECARDS instead of being a root, so all five widgets have the identical shape the calendar ones set: a parent data ...

Kamo·3w ago
Fixkamo-shared-library

Restore the CRLF line endings in CalendarEventAttendeeRepository

A scripted edit rewrote the file through a text API, normalising all 62 CRLF line endings to LF and turning a 15-line addition into a 139-line diff. The content...

Kamo·3w ago
Fixkamo-internal

Restore the CRLF line endings in calendar.ts

A scripted edit rewrote the file through a text API, which normalised every one of its 257 CRLF line endings to LF and turned a 45-line addition into a 559-line...

kamo·3w ago
August 21, 2026
Fixkamo-internal

Removing from Selected Docs unchecks the row

The mirror ran one way. Removing a document deleted the binder item but left its checkbox ticked in the grid, so the next sync — on the very next visit to the t...

kamo·3w ago
Fixkamo-internal

Stop rounding document ids into nothing

A document id is a 19-digit int64 — 1200096283020258886, some 133x past Number.MAX_SAFE_INTEGER. OrganizerTab joined the selection into a key so the effect woul...

kamo·3w ago
Fixkamo-marketing

Quote the annual rate under the "billed annually" caption

The homepage cards read the month-to-month rate out of the catalog and printed it above a line saying "billed annually", so Starter advertised $34 and Business ...

Kamo·3w ago
FixDocsService

Let an unscoped binder hold its own grid's documents

sameCollection demanded an exact assoc_object_id match in both directions, which made every binder in My Docs refuse every document My Docs was showing it. The ...

Kamo·3w ago
Fixkamo-internal

A minimized chat is neither read nor silent

Two bugs that shared a cause: the only flag saying "this window is minimized" was pinned false, so everything that asked it silently did nothing. An arriving m...

kamo·3w ago
Fixkamo-internal

A member chat's own reads clear its badge, and a reply counts as one

Two gaps left over from giving the support window this treatment. Sending a message cleared nothing. The chat core marks a conversation read when it starts, wh...

kamo·3w ago
Fixkamo-internal

Stop flexbox crushing the When card down to its header

The start and end fields were not clipped by their own width. The card holding them was being shrunk to nothing. A flex item's automatic minimum size — `min-he...

kamo·3w ago
FixSecurityService

Stop cutting note bodies off at 500 characters in the timeline

The All tab of a lead's communications rendered a note through LeadCommunicationMapper, which capped the body at 500 characters — with no ellipsis and no flag, ...

Kamo·3w ago
Fixkamo-internal

Take leads-available from the server's per-product counts

leadsByProduct was derived from the allotment rows, which only cover products someone already holds a credit rule for. The grid lists products from the vendor c...

kamo·3w ago
FixSecurityService

Report leads available for products with no allotment

/manage built its whole response by looping over allotments, calling countAssignablePool once per row. But the Manage-Credits grid lists products from the vendo...

Kamo·3w ago
Fixkamo-internal

Give the composer its caret back after each send

Every chat box in a tool window locks itself while a message goes out — the input carries `disabled` so nothing typed mid-flight is discarded when the draft res...

kamo·3w ago
Fixkamo-shared-library

Remove the @EntityGraph that broke /leads on Hibernate 6.2

The grid page query failed in production with: ERROR: missing FROM-clause entry for table "a2_1" ... left join member_team_member a2_0 on **************** ...

Kamo·3w ago
August 20, 2026
FixDaemonService

Mark payload outcomes by column, not through the entity

payloadRepo.save() on a detached payload makes Hibernate walk its graph — organization pulls in org_domains — and that read lands in a transaction that has alre...

Kamo·3w ago
FixSecurityService

Settle each backlog payload as it is processed

processBacklog mirrored the scheduled job's two defects: it mutated payload statuses in memory and saved them in one batch at the end, and it saved the whole en...

Kamo·3w ago
Fixkamo-shared-library

Record a payload's outcome by column, not by entity

Marking a payload IMPORTED with payloadRepo.save() makes Hibernate walk the detached entity's graph — including organization, which pulls in org_domains — and t...

Kamo·3w ago
FixDaemonService

Stop overlapping runs importing the same payloads twice

The trigger fires every minute and each run claims work by selecting payloads still in RECEIVED. A backlog that takes longer than a minute therefore still had R...

Kamo·3w ago
FixDaemonService

Bump the processed counter instead of rewriting the endpoint

The job finished a batch by mutating totalProcessed on the endpoint entity it loaded before the batch began and saving the whole row. Two consequences: - it ...

Kamo·3w ago
FixSecurityService

Never fail a submission because its counter update lost a race

storePayload no longer bumps the endpoint's received counter; the receive controller now calls recordReceipt separately, in its own transaction, and swallows th...

Kamo·3w ago
Fixkamo-shared-library

Stop losing payloads to endpoint-counter contention

storePayload saved the payload and then bumped totalReceived/lastReceivedAt by dirtying the endpoint entity — in the same transaction. Every submission to an en...

Kamo·3w ago
Fixkamo-internal

Every country flag in the app was a blocked image

Eight more screens had the defect found in the marketing visitor drawer. The app is served under img-src 'self' data: blob: https://theme.kamocrm.com https:/...

kamo·3w ago
Fixkamo-internal

Flags are emoji, because the CSP blocks every flag CDN

The visitor drawer painted a broken-image glyph where each country flag should be. react-country-flag's `svg` mode reads like a self-contained component and is ...

kamo·3w ago
FixDaemonService

Persist each payload's outcome as it happens, not in one batch

processEndpointPayloads looped over the batch mutating statuses in memory and saved them all at the end. createLead commits per lead, so any failure of that fin...

Kamo·3w ago
Fixkamo-shared-library

Move the pool-availability recount after commit

createLead saved the lead and then, in the same transaction, ran countAssignablePool to broadcast the new "Leads Available" figure. On YugabyteDB a read after a...

Kamo·3w ago
FixMediaService

Stamp every unread frame with the instant its counts were read

The four places that built a member's unread snapshot — the REST read, the frame sent when a message arrives, the frame sent when a session is marked read, and ...

Kamo·3w ago
Fixkamo-internal

Clear the unread badge for a conversation the member is reading

The badge was fed by two unordered sources — the REST unread read and MediaService's unread topic — and applied whichever landed last, with nothing ever re-read...

kamo·3w ago
Fixkamo-marketing

Catch the silent version of "sound is not allowed here"

Follow-up to the still. Testing tap-to-play against the deployed site turned up a failure mode the muted fallback did not cover. A refused `play()` rejects, an...

Kamo·3w ago
Fixkamo-internal

Show the code as a handle, not 36 characters of hex

Moving the token to a UUID left the grid rendering the whole thing, which is correct in a URL and useless in a table: it cannot be scanned, compared against the...

kamo·3w ago
Fixkamo-marketing

The microservice count reads 64+, not 30+

The number is 64+ services now. Five untranslated surfaces still claimed 30+: the technology answer in the homepage FAQ JSON-LD (which is what a search result q...

Kamo·3w ago
FixKlusterServices

Cache CORS preflights for two hours, not 100 seconds

`accessControlMaxAge: 100` meant browsers re-ran the preflight roughly once per visit, so every page load on the marketing site paid two extra OPTIONS round-tri...

Kamo·3w ago
Fixkamo-marketing

Clear every console error and DevTools issue

Diagnosed with Chrome over the debugging protocol rather than by reasoning, collecting exactly what Lighthouse's errors-in-console and inspector-issues audits c...

Kamo·3w ago
Fixkamo-marketing

Clean the console, and restore the static rendering I broke

Three things from the console, one of them much bigger than the other two. THE BIG ONE. Chasing the "Fetch failed loading" lines led to the prefetch payload, a...

Kamo·3w ago
Fixkamo-marketing

The Trusted Types policy was being injected by next/script

The report-only console showed two violations, and one of them was the policy component's own doing: This document requires 'TrustedScript' assignment. Thi...

Kamo·3w ago
FixKlusterServices

Stop the edge rate limit from 429ing every cold KamoDesktop load

Opening an assigned Linux instance always landed on Guacamole's generic "An error has occurred and this action cannot be completed" modal, and always worked aft...

Kamo·3w ago

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing