KamoCRM

Live Change Log

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

17,395
Total Changes
5,910
Features
5,260
Fixes
30
Projects
Filter by project
All Projects17,395AIService242APIService174BillingService157ConversionService110DaemonService137DocsService223ESigService91EmailService568InitializerService329KBService151KlusterServices738MCPGatewayService235MediaService592RAGService79SecurityService1,830TranslateService62VOIPService248VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,328kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,637kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,252Feature5,910Fix5,260Other993Performance165Refactor278Revert23Style42Test159Upgrade1
August 4, 2026
Fixkamo-internal

Line the commission-split controls up with the text fields

The Percent/Amount and One-time/Recurring toggles rendered at MUI's default toggle height while the member picker and the share amount beside them come out at 4...

kamo·2mo ago
Fixkamo-internal

Pane owns its spacing and scroll; drop the addressee fields from the form

The lead view's content card is overflow:hidden with no padding — every pane supplies its own, as Details and History do. The quotes pane supplied neither, so t...

kamo·2mo ago
Fixkamo-internal

Review findings on the reserved list and split editor

Five defects an adversarial review confirmed against the first cut: - The page rendered "You don't have access" on every load. checkRole returns false while ...

kamo·2mo ago
Fixkamo-internal

Give the commitment and setup fee fields room for their labels

"Commitment (months)" shares its width with an info adornment and "One-time setup fee" is the longest label on its row; both were truncating.

kamo·2mo ago
Fixkamo-shared-library

Resolve the org's real hostname and logo extension for the letterhead

Correcting the theme URL was necessary but not sufficient — the logo still did not render, for two further reasons found in the live data. org_domains stores a...

Kamo·2mo ago
Fixkamo-internal

Keep the profile heading on the current membership type

The heading reads "<Member> Profile" or "<Team Member> Profile" off the type MyAccountTab reports through onMemberTypeLoaded, which only fired from the mount-ti...

kamo·2mo ago
Fixkamo-internal

Fill the Position card the moment a member is promoted

Department, job title, official title, work location, membership status and the two Autocomplete option lists were only ever loaded inside the memberType === 'T...

kamo·2mo ago
Fixkamo-internal

Summary moves into the header, records get the full page width

The summary sat in a fixed 320px right-hand column on every record page, permanently costing a fifth of the width. On the quote editor that squeezed the line-it...

kamo·2mo ago
Fixkamo-shared-library

Point the letterhead logo at the path the theme bucket actually serves

The logo URL was built as **************** which that host answers with a 308 rather than an image — so every quote, sent as well as previewed, silently fell ba...

Kamo·2mo ago
Fixkamo-internal

Department contact fields showed raw i18n keys

The contact block added with the bulk-email work called departments.departmentEmail / departmentEmailHelper / departmentPhone / departmentExtension, but the dic...

kamo·2mo ago
Fixkamo-internal

Deliver attached images, and stop two compose windows sharing a toolbar

AI chat attachments were never reaching the AI. AiChatInput sent the storage paths as `imageUrls`, but the REST body in AiChatWebSocketContext reads `imageObjec...

kamo·2mo ago
Fixkamo-internal

Stop tool windows losing and leaking member-typed content

Follow-up to the popup-window persistence work. Each of these was verified against real code first; three of the original reports turned out to be wrong or over...

kamo·2mo ago
Fixkamo-internal

Departments no longer open invisible on first render

The Directory tab came up empty until you switched to Chats and back. The members were always there — every department was parked at opacity 0. Sections were r...

kamo·2mo ago
Fixkamo-internal

Stop losing popup tool windows (and unsent drafts) on page changes

Tool windows lived only in a module-level in-memory store, so any full document load destroyed every open window and everything typed into it. Several internal ...

kamo·2mo ago
FixSecurityService

Require ACTIVATED god mode to read the trail, not eligibility

PhiAuditController.hasRight() bypassed the right check on session GD alone. GD means "may activate god mode"; godModeActive means "has activated it, deliberatel...

Kamo·2mo ago
Fixkamo-internal

Selecting Quotes no longer bounces back to the first sub-tab

Clicking Quotes set the index to 2 and wrote ?sub=quotes, but the effect syncing state back from the URL mapped anything that was not "commitments" to 0 — so it...

kamo·2mo ago
Fixkamo-internal

Harden the original session-timeout stack

Review of the **************** path after removing the duplicate idle stack turned up four real defects: - sessionMonitor.start() left its 3s bootstrap setTime...

kamo·2mo ago
Fixkamo-internal

Let the stage grow so the chrome pod gets an even gap

The pod (now taller with the tone slider) becomes the stage's only in-flow child: fixed height becomes a minHeight, with 16px padding above and below the pod (c...

kamo·2mo ago
Fixkamo-internal

Retry npm ci in the Docker build against flaky runner egress

The k1m1 runner intermittently corrupts TLS streams mid-fetch **************** killing the image build in npm ci. Give npm fetch retries and retry the whole ins...

kamo·2mo ago
Fixkamo-internal

Route the transaction pipeline screen through ConsoleShell

The Pipeline steward screen was the only console screen rendered without a layout wrapper, so its heading, filter labels, and table sat flush against the consol...

kamo·2mo ago
August 3, 2026
Fixkamo-internal

Take the percent sign from Intl, not the translated string

A literal "%" in the source text does not survive machine translation — zh returned "保存 {percent}" — so non-English users saw a bare number where a percentage w...

kamo·2mo ago
FixInitializerService

Repair the quote-option FK defaults ddl-auto cannot reach

The existing dynamic sweep only covers nullable FK columns that already carry a FOREIGN KEY constraint. commerce_quote_options.quote_id is NOT NULL, so it is ex...

Kamo·2mo ago
Fixkamo-shared-library

Pin option FK column definitions so they do not inherit gen_random_uuid()

Hibernate copies the referenced id's columnDefinition onto a new @JoinColumn, so quote_id and option_id were both created DEFAULT gen_random_uuid(). An insert t...

Kamo·2mo ago
FixSecurityService

Unbreak application.yml, and replace the test that never ran

Three things, all from trying to answer "why not just fix the context test?". 1. **************** declared `kamo:` TWICE and therefore did not parse at all ...

Kamo·2mo ago
Fixkamo-internal

Surface quotes in every vertical, not just retail

The Quotes tab was only wired into the RETAIL sub-tab set, so on an org whose active markets are SUBSCRIPTION / MORTGAGE / PERSONAL_LOANS there was no way to re...

kamo·2mo ago
FixSecurityService

Treat SERVFAIL/timeout (TRY_AGAIN) as pending, not hard error

Flaky customer authoritative servers (seen: migo.host for rodaris.md) intermittently answer SERVFAIL on healthy zones, which /setup/dns rendered as a red 'DNS l...

Kamo·2mo ago
FixSecurityService

Time out the *** call instead of hanging every login

A bare `new RestTemplate()` has no connect or read timeout. When the *** service became unreachable today, every login thread blocked on this call indefinitely ...

Kamo·2mo ago
FixKlusterServices

Stop the avatar-resolver policy blocking every login

This policy took the whole platform's login offline for hours. Cilium enforces egress against the RESOLVED BACKEND, after service DNAT, so the port it matches ...

Kamo·2mo ago
Fixkamo-internal

Resolve the org from the real request host, not the internal address

checkAccess resolves the tenant by looking up `org:domain:<hostname>`, and was being handed request.nextUrl.hostname — which behind Traefik is 127.0.0.1. That k...

kamo·2mo ago
FixDaemonService

Annotate the injectable StewardNotifier constructor

DaemonService has been in CrashLoopBackOff for days — 1654 restarts on the pod before the last deploy, 60 on the current one — and never started: Failed to i...

Kamo·2mo ago
Fixkamo-marketing

500s on dynamic-segment pages + en fallback for missing locale keys

Removing the global force-dynamic made routes with generateStaticParams attempt static rendering for on-demand params, which throws DYNAMIC_SERVER_USAGE because...

Kamo·2mo ago
FixAIService

Scan the shared MFA repositories

MfaEnrollmentService is a @Service in kamo-shared-library, so the wildcard @ComponentScan("com.kamo") in this application constructs it whether or not this serv...

Kamo·2mo ago
FixVOIPService

Scan the shared MFA repositories

MfaEnrollmentService is a @Service in kamo-shared-library, so the wildcard @ComponentScan("com.kamo") in this application constructs it whether or not this serv...

Kamo·2mo ago
FixDaemonService

Scan the shared MFA repositories

MfaEnrollmentService is a @Service in kamo-shared-library, so the wildcard @ComponentScan("com.kamo") in this application constructs it whether or not this serv...

Kamo·2mo ago
FixMediaService

Scan the shared MFA repositories

MfaEnrollmentService is a @Service in kamo-shared-library, so the wildcard @ComponentScan("com.kamo") in this application constructs it whether or not this serv...

Kamo·2mo ago
FixEmailService

Scan the shared MFA repositories

MfaEnrollmentService is a @Service in kamo-shared-library, so the wildcard @ComponentScan("com.kamo") in this application constructs it whether or not this serv...

Kamo·2mo ago
FixSecurityService

Declare the MFA bean here, since the library no longer does

kamo-shared-library dropped @Service from MfaEnrollmentService so that ~40 services stop constructing an authentication component they do not use — that stereot...

Kamo·2mo ago
Fixkamo-shared-library

Drop @Service so 40 services stop constructing an auth bean

MfaEnrollmentService shipped with @Service. Every Kamo service carries @ComponentScan("com.kamo"), so all of them construct it — but each declares its own EXPLI...

Kamo·2mo ago
FixSecurityService

Add the MFA repositories to the JPA scan — unbreaks login

@EnableJpaRepositories here is an EXPLICIT package list, not a wildcard. com.kamo.z.shared.mfa.repos was missing from it, so UserMfaEnrollmentRepository and Mfa...

Kamo·2mo ago
FixEmailService

Merge duplicate kamo key that crashlooped EmailService

The new EmailService pod has been in CrashLoopBackOff since 16e8a05 — 22 restarts, never once started. snakeyaml raises DuplicateKeyException on a repeated top-...

Kamo·2mo ago
Fixkamo-shared-library

Pin the constructor Spring uses, and prove the context starts

MfaEnrollmentService is a @Service and every Kamo service component-scans com.kamo, so it is instantiated in roughly forty applications. It had two constructors...

Kamo·2mo ago
Fixkamo-login

Accept starter/enterprise plan handoff, carry promo code, target www /subscribe

kamo-register now whitelists starter|business|enterprise and stashes sp_checkout_code; the old pro|business filter silently dropped Starter buyers, and the apex...

Kamo·2mo ago
Fixkamo-internal

Apply the image policy to every page, not just the authenticated ones

The policy was attached only at the final `NextResponse.next()`, so /logout and /validate — both real, browser-rendered documents — were served with no img-src ...

kamo·2mo ago
Fixkamo-register

Unblock portrait phones, add analytics funnel analytics, fix plan handoff

- Remove the portrait-phone gate and "rotate your phone" dialog that hid the entire wizard on portrait phones; the wizard now renders single-column below th...

Kamo·2mo ago
Fixkamo-internal

Restore theme assets — CSP derived the wrong host and SVG was disabled

Avatars, org logos and backgrounds stopped loading for every tenant. Two separate regressions I introduced in 36ad904b, both live for hours. 1. The per-request...

kamo·2mo ago
Fixkamo-internal

Close the /_next/image open proxy

remotePatterns was [{ protocol: "https", hostname: "**" }]. That made the image optimizer a general-purpose fetcher: any caller could ask this server to retriev...

kamo·2mo ago
Fixkamo-internal

Show the other party in Sent, not the reader's own face

Both list views keyed a row on its sender, so every row of the reader's own outbox showed the reader — their photo, their name, their address. The message list ...

kamo·2mo ago
FixSecurityService

Let org owners configure sender photos without a rights grant

The settings endpoint required MANAGE_EMAIL_AVATAR_SETTINGS and nothing else, so it shipped dormant: a brand-new right is held by nobody until an admin assigns ...

Kamo·2mo ago
Fixkamo-asterisk-support

Harden the kubectl download against flaky egress [skip ci]

dl.k8s.io over the runner's egress intermittently drops mid-transfer: curl: (56) OpenSSL SSL_read: decryption failed or bad record mac which fails the deploy ...

Kamo·2mo 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