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
September 2, 2026
ChoreSecurityService

Rebuild against kamo-shared-library HEAD

Ships the quote total fixes: a committed term now totals the term rather than one period of it, and a multi-option quote is no longer headlined by whichever alt...

Kamo·3w ago
FeatureSecurityService

A member address signs you into its own org, not every org

A member who signs in with the org mailbox flagged Primary on their member settings was being offered every workspace their user account belongs to. The address...

Kamo·3w ago
ChoreSecurityService

Rebuild against kamo-shared-library HEAD

Ships the quote money fixes, which live entirely in the shared library and so reach production only when this service is rebuilt: - a quote's headline total no...

Kamo·3w ago
FeatureSecurityService

Enforce the platform's visibility, and let it be edited

GET/PUT /api/security/reports/catalog, both gated on MANAGE_REPORTS on the platform spine. The list comes from the REGISTRY, not the override table: an operator...

Kamo·3w ago
FeatureSecurityService

Run the reports that are due, and send them

One internal endpoint, X-Internal-Auth gated and constant-time compared, that DaemonService ticks. The cron stays in the daemon because it is replicas: 1 with s...

Kamo·3w ago
FeatureSecurityService

The lists a share dialog picks from, and a share target that fits every id

GET **************** returns the organization's people, departments and roles as picker options, in one call and in one shape. Built on the reporting option pro...

Kamo·3w ago
FeatureSecurityService

Run, export and schedule the Report Studio's reports

The service half of the framework: the catalogue, the run, the pickers, four exporters, saved views and schedules. Authorization is explicit on every path, bec...

Kamo·3w ago
TestSecurityService

Pin the status-label body an org sends to drop a label

The two shapes that used to fail: an empty list, which is what clearing the last remaining label sends and what the handler rejected as malformed, and an entry ...

Kamo·3w ago
FixSecurityService

Accept a blank status label as the removal it is

The PUT is the org's complete set of custom labels, so it has to be able to carry an emptied box. Two things stopped it: an empty list was rejected as a malform...

Kamo·3w ago
ChoreSecurityService

Rebuild against the shared library that persists the quote contact

The market writer landed one commit after this service was last built, and CI clones kamo-shared-library at image-build time — so the deployed jar still has the...

Kamo·3w ago
FeatureSecurityService

Honour a market's contact rule wherever a quote names somebody

The staff detail, the staff preview and the customer's own page now resolve the contact through one method, so they cannot disagree about who is printed on the ...

Kamo·3w ago
FeatureSecurityService

Page and search the org directory, and stop two row builders drifting

The networks endpoints answer with the whole set in one body. That is fine for a member of a dozen orgs and impossible for an operator on an estate meant to rea...

Kamo·3w ago
August 31, 2026
ChoreSecurityService

Rebuild to pick up BillingCycle.TRIENNIAL

No source change. SecurityService clones kamo-shared-library at image-build time, and the catalog it serves is about to carry TRIENNIAL price rows. @Enumerated ...

Kamo·4w ago
FeatureSecurityService

Put the report title in the message, and let it be corrected

A dispatch composed the operator's instruction and the bug description with the separator between them. The title was never in it, so the session opening the me...

Kamo·4w ago
August 30, 2026
FixSecurityService

The agent health preflight must fail in seconds, not twenty

health() inherited the client's 20-second default. It is a liveness check in front of every KamoDesktop launch, and when the dev machine ran out of memory on 20...

Kamo·4w ago
August 29, 2026
FeatureSecurityService

Bulk-create members and team members, one transaction per record

The two bulk-add screens need to create a spreadsheet of people in one submission and report on each of them individually. That could not be built on the existi...

Kamo·4w ago
FeatureSecurityService

Store the org's deposit account, and print it on quotes

`/api/security/receivables` is where Settings → Account → Receivables reads and writes. Two rights, not one: VIEW_RECEIVABLES reads the tab, MANAGE_RECEIVABLES ...

Kamo·4w ago
FeatureSecurityService

Carry the team member's department in the session

The browser tab is being retitled "{Org} - {role} Portal", and a team member's role is their department — the specific thing they identify with day to day ("Sal...

Kamo·4w 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·4w 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·4w ago
August 28, 2026
DocsSecurityService

Say in the class contract that the gate can fall open

The header promised "a blocked app's endpoints all 403" without qualification, which is now true only while the entitlement tables can be read. The exception is...

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

Carry the per-member-type home-screen defaults

Read on POST/PUT /security-models and PUT /master-model, and emitted from /applied-model's settings so the shell can decide where a member lands on "/". A sepa...

Kamo·4w ago
FeatureSecurityService

Send To AI straight off the report form

A holder of MANAGE_SYSTEM_BUGS gets a SEND TO AI switch on the Report Bug window, and submitting with it on hands the report to a session without the triage dia...

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

Add progress service and endpoints behind the Getting Started wizard

Org-scoped GET/PUT/DELETE under /api/security/org-setup-wizard track which of the nine Getting Started steps an organization has completed. A read never creates...

Kamo·4w ago
FeatureSecurityService

Put a real time budget on resend-verification

The endpoint had no limit of any kind. The *** the register screen demanded before enabling its resend button was never read here — the request body is three fi...

Kamo·4w ago
FeatureSecurityService

Seed the master-note widgets from VIEW_NOTES

The two master-note panes shipped with no right at all — "My Master Note" and "Our Master Note" were on every member's launchpad unconditionally — and this is t...

Kamo·4w ago
August 27, 2026
FixSecurityService

Make seeded and uploaded branding revalidate, so an org stops being served the base theme it was seeded with

A new organization is seeded with the base theme — the platform's own logo and backgrounds copied to the new org's keys — and those keys never change when the o...

Kamo·4w ago
FeatureSecurityService

Let the caller choose a fixed KamoDesktop resolution

The remote desktop was never locked to a resolution — it tracks the browser window, and always has. guacd honours the client's size and xorgxrdp resizes the X s...

Kamo·4w ago
FeatureSecurityService

The relay to InvoicingService, and the right that gates it

Task 8. SecurityService is the authorization boundary; InvoicingService is ClusterIP with no ingress, so this relay is the only way in. InvoicingServiceClient ...

Kamo·4w ago
FeatureSecurityService

Tell the reporter when Send To AI moves their report

MediaService now emails a reporter whenever their bug or enhancement changes status, but a dispatch applies a status of its own — usually In Progress — through ...

Kamo·4w ago
FeatureSecurityService

Announce the queue change when a report is dispatched to AI

A dispatch is the only thing that takes a report out of NEW from OUTSIDE MediaService, so without this it was the one transition the console's badge learned abo...

Kamo·4w ago
FixSecurityService

A video on a report never reaches an AI dispatch

file and cannot watch one. The desktop agent already magic-byte-checks every attachment, but it refuses the DISPATCH rather than the one file — so a single vide...

kamo·4w ago
DocsSecurityService

The Traefik per-IP limit will 429 a QHIN invisibly

Comment only, in the file somebody opens when a partner complains. Traefik rate-limits per source IP across the whole api.* host, and a QHIN sits behind a sing...

Kamo·4w ago
OtherSecurityService

Pin the exact JSON the clinical client parses

Every field in these bodies is read by name in app/lib/patients/ehrApi.ts and nothing was checking the server still emits them. The service tests pin that the e...

Kamo·4w ago
FeatureSecurityService

POST /service-jobs, gated on MANAGE_SERVICE_WORK

The create verb the work-order surface never had. app/commerce/service/new is a seventeen-line placeholder because there was nothing to call. Gated on MANAGE_S...

Kamo·4w ago
ChoreSecurityService

Rebuild to seed the four order and pricing rights

An empty commit built out of tree from origin's own tree. RoleRightsSyncService seeds org_role_rights at boot, so a right shipped without a SecurityService rebu...

Kamo·4w ago
FixSecurityService

Gate the order and pricing surfaces on a right

Thirty-nine endpoints were protected only by "are you signed in". Every order handler on POSController and every pricing and tax handler on CommerceMarketContro...

Kamo·4w ago
OtherSecurityService

The exchange status says what would make it connected

The status endpoint is asked before the UI offers a network query, so a practice that is not onboarded sees an explanation instead of a button that always fails...

Kamo·4w ago
OtherSecurityService

Never auto-provision Patient Records into a tenant

Two of the three paths that would hand a clinical record system to orgs that never asked for one, now that ServiceType.EHR is COMPLETED and therefore available....

Kamo·4w ago
OtherSecurityService

Disclose that drug interactions are not checked

Prescribing ran three checks the practice's own data can answer and no drug-drug interaction check at all. Declining to build one was right -- interaction knowl...

Kamo·4w ago
ChoreSecurityService

Rebuild against kamo-shared-library for SW6b work-order writes

An empty commit, built out of tree from origin's own tree — NOT 'git commit --allow-empty', which permits an empty result but does not force one and would have ...

Kamo·4w ago
FeatureSecurityService

Eight work-order endpoints for lines, notes, vendors, sign-off and the clock

SW6b Task 3, controller half. POST/PUT/DELETE /{jobUid}/lines/..., POST /{jobUid}/notes, POST/DELETE /{jobUid}/vendors/..., PATCH /{jobUid}/signoff and PATCH **...

Kamo·4w ago
DocsSecurityService

Say why the transaction guard stops at ehr/

The two rules generalise and both shapes exist elsewhere in this service, so the obvious next move is to widen the scan — and doing that would fail the build on...

Kamo·4w ago
DocsSecurityService

Say why the overload's @Transactional is inert on the afterCommit path

Prompted by a peer session finding a @Transactional(REQUIRES_NEW) Spring never advised — protected, and self-invoked, so the record of a failed query rolled bac...

Kamo·4w ago
TestSecurityService

Fail the build on a @Transactional Spring cannot advise

Two shapes get no transaction advice at all, and neither is visible at a call site or in a unit test: a non-public method, which the proxy cannot intercept, and...

Kamo·4w ago
FixSecurityService

The outbound audit row was written by an inert REQUIRES_NEW

It was a method on ExchangeQueryService annotated @Transactional(REQUIRES_NEW), called from two private helpers on the same class. Spring's transaction advice l...

Kamo·4w ago
FixSecurityService

Main did not test-compile — PhiExportAuditTest missed a constructor arg

SystemConfigurationController gained a twelfth parameter, PlatformSecretCipher, when platform secrets began being encrypted at rest. This test still passed elev...

Kamo·4w ago
FeatureSecurityService

Expose platform settings through the system-config API

toDto is an explicit allowlist and updateConfig takes a typed body, so the seven new SYSTEM_CONFIGURATION columns would have been invisible and unsettable — the...

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