KamoCRM

Live Change Log

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

18,400
Total Changes
6,534
Features
5,538
Fixes
30
Projects
Filter by project
All Projects18,400AIService276APIService177BillingService161ConversionService117DaemonService146DocsService240ESigService93EmailService622InitializerService344KBService162KlusterServices769MCPGatewayService277MediaService620RAGService79SecurityService1,996TranslateService62VOIPService265VectorService11kamo-apps26kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,694kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,826kamo-signer-monorepo57kamolos114
Filter by type
All TypesBuild23CI525Chore794Docs3,286Feature6,534Fix5,538Other1,001Performance174Refactor281Revert23Style45Test175Upgrade1
September 4, 2026
FixKlusterServices

A budget must not be able to deadlock a node drain

Switches every PodDisruptionBudget from minAvailable: 1 to maxUnavailable: 1. On a two-replica Deployment the two are identical — one pod evictable at a time. ...

Kamo·2mo ago
FixSecurityService

Make a System User session terminal, so entry cannot chain

The System User is god by construction, so every session minted for it carries GD and offers break glass. That is fine only because the identity does not compos...

Kamo·2mo ago
Fixkamo-internal

Stop asking for logos that were never uploaded

/network built each org's logo URL from its alias and requested it for every org on the page. An org whose theme folder was never provisioned has no img/logo.sv...

Kamo·2mo ago
FixSecurityService

Say whether an org HAS a logo instead of guessing a URL for one

Every "which networks can I reach" row carried logoUrl and logoSimpleUrl derived from the org's alias alone, for any org whose alias was path-safe — which is al...

Kamo·2mo ago
Fixkamo-signer-monorepo

Let a rollout finish what the old pod was doing

preStop sleeps 10s before the process sees SIGTERM. Kubernetes removes the pod from its EndpointSlice and signals it at the same moment, and Traefik only learns...

Kamo·2mo ago
FixMediaService

Stop ten scheduled jobs from running twice now MediaService has two pods

Scaling MediaService to two replicas would have doubled every scheduled sweep it owns. Two of those send mail — MeetingReminderSweep and ChatEmailNoticeService ...

Kamo·2mo ago
Fixkamo-login

Never show a status phrase to somebody who clicked a link

Rendering the page against an unreachable backend put "Internal Server Error" on screen as the explanation. That is a status phrase written for an operator read...

Kamo·2mo ago
FixSecurityService

Read the account inside a transaction before sending a reset

sendPasswordReset had no transaction, so the User came back detached and `securityProvider` stayed an unresolvable lazy proxy. Working out which organization's ...

Kamo·2mo ago
FixKlusterServices

Stop running the platform's entire edge on one pod

Traefik ran a single replica, so every restart of it — a rollout, an OOM, an eviction — took the whole platform's TLS down. 192.168.4.22:443 has no local endpoi...

Kamo·2mo ago
Fixkamo-nowww

Give the rollout room for the 15s minReadySeconds now costs

progressDeadlineSeconds was 60. That is the window a rollout has to show progress before Kubernetes gives up and marks it failed, and the previous commit added ...

Kamo·2mo ago
Fixkamo-capcha

Give the rollout room for the 15s minReadySeconds now costs

progressDeadlineSeconds was 60. That is the window a rollout has to show progress before Kubernetes gives up and marks it failed, and the previous commit added ...

Kamo·2mo ago
FixAPIService

Give the rollout room for the 15s minReadySeconds now costs

progressDeadlineSeconds was 60. That is the window a rollout has to show progress before Kubernetes gives up and marks it failed, and the previous commit added ...

Kamo·2mo ago
Fixkamo-register

Give the rollout room for the 15s minReadySeconds now costs

progressDeadlineSeconds was 60. That is the window a rollout has to show progress before Kubernetes gives up and marks it failed, and the previous commit added ...

Kamo·2mo ago
Fixkamo-login

Give the rollout room for the 15s minReadySeconds now costs

progressDeadlineSeconds was 60. That is the window a rollout has to show progress before Kubernetes gives up and marks it failed, and the previous commit added ...

Kamo·2mo ago
Fixkamo-nowww

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
Fixkamo-capcha

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
FixTranslateService

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
FixESigService

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
FixMCPGatewayService

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
Fixkamolos

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
FixConversionService

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
FixAIService

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
FixVectorService

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
FixDaemonService

Fail a bad rollout instead of reporting it green

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
FixMediaService

Stop deleting the only chat pod before starting its replacement

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
FixAPIService

APIService never shut down gracefully at all

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
Fixkamo-register

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
Fixkamo-internal

Add the preStop hook the drain script was always missing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
Fixkamo-marketing

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
Fixkamo-login

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
FixRAGService

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
FixVOIPService

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
FixSecurityService

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
FixKBService

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
FixEmailService

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
FixDocsService

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
FixBillingService

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

Kamo·2mo ago
FixEmailService

Open the message, not the mailbox

The app has a route per (folder, uid). Being told about a mail and then landing on a list to hunt for it is the kind of small wrongness that makes a notificatio...

Kamo·2mo ago
Fixkamo-internal

Draw the Publish switch on god eligibility

Reported: "my user has god enabled, yet I still don't see the new publish field." The gate was isGodModeActive(), which is getIsGod() AND an open break-glass wi...

Kamo·2mo ago
FixMediaService

Publish needs GD, not an open god-mode window

The switch was invisible to god-eligible operators. It was gated on **************** — GD plus an opened break-glass window — and holding GD is not the same fac...

Kamo·2mo ago
FixDocsService

Three self-invoked transactions that were doing nothing

@Transactional and @Async are PROXIES. A call from inside the same bean never reaches one, so all three of these annotations were inert. Found by audit, not by ...

Kamo·2mo ago
Fixkamo-internal

The SPF card had no proxy route, so it never reached the API

The card shipped calling /api/security/domains/{id}/spf, and every request 404'd at Next.js before SecurityService ever saw it — which the card reported as "We ...

kamo·2mo ago
FixSecurityService

A member's work address must name them without a mail provider

Forgot-password resolved the address typed on the form against two sources: the account e-mail, and the org mailbox flagged Primary on the member's settings. Th...

Kamo·2mo ago
FixEmailService

System mail must not send as a domain we do not authenticate

Transactional mail always went out as NoReply@{org primary domain} through our own relay. That is only safe while Kamo hosts the org's mail: then we control the...

Kamo·2mo ago
Fixkamo-shared-library

System_bug.published needs a column DEFAULT, or it is never created

The field was declared `@Column(nullable = false)` with no columnDefinition, so ddl-auto emitted `ADD COLUMN published boolean not null` — which Postgres REFUSE...

Kamo·2mo ago
FixEmailService

Personal mailboxes read the OAuth registry, not dead config

Connecting a personal Gmail or Outlook mailbox has been building its consent URL with client_id= empty, and every attempt was refused by the provider. The cred...

Kamo·2mo ago
Fixkamo-internal

The navigator opened popups instead of switching

Clicking a row beside a maximized terminal opened a small window over the top of it. It was a launcher, not a switcher. `openConversation(row, { maximized: tru...

Kamo·2mo ago
Fixkamo-marketing

25 pages titled themselves KamoCRM twice

Every page's <title> read `X | KamoCRM | KamoCRM`. The root layout sets `title.template: "%s | KamoCRM"`, and each page's own `title` already ended in the same ...

Kamo·2mo ago
Fixkamo-internal

Handing back to Kamo's app writes only the switch

Choosing "use Kamo's application" sent the whole form with the disable, so an edit the member had typed and not saved was persisted by a choice they would not h...

Kamo·2mo ago
FixMediaService

Build against the two-field SystemBugDispatchDTO

Unrelated to the OAuth work in the previous commit — MediaService main has not compiled since kamo-shared-library ad78dfa8 added terminalSessionId and terminalT...

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