KamoCRM

Live Change Log

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

18,890
Total Changes
6,827
Features
5,701
Fixes
30
Projects
Filter by project
All Projects18,890AIService287APIService179BillingService166ConversionService121DaemonService152DocsService275ESigService103EmailService652InitializerService350KBService163KlusterServices778MCPGatewayService280MediaService629RAGService79SecurityService2,066TranslateService62VOIPService266VectorService11kamo-apps29kamo-asterisk-support29kamo-capcha17kamo-capcha-widget4kamo-internal8,884kamo-login346kamo-marketing642kamo-nowww20kamo-register216kamo-shared-library1,896kamo-signer-monorepo73kamolos115
Filter by type
All TypesBuild23CI528Chore798Docs3,295Feature6,827Fix5,701Other1,007Performance175Refactor286Revert23Style45Test181Upgrade1
June 28, 2026
FixDaemonService

Register com.kamo.z.shared.mlos.event repos (OutboxWriter dep)

Enabling mlos.outbox activates OutboxWriter, which requires MlosOutboxEventRepository (+ ProcessedEvent /DeadLetter) from com.kamo.z.shared.mlos.event — add tha...

Sage·4mo ago
June 26, 2026
Fixkamo-shared-library

PublishAck is in io.nats.client.api, not io.nats.client

Test-only import fix that was breaking shared-lib compilation (caught by the now-required local mvn install). Main code was unaffected (OutboxRelay ignores the ...

Kamo·4mo ago
June 25, 2026
FixKlusterServices

Indent heredoc bodies so the startup.sh configmap is valid YAML

The startup.sh block scalar embedded 5 shell heredocs (rtp.conf, http.conf, an SQL block, WebRTC endpoints, freepbx.conf) whose bodies sat at column 0 — less in...

Sage·4mo ago
FixDocsService

Point Docs deployment at k1m1 registry

The Docs-online image host was the bogus **************** (Redis DNS, never a registry), so every DocsService deploy re-applied an unpullable image. Point it at...

Kamo·4mo ago
Fixkamo-internal

Page reflects superseded edt + road-less transport cells honestly

The Services tab read as incomplete for two stages that are actually done: - edt showed an empty 0% bar though EDT4 (hydro) supersedes the EDT2 base and the p...

Sage·4mo ago
June 20, 2026
Fixkamo-internal

Show the live heartbeat tile count, not the stale per-pass value

Progress read status.have first, which the initial 'running' event sets to 0 — and `0 ?? count` keeps 0, so the live count never showed (and hydro mis-counted a...

Sage·4mo ago
Fixkamo-internal

Add Universe to the settings slide-out (NavPri)

The Universe page was registered on the settings landing cards but not in the SettingsStatusWindow slide-out that NavPri actually opens, so it didn't appear und...

Sage·4mo ago
June 16, 2026
FixSecurityService

Expose GD (god eligibility) in /user-info for kamo-universe

The session stores the GD flag (KSessionService) but /user-info never returned it, so kamo-universe's KamoIdentity always deserialized is_god=false and the god/...

Kamo·5mo ago
FixEmailService

Don't save transactional NoReply sends to a Sent folder

NoReply is a send-only address with no mailbox, but every transactional send still attempted an IMAP append to its Sent folder, producing a noisy AUTHENTICATION...

Kamo·5mo ago
FixSecurityService

Case-insensitive email lookup so reset emails send

Password recovery lowercased the input but findByEmailEmail does a case-sensitive match against the stored email (e.g. Sage@KamoCRM.com), so the user was never ...

Kamo·5mo ago
June 15, 2026
Fixkamo-login

Proxy password-reset to SecurityService internal DNS

The /api/recover proxy defaulted to api.kamocrm.com, which Traefik routes to APIService (no recover controller) → 404 → "Something went wrong" on /reset-passwor...

Kamo·5mo ago
FixKlusterServices

Move Dovecot maildirs to a local-path PVC (off rclone/MinIO FUSE)

Maildirs were on hostPath /mnt/shared-files/email/mail — the rclone FUSE mount backed by MinIO object storage, which can't safely host a maildir (no atomic rena...

Kamo·5mo ago
FixKlusterServices

Put MySQL datadir on a local-path PVC instead of rclone/MinIO FUSE

The mail MySQL datadir (and maildirs) were on hostPath /mnt/shared-files, an rclone FUSE mount backed by MinIO object storage, which cannot durably or consisten...

Kamo·5mo ago
FixEmailService

Mailbox list API returns UI-shaped ****************

GET /api/email/mailboxes returned the raw entity (providerStatus, lastSyncedAt, no member count). The settings UI reads **************** so status was always un...

Kamo·5mo ago
FixSecurityService

Carry impersonation audit trail across org jumps

When the caller is already an impersonation session (a god admin acting as another member, carrying SUDO_MEMBER_ID), entering another org from /network minted t...

Kamo·5mo ago
FixEmailService

Authorize privilege-based mailbox access for read + send-as

resolveForMailbox only granted access via a direct MemberMailbox assignment, so mailboxes surfaced through **************** rights threw NoSuchElementException ...

Kamo·5mo ago
Fixkamo-internal

Stop gating pages on the *** cookie in proxy middleware

proxy.ts (Next middleware) redirected every page request with no *** cookie to /logout. Since the session id now lives in sessionStorage — which a document requ...

kamo·5mo ago
Fixkamo-internal

Stop touching cookies; send token explicitly on auth calls

Rip out all the legacy-cookie clearing/migration. The token lives in sessionStorage (key ***) and travels as the X-***-Token header, which the backend already p...

kamo·5mo ago
Fixkamo-internal

Don't adopt the legacy *** cookie; clear it instead

Right after the sessionStorage switch ships, every browser still has its old *** cookie. The migration adopted that value into sessionStorage (and the server co...

kamo·5mo ago
Fixkamo-internal

Fall back to my-networks when all-networks 403s

hasPlatformAdminAccess is derived client-side (owner-of-session-org AND host-org-is-top-level). A child-org owner whose session lands on the top-level host is m...

kamo·5mo ago
June 14, 2026
June 13, 2026
June 12, 2026
June 10, 2026
FixBillingService

Register esign repositories for the meter submission bean

EsignMeterSubmissionService needs EsignUsageRecordRepository, but @EnableJpaRepositories didn't scan com.kamo.z.shared.esign.repos, so the context failed to sta...

Kamo·5mo ago
FixBillingService

Back metered add-on prices with a Billing Meter

Stripe (>= 2025-03-31.basil) rejects the legacy usage_type+aggregate_usage metered model ('metered prices must be backed by meters'), so USAGE_BASED add-on pric...

Kamo·5mo ago
FixSecurityService

Select the SUBSCRIPTION market for platform setup

KamoCRM owns several markets **************** so resolveProductMarket must pick the SUBSCRIPTION-type (platform-access) market rather than the first active one....

Kamo·5mo ago
Fixkamo-shared-library

Product root = owns SUBSCRIPTION market, not any market

A customer org (e.g. BluEleven) owns its OWN business markets (RETAIL/MORTGAGE) to run its company while remaining a customer of the KamoCRM platform — its memb...

Kamo·5mo ago
June 9, 2026
Fixkamo-internal

Keep org list on background refetch; dedupe session calls

/network re-fired fetchNetworks on every background session refresh and hid the whole list on any fetch error, so a transient blip or a stale hasPlatformAdminAc...

kamo·5mo ago
Fixkamo-internal

Revert email link click handlers, isolate cause

User reports email-preview link clicks still do nothing AND text selection is killed mid-drag. Right-click and hover both work, so the anchor element is intact ...

kamo·5mo ago
June 8, 2026
FixSecurityService

Regenerate favicons on labeling save; sniff real logo type

provisionUpdate (run on every custom-labeling save) wrote config/css/manifest but never regenerated favicons — those were only produced by provisionFull. An org...

Kamo·5mo ago
FixSecurityService

Seed globals.css from template when org folder lacks it

provisionUpdate (run on every color save) rewrote the org's css/globals.css in place, but that object only exists once provisionFull has copied it from the defa...

Kamo·5mo ago
Fixkamo-internal

Show full logo with its real extension, not hardcoded .svg

The branding tab built logoFullUrl as logo-full.svg on mount, ignoring the org's logoFullExt. Full logos uploaded as png/jpg/etc. live at logo-full.{ext} in Min...

kamo·5mo ago
FixKlusterServices

Refresh TLSStore every loop so newly-issued certs get served

update_tls_store() only ran at startup and on shared-storage imports, so a cert freshly issued by cert-manager (HTTP-01) was Ready with a tls-* secret but never...

Kamo·5mo ago
FixKlusterServices

Give redirect-only route a backend so Traefik v3 enables it

Traefik v3 disables an IngressRoute router with services: [] when allowEmptyServices is off (as it is here), so the domain-agnostic HTTP->HTTPS redirect router ...

Kamo·5mo ago
FixKlusterServices

Redirect all HTTP hosts to HTTPS + gate auto-cert to real org domains

Custom org domains (e.g. login.sign.pink) returned Traefik's bare "404 page not found" over plain HTTP: the only port-80 redirect router was hardcoded to *.kamo...

Kamo·5mo ago
FixConversionService

Persist conversion_error instead of failing silently

Both the template and regular upload conversion pipelines swallowed Docs conversion failures (logged only), leaving is_converted=false with no recorded reason —...

Kamo·5mo ago
June 7, 2026
Fixkamo-signer-monorepo

Install turbo via npm in Docker pruner stage; pin pnpm; add .dockerignore

The pruner stage ran `pnpm add -g turbo` before any package.json existed, so corepack grabbed pnpm 11 and failed with "global bin directory /pnpm/bin not in PAT...

Kamo·5mo ago
May 29, 2026
Fixkamolos

Default empty STRIPE_CONNECT_WEBHOOK_SECRET so KamoLOS boots

The configmap referenced **************** without a default, so Spring's placeholder resolver threw before reaching the Java-level **************** which alread...

Kamo·5mo ago
Fixkamolos

Track shared-lib LoanRepository → PersonalLoanRepository rename

Updates every import and field type from LoanRepository to PersonalLoanRepository across 20 KamoLOS source files + 1 test (Lombok-injected field names stay as l...

Kamo·5mo ago
Fixkamo-shared-library

Rename LoanRepository → PersonalLoanRepository

Spring Data JPA derives the repository bean name from the interface's simple class name, not from the @Repository("...") qualifier value, so the prior workaroun...

Kamo·5mo ago
Fixkamo-internal

Add /commerce/personal-loans/new entry + polish market-scoped offer page

The QuickActionsBar "New Loan Offer" action pointed at /commerce/personal-loans/new but no such page existed, so Next.js routed to the dynamic [loanId] page wit...

kamo·5mo ago
Fixkamo-shared-library

Avoid Loan / LoanRepository collision with mortgage app

KamoInitializerService failed to boot because two @Entity classes named 'Loan' and two repository classes named 'LoanRepository' both wanted to register the sam...

Kamo·5mo ago
May 28, 2026
Fixkamolos

Tier 1 critical correctness pass

T1.1 Stripe disbursement strategy: TREASURY (stub — requires SDK upgrade or raw HTTP) / CONNECTED_ACCOUNT (Transfer.create — works in SDK 28.2.0) / MA...

Kamo·5mo ago
Fixkamo-internal

Force email link clicks via capture-phase navigation

Reports show clicks on email-preview links silently doing nothing — hover shows the URL, no console errors, but the navigation never fires. That fingerprint poi...

kamo·5mo ago
Fixkamo-internal

Let native target=_blank open the new tab, drop window.open

The previous fix intercepted the click and called window.open() — but popup blockers and extensions can block window.open even from a direct click handler, so t...

kamo·5mo ago
Fixkamo-internal

Email-preview links open in a new tab again

The sanitizer already sets target="_blank" on every link, but the document-level click handler in NavigationInterceptor was firing for every link click — includ...

kamo·5mo ago
May 21, 2026
Fixkamo-internal

Add /api/security/mortgage-apps catch-all proxy — 404 root cause

The kamo-internal app proxies every Java backend path through an explicit Next.js route handler (one per top-level segment: /commerce-markets, /pos, /leads, …)....

kamo·5mo 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