Live Change Log

See what we're building, in real-time. Every feature, fix, and improvement shipped across the platform.

August 25, 2026
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Β·7m 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Β·11m 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Β·16m 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Β·23m 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Β·29m 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Β·31m 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Β·33m 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Β·42m 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Β·50m 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Β·50m 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Β·50m 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Β·51m 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Β·51m ago
Docskamo-login

Record the second batch, and what is still open

KamoΒ·51m 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Β·52m 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Β·55m 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Β·1h 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Β·1h 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Β·1h 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Β·1h 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Β·1h 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Β·1h ago
Chorekamo-internal

Regenerate the ServiceType mirrors after the stage correction

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

kamoΒ·1h 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Β·1h 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Β·1h 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Β·1h 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Β·1h 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Β·1h ago
Featurekamo-internal

Mirror the six commerce child apps, and stop the mirrors drifting

Both TS mirrors are now GENERATED from ServiceType.java rather than hand-maintained. They had drifted badly from Java and from each other: stale "RAG integratio...

kamoΒ·1h ago
Docskamo-internal

Task 7 needed no new migration, and top-level orgs must be included

The app-tree backfill turned out to already exist as **************** restricted to isGated() verticals. Dropping that restriction is the whole change. Records...

kamoΒ·1h ago
Featurekamo-internal

One scrollbar, three times as wide, down every conversation

The bar beside the messages was 8px in the member chat and SMS, 6px in support tickets and social, and in the AI chat it was nothing at all: that list declared ...

kamoΒ·2h 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Β·2h ago
Fixkamo-internal

Give /api/org/current the domain the client requires

internal.kamocrm.com failed to render with "Invalid organization data: missing 'id' or 'domain'". Organization.fromJSON refuses a record without a domain, and t...

kamoΒ·2h ago
Fixkamo-internal

Move jump-to-newest in with the toolbar's other actions

Search now owns the whole left track of the toolbar, because the empty part of that track is exactly the room the field opens into. The scroll-to-bottom control...

kamoΒ·2h ago
Chorekamo-internal

Refresh the favicon and drop the unused blueleven logos

public/favicon.ico now carries 48x48 and 32x32 layers instead of 32x32/16x16. The five logo-blu*/logo-blueleven* PNGs are referenced from nowhere in the app, so...

kamoΒ·2h ago
FeatureInitializerService

Extend market grandfathering into the app-tree backfill

grandfatherExistingGatedMarkets already walked each org's active markets, resolved getRequiredService() and enabled the missing app β€” it was just restricted to ...

KamoΒ·2h 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Β·2h ago
Docskamo-login

Record what shipped, what deviated, and what is left

KamoΒ·2h 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Β·2h ago
Featurekamo-internal

The toolbar's search is a glyph that opens into a field

The member chat carried a permanent search box across the top of the window β€” the width of the whole toolbar, spent on a control that is empty almost all of the...

kamoΒ·2h ago
Fixkamo-internal

A sent message animates in once, not twice

The message list keyed each row on the message id, and a sent message's id changes exactly once β€” the optimistic row is appended under a local id, and the STOMP...

kamoΒ·2h ago
Featurekamo-shared-library

Every vertical names its own child app

requiredService becomes total now that each vertical has a child app under ServiceType.POS, which deletes the "null means POS alone is enough" special case and ...

KamoΒ·2h ago
Fixkamo-internal

Name rooms after the org id, not the hostname

getOrgToken() took the first label of the current host, and its own comment said why: "so identically-named rooms cannot collide across orgs". On the shared hos...

kamoΒ·2h ago
FeatureMediaService

Let the public config be addressed by org id, not only by host

The meet sidecar looks up an org's meet config to decide whether a guest needs a meeting password. It asked by hostname, which on the shared meet host resolves ...

KamoΒ·2h ago
Fixkamo-meet

Scope rooms to their organization on the shared meet host

Room isolation was the HOST. A member of org B could not present a *** cookie on meet.<org-A-domain>, so knowing org A's room name got them nowhere. Serving org...

KamoΒ·2h ago
Featurekamo-shared-library

Cascade feature enable/disable across the app tree

Enabling a child enables its parent; disabling a parent disables every child; disabling the last child disables the parent. Enabling a parent leaves children al...

KamoΒ·2h ago
Featurekamo-shared-library

Add PhiCapabilityGuard for call-time capability checks

PhiTenantGuard runs at feature-enable time and nowhere else β€” three call sites, all in FeatureService. Now that PhiModule is capability-grained, an app whose co...

KamoΒ·2h ago
Featurekamo-shared-library

Split PhiModule from app-grained to capability-grained

POS mapped to ECOMMERCE_SYNC (BLOCKED_NO_BAA) and the whole commerce surface hangs off POS, so an org with handlesPhi=true could not switch commerce on at all β€”...

KamoΒ·2h ago
Featurekamo-internal

Land inside a newly created org instead of at DNS setup

Creating an org routed the creator to /setup/dns, and the reason was real: entering meant an OTK redirect to internal.<new-domain>, and a brand-new org has no D...

kamoΒ·2h ago
Featurekamo-shared-library

Give ServiceType a two-level parent/child tree

Six commerce children at new ids 26-31, wired to POS in a static block on the RoleRightType pattern (an enum constant cannot reference another from its own cons...

KamoΒ·2h ago

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing