KamoCRM

Live Change Log

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

18,391
Total Changes
6,526
Features
5,537
Fixes
30
Projects
Filter by project
All Projects18,391AIService276APIService177BillingService161ConversionService117DaemonService146DocsService240ESigService93EmailService619InitializerService344KBService162KlusterServices769MCPGatewayService277MediaService620RAGService79SecurityService1,995TranslateService62VOIPService265VectorService11kamo-apps26kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,691kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,824kamo-signer-monorepo57kamolos114
Filter by type
All TypesBuild23CI525Chore794Docs3,286Feature6,526Fix5,537Other1,001Performance174Refactor281Revert23Style45Test175Upgrade1
November 11, 2026
FixSecurityService

The loan and property endpoints are true PATCHes

KamoΒ·7h ago
FixSecurityService

The portal's job, account, debt, other-income and expense edits are true PATCHes

Each endpoint now merges the request over the stored row (shared library patch* methods), so changing a job's title no longer fails on the NOT NULL employment t...

KamoΒ·7h ago
FixSecurityService

Talk It Through no longer 500s when the portal sends no flow

Set.of(...).contains(null) throws, so a request without a flow hint (the funnel before a purpose is chosen) answered 500. Found by a live probe after deploy. fl...

KamoΒ·8h ago
FixSecurityService

No read-only transaction around multi-read views; retry the edge routing read

YugabyteDB answered the edge's routing read with 'Restart read required' β€” a restart-read cannot be retried mid-transaction. Each read now runs as its own state...

KamoΒ·11h ago
November 10, 2026
FixSecurityService

Accept-gate refusal no longer says both a note and a status are needed

The requirement is per market now.

KamoΒ·19h ago
FixSecurityService

A failed request tells the caller to try again, not what the exception said

25 controllers returned e.getMessage() to the browser, which can name tables, columns and internal hosts. They now answer with a plain 'please try again' and lo...

KamoΒ·1d ago
November 8, 2026
FixSecurityService

The store sync schedule tells Spring which constructor to use

With a second (test) constructor and no @Autowired, the new pod failed to start: "No default constructor found". The running pods were untouched.

KamoΒ·3d ago
FixSecurityService

A staff vendor-document upload files under the requirement's document type

ImageService refuses a LOAN image without an ImgDocType, and uploadLoanDocument passed none (the doc type's name went into the description), so every staff vend...

KamoΒ·3d ago
FixSecurityService

Outbreak alerts reach the platform owner; import and rate-sheet detections name the member

Every platform operator holds MANAGE_PLATFORM_ANTIVIRUS only implicitly (owner floor), so the explicit holder list was empty and an outbreak told nobody. Recipi...

KamoΒ·3d ago
FixSecurityService

Stamp a vendor on every credit pull so a reseller order saves

Connection.VENDOR is NOT NULL; a reseller key (Xactus, Credit Plus, MeridianLink, CBC Innovis, Factual Data) mapped to no ConnectionVendor, so the pull ran and ...

KamoΒ·3d ago
November 7, 2026
FixSecurityService

Accept the phone's session, like every session endpoint

SIE5. **************** read only the BFF's X-OTK session, so KamoMobile (api.<org> with X-***-Token) got 401 and could not share a preference with the web β€” the...

KamoΒ·4d ago
November 6, 2026
FixSecurityService

A cancelled run is waiting on the newer push, not a failure

Forgejo reports a run a newer push cancelled as failure / "Has been cancelled", and with several sessions pushing that is most runs. It now stays in flight (QUE...

KamoΒ·4d ago
November 2, 2026
FixSecurityService

A failed internal action says why in the log

KamoΒ·1w ago
November 1, 2026
FixSecurityService

The applications list reads scalar pipeline rows

The list behind /commerce hydrated the URLA graph to fill a twenty-column row. It now uses the shared AppMortgageSummaryReader, and the parse test guards the re...

KamoΒ·1w ago
FixSecurityService

A paused seat loses its capabilities too

KamoΒ·1w ago
FixSecurityService

A paused seat does not count as a license

KamoΒ·1w ago
FixSecurityService

A paused seat grants nothing; the Apps screen says how an app can be had

A paused subscription's licenses stay assigned, ready for the resume, and grant nothing. Each app an organization lacks now carries how to get it: an add-on, a ...

KamoΒ·1w ago
FixSecurityService

Automated and approved loan moves answer to the linked-loan rule

One LinkedLoanRule now decides for stage moves and for loan milestones. With no person a loan linked to an external LOS does not move. A review approval moves o...

KamoΒ·1w ago
FixSecurityService

Keep DKIM verified on a sweep, as SPF is

dkim_verified only moved when an owner reopened the DKIM card. It now decides whose name an org's mail carries, so a published record has to count by itself.

KamoΒ·1w ago
October 31, 2026
October 29, 2026
FixSecurityService

Forget an invoice's expired card payment page

An abandoned Stripe Checkout page (it expires unpaid after 24 hours) stayed on the invoice for good, so the invoice looked mid-payment: it could not be updated ...

KamoΒ·1w ago
October 28, 2026
FixSecurityService

Mark the adverse-action clock's Spring constructor, so SecurityService boots

With a second (test) constructor and neither marked, Spring looked for a no-argument one and the new pods crashlooped; the older pods kept serving.

KamoΒ·1w ago
FixSecurityService

Pricing, capital and servicing policy tabs load before a first version is published

GET **************** built its body with Map.of("active", <active or null>, "history", ...). Map.of refuses null, so for any organization that had not published...

KamoΒ·1w ago
FixSecurityService

An edit never creates an older loan in the external MLOS

Any successful write under /mortgage-apps/{uid} queues an outbound sync, and a loan with no link was then created in the provider whatever its age β€” so editing ...

KamoΒ·2w ago
FixSecurityService

An empty PKCE pair is no PKCE, so Google Home can link without it

kamo-login forwards parameters the client did not send as empty strings; the authorize check took "" as a challenge and told Google (require_pkce off, sends no ...

KamoΒ·2w ago
FixSecurityService

The endpoint ratchet sees the patient-SMS relay's internal-auth guard

**************** flagged **************** and .receipt (29e22ca7) as endpoints that resolve no session. They are server-to-server (VOIPService -> SecurityServic...

KamoΒ·2w ago
October 26, 2026
FixSecurityService

An order may be a teammate's proven email or a request they confirmed in Kamo

The Tool Plane now verifies orders given by a teammate's own email (email:<folder>/<uid> or the wake's email:<mailbox>|<folder>|<uid>) and by a request the memb...

KamoΒ·2w ago
FixSecurityService

A generated personality keeps everything the SI already holds

Only an earlier generation's items, named by id and still marked as drafted, are replaced; a configure-assistant draft or a person's item stays, and a generated...

KamoΒ·2w ago
FixSecurityService

Never push a stage to the external MLOS that the sync itself wrote

The Arive import walks a loan through Kamo's pipeline one step at a time; the 20s sync tick saw each half-walked status as a Kamo change and sent it to Arive, r...

KamoΒ·2w ago
FixSecurityService

Never send exception text (SQL included) to the browser

BaseLosController.error() put e.getMessage() in every 500 body; the pipeline page showed a full JDBC statement. The exception now goes to the log under a short ...

KamoΒ·2w ago
FixSecurityService

Pipeline reads retry on a Yugabyte read restart instead of failing the page

"We couldn't load the pipeline (JDBC … Restart read required)" appeared at random while the Arive import was writing loans. The deal and loan list reads are pur...

KamoΒ·2w ago
October 25, 2026
FixSecurityService

Retry the import's progress write on a Yugabyte read restart

The first live import stalled at RUNNING after page 1: saving the connection loads the org's domains, Yugabyte answered 40001, and the failure write hit the sam...

KamoΒ·2w ago
FixSecurityService

Billing write service starts again β€” the constructor keeps its @Autowired

The terminology commit inserted the code-checker field between @Autowired and the constructor, so the annotation moved onto the field and Spring found three una...

KamoΒ·2w ago
October 24, 2026
October 23, 2026
FixSecurityService

The owners' invoice link opens on the workspace host the org can actually reach

Built internal.<domain> by hand, which OrgDomainRuleGuardTest forbids: an org whose own domain is not finished would get a link to a host that answers nothing. ...

KamoΒ·2w ago
October 22, 2026
FixSecurityService

The billing job takes each subscription and invoice in its own transaction

Its first run raised Harmony's October invoice and lost it when one audit insert failed, because the whole prepare step was one transaction.

KamoΒ·2w ago
FixSecurityService

Catalog edits reach only the caller's organization; own-order callers cannot comp or price themselves

Every update and delete of a subscription plan, price, feature, add-on, bundle, volume discount, promotion or agreement template now checks that the row belongs...

KamoΒ·2w ago
FixSecurityService

Creating a MORTGAGE market gives the organization its lender profile at once

A MORTGAGE market's lender profile (and its five config rows) was only created by the boot-time self-heal, so a market created while SecurityService was running...

KamoΒ·2w ago
October 18, 2026
FixSecurityService

The endpoint ratchet sees @RequireRight; the org-graph ratchet allows two read-only hits (SITP TPGUARD)

**************** flagged the TP02 billing and commerce-invoice relays. Not a hole: every commerce-invoice handler carries @RequireRight (TenantRightInterceptor ...

KamoΒ·3w ago
FixSecurityService

Staff can delete a never-received mortgage application; a received one answers 409 (SITP TP21FU)

DELETE **************** went through AppMortgageService.delete, which 500'd for every application (borrower satellite rows left behind). The shared library now ...

KamoΒ·3w ago
FixSecurityService

Every clinical audit row names its patient; pick up the shared-lib audit and updated_at fixes (SITP TP23FU)

Production phi_access_log rows from the clinical audit methods carried no purpose, basis or patient: the shared PhiAccessRecorder dropped them while stamping th...

KamoΒ·3w ago
FixSecurityService

Starting a clinical note no longer fails on updated_at (SITP TP23 live smoke)

ClinicalBaseEntity.updated_at is NOT NULL and defaulted by the database on INSERT only (insertable = false), so a note just inserted holds null in memory and th...

KamoΒ·3w ago
FixSecurityService

Booking an appointment no longer fails on an untyped null in the conflict check (SITP TP23 live smoke)

findConflicts' (:excludeId IS NULL OR a.uid <> :excludeId) with a null UUID is an untyped parameter on Postgres/Yugabyte ('could not determine data type of para...

KamoΒ·3w 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