KamoCRM

Live Change Log

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

18,414
Total Changes
6,545
Features
5,540
Fixes
30
Projects
Filter by project
All Projects18,414AIService276APIService177BillingService161ConversionService117DaemonService146DocsService240ESigService93EmailService623InitializerService344KBService162KlusterServices769MCPGatewayService277MediaService620RAGService79SecurityService1,999TranslateService62VOIPService265VectorService11kamo-apps27kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,701kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,828kamo-signer-monorepo57kamolos114
Filter by type
All TypesBuild23CI525Chore794Docs3,286Feature6,545Fix5,540Other1,001Performance174Refactor282Revert23Style45Test175Upgrade1
August 27, 2026
Featurekamo-internal

ServiceJobApi.createJob, and the back-link builder

Restores the client half of SW6c Task 2, which landed as 157fa714 and was dropped by a history rewrite in a concurrent session; the create screen itself survive...

kamo·2mo ago
Featurekamo-internal

The service-request grid and client read the real endpoints

Restores the rest of SW6c Task 4, which landed as d58a6aba and was dropped by a history rewrite in a concurrent session; the detail page survived inside bddd361...

kamo·2mo ago
Fixkamo-internal

One back-link that resolves, instead of four that never did

Every service screen's back button was `/commerce?tab=service`. There has never been a tab with that id: `PipelineView.tsx:69-70` builds them as `market-${marke...

kamo·2mo ago
Featurekamo-internal

Screenshots AND videos on a bug report

Reporters were describing screen recordings in prose and then posting the file into a chat, because the report form only took stills. It now takes MP4, MOV and ...

kamo·2mo ago
Featurekamo-internal

Restore the pipeline Quotes tab and wire quote conversion

`POST /quotes/{uid}/convert` shipped in SW4 and nothing has ever called it: `quotesApi` had ten methods and `convert` was not among them, so the endpoint was li...

kamo·2mo ago
Fixkamo-internal

The browser tab is named after the workspace, not the host

Enter Wienerschnitzel or Wendy's and the tab read "KamoCRM", while nothing inside the workspace said KamoCRM anywhere. ABC Mortgage was correct, which made it l...

kamo·2mo ago
Otherkamo-internal

Stop the prescribing-disclosure test being flaky

It passed alone and failed inside the full suite. The effect calls **************** and sets state in a .then(), so settling the mock's promise, running the con...

Kamo·2mo ago
Featurekamo-internal

Mirror VIEW/MANAGE_ORDERS and VIEW/MANAGE_PRICING

The client half of closing the order-mutation hole. SecurityService now gates 39 order, pricing and tax endpoints on four new rights; these are the two mirrors ...

kamo·2mo ago
Otherkamo-internal

Show why the exchange network is unreachable

The outside-records panel could only say "not connected", which reads as an outage to wait out. The server now sends the reason alongside -- this practice has n...

Kamo·2mo ago
Otherkamo-internal

Mirror the EHR stage, and guard the mirror

ServiceType.ts is a hand-maintained mirror of the Java enum and nothing was checking it. RoleRightType has had a parity guard since three EHR rights went missin...

Kamo·2mo ago
Otherkamo-internal

Say what the prescribing safety check did not cover

The panel rendered a safety block only when there were warnings, so a prescription that came back clean said nothing at all -- and this platform has no licensed...

Kamo·2mo ago
Fixkamo-internal

The agreement sample quotes seats at catalog prices

The default agreement template shipped a worked example that contradicted the catalog on every line it mentioned: 50 users on a 25-seat plan, 25 GB of storage p...

kamo·2mo ago
Fixkamo-internal

The platform save dropped every KamoPBX field client-side

Entering the credentials in the UI reported success and changed nothing. systemConfigApi.update serialises an explicit allowlist rather than the caller's object...

Kamo·2mo ago
Docskamo-internal

Close out SW6b

Eight departures. The one that mattered was in SW6a: PUT /{uid} accepted totals and sign-off verbatim, which made both of this plan's central rules decorative u...

kamo·2mo ago
Featurekamo-internal

The six work-order tabs persist

SW6b Task 4. Labour, parts, time, vendors, sign-off and notes were React `useState` on `commerce/service/[id]` and lost everything on reload. They now write to ...

kamo·2mo ago
Fixkamo-internal

Two icon buttons were announced with no name at all

MUI's Tooltip spreads its aria-label onto its DIRECT child. Both of these wrap the button in a <span> — the standard workaround so the tooltip still fires while...

kamo·2mo ago
Featurekamo-internal

A failed clinical load must not render as an empty result

Two of these shipped before anyone noticed, and the guard found two more in the newest panel the moment it ran — failing to load what a patient's other practice...

kamo·2mo ago
Fixkamo-internal

A failed load was rendering as a clinical fact

Two screens turned a fetch failure into an empty result, which on a chart is not a neutral outcome — it is an assertion. The trend graph caught an error and se...

kamo·2mo ago
Testkamo-internal

Pin the reason dialog, and let app/patients be tested at all

app/patients/** was in no vitest include pattern, so a test written beside the clinical console's own kit was collected by nothing and would have passed by neve...

kamo·2mo ago
Refactorkamo-internal

Eight clinical reasons were being collected by window.prompt

Stopping a medication, closing an order loop, cancelling an appointment, merging two patients, declaring two records not a match, withdrawing portal access, dec...

kamo·2mo ago
Docskamo-internal

Plan SW6b, making the six tabs persist

Labour and parts become ServiceJobLine rows on the job, not ServiceLineItem rows: OrderLineItem.order is optional=false, so a ServiceLineItem cannot exist witho...

kamo·2mo ago
Featurekamo-internal

Platform settings card, and stop showing FreePBX copy

Three problems on the KamoPBX phone-server page, all mine: - The PHONE_SERVER_ID card was ungated, so every provider — KamoPBX, RingCentral and Teams include...

Kamo·2mo ago
Docskamo-internal

Close out SW6a

Nine departures. The plan's Spring claim was measured false, its sketched test was near-tautological, and its ServiceTrade-labels-are-new claim was wrong — ther...

kamo·2mo ago
Featurekamo-internal

The work-order grid reads real service jobs

Every row in this grid was a dead link by construction. generateMockWorkOrders minted ids String(8000 + i), the row click pushed /commerce/service/8001, and the...

kamo·2mo ago
Featurekamo-internal

Pull a patient's history from the practices they used to attend

The outbound half of exchange, on the records tab beside the release surface — records leaving and records arriving are one person's job, and somebody who has j...

kamo·2mo ago
Featurekamo-internal

KamoPBX is selectable

The provider is implemented in VOIPService, so the coming-soon gate comes off. Description no longer names the upstream project and says what actually matters t...

Kamo·2mo ago
Docskamo-internal

Stop telling implementers to run git commit --allow-empty

--allow-empty PERMITS an empty result, it does not force one. With no pathspec it still commits the index, and these checkouts always have another session's wor...

kamo·2mo ago
Docskamo-internal

Stop telling implementers to run git commit --allow-empty

--allow-empty PERMITS an empty result, it does not force one. With no pathspec it still commits the index, and these checkouts always have another session's wor...

kamo·2mo ago
Fixkamo-internal

The Interaction Center bucket tabs never wrap to two lines

Six full-width tabs share the 550px conversations pane, leaving ~80px each, and "Team Members" did not fit — it wrapped and doubled the strip's height. Both mem...

kamo·2mo ago
Featurekamo-internal

**************** and lock the Enterprise card

Registers the right client-side - list, colour, icon - and adds it to the coverage test's non-tab set with a note on what it actually gates, since it guards an ...

kamo·2mo ago
Fixkamo-internal

An attachment that cannot be read says so, instead of nothing

A media element gives you one bit — it failed — and no status code, and it latches on that bit: it never retries, so whatever went wrong the control simply stay...

kamo·2mo ago
Featurekamo-internal

Show what the chart says before the prescription is written

The server now refuses a prescription that conflicts with a recorded allergy, a drug the patient is already on, or a patient nobody has ever asked about allergi...

kamo·2mo ago
Docskamo-internal

Correct four SW6a claims, one measured false

A plain @Autowired List of an interface with no implementations does NOT resolve to an empty list — it throws UnsatisfiedDependencyException. Measured, not reas...

kamo·2mo ago
Docskamo-internal

Correct three SW6a claims, one of them measured false

An earlier draft said a plain @Autowired List of an interface with no implementations resolves to an empty list. It throws UnsatisfiedDependencyException — meas...

kamo·2mo ago
Refactorkamo-internal

The tab's own session names its organization; `?org=` leaves the URL

Builds directly on 05ff51b3, which established the right source of truth — the tab asks its own session which workspace it is in, over a call the per-tab token ...

kamo·2mo ago
Docskamo-internal

Plan SW6a, and split SW6 into three

The spec calls SW6 'wire the finished UI', which assumed a backend existed to wire to. ServiceJob, ServiceVisit and ServiceLineItem's new columns have zero runt...

kamo·2mo ago
Testkamo-internal

Pin the two form rules that fail silently

Both decide what NOT to send, which is the half of a form with no visible symptom when it goes wrong. A blank remittance line must not become a zero. Every lin...

kamo·2mo ago
Docskamo-internal

Close out SW5

Six departures. The sharpest: the task-book proxy could not be copied from the quotes proxy, which exports PATCH and no PUT — a verbatim copy would have made ev...

kamo·2mo ago
Featurekamo-internal

Author a flat-rate task book, priced by the minute

Replaces the SW5 placeholder pane with the real authoring surface: three sub-views on one tab — books, categories, entries — following the SubView switcher Mark...

kamo·2mo ago
Docskamo-internal

BaseLosController's unauthorized()/forbidden() do exist

A task brief told an implementer those helpers were invented and did not exist. requireOrgId genuinely does not; those two do, declared protected static on Base...

kamo·2mo ago
Featurekamo-internal

Un-gate pricing, tax and tiers for service markets

A SERVICE market got exactly three tabs — Overview, Vendors, Agreements. Customers, Tax & Shipping and Discounts & Pricing were all gated on commerceType === 'R...

kamo·2mo ago
Featurekamo-internal

Apply a remittance to a claim

"Unapplied money" is money the payer has sent that nobody attached to a claim, and the queue could only be looked at. POST_INSURANCE_PAYMENTS gated an operation...

kamo·2mo ago
Fixkamo-internal

An inbound call reads properly and respects the status pill

Three things wrong with the softphone tool window's incoming-call overlay. The number was painted exactly as the INVITE carried it, so a caller arrived as "+15...

kamo·2mo ago
Featurekamo-internal

Four things that could be looked at and not done

Each of these had a working endpoint, a client function, and no way for a person to reach it. Closing an order loop. The open-loops queue exists because the or...

kamo·2mo ago
Docskamo-internal

Restore SW4's close-out, lost to a stale working-tree edit

The previous commit edited the on-disk copy of this plan, which predated the Shipped section — that section was appended to a scratchpad copy and landed from th...

kamo·2mo ago
Docskamo-internal

Applying DDL opens a 40001 window — watch it, do not restart

Bumping a catalog version leaves pooled JDBC connections holding the old one and the next query through each fails SQLState 40001, which Hibernate does not retr...

kamo·2mo ago
Fixkamo-internal

Price-list entry read and update spoke to the wrong endpoint

Two silent client/server mismatches made the retail price-list entry screen's write path dead: - the entries list was unwrapped with the key "entries", but C...

kamo·2mo ago
Featurekamo-internal

Show what extensions cost, where extensions are managed

ExtensionUsagePanel on the stats tab, beside the mailbox and storage panels: count by class, the catalog rate, the monthly total, and the rule in plain language...

kamo·2mo ago
Fixkamo-internal

A failed reaction or edit does not stick to the message

Takes @kamo/chat-core 0.1.9, which rolls an optimistic edit or reaction back when the connection drops rather than only when the server refuses. The bubble's sa...

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