KamoCRM

Live Change Log

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

17,488
Total Changes
5,978
Features
5,281
Fixes
30
Projects
Filter by project
All Projects17,488AIService251APIService174BillingService157ConversionService110DaemonService138DocsService223ESigService91EmailService574InitializerService329KBService151KlusterServices738MCPGatewayService246MediaService602RAGService79SecurityService1,846TranslateService62VOIPService249VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,347kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,657kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,254Feature5,978Fix5,281Other994Performance165Refactor278Revert23Style42Test160Upgrade1
August 25, 2026
Featurekamo-shared-library

FHIR resource versioning and the reference-link backbone (SP3)

Three tables that between them make read, vread, _history, ETag and every form of _include work. fhir_resource_current is a pointer, one row per resource forev...

Kamo·2mo ago
Featurekamo-internal

Show a member's photo on the scoreboard, not their initials

The face now comes from the same directory index every other member list on the platform reads (useMemberProfiles), so a person's picture on the scoreboard is i...

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
FixKlusterServices

Submit the bug report without simulating a keystroke

vscode:// URI handler and sent a synthetic Return. Measured on desktop-1, that cannot work: KDE's screen locker holds an exclusive X input grab whenever the scr...

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
Docskamo-login

Close out the tenancy plan

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
Featurekamo-internal

Show Google's OAuth callback URL on its registration card

An operator filling in the Google Workspace registration had nothing telling them what to put in the Google Cloud console's Authorized redirect URIs, and the Re...

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
FeatureAPIService

Forward /api/email/oauth/callback to EmailService

Google's OAuth redirect target. Same shape as the email and meet provider callbacks beside it: public and sessionless, because the popup lands on this gateway o...

Kamo·2mo ago
FeatureEmailService

Serve Google's OAuth callback on /api/email/oauth/callback

The platform console needs an address to show an operator setting up the Google Workspace registration, the way VOIP has /api/voip/oauth/callback. The only emai...

Kamo·2mo ago
Featurekamo-register

Brand and scope signup with ?org=

register.kamocrm.com is the signup page for every organization that has no register host of its own, so the hostname cannot say which one a visitor is signing u...

Kamo·2mo ago
Featurekamo-shared-library

The FHIR datatype layer and its discipline harness (SP3)

The foundation every clinical entity reuses, and the build gate that stops it drifting. Both land together on purpose: a harness written before there is anythin...

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
FeatureMCPGatewayService

Refuse MCP tool execution for a tenant that handles PHI

executeTool forwards operator-supplied arguments to an operator-typed URL and can spawn a stdio process, with no allowlist, no SSRF guard and no destination aud...

Kamo·2mo ago
FeatureMediaService

Guard social messaging and Canva at their credential chokepoints

SOCIAL_MESSAGING is enforced in SocialCredsResolver.resolve — the narrowest point covering every adapter and both directions. No credentials means no Telegram, ...

Kamo·2mo ago
Featurekamo-shared-library

Guard the last four unenforced capabilities; the baseline is now empty

SOCIAL_MESSAGING, CANVA, MCP_GATEWAY and ANALYTICS_EXPORT were each declared outside the compliance boundary, bound to no ServiceType, and checked by nothing — ...

Kamo·2mo ago
Featurekamo-shared-library

Rights, entities, repositories and DTOs

MANAGE_SYSTEM_BUGS is a PlatformRightType and must stay one: the dispatch it a tenant administrator can edit their own organization's security models. Screensh...

Kamo·2mo ago
Featurekamo-shared-library

Add a global alias-uniqueness check

**************** scopes by provider, and that was right while an alias was only ever resolved as (security_provider_id, alias) — the pair behind a <alias>.<pare...

Kamo·2mo ago
FeatureKlusterServices

Dispatch a bug report into sage's open VS Code

URI handler that creates a conversation in a RUNNING window and pre-fills the input, which is the only way to reach the editor sage already has open instead of ...

Kamo·2mo ago
FeatureInitializerService

Create the System Bugs tables

No CHECK constraint on the ordinal columns: support_ticket_status_check is what happens when Hibernate freezes one at an enum's size and the enum then grows, an...

Kamo·2mo ago
Docskamo-internal

Plan the System Bugs build across six repos

Screenshots turn out to need no table: an Img row already carries an assoc type plus an assoc object id, and imgs has no CHECK constraint on assoc_id, so append...

kamo·2mo ago
Featurekamo-internal

Manage a custom domain from Company settings

A domain used to be the doorway into an organization: DNS had to be configured before anyone could sign in at all, which is why /setup/dns was reached from the ...

kamo·2mo ago
Docskamo-internal

Design the System Bugs tab and its AI dispatch path

vscode:// URI handler opens a conversation in the window sage already has open, and coderProcessWrapper carries model and effort, which the URI cannot. Also rec...

kamo·2mo ago
Docskamo-internal

Record SP1 as complete, and the six things the plan got wrong

Keeps the reasoning rather than just ticking boxes — the top-level-org skip and the PLANNING-stage regression are both the kind of mistake that would be made ag...

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
Featurekamo-internal

Render the app tree, and confirm what a parent switch-off takes

Children now sit under their parent in the Apps & Features list, each with its own switch. Nesting is expressed by ORDER plus an indent rather than a nested con...

kamo·2mo ago
August 24, 2026
FeatureInitializerService

Price the commerce children and the EHR, with a totality guard

Neither pricing map had a totality check, and the two failure modes are different and both silent. Missing from CATALOG, an app lands nowhere on the pricing mat...

Kamo·2mo ago
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
Featurekamo-marketing

Stop counting a member's visits to their own link

A member checking that their own tracking link works is the most common first visit any code ever gets, and it is worse than useless: it inflates the number the...

Kamo·2mo ago
Featurekamo-internal

The Affiliate Sales Scoreboard widget

One grid column wide and two rows tall: the ten people in the organisation bringing in the most through their tracking links, over today, this month, this year ...

kamo·2mo ago
FeatureMediaService

The Affiliate Sales Scoreboard endpoint

GET **************** answers this organisation's top ten for one metric over one window, plus the caller's own standing when they are not on it. The counters o...

Kamo·2mo ago
Featurekamo-shared-library

Add the Affiliate Sales Scoreboard widget rights

Five rights, 234-238, in the MARKETING group and hung off VIEW_REFERRAL_CODES: a leaderboard of referral numbers is tracking-code data, and a member who may not...

Kamo·2mo ago
Featurekamo-login

Brand and scope the sign-in screen with ?org=

login.kamocrm.com is the sign-in screen for every organization that has no host of its own, so the hostname cannot say which one is signing in. ?org= does: it n...

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
Stylekamo-internal

Restore CRLF on the two theme files

Both files are uniformly CRLF and my previous commit rewrote them through Python in text mode, which reflowed every line: Theme.tsx showed 237 changed lines and...

kamo·2mo ago
Fixkamo-internal

Paint the branding of the org in the tab, not the host

getThemePath() derived the theme base from window.location.hostname. That answered the right question while every organization had a hostname of its own — and f...

kamo·2mo ago
Fixkamo-internal

Clear the cloned session in the enter-as tab

Entering an org opens a tab with window.open('', '_blank') and points it at /validate. That was cross-origin until now, so nothing was shared. It is same-origin...

kamo·2mo ago
Testkamo-shared-library

Ratchet that a blocked capability with no app has a call-site guard

Splitting an app from the capability inside it is what lets a clinic hold a phone system and a video room at all, but it moves the enforcement burden. PhiModule...

Kamo·2mo ago
FeatureMediaService

Refuse meeting recording for a tenant that handles PHI

The capability split made ServiceType.MEET permitted — a live conference on self-hosted Meet never leaves the cluster — while MEETING_RECORDING stayed blocked, ...

Kamo·2mo ago
FeatureVOIPService

The blocked capability now outranks the right, and god mode

PhiPlaybackAuthorizer gated PHI call playback on VIEW_CALL_LOGS. That was the whole check because ServiceType.VOIP mapped to the blocked VOIP_RECORDING module, ...

Kamo·2mo ago
Chorekamo-internal

Regenerate the ServiceType mirrors after the stage correction

The five pre-existing commerce verticals are COMPLETED, EHR is PLANNING.

kamo·2mo ago
Fixkamo-shared-library

The five pre-existing verticals must ship available

Shipping all six children PLANNING was wrong for five of them. RETAIL, RENTAL, SERVICE, SUBSCRIPTION and PROCUREMENT are not new functionality — they are what C...

Kamo·2mo ago
Fixkamo-internal

Read the session from the tab, not the shared cookie jar

46 client modules read the *** id out of document.cookie and sent it as X-***-Token. sessionStorage is per-TAB; a cookie is per-ORIGIN. While every organization...

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
Fixkamo-internal

The scheduled-support presenter picker offered nobody

The Presenters tab dropdown was empty for every organization, and always had been. GET **************** answers with { teamMembers, total }; the tab read data.m...

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