KamoCRM

Live Change Log

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

18,398
Total Changes
6,533
Features
5,537
Fixes
30
Projects
Filter by project
All Projects18,398AIService276APIService177BillingService161ConversionService117DaemonService146DocsService240ESigService93EmailService621InitializerService344KBService162KlusterServices769MCPGatewayService277MediaService620RAGService79SecurityService1,996TranslateService62VOIPService265VectorService11kamo-apps26kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,693kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,826kamo-signer-monorepo57kamolos114
Filter by type
All TypesBuild23CI525Chore794Docs3,286Feature6,533Fix5,537Other1,001Performance174Refactor281Revert23Style45Test175Upgrade1
August 25, 2026
FeatureSecurityService

Start the 3-day trial on first entry into the org, not at creation

Creating an org and opening it are different events. An org can be created and left sitting, and one nobody has walked into must not have spent its evaluation —...

Kamo·2mo ago
FeatureSecurityService

Rank colours perceptually rather than by RGB frequency

Counting RGB values across a stylesheet elects the site's off-white page background every time -- it is the most-used colour on almost every site ever built. Wh...

Kamo·2mo ago
FeatureSecurityService

Read real image dimensions from the bytes

Nothing here trusts the page. An HTML width attribute is a layout instruction, not a fact about the file -- a 2400px logo is routinely declared width="180" and ...

Kamo·2mo ago
FeatureSecurityService

Ask for different work for a bug and an enhancement

A bug says 'find out why and fix it' and points at the logs; an enhancement says 'this already works, build the better version' and points at the current behavi...

Kamo·2mo ago
FeatureSecurityService

Guarded outbound fetching for the website brand scan

The member types the URL, so every request this issues is an SSRF primitive, and there is no egress NetworkPolicy and no forward proxy in this cluster -- Redis ...

Kamo·2mo ago
FeatureSecurityService

Remind the dispatched session to push its work

A session that fixes a bug and leaves the change sitting on the dev machine has not fixed anything anybody else can see. The sentence is split out of the entit...

Kamo·2mo ago
FeatureSecurityService

Start the 3-day trial when the org is created

The trial was seeded pending and started on the owner's first sign-in, because an org was unreachable until its DNS verified — starting the clock at creation wo...

Kamo·2mo ago
FeatureSecurityService

Internal probe endpoint so the access canary tests the real path

The KamoDesktop canary needs a link minted the way the icon mints one. It holds the same signing key, so it could build its own — and would then be testing itse...

Kamo·2mo ago
ChoreSecurityService

Rebuild now the shared library has AiDispatchRequest

The previous build failed on a class that had not been pushed to kamo-shared-library (fa243ae). Nothing to change here; this just re-runs the build against a li...

Kamo·2mo ago
FeatureSecurityService

Answer whether a web alias is still free

The org-creation wizard is eleven steps long and the alias was only checked when the form was submitted, so someone who picked a name another organization alrea...

Kamo·2mo ago
FixSecurityService

Stop the SSO token expiry from emptying a live desktop session

"The requested connection does not exist. Please check the connection name and try again." on a KamoDesktop reconnect was not a missing connection. It was the S...

Kamo·2mo ago
FeatureSecurityService

Send To AI, gated on MANAGE_SYSTEM_BUGS

The class carries @RequirePlatformRight, so the interceptor resolves the caller and refuses before any handler runs — a per-method check would have been one for...

Kamo·2mo ago
FeatureSecurityService

Turn the workspace picker on

A member of several organizations now chooses which one to open after their password, instead of it being chosen for them by the hostname. This is the switch th...

Kamo·2mo ago
FixSecurityService

Send the member to the workspace host, not a relative path

SignInCompletionService returned a relative /validate?otk=. That resolves against the host that served the SIGN-IN — login.<apex> — and kamo-login has a /valida...

Kamo·2mo ago
RevertSecurityService

Turn the workspace picker back off

The redirect is wrong. SignInCompletionService returns a relative /validate?otk=, which resolves against the host that served the sign-in -- login.<apex> -- and...

Kamo·2mo ago
FeatureSecurityService

Turn the workspace picker on

A member of several organizations now chooses which one to open after their password, instead of having it chosen for them by the hostname. This is the switch t...

Kamo·2mo ago
FeatureSecurityService

Accept an explicit org, not only the host

Registration bound the account to whatever organization the host resolved to. On register.kamocrm.com — the signup page for every organization with no register ...

Kamo·2mo ago
FixSecurityService

Delete the "first organization in the database" fallbacks

Seven blocks across five controllers ended their org-resolution with, in effect: if the server name is localhost or a bare IP, return whichever organization the...

Kamo·2mo ago
FixSecurityService

Keep an alias unique platform-wide, on both write paths

Creation checked the alias only within one security provider, and PUT /org/{id} checked nothing at all — it applied whatever it was given. Both were reasonable ...

Kamo·2mo ago
FeatureSecurityService

Refuse the AI training corpus exports for PHI tenants

ANALYTICS_EXPORT is blocked because exports leave the boundary with no de-identification. Both training exports already had a fail-closed audit — there IS a rec...

Kamo·2mo ago
FeatureSecurityService

Send the tree on the app-catalog endpoint too

Branch Types → Allowed Apps builds its editor from /features/app-catalog, not from the tenant features listing, so it was the one surface that could not see whi...

Kamo·2mo ago
August 24, 2026
ChoreSecurityService

Rebuild against the Affiliate Sales Scoreboard rights

No source change here. SecurityService is what enumerates RoleRightType.values() to serve the rights editor (SecurityRoleController) and to populate a grant-all...

Kamo·2mo ago
FeatureSecurityService

Serve an org's branding to a screen with no session

Login, registration and the meeting lobby paint an organization's colours before any session exists. They knew which one from the hostname, which is exactly wha...

Kamo·2mo ago
FixSecurityService

Refuse an alias that names more than one organization

byAlias took LIMIT 1 over orgs.alias, which has no uniqueness constraint: the create path checks it per security provider and PUT /org/{id} does not check it at...

Kamo·2mo ago
FeatureSecurityService

Serve the app tree, and fix the unguarded auto-enable

FeatureController now sends parent/children/isParent on every serialized app so the client can render children nested under their parent. Served rather than mir...

Kamo·2mo ago
FixSecurityService

Resolve the domain on /org/current server-side

internal.kamocrm.com failed to render with "Invalid organization data: missing 'id' or 'domain'". Organization has no `domain` field -- it has a `domains` colle...

Kamo·2mo ago
FeatureSecurityService

Entitlement-check every vertical, not just the gated two

Every CommerceType now names its own child app under POS, so the isGated() short-circuit that waved retail, rentals, service, subscriptions and procurement stra...

Kamo·2mo ago
FixSecurityService

Give the workspace path the same post-login work as the host path

Two gaps found by re-reading the original login tail against the new one, before enabling the picker. The form-encoded /login endpoint built its LoginRequest w...

Kamo·2mo ago
FeatureSecurityService

Let the shell fetch its org from the session, not the host

kamo-internal's root layout reads the Host header, strips "internal." and fetches /org/domain/<that>. On a host serving one tenant that is the same question as ...

Kamo·2mo ago
FeatureSecurityService

Let a member sign in without a host naming their org

Adds the second half of the split: a sign-in that names no organization authenticates the user, then asks which workspace. POST /api/security/session/select tur...

Kamo·2mo ago
RefactorSecurityService

Separate the credential check from org authorization

Signing in was two questions fused into one query. "Are these credentials good" is answered by the users row -- the password lives there, so it was never org-sc...

Kamo·2mo ago
FixSecurityService

Stop requiring DNS verification to sign in

OrgHostResolver.resolveByDomain filtered on od.is_dns_verified = TRUE, so a domain row that existed but had not finished verifying resolved to nothing and login...

Kamo·2mo ago
August 23, 2026
ChoreSecurityService

Attach stack traces to their log line, and fix levels I got wrong

printStackTrace() writes to stderr directly, so 186 of them survived the println sweep untouched — still unconditional, still unattributed, and now detached fro...

Kamo·2mo ago
ChoreSecurityService

Finish taking SecurityService off System.out/err

The remaining 853 println calls across 43 files, none of which could be turned off: println has no level, so every one of them printed on every code path that r...

Kamo·2mo ago
ChoreSecurityService

Take CNAME verification off System.out

With the session and Hibernate noise gone this was the largest recurring source left in the pod log: every CNAME lookup drew a seven-line box on stdout. That wa...

Kamo·2mo ago
ChoreSecurityService

Take session lookup off System.out, and its *** id with it

After the previous commit removed the Hibernate session-metrics blocks and MemberController's per-request tracing, this was 88% of what remained: every session ...

Kamo·2mo ago
ChoreSecurityService

Stop the pod log rotating faster than it can be read

Roughly 4,600 lines in four minutes, so the retention window was a couple of minutes: chasing a certificate problem on 2026-08-22 the probe output had already r...

Kamo·2mo ago
FixSecurityService

Verify-dns answers for the present, not for a stored flag

The endpoint skipped probing entirely when ssl_confirmed was already true, on the reasoning that under the all-hosts rule it could only have been set when every...

Kamo·2mo ago
FixSecurityService

Re-verify domains already marked SSL-confirmed, and heal them

findAwaitingVerification filters confirmed domains out by design, so once ssl_confirmed was set nothing ever looked at that domain again. That was fine while th...

Kamo·2mo ago
FixSecurityService

Make post-commit org setup actually write, and heal the orgs it missed

A @Transactional method called from **************** does not open a transaction of its own. Spring fires those callbacks from processCommit BEFORE cleanupAfter...

Kamo·2mo ago
FixSecurityService

Confirm SSL only when every org host has its own certificate

Certificates are minted one per FQDN -- a single dnsName each, so the leaf CN matches the hostname the browser connected to -- and auto-cert works through an or...

Kamo·2mo ago
FixSecurityService

Serve frame media ourselves, with Range

Every photo rendered as a broken image. The URL pointed at MediaService's **************** which I took for a general imaging proxy because it spoke HTTP Range....

Kamo·2mo ago
August 22, 2026
FeatureSecurityService

Frame and media endpoints, and seed the new rights

Self only, and enforced in the QUERY. Every read and write resolves the member from the session and every repository call takes that id, including the single-fr...

Kamo·2mo ago
FixSecurityService

Stamp last_login so "Last Login" stops reading Never

Nothing in SecurityService has ever written users.last_login. The write lived in the retired AuthenticationService and was not carried over when authentication ...

Kamo·2mo ago
FixSecurityService

Restore the status endpoint the frontend has been polling

kamo-internal polls GET /api/security/session/god-mode once on mount and every 60s thereafter. That endpoint was removed in 9c70cb7 along with the rest of the t...

Kamo·2mo ago
ChoreSecurityService

Rebuild against kamo-shared-library 48cde37

Picks up MANAGE_ORG_MASTER_NOTE, the right that guards "Our Master Note". SecurityService is what enumerates RoleRightType for the role, job-title and departme...

Kamo·2mo ago
FixSecurityService

Drop the universal seed; the timecard widget follows MANAGE_TIMECARDS

UNIVERSALLY_SEEDED_RIGHTS is removed entirely. It existed only because the timecard widget had no parent right to inherit from, and now it has one — so the widg...

Kamo·2mo ago
FeatureSecurityService

Seed the mail and lead widgets, and add a universal seed for the timecard one

The mail and lead widgets follow their data rights exactly as the calendar ones do — ACCESS_MAIL and VIEW_LEADS — so a holder gains no data they could not alrea...

Kamo·2mo ago
FeatureSecurityService

Seed the calendar widgets to everyone who can already read the calendar

Both widgets show a member exactly what /calendar already shows them, so a calendar reader gains no data they could not reach — which is what makes this a safe ...

Kamo·2mo ago
August 21, 2026
FeatureSecurityService

Annotate the member roster with its chat policy verdict

SecurityService serves the roster the chat UI is built from, so it has to answer with the same verdicts MediaService enforces with -- one shared evaluator, or t...

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