KamoCRM

Live Change Log

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

15,120
Total Changes
5,169
Features
4,935
Fixes
30
Projects
Filter by project
All Projects15,120AIService197APIService161BillingService143ConversionService107DaemonService129DocsService215ESigService88EmailService518InitializerService318KBService105KlusterServices697MCPGatewayService85MediaService546RAGService71SecurityService1,658TranslateService55VOIPService205VectorService11kamo-apps25kamo-asterisk-support24kamo-capcha17kamo-capcha-widget4kamo-internal6,937kamo-login330kamo-marketing625kamo-nowww20kamo-register213kamo-shared-library1,455kamo-signer-monorepo53kamolos108
Filter by type
All TypesBuild11CI523Chore738Docs2,167Feature5,169Fix4,935Other986Performance157Refactor274Revert23Style42Test94Upgrade1
August 26, 2026
Featurekamo-shared-library

Each org chooses what an order takes from an accepted quote

There is no platform-wide right answer. A maintenance contractor on a three-year plan bills each period; a capital-equipment installer bills the contract up fro...

Kamo·4w ago
Fixkamo-shared-library

Editing top-level lines no longer deletes every option's lines

Quote.lineItems is orphanRemoval=true and option rows set both quote and option — which is why QuoteMapper filters on getOption() == null twice. A bare clear() ...

Kamo·4w ago
Fixkamo-shared-library

An option quote keeps the tax and shipping staff entered

recalculate zeroed taxTotal and shippingTotal whenever a quote had options. Both were still stored on the row and still rendered by QuoteMapper, so a staff memb...

Kamo·4w ago
Fixkamo-shared-library

Terminal guards on cancel and revise, and stop swallowing bad input

cancel() and revise() had no isTerminal() guard, so an ACCEPTED quote could be flipped to CANCELLED or REVISED while acceptedAt and acceptedByName survived — a ...

Kamo·4w ago
Testkamo-shared-library

Actually exercise the terminal guards

The test that shipped with them asserted only that an ACCEPTED quote reports itself terminal — true before the guards existed and still true if both were delete...

Kamo·4w ago
Featurekamo-shared-library

An organization's branding lives under its ALIAS, not its domain

The folder an organization's logo, colours, favicons and backgrounds are written to in the public bucket was its hostname with the dots turned into dashes — wen...

Kamo·4w ago
Fixkamo-shared-library

Stop dropping the market and the customer account

CreateQuoteRequest has always declared marketUid and accountUid and QuoteService.create has never read either, so Quote.market and Quote.customerAccount were NU...

Kamo·4w ago
Chorekamo-shared-library

The EHR is in TESTING, not PLANNING

The vertical is built end to end — charts, scheduling, notes, orders, results, claims, FHIR and bulk export, C-CDA, TEFCA exchange, quality measures and the pat...

Kamo·4w ago
Fixkamo-shared-library

Pin ServiceJob's join columns to INT8

Exporting the table's DDL showed org_id, engagement_id and customer_uid each emitted as INT8 DEFAULT unique_rowid() — inherited from the referenced key. Three f...

Kamo·4w ago
Featurekamo-shared-library

The first FulfillmentPolicy implementation

FulfillmentPolicy has declared supports/createFromCommitment since it was written and a repo-wide grep returned exactly one line: the declaration. Its work was ...

Kamo·4w ago
Fixkamo-shared-library

Stop discarding status changes and answering 200

updateWorkOrder parsed the requested status inside catch (Exception ignored), saved the entity unchanged, and returned 200 with a DTO showing the old value. The...

Kamo·4w ago
Featurekamo-shared-library

ServiceJob and ServiceVisit

A sibling of FulfillmentOrder, not a widening of it: FulfillmentOrder is a shipment with a tracking number and a carrier, and retail depends on it. Job 1..N vi...

Kamo·4w ago
Featurekamo-shared-library

Fill ServiceLineItem and its four classification axes

ServiceLineItem shipped as an empty 18-line subclass whose only reference in the whole corpus was its own declaration, so a service sold through POS persisted a...

Kamo·4w ago
Featurekamo-shared-library

The patient portal's identity model

A patient is NOT a Member, and this is deliberately not the workforce identity. Reusing the staff login would mean a patient held a principal that every interna...

Kamo·4w ago
Refactorkamo-shared-library

Lift the free/busy engine out of the webinar feature

The interval arithmetic — expand, restrictionMask, candidateStarts, and the whole of AvailabilityInterval — was never webinar-specific. All the coupling sat in ...

Kamo·4w ago
Testkamo-shared-library

Parse every core repository query against the real mapping

Spring Data validates an annotated @Query at bean creation, so a bad JPQL path ships green and crash-loops the consuming service instead of failing CI. The clin...

Kamo·4w ago
Fixkamo-shared-library

Delete findConflictingEvents, which never returned a row

Four independent defects, any one of which emptied the result set: it filtered e.user.id while both callers pass a member id and the two columns never coincide;...

Kamo·4w ago
Featurekamo-shared-library

A real credential for exchange partners, and retrieved documents

The responder endpoints have no user session — the caller is another organization's server — so a bearer credential this practice issues at onboarding is the ON...

Kamo·4w ago
Featurekamo-shared-library

The quality measure model, and the row that makes it useful

MeasurePatientResult is the point of this commit. A practice shown "67% controlled" can do nothing with it; a practice shown the 41 NAMED patients in the denomi...

Kamo·4w ago
Featurekamo-shared-library

Give Service Work its first five rights

ServiceType.SERVICE(28) shipped with zero rights, so its nine endpoints were gated only by whether the caller had a session. Ids start at 268 rather than the p...

Kamo·4w ago
Featurekamo-shared-library

Bulk FHIR export and C-CDA, and the rights that gate them

Two things a practice cannot operate without, and neither is a bigger version of reading a chart. BULK EXPORT (clinical/bulk). The FHIR Bulk Data model: a job,...

Kamo·4w ago
Featurekamo-shared-library

Count DISTINCT events across a rollup's owners

A phone number can be a contact point on more than one owner at once, and two leads on one account sharing one is the ORDINARY case — they are commonly the same...

Kamo·4w ago
Featurekamo-shared-library

Map LINE_WINDOW_ENABLED on MemberVoipConfig

The per-member gate for the dedicated softphone line window. Version pin stays at 1.6.0 — adding a field needs no bump, and a split pin would break CI for every...

Kamo·4w ago
Fixkamo-shared-library

Carry the assignee into the account rollup, over a LEFT join

Reading a lead's communications is gated on who it is assigned to. A rollup that returned uids alone could not apply that gate, so the account timeline built on...

Kamo·4w ago
Featurekamo-shared-library

Let an account roll up its leads' communications

Several leads commonly hang off one account precisely because they are the same person enquiring twice, and each of their calls was matched to whichever lead he...

Kamo·4w ago
Featurekamo-shared-library

Key the communications spine on an owner, not a lead

The spine was built lead-shaped — LEAD_CONTACT_POINTS.LEAD_UID, LEAD_COMMUNICATIONS.LEAD_UID — and the association it actually needs is broader. An account owns...

Kamo·4w ago
Featurekamo-shared-library

Give a member a RingCentral JWT and an extension its own number

Two columns, both nullable so nothing is backfilled and no existing row changes meaning. **************** holds a member's own RingCentral JWT. RingCentral onl...

Kamo·4w ago
August 25, 2026
Featurekamo-shared-library

Find the types a member presents, and parse-guard the queries

The calendar needs to answer one question before it offers an availability layer: is declaring hours meaningful for this person? Nobody is a presenter by defaul...

Kamo·4w ago
Chorekamo-shared-library

1.6.0 — notification spine read pointers and counts

Kamo·4w ago
Fixkamo-shared-library

Make the retail webhook signature check fail closed and compare in constant time

validateSignature used to return true three ways without verifying anything: a null secret short-circuited, six of eleven provider types fell through default ->...

Kamo·4w ago
Featurekamo-shared-library

Render the chart as US Core FHIR R4

The JSON builder is hand-rolled rather than a Jackson ObjectMapper, and that is a scar rather than a preference. This platform ships a global Long->String seria...

Kamo·4w ago
Featurekamo-shared-library

Count new bug reports under the listing's own visibility rule

The badge and the list it opens are read side by side; a count computed under a different tenancy rule than the list is a bug report waiting to happen.

Kamo·4w ago
Featurekamo-shared-library

Count missed calls a member has not been shown

callResult is a free-form provider string, not an enum — the history tab matches the literal 'Missed', and upper() is what stops a provider that reports MISSED ...

Kamo·4w ago
Featurekamo-shared-library

Record whether an attendee has been told

The case this exists for is a webinar booked on somebody's behalf by somebody else: registration was recorded and nothing in the app ever told them. status coul...

Kamo·4w ago
Featurekamo-shared-library

Count assistant replies the member has not seen

Keyed by session GUID because that is what a tool window carries. ASSISTANT only: a member's own prompt is not news to them.

Kamo·4w ago
Featurekamo-shared-library

The healthcare engagement vocabulary

An appointment is the INTENT — a slot someone holds and may not keep — and the ENCOUNTER is the commitment: the visit that actually happened, the thing a note i...

Kamo·4w ago
Featurekamo-shared-library

Move availability from the webinar type onto the member

Availability was webinar_availability_slot: a dated (date, start, end) row owned by a WebinarType. A presenter who ran three kinds of session had to declare the...

Kamo·4w ago
Featurekamo-shared-library

Give an SMS conversation a read pointer

VoipConversation had no notion of read at all, so an SMS could be shown but never recorded as seen. Null means never looked, which counts all inbound — the hone...

Kamo·4w ago
Featurekamo-shared-library

Count social conversations as unread

Social sessions were excluded from the unread membership query by a hand-written type list, so a social conversation could never show a count anywhere. They are...

Kamo·4w ago
Featurekamo-shared-library

The Patient Records rights, and the access rights they are not

Twenty-three rights under ServiceType.EHR, and every one of them is a SECOND gate rather than the only one. Holding VIEW_CHART does not let a member open a char...

Kamo·4w ago
Featurekamo-shared-library

The repository layer, with a harness that proves it boots

Repositories for patients, encounters, scheduling, the chart, notes, questionnaires, coverage and claims. Every query leads with tenantId because on YugabyteDB ...

Kamo·4w ago
Featurekamo-shared-library

Insurance, claims, remittance and prior auth (SP14)

Coverage models ORDER, because a patient with two policies has a primary and a secondary and billing the wrong one first is a denial that costs a month and a re...

Kamo·4w ago
Featurekamo-shared-library

Questionnaires that produce coded data, not form answers (SP8)

Deliberately not the platform's lead form builder, and the reason is the whole design. A capture form's job is to collect answers. A clinical questionnaire's jo...

Kamo·4w ago
Featurekamo-shared-library

Patient identity, and chart documents on the EXISTING doc manager

The EHR gets no second document system and no second signature system. PATIENT_CHART is a new ImageAssocType keyed on the patient's logical id, so a chart is an...

Kamo·4w ago
Featurekamo-shared-library

Practice scheduling, waitlist and recall (SP6)

Availability stays as RULES. ScheduleBlock describes a provider's day and slots are computed for the window being viewed; pre-materialising five-minute slots fo...

Kamo·4w ago
Refactorkamo-shared-library

Retire Sent to AI, and store the status by name

Removing SENT_TO_AI is not a one-line enum edit. It sat at ordinal 3, and system_bug.status was an ORDINAL column: dropping it shifts AWAITING_INFO onto 3, CANN...

Kamo·4w ago
Featurekamo-shared-library

Results, doses, procedures and the real medication list (SP7)

DiagnosticReport keeps the report AND its Observations, because results arrive as a report and are acted on as individual values and both views have to be true ...

Kamo·4w ago
Featurekamo-shared-library

Append-only clinical notes with amendment and cosign (SP7)

Identity is split from content from the first row. ClinicalNote is what other records point at — an order raised from the note, an amendment to it, a disclosure...

Kamo·4w ago
Featurekamo-shared-library

Prescriptions and orders with real loop closure (SP7)

MedicationRequest keys the drug to RxCUI and never to a vendor identifier. FDB's GCN_SEQNO, Medi-Span's GPI, MEDID, HICL_SEQNO are the vendor's moat, and keying...

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