KamoCRM

Live Change Log

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

18,891
Total Changes
6,828
Features
5,701
Fixes
30
Projects
Filter by project
All Projects18,891AIService287APIService179BillingService166ConversionService121DaemonService152DocsService275ESigService103EmailService652InitializerService350KBService163KlusterServices778MCPGatewayService280MediaService629RAGService79SecurityService2,066TranslateService62VOIPService266VectorService11kamo-apps29kamo-asterisk-support29kamo-capcha17kamo-capcha-widget4kamo-internal8,885kamo-login346kamo-marketing642kamo-nowww20kamo-register216kamo-shared-library1,896kamo-signer-monorepo73kamolos115
Filter by type
All TypesBuild23CI528Chore798Docs3,295Feature6,828Fix5,701Other1,007Performance175Refactor286Revert23Style45Test181Upgrade1
July 12, 2026
FixDaemonService

Crystalline/metamorphic basement classifies correctly (was VOLCANIC)

Macrostrat 'metamorphic and undivided crystalline (...may include volcanic...)' tripped the volcan substring; check metamorphic/crystalline before volcanic. Als...

Kamo·4mo ago
FixDaemonService

Ridge petrology search to 25km, no relief gate

The gazetteer point often sits in the valley floor with the range 15-20km off; the 15km search + relief gate missed them (Yucca Valley returned alluvium despite...

Kamo·4mo ago
FixDaemonService

Petrology reads the ridge bedrock, not the valley floor

A town centroid usually sits on valley ALLUVIUM while the mountains the scene draws are bedrock — so a granite-ringed desert town returned 'alluvium' and got no...

Kamo·4mo ago
FixSecurityService

Register mlos.notification JPA repos so SecurityService starts

EconsentService autowires DisclosureTextRepository **************** but that package was absent from @EnableJpaRepositories — the context failed to start, Crash...

Kamo·4mo ago
July 11, 2026
FixSecurityService

Prepare-signin authenticates on api.<root> — the auth path can't resolve the myloan.* alias

Same constraint as in-cluster login: provider resolution keys on the canonical api host, not the portal alias, so a correct password still 401'd.

Kamo·4mo ago
FixESigService

AntPathRequestMatcher — immune to multi-servlet contexts

Belt-and-braces with the shared-lib SoapClientOnlyGuard (c4a3b2c): the 891c58c build raced the guard's push into shared-lib main and kept crash-looping on 'more...

Kamo·4mo ago
Fixkamo-shared-library

The servlet guard must define the SERVLET bean — Boot conditions on the type, not the registration

f8bcc82's ServletRegistrationBean alone name-collided with the auto-config **************** WebServicesAutoConfiguration's bean is **************** Define the s...

Kamo·4mo ago
Fixkamo-shared-library

Disabled MessageDispatcherServlet registration — kills the multi-servlet landmine for real

Removing the web-services STARTER (55eae0a) was not enough: spring-ws-core itself carries MessageDispatcherServlet, and Boot's WebServicesAutoConfiguration cond...

Kamo·4mo ago
Fixkamo-shared-library

Spring-ws CLIENT-ONLY — the server starter made every consuming service multi-servlet

**************** auto-registers a MessageDispatcherServlet in EVERY service that depends on shared-lib; with Spring Security 6 that breaks any string requestMat...

Kamo·4mo ago
Fixkamo-shared-library

UpdateLoanFile PATCH must not null absent fields — status-only patch wiped loanNumber/dates

Any partial loan-file patch (the portal's submit sends only {statusId:2}) unconditionally overwrote loanNumber, channelId, and every lifecycle date with null. G...

Kamo·4mo ago
Fixkamo-internal

Never render literal "null" in lead view header name

The header and headerName memo built the contact name with template literals, so a NULL middle/last name stringified to the word "null" (e.g. "Sage null"). Buil...

kamo·4mo ago
FixVOIPService

Guard /internal/voip with InternalAuthFilter as documented — it 401'd on session auth

VoipInternalSyncController always documented InternalAuthFilter as its guard, but /internal/voip was never in PROTECTED_PREFIXES nor excluded from the OTK sessi...

Kamo·4mo ago
FixDaemonService

VoipGlobalSyncJob stamps the MLOS internal-auth secret VOIP actually validates

After the hostname fix the job 401'd: VOIP's InternalAuthFilter checks the mlos-internal-auth value, but the job read internal.auth.secret, which in DaemonServi...

Kamo·4mo ago
July 10, 2026
FixDaemonService

VoipGlobalSyncJob targeted a nonexistent host — kamovoip-service, not voip-service

Every minute the job failed DNS on **************** the actual Service (and what StewardNotifier already uses) is kamovoip-service. Fixed the configmap default ...

Kamo·4mo ago
Fixkamo-shared-library

Bound IP block lookup to a single indexed row

findByIpInRange's two-sided range predicate forced CockroachDB to scan every block with networkStart <= ip whenever the IP fell in a gap (private/bogon/ spoofed...

Kamo·4mo ago
FixDaemonService

Re-parent geolite config under daemon: so the weekly sync actually runs

Commit 53eed7b re-parented the geolite block under internal: while the code reads daemon.geolite.* — with SPRING_CONFIG_LOCATION replacing classpath defaults, G...

Kamo·4mo ago
FixDaemonService

Boot crash — Ant matchers for the multi-servlet context (spring-ws /services/*)

MVC-implicit string requestMatchers are rejected by Spring Security 6 once the MeridianLink integration's MessageDispatcherServlet joins the DispatcherServlet —...

Kamo·4mo ago
FixSecurityService

Preferred name fills AKA+first; pool entry publishes the realtime lead event

(1) The funnel's preferred name now writes nameFirstAKA AND stands in for nameFirst until the legal name arrives (owner rule) — it was landing on first name onl...

Kamo·4mo ago
Fixkamo-shared-library

CreateFromLead saved Declarations against a transient Borrower — save the app graph first

Same latent TransientPropertyValueException the blank create() fixed at its first caller; createFromLead's first real caller is the portal promote seam (caught ...

Kamo·4mo ago
Fixkamo-shared-library

AccountGuid insert always violated FIRST_SEEN_AT NOT NULL — ZERO portal leads ever created

Hibernate includes every mapped column in INSERT (no @DynamicInsert), so the unset timestamp went out as explicit NULL and the DB default never applied. Every v...

Kamo·4mo ago
Fixkamo-internal

Reply-all no longer CCs yourself; blank lines survive send

Reply All excluded only activeMailbox.emailAddress, which is unset on the default personal mailbox view — so your own address (from the original To:) landed in ...

kamo·4mo ago
FixSecurityService

Weld the LO chain — portal leads enter the accept-lead pool; accepted LO survives conversion

(1) PortalLeadService routes a portal lead into the credit-based assignment pool (requiresAssignment=true) the moment it has a contact point — portal leads were...

Kamo·4mo ago
Fixkamo-internal

Keep form + What-If as one grid cell so the outputs panel stays in the right column

The What-If move made MortgageFieldsComponent render Card + whatIfSlot as sibling children; since MortgageDetailsTab lays out its children in a 2-col grid, What...

kamo·4mo ago
Fixkamo-internal

Restore two-column outputs layout (Rate above Insights in the left column)

Prior reorder pushed Rate/Insights into the right column, collapsing the balance onto one side. Keep the short summary cards in the LEFT column (Rate directly a...

kamo·4mo ago
Fixkamo-internal

Drop response-only enum string mirrors from mortgage save payload

The lead update was 400ing — UpdateLeadRequest rejects unknown fields and the form round-tripped LeadDTO's **************** strings (which only exist on the res...

kamo·4mo ago
Fixkamo-internal

Clear core-card edit on nav + guard communications composer draft

Discard the open core-card edit (release its pane lock) when the user proceeds past the unsaved-changes confirm in setTab/guardedNavigate, so editingCard no lon...

kamo·4mo ago
Fixkamo-internal

Surface recommended (yellow) fields even before a loan purpose is set

The blank-lead fallback returned only the required set, so a purpose-less lead showed red markers but never yellow. Now **************** are flagged as recommen...

kamo·4mo ago
Fixkamo-internal

Checkbox selection no longer reloads the grid

Selecting a row checkbox called setSelectedIds(new Set(...)), which was listed in loadLeads' useCallback deps. That gave loadLeads a new identity on every click...

kamo·4mo ago
Fixkamo-internal

Align losConnectionApi.remove return type

The DELETE endpoint returns {deleted:true, marketId}, not just {deleted:boolean} — align the client type to match the backend shape.

kamo·4mo ago
FixSecurityService

Real soft-delete + reactivate-on-upsert for LOS connection; safe test-connection message

I1: view()/testConnection() now read via the shared-lib's active-filtered finder so a soft-deleted (market,provider) connection reads as "not configured" instea...

Kamo·4mo ago
July 9, 2026
Fixkamo-internal

Send X-***-Token on the upload XHR (fixes all uploads failing)

The session moved from a cookie to per-tab sessionStorage (896ea516); window.fetch is monkey-patched to attach X-***-Token to /api/* calls, but the raw XMLHttpR...

kamo·4mo ago
Fixkamo-shared-library

Promote base mortgage-market leads to LeadClaimMortgage on save so mortgage fields persist

A lead whose market sub-type is (residential/commercial) mortgage was stored as a base Lead unless the backend salesType itself equaled the mortgage type, so up...

Kamo·4mo ago
Fixkamo-internal

Cap concurrent uploads (queue, max 3)

Multi-file upload fired every selected file at once, and the burst of concurrent server-side resizes OOM'd the image service. Queue the uploads and run at most ...

kamo·4mo ago
FixConversionService

Bound concurrent ffmpeg to prevent OOM under upload bursts

A multi-file upload fires all files at once; each ffmpeg decode allocates the full uncompressed frame, so N concurrent large images blew past the pod's memory l...

Kamo·4mo ago
FixConversionService

Downscale-only (never upscale small images)

**************** scaled small images UP to fill the box (800x600 -> 1440x1080). Compute a concrete downscale factor capped at 1.0 from the probed dimensions ins...

Kamo·4mo ago
FixConversionService

Harden ffmpeg resize (probe safety, dim caps, bomb guard)

Adversarial-review follow-ups on the ffmpeg rewrite: - probeDimensions redirects ffprobe output to a file and calls waitFor() FIRST (destroyForcibly on timeou...

Kamo·4mo ago
FixSecurityService

Fail the upload if resize fails (no full-size fallback)

Reverts the store-original fallback: if ConversionService cannot resize the image, return 422 instead of storing the full-size original (a huge image would then...

Kamo·4mo ago
FixConversionService

Resize backgrounds via ffmpeg subprocess (crash-isolated)

ImageIO + webp-imageio could native-crash the JVM (SIGSEGV in libwebp-imageio, UpsampleBgraLinePair_SSE2) on certain WebP inputs, taking the whole ConversionSer...

Kamo·4mo ago
FixSecurityService

Fall back to the original image when resize fails

ConversionService can native-crash (libwebp-imageio SIGSEGV) or be unavailable, which made every member wallpaper upload fail ("Failed to process image" -> 500)...

Kamo·4mo ago
Fixkamo-internal

Coerce deriveRelevance purpose to LoanPurpose | null

scenarioFromLeadFields' loanPurpose is LoanPurpose | null | undefined, but Relevance.purpose is LoanPurpose | null — the possible undefined failed the prod type...

kamo·4mo 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