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 6, 2026
FixESigService

Scope a decoder to the recipient who decoderd

Any single recipient declining set the whole envelope DEcoderD, so a counter-signer could destroy signatures the other parties had already given, with no recove...

Kamo·1mo ago
FixESigService

Enforce required fields on the server, not just in the browser

submit() validated only consent and step-up; it accepted an empty values list and still marked the recipient SIGNED. Ports validation.ts (esign-core), including...

Kamo·1mo ago
FixESigService

Bind every recipient to a template signer slot

No caller supplied signerUid, so recipients were created without one. buildSession filters a signer's fields by signerUid, so myFields came back empty, completi...

Kamo·1mo ago
Fixkamo-internal

Drive the mail badge from pushed unread counts, not a 30s poll

MailButton ran setInterval(fetchUnreadCount, 30_000) in every open tab, and each tick called /api/email/folders — an endpoint that opens every folder in the mai...

kamo·1mo ago
FixInitializerService

Fail the run when a required UNIQUE index cannot be created

ensure() caught Exception and logged, so a failed CREATE UNIQUE INDEX reported success and the service booted with no uniqueness guarantee at all — the one outc...

Kamo·1mo ago
Fixkamo-shared-library

Make the audience FKs and the attested wording actually hold

Five defects from the whole-branch review, all in the evidence path. The audience FKs did not cascade. cascade = CascadeType.DETACH is a persistence-context ca...

Kamo·1mo ago
FixDocsService

Enforce document/binder collection scope in addItem

BinderService.addItem checked read access and refused VAULT/LOAN documents, but never compared the document's own collection to the binder's, so a hand-crafted ...

Kamo·1mo ago
FixInitializerService

Scope empty binders to (MY_DOCS, '') not the owner's member id

The My Docs DocManager never passes an assocObjectId prop, so it always resolves and queries (3, ''). BACKFILL_EMPTY_SQL was scoping empty binders to (3, member...

Kamo·1mo ago
Fixkamo-internal

Guard loadBinders by request identity, not scope value

sameBinderScope alone can't tell two in-flight requests for the SAME scope apart (A -> B -> A), so a slower older request could still overwrite a newer one. Tra...

kamo·1mo ago
Fixkamo-internal

Show only the binders belonging to the open collection

OrganizerTab already received assocType/assocObjectId and passed them to the editor's document picker, but loaded the binder LIST unscoped — so every DocManager...

kamo·1mo ago
FixInitializerService

Correct javadoc on Hibernate ddl-auto behavior for NOT NULL columns

CockroachDB rejects ADD COLUMN ... NOT NULL without a DEFAULT on a populated table, so Hibernate's ddl-auto attempt fails (logged, non-fatal) rather than no-opp...

Kamo·1mo ago
Fixkamo-internal

Add a close button to the automated-imports manage dialog

The manage popup had no dismiss affordance in its header — only the backdrop and Esc closed it. Add an X icon button beside the edit action.

kamo·1mo ago
Fixkamo-internal

Tell a tool component when its window is maximized

Maximizing a tool window repaints the shell at 100vw/100vh but leaves the window's stored size untouched, and that stored size is what ToolDock hands the compon...

kamo·1mo ago
Fixkamo-internal

Keep fields on the page when a document opens at a remembered zoom

Reopening a document could draw every field small and up in the corner, until one click of the zoom control snapped them all into place. The page box that fiel...

kamo·1mo ago
Fixkamo-internal

Stop replies drawing a gridded copy of the quoted signature

Replying to a message sent from Kamo showed the signature twice: the live one, and above it a mangled version of the quoted original's, drawn as a bordered spre...

kamo·1mo ago
Fixkamo-internal

Number pages against the document the reader gets

Modifiers were keyed off a page's index in the design, which is an identity that survives deletion and reordering, not a position. So deleting page 2 left the p...

kamo·1mo ago
Fixkamo-internal

Load the number in the softphone without placing the call

Tapping an extension or a number on a correspondent card passed autoDial, so the call went out the moment the softphone registered. The card opens on hover, whi...

kamo·1mo ago
Fixkamo-internal

Give the card's readout labels room to breathe

The label column was a hand-picked 76px. DEPARTMENT is wider than that, so it overflowed its box and sat flush against its value with no gap, and LOCAL TIME wra...

kamo·1mo ago
Fixkamo-signer-monorepo

Group an imported radio field's buttons natively

The buttons of one AcroForm radio field are imported as separate linked fields, one choice each, so each keeps its own box on the page. They were named after th...

Kamo·1mo ago
Fixkamo-internal

Paint the correspondent card in the tenant's brand colour

The card was tinted with --accent-comms, the fixed indigo the instrument panel uses to mark the messages family. On the solid "New message" button that reads as...

kamo·1mo ago
Fixkamo-internal

Stop dark-mode pastes landing as invisible text in the composer

Copying an answer out of ChatGPT (or any dark-themed page) and pasting it into the compose body produced a large white block with nothing in it, and the message...

kamo·1mo ago
Fixkamo-internal

Share the public join link, not the members-only redirect

A meeting link written into an email was pointing at /meet/join/<id>, which mints a one-time key from the clicker's Kamo session — and redirects anyone without ...

kamo·1mo ago
August 5, 2026
FixEmailService

Stop Hibernate mangling the "::" casts in the native SQL

Hibernate's native-query parser treats "::" as an escaped colon and forwards a single ":". CockroachDB received **************** ARRAY[]:text[]), ' ') and r...

Kamo·1mo ago
FixEmailService

Keep retrying the indexer's durable NATS consumer after a deploy

A rolling deploy overlaps pods and the outgoing one still holds the durable consumer, so the incoming pod's bind to "email-metadata-indexer" fails with [SUB-900...

Kamo·1mo ago
Fixkamo-internal

Stop recipient names being clipped to a letter

The chips were inline-flex boxes whose label carried `truncate`. A flex child with overflow hidden is allowed to shrink below its own content, and nested inside...

kamo·1mo ago
FixEmailService

Adapt the metadata indexers to array-typed columns

Follows the kamo-shared-library change that maps conversations/search_index array columns as String[]/UUID[] rather than List<T>, which is what stopped every in...

Kamo·1mo ago
Fixkamo-shared-library

Map the metadata array columns as Java arrays, not List

Both entities declared their array columns as List<T> under an explicit @JdbcTypeCode(SqlTypes.ARRAY). On Hibernate 6.2.13 that combination resolves the array's...

Kamo·1mo ago
Fixkamo-internal

Drop the inset around the Resources document manager

DocManager brings its own toolbar and grid chrome, so the 32px wrapper padding was only shrinking the grid inside an already-bounded pane. The wrapper stays as ...

kamo·1mo ago
FixEmailService

Bound the bulk folder index and stop it on structural failure

Uncommitted work from a concurrent session, swept in so the tree is clean. The bulk index walked pages with totalPages set to Integer.MAX_VALUE and no ceiling,...

Kamo·1mo ago
Fixkamo-internal

Show the full section-index rail instead of a nested scrollbar

The left nav rail was capped at calc(100vh - 128px) with overflowY: auto, so an org with most features enabled (up to 18 sections across 4 groups, ~710px) grew ...

kamo·1mo ago
FixKlusterServices

Stop the passdb from splitting a mailbox across two maildirs

password_query returned `email as user`, which overwrote the %Lu-lowercased login name with the row's stored casing. user_query then interpolated %n from the re...

Kamo·1mo ago
Fixkamo-internal

Portal the break-glass dialog to the body

Clicking break glass opened the dialog inside the nav rail instead of over the page. The overlay is a bare fixed-position motion.div, not a MUI Dialog, so it ha...

kamo·1mo ago
FixSecurityService

Mirror Maven Central and retry, so a corrupt transfer stops killing the build

The session security-level fix failed to deploy because bcprov-jdk18on:1.72 arrived corrupted — 'Tag mismatch' is a TLS auth-tag failure mid-transfer, not a mis...

Kamo·1mo ago
FixSecurityService

Name the full logo correctly and resolve an org's domain deterministically

Three defects in how an organization's branding location is derived. my-networks named the full logo "logo-full." + logoFullExt, defaulting to "svg" when the c...

Kamo·1mo ago
Fixkamo-shared-library

Record the uploader on a deduplicated document

registerExistingDocument built its Img without .createdByMember(member), which the normal upload path sets. Every document registered through dedup therefore la...

Kamo·1mo ago
Fixkamo-internal

Proxy foreign org logos so the tenant img-src policy can't block them

/network is the one page that renders another tenant's branding: it lists every organization in the network and loads each logo from that org's own theme.<domai...

kamo·1mo ago
FixSecurityService

Read the member security level the column actually stores

members.security_level is a VARCHAR holding the ImageAccessLevelType NAME — 'PRIVILEGED', 'MEMBER', 'TEAM_MEMBER'. The session builder tested the value with ins...

Kamo·1mo ago
Fixkamo-internal

Merge a caller's query with the browser's instead of concatenating

forwardToApi appended the browser's query string to whatever it was given, so a caller passing its own query produced a URL with two '?'. Everything after the f...

kamo·1mo ago
FixConversionService

Use targeted conversion updates instead of saving a detached ImgDat

convertAndGenerateThumbnails runs on a virtual thread with a detached ImgDat, so imgDatRepository.save() merged a stale orphan-removal collection and threw befo...

Kamo·1mo ago
Fixkamo-shared-library

Targeted conversion updates, so a detached ImgDat save cannot abort conversion

Conversion runs on a virtual thread against a DETACHED ImgDat. save() therefore merges an instance whose LAZY `images` collection is no longer the managed one, ...

Kamo·1mo ago
Fixkamo-internal

Keep upload Folder/Doc Type labels shrunk over native selects

The per-file Folder and Doc Type selects start with an empty value, so MUI left their labels at rest position while the native <select> still painted its first ...

kamo·1mo ago
Fixkamo-shared-library

Put unowned intake leads into the auto-assignment pool

Every lead-creation path funnels through LeadService.createLead — CSV import, the lead-intake endpoints and their scheduled DaemonService job, the public webina...

Kamo·1mo ago
Fixkamo-internal

Let a tab fill the content area, so the document manager gets full height

The content wrapper was a plain block, so a page's `flex: 1` had no flex parent to resolve against and the wrapper sized to its contents. DocManager's root is `...

kamo·1mo ago
Fixkamo-internal

Merge same-named vendors and products in the filter bar

An org routinely holds one lead supplier under several vendor records, so on the "All Markets" tab the Vendor dropdown listed the same name once per record — id...

kamo·1mo ago
Fixkamo-internal

Remove the filter button from datagrid column headers

AG Grid 32 defaults to the "new" column menu. On Community (no enterprise module) that means no header menu button ever renders — the only header-cell affordanc...

kamo·1mo ago
FixEmailService

Never match a lead against the company's own addresses

A lead whose e-mail was set to noreply@kamocrm.com matched every message that address had ever sent — one lead record surfaced the company's entire outbound mai...

Kamo·1mo ago
Fixkamo-internal

Drop the description line above the Resources document manager

It described a tab that now shows its own contents, so it was only taking space. descriptionKey goes optional rather than staying as an unrendered string: a tab...

kamo·1mo ago
FixDocsService

Mirror Maven Central and retry, so a corrupt transfer stops killing the build

The HR_RESOURCE rebuild failed on hibernate-core:6.5.3.Final with 'Tag mismatch' — a transfer corrupted in flight, not a missing artifact. The shared-lib stage ...

Kamo·1mo ago
Fixkamo-internal

Stop double-appending the query string on the communications route

All / Calls / Texts / Emails failed with "We couldn't load this lead's communications". The backend was fine — direct calls returned 200 with real entries. The ...

Kamo·1mo ago
Fixkamo-internal

Timeline a11y, timezone-correct day headings, and a summary card that isn't zero

Three defects, each invisible until it bites. The row expander wrapped the whole header in a <button>, and DateTimeDisplay renders its own interactive tooltip ...

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