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
Testkamo-shared-library

Pin the quote letter's dotted templateKey, as the HR family already is

The constant is not the templateKey. CanonicalTemplateLoader.load derives only the FILENAME from the constant (QUOTE_SENT -> quote-sent.json) and reads template...

Kamo·3w ago
Testkamo-internal

Guard the confirmation on a single-message delete

A member reported deleting the wrong email from /messages: the row's trash icon fired straight through to the API, so one stray click on the right edge of a row...

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
August 27, 2026
TestMediaService

Pin the attachment sniff to real encoder output

The existing cases build a header by hand, which tests the code against my belief about the format rather than against the format. These sixty-four-byte prefixe...

kamo·4w ago
TestKlusterServices

Match the SIP status code, not the reason phrase

sip-probe.py required the literal string "200 OK". 2600Hz's Kamailio config answers OPTIONS with "200 Rawr!!", so the probe reported a healthy, correctly config...

Kamo·4w ago
TestKlusterServices

Probe SIP for real, and assert the white-label holds on the wire

A TCP connect to 5060 proves almost nothing — it succeeds against anything listening, and on UDP it cannot fail at all. That ambiguity is exactly what led me to...

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
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·4w 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·4w ago
August 26, 2026
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
Testkamo-internal

Pin toSessionType and backendCategoryFor

Neither had a single caller in this file before now, despite being exactly the class of function its own header warns about: a one-character typo ('Text' for 'T...

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
Testkamo-internal

Pin down bucketOf and unreadForRow against a repeat

This file just shipped four silent defects in one review round — an AI row that fell through to the wrong bucket, a title that was never read off the row, a buc...

kamo·4w ago
TestBillingService

Prove library HQL parses on the Hibernate this service actually runs

kamo-shared-library builds on Boot 3.3.4 / Hibernate 6.5; BillingService runs Boot 3.1.5 / Hibernate 6.2.13. The library's own HQL tests therefore pass vacuousl...

Kamo·4w ago
August 25, 2026
TestSecurityService

Baseline the desktop probe, which is guarded where the scan cannot see

**************** has been failing on main since ba3f85c. DesktopProbeController#probe is not unguarded — it checks X-Internal-Auth through authorized(auth), con...

Kamo·4w ago
August 24, 2026
Testkamo-shared-library

Ratchet that a blocked capability with no app has a call-site guard

Splitting an app from the capability inside it is what lets a clinic hold a phone system and a video room at all, but it moves the enforcement burden. PhiModule...

Kamo·1mo ago
August 22, 2026
TestDocsService

Give the audit test the new constructor argument

Missed in the previous commit, which I pushed off a grep's exit code instead of maven's — so a red suite went out as green. The controller gained a ClassicSaveP...

Kamo·1mo ago
August 21, 2026
TestSecurityService

An opt-in probe that executes the grid's SQL, not just its HQL

/leads went down on 2026-08-20 with 'missing FROM-clause entry for table a2_1' and no test caught it, because none of them could: the library compiles against H...

Kamo·1mo ago
August 14, 2026
Testkamo-internal

Catch a template-built i18n key that next-intl cannot reach

The catalogue's keys contain dots, and they were written into en.json as literal flat keys. next-intl resolves by splitting on dots, so every one of the 46 even...

kamo·1mo ago
Testkamo-internal

Make 'do not hand-edit the unenforced list' enforceable

The list has been wrong four times (58 -> 52 -> 47 -> 57) and every single time because it was edited by reasoning instead of regenerated. The file already said...

kamo·1mo ago
August 12, 2026
Testkamo-internal

Strengthen hrOverview id-precision and attendance-state coverage

The precision test used a 15-digit memberId, which round-trips through Number() losslessly and never proved the join key stays a string. Switch to an id past Nu...

kamo·1mo ago
August 11, 2026
Testkamo-shared-library

Pin how the pool divides into per-mailbox limits

Dovecot needs a byte figure per mailbox, but storage is one organization-wide pool across eighteen domains. The division has to hold one property above all — th...

Kamo·1mo ago
Testkamo-shared-library

Pin the delegation-mode semantics

These predicates are what the surfaces hide themselves on, so getting one wrong either offers a button that cannot work or silently permits a charge the owner m...

Kamo·1mo ago
August 9, 2026
Testkamo-shared-library

Pin the deprecated-alias exclusion

The catalog key is ServiceType's numeric id, and several retired constants deliberately share one with the app that replaced them — DOC_MANAGER with DOCS on 8, ...

Kamo·1mo ago
August 7, 2026
Testkamo-shared-library

Script the half of the scan invariant this repo cannot see

SharedLibBeanSafetyTest can only police the library: it knows a bean requires a repository from some package, and nothing about whether the ~40 services scan it...

Kamo·1mo ago
Testkamo-shared-library

Detect the unsafe repository dependencies instead of listing them

The guard carried 29 baselined offenders and a location exemption, and caught none of the four outages it exists to prevent. Both were guesses standing in for a...

Kamo·1mo ago
August 6, 2026
TestSecurityService

Cover the chat-routing propagation that broke assignLoanOfficer

assignLoanOfficer gained a step that looks up the loan's source lead to reroute the borrower's open public-chat session. That lookup runs a JPQL query through t...

Kamo·1mo ago
August 5, 2026
Testkamo-shared-library

Pin the contact-point and linker invariants, and drop timeline count queries

The two classes the whole feature rests on had no tests, and all three properties they guarantee fail silently in production: an unmatched call is indistinguish...

Kamo·1mo ago
August 3, 2026
TestSecurityService

Fail the build when a repository package is missing from the scan

This service has @ComponentScan("com.kamo") but an EXPLICIT @EnableJpaRepositories list. The moment a bean here needs a repository outside that list, the reposi...

Kamo·1mo ago
TestSecurityService

Ratchet on endpoints that resolve no session

ResourceServerConfig is anyRequest().permitAll() and @EnableMethodSecurity appears nowhere in this service, so every @PreAuthorize is inert and public is the de...

Kamo·1mo ago
July 15, 2026
TestSecurityService

Prove closed-loan trainer convergence + retire + concurrency

Drives ClosedLoanTrainerService across successive passes with the (pre-live) MeridianLink wire and vision read stubbed, locking the behaviour the design hinges ...

Kamo·2mo ago
July 10, 2026
Testkamo-shared-library

PlatformOAuthProviderType append-order guard

Regression-locks the Phase 5 pull-forward: MERIDIANLINK(8,"meridianlink", "MeridianLink Mortgage") must stay the LAST constant so no existing provider's persist...

Kamo·2mo ago
July 9, 2026
Testkamo-shared-library

Regression test for LeadMarket MLOS collapse rule

Kamo·2mo ago
Testkamo-internal

Add vitest scoped to app/lib/mortgage engine

kamo·2mo ago
TestSecurityService

Lock the system-managed originator (projection, freeze, assignment)

8 tests over LoanTransactionService: live projection fills name/NMLS/subject-state license + org and marks LIVE; stale hand-entry is cleared when no LO is assig...

Kamo·2mo ago
July 4, 2026
Testkamo-shared-library

[11] doc 11 §6.2 single-active enum↔DDL drift guard

**************** is derived from enum metadata, but the DB backstop is four partial-unique indexes in KamoInitializer whose type IN(...) lists HARD-CODE the sin...

Kamo·2mo ago
Testkamo-shared-library

Update CanonicalTemplateLoaderTest for the change-password template set

Commit 7c6b20f (change-password support) added the canonical PASSWORD_CHANGED template and reworded EMAIL_VERIFICATION's expiry variable ({{expiryMinutes}} → {{...

Kamo·2mo ago
TestSecurityService

Lock the D28 stage-override write logic (legal-wall reject, delete+audit, rollback)

6 tests over the new MlosConfigWriteService methods: legal-wall stages rejected before any write; routine upsert bumps profileVersion + appends the WORM change-...

Kamo·2mo ago
May 29, 2026
Testkamolos

Tier 4 — LoanPaymentPostingService unit tests

Six mocked-repository unit tests covering the heart of the payment posting: - **************** payment of $100 against loan with $25 fees / $50 interest / la...

Kamo·4mo ago
May 16, 2026

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