Live Change Log

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

17,924
Total Changes
4,611
Features
4,537
Fixes
32
Projects
Filter by project
All Projects17,924AIService110APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService373InitializerService300KBService74KlusterServices546MCPGatewayService43MediaService461RAGService61SecurityService1,520TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,575kamo-login318kamo-marketing584kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,322kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI523Chore670Docs226Feature4,611Fix4,537Other6,781Performance136Refactor274Revert23Style48Test70Upgrade1
August 30, 2026
FixMediaService

Spend the site deletes before the replacements are written

Editing a report came back "The bug could not be saved: Internal Server Error" whenever the reporter left a site ticked — so every edit about the title, the des...

Kamo·1w ago
Fixkamo-shared-library

A join/leave row has to carry the name of who it is about

The id alone cannot be resolved in the one case these rows exist for. A "removed" or "left" line names somebody who is, by then, no longer in the session, so th...

Kamo·1w ago
Fixkamo-internal

The Favourites header must control an element that exists

Collapsing the section unmounted the list it named through `aria-controls`, leaving the header pointing at nothing. `aria-expanded` then describes a disclosure ...

Kamo·1w ago
FixMediaService

Forward removedByMemberId to the browser

The relay copies named fields off ChatMessageDto onto the STOMP frame, so a field it does not copy is dropped even once the DTO declares it. MEMBER_REMOVED now ...

Kamo·1w ago
Fixkamo-shared-library

Declare removedByMemberId, or the relay drops it in silence

The NATS payload for MEMBER_REMOVED carries who did the removing, but the NATS→STOMP relay projects every frame through ChatMessageDto — so a field this class d...

Kamo·1w ago
Fixkamo-internal

One title rule, one group threshold, and a rename the list hears

Review of the Chats branch, four findings. Both surfaces were composing the conversation's name by hand instead of through the helpers @kamo/chat-core exports ...

Kamo·1w ago
FixAIService

No upstream error text reaches a member, whichever provider failed

memberTextFor fell through to getMessage() for anything that was not an AiProviderException. Only the HuggingFace adapter classifies its refusals; every other o...

Kamo·1w ago
Fixkamo-internal

Show why a text could not be started, not "check the number"

VoipService now answers an unprovisioned account with 409 and both a machine code (`error`) and a sentence a member can act on (`message`). apiCall read `error`...

Kamo·1w ago
FixVOIPService

An account with no number to text from is a 409, not a 500

Starting a text threw IllegalStateException when neither the member nor the instance had an outbound number, which Spring turned into a 500 with a stack trace. ...

Kamo·1w ago
FixAIService

Retire a model the provider won't route, and stop quoting it at members

Follow-up to the router-catalogue fix. That stops unroutable models being LISTED; this stops one already in an org's catalogue from breaking the assistant and n...

Kamo·1w ago
August 29, 2026
FixAIService

List the Hugging Face models the router will actually serve

Chat goes to the Inference Providers router **************** but discoverModels asked the HUB for models that are "warm" somewhere — a different and much larger...

Kamo·1w ago
Fixkamo-internal

Drop the security level control from the batch settings

It was a disabled Select behind a "locked" tooltip, and a chip in the collapsed summary. Both reported a value the admin never chose: security level is derived ...

Kamo·1w ago
Fixkamo-signer-monorepo

Format the phone numbers on the customer's quote

The page a customer opens printed every number exactly as stored — "9495550134" on the letterhead, and the same again under Your Contact. This app had no phone ...

Kamo·1w ago
Fixkamo-internal

Format the phone numbers on the printed quote

The document printed every number exactly as stored — "9495550134" on the letterhead, and the same again under Your Contact. Formatting goes through `app/lib/ph...

Kamo·1w ago
Fixkamo-internal

Show Getting Started to the System Member too

The button asked for organization ownership AND CONFIGURE_SYSTEM. The System Member is provisioned as an Administrator in every organization — all 34 of its mem...

Kamo·1w ago
Fixkamo-internal

The Getting Started API had no route to answer it

The launchpad button never appeared, and neither did any progress: the Java controller existed, the client existed, and the Next route between them was never wr...

Kamo·1w ago
FixKlusterServices

Probe the bridge's real health, not a port that is always open

kamo-meet let one person into a meeting and then ended it the moment a second joined. The bridge had been hard-unhealthy for 41 hours: an in-place container res...

Kamo·2w ago
Fixkamo-internal

The logo caption sits under the logo, and says the domain is not reserved

Two unrelated symptoms, both in the brand band. **The caption printed over the logo when the slots stacked.** The preview was clamped with `max-h-full`, and th...

Kamo·2w ago
Fixkamo-internal

Stop the server asserting a tab title it cannot know

An org with no domain of its own still ended up titled "KamoCRM" after a refresh, briefly showing its real name first. generateMetadata resolves the tab's org ...

Kamo·2w ago
FixSecurityService

Stop refusing a domain because somebody else typed it first

Creating an organization 409'd on any existing row for the domain, which meant the first organization to enter "acme.com" locked out every other one — including...

Kamo·2w ago
Fixkamo-internal

Upload the compact logo that was previewed, not the file that was picked

The compact ("simple") logo slot is SVG-only — the backend writes whatever lands in it to a fixed <theme>/img/logo.svg key regardless of the file's real type, a...

Kamo·2w ago
Fixkamo-internal

Stop the attention flasher reverting an org's tab title to the platform's

A child org with no domain of its own showed "KamoCRM", flashed to its real name, then flashed back to "KamoCRM" and stayed there. TabAttention wrote `document...

Kamo·2w ago
Fixkamo-internal

Let the tab icon follow a simple-logo change instead of pinning the one captured at mount

TabAttention badges the browser tab, and it read the favicon ONCE in a mount effect. That effect runs before DynamicMetaLoader's config.json fetch has resolved,...

Kamo·2w ago
FixSecurityService

Give the generated favicons the same revalidation requirement as every other theme asset

Replacing an org's simple logo updated every surface that reads img/logo.svg and left the browser tab on the old mark. Generation was never the problem: provisi...

Kamo·2w ago
August 28, 2026
Fixkamo-internal

Enter the new organization here, not on a domain with no DNS

Creating an organization handed the creator a button pointing at `https://internal.<the domain they typed>/`. That host does not resolve: the domain is one they...

Kamo·2w ago
Fixkamo-internal

The scan's colours, the colour window, and the stacked slots

Five reports from the brand section, and the first two turn out to be the same bug wearing two faces. **Colours were never adopted.** The rule latched a `color...

Kamo·2w ago
FixSecurityService

A transient database fault must not 500 the request

The lead Communications tab reported "We couldn't load this lead's communications" for org 1168485648209608710 on 2026-08-28. The endpoint returned 500 five tim...

Kamo·2w ago
Fixkamo-internal

The document must not scroll behind the workspace

The authed shell is a full-viewport layout — nav fixed, content absolutely positioned to exactly 100vh — with one scroller inside it (.kamo-page-scroll). <body>...

Kamo·2w ago
Fixkamo-internal

Fill the content box exactly, scroll inside it

The pages grew to their content and pushed past the box the chrome gives them, so the document scrolled behind the shell and left dead background below the form...

Kamo·2w ago
Fixkamo-internal

Stop the form column stretching to the grid row height

The two-column layout gave the form column no align-self, so it stretched to the row height — and the row is as tall as the TALLER column. Once the form flows i...

Kamo·2w ago
Fixkamo-internal

One scrollbar, and actually use the full content width

AuthedChrome already owns the ONE scroll container for a page (.kamo-page-scroll, overflow:auto; height:100%), and PageWrapper exists specifically to stop a pag...

Kamo·2w ago
Fixkamo-internal

Next/link for Back to home, not a raw anchor

check-client-navigation fails the image build on a raw <a> to an internal route: a hard navigation tears down every open tool popup window and any unsent email ...

Kamo·2w ago
Fixkamo-internal

Whole-branch review fixes — provisioning, reachability, label data loss, a11y, dead code, org-context race, hex case

Seven findings from the final whole-branch review of the org-launch and Getting Started wizard feature, fixed together since several interact: - B1: **********...

Kamo·2w ago
Fixkamo-internal

Resolve the shared "skip" string against its full key

Six step components called t("skip") against an unscoped useTranslations(), which requests a top-level "skip" key that doesn't exist — next-intl then renders th...

Kamo·2w ago
Fixkamo-internal

Close the wizard Save-without-validation hole (review round 1)

Four findings from spec/code review, addressed: 1. CRITICAL - nothing gated the shell's Save button on step validity, so a member could blank the organizati...

Kamo·2w ago
Fixkamo-internal

Inert, not aria-hidden + pointer-events-none, for gated sections

CreateOrgForm's section() helper hid the four sections gated on "no branch type chosen yet" with aria-hidden plus a pointer-events-none className. aria-hidden o...

Kamo·2w ago
Fixkamo-internal

Dropping a gathered honeycomb in the goal removes every head in it

Jiggling mid-drag fires the gather gesture, which pulls every same-size head into the dragged head's cluster and anchors the honeycomb on the head under the poi...

Kamo·2w ago
FixSecurityService

Require an open god-mode window, not eligibility alone, for CONFIGURE_SYSTEM

hasRight was granting the bypass on the raw GD session flag, which SessionPlatformFacts's own javadoc names as the exact anti-pattern it exists to prevent: GD i...

Kamo·2w ago
Fixkamo-internal

Gate the web-alias path on parent context, not model alone

withBranchType previously turned useWebAlias on whenever the SELECTED MODEL allowed ROOT or a custom alias, ignoring the three parent-org preconditions BasicsSt...

Kamo·2w ago
FixVectorService

Stop treating an already-transparent background as black, and remove the region not the colour

Two reported faults with one root cause: colour-based removal overwrote the alpha channel outright and never read the incoming one. An HTML canvas stores premu...

Kamo·2w ago
Fixkamo-internal

Switching conversations no longer stacks windows behind the maximized pane

Takes @kamo/tool-core 0.1.5, where leaving the maximized pane became two gestures instead of one. A navigator row click hands the pane to another conversation a...

Kamo·2w ago
Fixkamo-register

Restore the verification screen's wallpaper, drop its ***, modernise its status plate

Three things wrong with /verification, all visible on one screen. The wallpaper never loaded. PostCompletionScreen called **************** but that parameter i...

Kamo·2w ago
Fixkamo-internal

Give the new tab a session, instead of one that bounces to login

"Open in new tab" was `window.open(location.href, '_blank', 'noopener,noreferrer')`. The session id is not in a cookie — it lives in sessionStorage, per tab, be...

Kamo·2w ago
FixInitializerService

Let a seeded org omit its year established

createOrg took the year as a primitive int, so every seed had to supply one even though YEAR_EST is nullable and the field is optional platform-wide. Integer, s...

Kamo·2w ago
Fixkamo-register

YearEst is optional on the org, so admit the null that arrives

Year established is nullable on the Organization entity and SecurityService serializes the null explicitly, so the declared `number` was never the whole wire sh...

Kamo·2w ago
FixRAGService

KB audience tiers are cumulative, matching KbReaderScope

The retrieval filter matched a reader's tier exactly: a TEAM_MEMBER had to match aiVisibleToTeamMembers and nothing else. So an article an author had deliberate...

Kamo·2w ago
Fixkamo-internal

Centre the launchpad tiles that are only an icon and a name

A leaf app pane in its compact form shows no sub-item rows and no description, so the icon/title row was heading a column with nothing in it — pinned to the top...

Kamo·2w ago
Fixkamo-internal

Restore the image-proxy and wallpaper work 266357d0 reverted, and land the permissions change it was meant to carry

266357d0 was built with the wrong index. Its tree came from a stale local HEAD rather than from the staged one, so it carried none of the permissions work its m...

Kamo·2w ago
FixKBService

GET /master takes VIEW_NOTES, like every other read here

It was the one read in this controller that took no right, deliberately: the two master notes were called fixtures of the home launchpad rather than the Notes a...

Kamo·2w ago
FixInitializerService

The invoice takes REVOKE DELETE, not REVOKE UPDATE

attachPdf writes PDF_BLOB_ID after the finalize transaction commits, on purpose: rendering inside it would hold the document-counter row lock across a MinIO rou...

Kamo·2w 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