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
September 28, 2026
FixBillingService

The Enterprise refusal names KamoUniverse

"The Enterprise plan is arranged directly with KamoCRM and cannot be selected here. Contact us and we will set it up for you." is echoed verbatim to the custome...

Kamo·9h ago
FeatureBillingService

The billing console sells an organization its own universe's plans

KamoUniverse adds Family, Community and Personal ladders beside the business one, and BillingService assumed a single catalog: "the Free plan" was the code FREE...

Kamo·22h ago
September 24, 2026
OtherBillingService

Own NATS login and Redis login

Kamo·4d ago
September 23, 2026
FixBillingService

Pin kamo-shared-library 1.6.1, the only version that exists

The library moved to 1.6.1 and this service still asked for 1.6.0. There is no window in which both resolve: the library is never published to a remote, so the ...

Kamo·5d ago
FixBillingService

Only an organization's owner may change who pays for mailboxes or extensions

**************** and **************** had no authorization check at all — any member of the organization, not only its owner, could move the whole organization'...

Kamo·5d ago
TestBillingService

Growth Hub files are reported on their own line

This pins the GROWTH_HUB domain kamo-shared-library gained today. Before it, no domain claimed the Growth Hub's two associations, and the imaging pass dropped t...

Kamo·5d ago
ChoreBillingService

Scrub copies of live credentials from config and dumps

A sweep of every repo for the values of the cluster's live Secrets (2026-09-23) found copies here: the JWT signing secret as a `${JWT_SECRET:<literal>}` default...

Kamo·5d ago
September 18, 2026
FeatureBillingService

A group seat's coverage carries its manager's member id

GET /api/billing/self/coverage named the billing group's manager (managerName) but not who they are, so the member's plan page could not open the manager's memb...

Kamo·1w ago
September 16, 2026
OtherBillingService

Liveness probe on /actuator/health/liveness, not the DB-aware aggregate

The aggregate /actuator/health includes the DataSource indicator, so restarting the database failed liveness on every pod at once and restarted the whole platfo...

Kamo·1w ago
OtherBillingService

Release idle Hikari connections now that YSQL pooling is shared

The connection manager no longer pins sessions **************** so idle app connections no longer each hold a database backend. Keep the pool maximum, but stop ...

Kamo·1w ago
September 11, 2026
FeatureBillingService

Active and Void tabs in the platform org directory

The console's Organizations tab now splits into Active and Void sub-tabs. A voided organization is orgs.is_active = FALSE (set by SecurityService's void endpoin...

Kamo·2w ago
September 10, 2026
FixBillingService

Rerun a webhook event whose first attempt died, and refuse one the SDK cannot read

A losing claim on an unprocessed row always answered 500, so an event whose first attempt failed (a unique-constraint race inside the invoice.created/finalized/...

Kamo·2w ago
FixBillingService

Only a failed charge starts dunning, and Stripe must agree before dunning acts

invoice.finalized carries status=open with an amount due for every auto-charged invoice before the charge is attempted, and the invoice handler started the deli...

Kamo·2w ago
September 9, 2026
FixBillingService

The same-commit-rebuild guard could never fire, and the digest check failed open

Both protections against a deploy that deploys nothing were inert, so the pipeline reported two green jobs while the pods stayed on the previous digest. That is...

Kamo·2w ago
FixBillingService

A catalog row naming an app this build cannot resolve is not for sale

ServiceTypeConverter stopped throwing on an unknown app id and started resolving it to null, which is what a service must do — the enum ships inside each jar wh...

Kamo·2w ago
September 7, 2026
FixBillingService

A price Stripe has never heard of is a fault, not a silence

The reconciler compared mapped prices against the catalogue and returned early whenever nothing was mapped at all. So a term the catalogue had gained since the ...

Kamo·3w ago
September 6, 2026
FixBillingService

Charge what the screen says, and refuse rather than pretend

An audit of the Plans & Billing console against live Stripe keys found the seam between the screen and Stripe broken in every direction at once, and silent in a...

Kamo·3w ago
FeatureBillingService

A plan's startup fee, and the live offer, on the wire

PlanDto carried only the recurring rate, so every surface quoting a plan quoted a price the customer would not be charged: KamoCRM's startup fee is $99 a seat, ...

Kamo·3w ago
FeatureBillingService

One endpoint behind the customer's own plan page

GET /api/billing/self/plan answers everything /myplan renders: the plan, what the organization can actually use, the catalogue to compare against, seats and the...

Kamo·3w ago
September 5, 2026
FixBillingService

Prove the deploy by digest, not by tag

The preceding commit stops `set image` being a silent no-op. This asserts the outcome: after the rollout, the tag is resolved to a digest at the registry and th...

Kamo·3w ago
FixBillingService

A rebuild of the same commit deployed nothing and reported success

The image is tagged with the commit SHA, so rebuilding the same commit produces an identical image reference. `kubectl set image` then changes nothing, the Depl...

Kamo·3w ago
FeatureBillingService

Bill the startup fee on both routes to a plan, and record negotiated terms

Two routes reach the same plan and only one of them was going to charge the new per-seat startup fee. A sales-written order bills through SubscriptionService, w...

Kamo·3w ago
September 4, 2026
FeatureBillingService

Lock every money-moving sweep, and run two pods

BillingService ran one pod and its seven scheduled sweeps were correct only because of it. There is no ShedLock anywhere on this platform, so a second replica w...

Kamo·3w 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·3w ago
August 31, 2026
FixBillingService

Stop offering the internal platform-owner plan for sale

listPlansForMarket filtered on isActive alone, and active is not the same as on the menu. OWNER_UNLIMITED ("Platform Owner — Internal") is active, carries no pr...

Kamo·4w ago
FeatureBillingService

Serve the running offer, and say whether a seat is actually PAID for

Adds GET /markets/{id}/promotion. There was no way for an in-app buying surface to know an offer was running at all — the marketing site read promotions through...

Kamo·4w ago
FeatureBillingService

Bill the three-year term, and quote its rate to the console

BillingCycles gains TRIENNIAL, expressed to Stripe as three YEARs rather than thirty-six MONTHs so the renewal tracks the signup anniversary — the same reason A...

Kamo·4w ago
August 27, 2026
FeatureBillingService

Per-server lines on the extensions summary

The phone server's extensions tab showed the organization-wide figure and nothing else, so an empty KamoPBX server displayed "21 billable extensions — $63.00 / ...

Kamo·4w ago
FixBillingService

The platform org is not gated by its own catalog

The platform org was told "Requires the KamoPBX Hosting add-on" on its own phone-server screen, for an add-on it publishes. It owns the plan catalog, the add-o...

Kamo·4w ago
FeatureBillingService

Refuse a self-serve Enterprise subscription

Enterprise is negotiated. Hiding the price is presentation; this is the boundary. A request naming the Enterprise plan is refused unless the caller holds ******...

Kamo·4w ago
FeatureBillingService

Bill phone service by the extension

PricingModel.PER_EXTENSION, its own reserved quantity key, an allocator, a nightly reconciler, a removal gate and the summary API - the phone twin of the per-ma...

Kamo·4w ago
August 26, 2026
FixBillingService

Scan the shared-lib email.billing repository package

@EnableJpaRepositories lists packages explicitly, so MailboxBillingDayRepository was invisible and the service refused to start outright — caught by booting it,...

Kamo·4w ago
ChoreBillingService

Rebuild against current kamo-shared-library

CI clones shared-lib at image build time. This service was last built before shared-lib gained GMAIL_PERSONAL and OUTLOOK_PERSONAL, so its deployed enum cannot ...

Kamo·4w ago
FeatureBillingService

Expose mailbox counts, entitlement and cost mode

Kamo·4w ago
FeatureBillingService

Bill e-mail per mailbox, reconciled nightly

Quantity is server-computed under a reserved key a request body cannot reach, and pushed through the existing amend path — so Stripe's CREATE_PRORATIONS charges...

Kamo·4w ago
FixBillingService

Close the webhook idempotency gap BL0's final review found

Finding 1 (Critical): a losing claim on a redelivered Stripe event only proved a row existed, not that the prior attempt finished. A claimed row left behind by ...

Kamo·4w ago
FixBillingService

Do not key ephemeral per-attempt Stripe creates

Round 2 review (Ruling 17) found "is this a create?" is necessary but not sufficient. The question that matters: can this subject legitimately be created more t...

Kamo·4w ago
FixBillingService

Keys belong on Stripe creates only, not on mutations

Round 1 review (Ruling 15) found the Critical: a stable idempotency key on an update/cancel/attach/detach is not a safeguard, it is a bug. Those calls already s...

Kamo·4w ago
FixBillingService

Make every Stripe write idempotent, and fail the build on a new one without a key

A socket timeout on a Stripe write that actually succeeded is indistinguishable, from our side, from one that did not; without an idempotency key the retry crea...

Kamo·4w ago
FixBillingService

Commit the processed flag with the money write, not ahead of it

markProcessed was REQUIRES_NEW, so it committed processed=true while the handler's money writes were still uncommitted in the suspended outer transaction. JpaTr...

Kamo·4w ago
TestBillingService

Prove library HQL parses on the Hibernate this service actually runs

kamo-shared-library builds on Boot 3.3.4 / Hibernate 6.5; BillingService runs Boot 3.1.5 / Hibernate 6.2.13. The library's own HQL tests therefore pass vacuousl...

Kamo·4w ago
August 25, 2026
FeatureBillingService

Make a replayed Stripe event a no-op

Adds BillingWebhookEventClaimService on its own bean, with REQUIRES_NEW on every method, and wires it into processEvent ahead of the dispatch switch. A losing c...

Kamo·4w ago
ChoreBillingService

Pin kamo-shared-library 1.6.0

The library moved to 1.6.0 while every consumer stayed on 1.5.0. Consumer CI builds the library from a fresh clone into a cold ~/.m2 and ci-settings.xml mirrors...

Kamo·4w ago
August 23, 2026
FixBillingService

Stop selling add-ons the chosen plan already includes

The catalog has always recorded which add-ons a plan bundles, in **************** — Business and Enterprise carry video conferencing, the AI assistant, the HR s...

Kamo·1mo ago
August 20, 2026
FeatureBillingService

Publish the paid conversion for tracked organizations

Both paths that stamp BillingSourceType.PAID now publish marketing.visitor.paid, because hooking only one silently misses half the traffic — AccountSubscription...

Kamo·1mo ago
August 16, 2026
FixBillingService

Size the pod above its own JVM heap ceiling [skip ci]

The image starts the JVM with -XX:MaxRAMPercentage=70 -XX:+AlwaysPreTouch, so the heap alone may take 70% of the container limit and pre-touch keeps every commi...

Kamo·1mo ago
August 15, 2026
FeatureBillingService

Decide platform access with the shared resolver

@PlatformAdminOnly now names the platform right it requires (defaulting to MANAGE_ORGANIZATIONS, which is what this service's platform surface is about) and the...

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