KamoCRM

Live Change Log

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

17,374
Total Changes
5,891
Features
5,258
Fixes
30
Projects
Filter by project
All Projects17,374AIService242APIService174BillingService157ConversionService110DaemonService137DocsService223ESigService91EmailService568InitializerService329KBService151KlusterServices738MCPGatewayService235MediaService592RAGService79SecurityService1,822TranslateService62VOIPService248VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,321kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,631kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,252Feature5,891Fix5,258Other993Performance165Refactor278Revert23Style42Test159Upgrade1
September 28, 2026
FixSecurityService

Two more root-domain picks follow OrgDomains.primaryDomain

BranchTypeController's parentRootDomain (the create-branch wizard's web-alias zone) and PortalAccountController's api.<root> (borrower-portal sign-in) each took...

Kamo·3w ago
September 27, 2026
FixSecurityService

Watch and Take over open their connection in the gateway's client

Guacamole 1.5.5's client reads the #/client/<id> fragment with atob (one character per byte) and btoa's every connection name it lists, so a name outside Latin-...

Kamo·3w ago
September 25, 2026
FixSecurityService

A loan Kamo creates now links, and a refused one says why on the lead

Ian's Create Loan reached Arive, was refused inside the Zap, and Kamo never knew: Zapier had already answered 200, and Arive fires no new_loan for a loan made t...

Kamo·4w ago
FixSecurityService

A hire-step owner answering 401 has not shipped yet, so the step waits

VOIPService and ComputeService answer any path they do not serve from their session layer with 401, so Ava's EXTENSION and WORKSTATION steps went FAILED before ...

Kamo·4w ago
FixSecurityService

An AI member never founds an organization

The second door to IMPORTANT-1 of the SP02 final review. POST /api/security/organizations needs no right for a standalone organization: any signed-in user may c...

Kamo·4w ago
FixSecurityService

Security-model writes require CONFIGURE_SYSTEM

Closes the SP02 final review's IMPORTANT-2. POST /api/security/models, PUT and DELETE /api/security/models/{id} and PUT /api/security/master-model only resolved...

Kamo·4w ago
FixSecurityService

An AI member is never an owner or a platform operator

Closes the door around the AI never-grantable floor that the SP02 final review found (IMPORTANT-1). Platform rights and the owner flag are not RoleRightTypes, s...

Kamo·4w ago
FixSecurityService

A verification resend that names its account goes to the account's own org

An organization with no domain has no register host of its own, so its members land on register.<platform apex>, whose host names the platform. The resend endpo...

Kamo·4w ago
FixSecurityService

A hot reassign's first note creates the lead's stream linked to the lead

The stream is created for the lead, as the lead view's feed creates it, so its MEDIA_SESSION_POST row carries LEAD_ID and POST_CREATED goes to media.feed.lead.<...

Kamo·4w ago
September 24, 2026
FixSecurityService

Point loan officers at the card they will actually find — Lender credentials

Both the MeridianLink and the Arive 'officer not linked' refusals named cards that no longer exist under those titles.

Kamo·4w ago
September 23, 2026
FixSecurityService

The forgot-password hint is the account's address, whatever it is

d7ff5ed called the address on the user account "personal" everywhere: in the 409's message, the response field and the class. It is not always personal. An admi...

Kamo·4w ago
FixSecurityService

Gift cards take the Discounts tab's pricing rights

Listing gift cards, issuing one and editing one (including its balance, which the shared library sets again as of the companion kamo-shared-library commit) chec...

Kamo·4w ago
FixSecurityService

A member's official title and status need member security too, on their own record

Department and job title already needed MANAGE_MEMBER_SECURITY (or an open god window) on /member-security, your own record included. The rest of the Position c...

Kamo·4w ago
FixSecurityService

CommerceMarketController's retail sub-resources are org-scoped

CommerceMarketController's get-one/update/delete handlers under /retail/... called RetailService methods that took no orgId (bare findById/deleteById) - a same-...

Kamo·4w ago
FixSecurityService

Drop 4 newly-guarded handlers from the unguarded-endpoints ratchet

**************** caught the previous commit: **************** and **************** now resolve a session (getCachedOrganizationId, in each handler's own body), ...

Kamo·4w ago
FixSecurityService

Scope roles, member access and profile writes to the caller's org

Five gaps let a signed-in member reach outside their own organization, or reach a colleague's account, with no right check: - **************** resolved no sess...

Kamo·4w ago
FixSecurityService

Forward the actor when relaying a commission line

addLine/updateLine relayed memberId (normalized to Long in 789c544) but never who was making the call — unlike openDraft, send, voidLine and every Stripe-config...

Kamo·4w ago
FixSecurityService

Forward subjectMemberId and role so TimecardService can verify punch ownership

**************** resolved the caller's role against a CLIENT-SUPPLIED subjectMemberId (resolveRole -> EMPLOYEE whenever actor==subject) but never forwarded that...

Kamo·4w ago
FixSecurityService

Adding people and member security need their rights

POST /members/create, /create-team-member and /bulk-create, and GET /members/lookup-user, now require MANAGE_MEMBERS or an open god window. They checked only fo...

Kamo·4w ago
FixSecurityService

Gate the API on the app, not only the screen

The settings page and the nav option both check organization.isHostedComputers, and until now that was the whole gate. AppAvailabilityInterceptor never mapped /...

Kamo·4w ago
FixSecurityService

Intake endpoints show exact received/imported counts from the intake ledger

The Lead Intake settings list showed total_received / total_processed / last_received_at straight off the endpoint row, where they were bumped once per payload ...

Kamo·4w ago
September 19, 2026
FixSecurityService

Normalize memberId when relaying line add/update requests

The browser keeps member ids as strings to avoid IEEE-754 rounding on CockroachDB unique_rowids. Normalize to Long before relaying so the credit lands on the in...

Kamo·4w ago
September 18, 2026
FixSecurityService

The account view names its primary member

GET /customers/{uid} sent the primary member only as primaryMemberId, while the account view reads a primaryMember object — so its Primary member row read "---"...

Kamo·1mo ago
FixSecurityService

An account note names the member who wrote it, not "System"

GET /customers/{uid}/notes sent each note's authorMemberId but no authorName, and the account view shows a note with no name as written by the system — so every...

Kamo·1mo ago
September 17, 2026
FixSecurityService

Short one-time codes can no longer be guessed without limit

Every short code the platform mails or texts was checked with no count: - POST /api/recover/email/verify-code took the 8-hex-character reset code ALONE and mat...

Kamo·1mo ago
FixSecurityService

Securityservice never stores a password as typed

Two writers put plaintext into USERS.PASSWORD. Both called User.encodePassword(), which needs a static encoder that only initializerservice ever sets **********...

Kamo·1mo ago
FixSecurityService

Retail store connections are reachable only by their own org's commerce settings managers

The retail provider-config handlers on CommerceMarketController resolved the session's org and then used whatever market and config uid the path named. Update, ...

Kamo·1mo ago
FixSecurityService

The System User acts only inside the organization it was entered into

There is one System User for the whole platform. Platform operators, and support staff holding a grant scoped to a single ticket's organization, enter a tenant ...

Kamo·1mo ago
FixSecurityService

Only an org's owner, its CONFIGURE_SYSTEM members or active god mode can change its settings

PUT /api/security/org/{id} took no request at all. ResourceServerConfig permits every request and APIService relays /api/security/**, so one anonymous request c...

Kamo·1mo ago
FixSecurityService

An OAuth app save keeps its client secret unless a new one is typed; owners' credentials stay out of org JSON

PUT /api/oauth-config/{id} stored whatever arrived under clientSecret. Responses mask the secret, and the edit form sends a blank back while promising "Leave bl...

Kamo·1mo ago
FixSecurityService

Stop GET /org/{id} shipping the GoDaddy credentials, and lock it to this service's mapper

The fix is in kamo-shared-library 096feaa1: Organization.godaddyApiKey and godaddyApiSecret are now @JsonIgnore. That change reaches production only when a serv...

Kamo·1mo ago
September 16, 2026
FixSecurityService

Retry public reads the database aborted with 40001

Every DDL bumps the YSQL catalog version, and a transaction that began on the old one fails with "catalog snapshot ... invalidated: MISMATCHED_SCHEMA" (SQLSTATE...

Kamo·1mo ago
FixSecurityService

Take kamo-meet and kamo-analytics off the public changelog

Both names leave changelog.public-projects. Every public read goes through that one list, so the marketing site's /changelog stops showing them everywhere at on...

Kamo·1mo ago
September 12, 2026
FixSecurityService

The id resolver never hands a campaign an address the member can't read

Resolving lead ids read each address through the lead masking DTO and skipped only blank ones. Masking now obfuscates instead of blanking ("s*****@gmail.com"), ...

Kamo·1mo ago
FixSecurityService

A new organization's folder holds none of the platform's backgrounds, stylesheet or config

Provisioning copied the whole base theme into every new organization's folder, KamoCRM's three sign-in photographs included. They sat at img/bg/1-3.webp under t...

Kamo·1mo ago
FixSecurityService

A god account is shown every organization, wherever it is signed in

GET /org/all-networks - the list behind /network - was gated on the SYSTEM_USER platform right alone, and platform rights resolve only in a top-level-organizati...

Kamo·1mo ago
September 11, 2026
FixSecurityService

An echo of the censored English is not a translation

translatedLocales compared each translation with the English title as stored. The translator is given the censored title (ChangelogSanitizationService masks sec...

Kamo·1mo ago
FixSecurityService

The General tab counts what the Organizations tab calls Active

6c8d789 moved the platform overview's organization count onto findAllLive(), which also drops orgs created by synthetic (is_fake) accounts — so the General tab ...

Kamo·1mo ago
September 10, 2026
FixSecurityService

Quote and borrower-portal links only name a live domain

QuoteEmailClient settled for any active domain, verified or not, so an org still setting up its white-label domain had quote links mailed to sign.<that domain>....

Kamo·1mo ago
FixSecurityService

An organization's .svg names show its own art, not the platform's

A new organization's folder is seeded from the base theme, so it starts out with KamoCRM's art under img/logo-full.svg and favicon/favicon.svg. An organization ...

Kamo·1mo ago
September 9, 2026
FixSecurityService

An org without the app must not accrue achievements either

The award gate asked for VIEW_ACHIEVEMENTS and stopped there. Rights are not entitlement-filtered, so that right stays granted — and keeps answering true — in a...

Kamo·1mo ago
FixSecurityService

Refuse to award a member whose security type excludes it

AchievementController checks VIEW_ACHIEVEMENTS on all four of its endpoints, and that read like the rule being enforced. It was not: it is the rule enforced on ...

Kamo·1mo ago
September 8, 2026
FixSecurityService

The same-commit-rebuild guard could never fire, so every dispatch failed

Rebuilding this service without a commit of its own — a workflow_dispatch, a re-run, or a kamo-shared-library change it must pick up — has been failing at deplo...

Kamo·1mo ago
September 7, 2026
FixSecurityService

A pane lock survives the editor alt-tabbing away

The client heartbeats its pane lock every 15s and the sweeper released any lock unheard from for 45s — three missed beats, which reads like a generous margin an...

Kamo·1mo ago
FixSecurityService

The baseline award was two transactions, not one

`ensureBaselineFor` calls `ensureBaseline` on `this`, and Spring's transaction advice is a PROXY — a self-invocation does not pass through it, so the inner REQU...

Kamo·1mo ago
FixSecurityService

A callback can carry the link to the call

The lead page composes a callback in the calendar's own dialog, and every field that dialog collects is meant to survive the trip through here. meetingUrl did n...

Kamo·1mo ago
September 6, 2026
FixSecurityService

Wire the god guard into the identity-rights test's policy

UserAccountEditPolicy took a third constructor argument and this test still built it with two, so test-compile failed — and CI runs `mvn package -DskipTests`, w...

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