KamoCRM

Live Change Log

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

18,406
Total Changes
6,537
Features
5,540
Fixes
30
Projects
Filter by project
All Projects18,406AIService276APIService177BillingService161ConversionService117DaemonService146DocsService240ESigService93EmailService622InitializerService344KBService162KlusterServices769MCPGatewayService277MediaService620RAGService79SecurityService1,997TranslateService62VOIPService265VectorService11kamo-apps26kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,699kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,826kamo-signer-monorepo57kamolos114
Filter by type
All TypesBuild23CI525Chore794Docs3,286Feature6,537Fix5,540Other1,001Performance174Refactor282Revert23Style45Test175Upgrade1
July 6, 2026
Fixkamo-shared-library

Party-link cross-human leak + account-level backfill

Adversarial-review fixes: - HIGH: drop the memberId dedup that conflated the loan's isPrimary borrower with the account OWNER — a member self-creating a loan ...

Kamo·4mo ago
FixSecurityService

Self-heal party links before enriched requirement read

listDocumentRequirements calls ensurePartyLinks so requirement rows always carry an accountBorrowerPartyId (the borrower upload/satisfy target).

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

Vendors-products — white-label default-product terminology, dialog option, FFA header

- Rename 'KamoMLOS' → 'Borrower Origination Web Portal' everywhere in the vendors-products UI (star tooltip, snackbars) — this is a white-label multitenant pr...

kamo·4mo ago
FixSecurityService

Default-product set failed — HQL bulk UPDATE disallows the vendor→org join

setDefault used a bulk 'update LeadVendorProduct ... where p.vendor.id in (subquery)' — Hibernate bulk updates reject the implicit association join, so the call...

Kamo·4mo ago
Fixkamo-shared-library

CreateBlank must persist the app graph before bootstrapBorrower

bootstrapBorrower seeds a Declarations/HMDA shell whose NOT-NULL borrower FK requires the Borrower to be persistent; createBlank called it BEFORE the cascading ...

Kamo·4mo ago
FixSecurityService

Borrower self-create = createBlank then stampOwnershipAndGet (two txs)

Sequence the borrower ownership stamp as a separate service call after createBlank commits, so the new borrower/declarations graph is flushed before the account...

Kamo·4mo ago
Fixkamo-shared-library

Stamp borrower ownership in a separate tx (avoid transient-graph cascade)

createBlankOwnedByMember re-saved the app graph in the same tx as createBlank, before the borrower/declarations rows were flushed → TransientPropertyValueExcept...

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

Drop light gray text; use dark gray-800 for labels/secondary

Medium grays (gray-500/600/700, #6b7280/#9ca3af) read as disabled. Push all secondary text and labels to gray-800 / #374151 across the detail page, shared Field...

kamo·4mo ago
Fixkamo-internal

Governance proxy PUT/DELETE + per-org governor overrides UI (D4)

- Governance proxy now forwards PUT/DELETE (the platform-default save + per-org delete were unreachable — GET/POST-only proxy). Adds mlosDelete http helper. -...

kamo·4mo ago
Fixkamo-internal

Stop loan-pipeline grid flicker loop; full-width detail

- Loan pipeline datagrid: the grid was wrapped in a SectionCard 'fill' body (overflow:auto) around a height:100% AG Grid, causing a ResizeObserver/height fe...

kamo·4mo ago
Fixkamo-internal

Fire the accept-lead popup on becoming Available; drop the fire animation

The popup now triggers on the rising edge of (a credit lead is acceptable) AND (nav-top status is Available) — so it fires both when a lead is already waiting a...

kamo·4mo ago
FixInitializerService

Scan mlos.intake repos (§5.A) + drop orphan mlos_aus_connection_config (D40)

- Add com.kamo.z.shared.mlos.intake to @EnableJpaRepositories — the §5.A **************** was component-scanned but not a JPA repo, aborting KI startup befo...

Kamo·4mo ago
Fixkamo-internal

Honest return type for updateStageOverride (raw row, not StageAutonomyView)

Review observation: the PUT returns the raw stored override entity, not a StageAutonomyView (the effective/floor recompute is GET-only). Typed Promise<unknown> ...

kamo·4mo ago
FixDaemonService

Consumer review findings - MLOS secret, HTTP timeouts, max-deliver clamp, 4xx skip, boot rebind

Adversarial review (2 lenses; 5 verifiers died on a session limit - adjudicated the 9 raw findings by hand, 6 real): - WRONG SECRET (confirmed by hash compariso...

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

Type TrialStatus ids as string to match Long-as-string serialization

BillingService now serializes Long as a JSON string (org/member ids are CockroachDB unique_rowid() > JS MAX_SAFE_INTEGER). Align TrialStatus.organizationId and ...

kamo·4mo ago
FixBillingService

Serialize Long ids as strings to stop org-id precision loss

Org ids are CockroachDB unique_rowid() values that exceed JS MAX_SAFE_INTEGER. BillingService was serializing them as raw JSON numbers, so kamo-internal's JSON....

Kamo·4mo ago
FixDaemonService

Register JSR-310 on the consumer mappers - real envelopes carry an Instant occurredAt

E2E caught it: both real decision.routed events were dead-lettered as 'unparseable' because the bare ObjectMapper cannot deserialize java.time.Instant. findAndR...

Kamo·4mo ago
Fixkamo-internal

Hot Reassign — always post the required call note; keep current assignee selectable

Review follow-ups: (1) drop the comment-dedup ref that could silently skip the required note on a later attempt (or an edited retry) after a failed mark — alway...

kamo·4mo ago
Fixkamo-shared-library

MlosConfigChangeLog date_created — drop @ColumnDefault (duplicate default)

Both @ColumnDefault("now()") and columnDefinition="TIMESTAMP DEFAULT now()" made Hibernate emit 'TIMESTAMP DEFAULT now() default now()', which CockroachDB rejec...

Kamo·4mo ago
FixVOIPService

Exclude /api/voip/sms/templates from OTK session filter

The doc-07 SMS template endpoints are session-less internal calls guarded by InternalAuthFilter (X-Internal-Auth), but OTKValidationFilter still ran on them and...

Sage·4mo ago
Fixkamo-internal

Apply adversarial-review findings on the steward write composers

- a11y: WAI-ARIA arrow-key radio pattern (shared onRadioKey helper) for the verdict + run-purpose segmented controls (they were keyboard traps); focus retur...

kamo·4mo ago
FixSecurityService

Close residual cross-org existence oracles + cap WORM-bound JSON blobs

Adversarial-review findings MLOS-W-01/03/04: - the 404-normalized empty list envelope now echoes the request's identity keys **************** so unknown, fore...

Kamo·4mo ago
Fixkamo-shared-library

MediaObjTransit.date_created insertable=false so DB default fills it

The builder never set dateCreated; Hibernate bound NULL and violated the NOT NULL constraint, breaking addMembersToSession (and thus the social lead-accept hook...

Kamo·4mo ago
FixSecurityService

Atomic claim before lead creation — prevent orphan pooled leads

social.lead.new can be processed concurrently (old + new SecurityService pod both hold a core-NATS subscription during a RollingUpdate → one publish delivered t...

Kamo·4mo ago
Fixkamo-internal

Don't fire the new-lead popup on refresh / when not Available

myStatus from AvailabilityContext defaults to 'AVAILABLE' until two async fetches (/user-info then /members/me/availability) resolve, so on a browser refresh th...

kamo·4mo ago
July 2, 2026
Fixkamo-internal

Underwriting review polish (i18n, a11y, contrast, enum humanize)

Apply review findings: localize frozen/yes/no + humanized aria-labels, humanize enum pills, phase title-case parity (shared titleCase), null-safe ausKindId, WCA...

kamo·4mo ago
FixSecurityService

Fail-closed tenant guard on underwriting waivers/validations

Review found the org guard was a no-op on the common empty-list case for the by-id waivers/validations reads (which the MLOS service does not org-filter), leaki...

Kamo·4mo ago
Fixkamo-internal

Add missing /api/security/lead-imports proxy route; default to Import Templates

- The base GET/POST /api/security/lead-imports had NO Next proxy route.ts (only sub-paths did), so Past Imports fetch (and the import POST) 500'd at the Next ...

kamo·4mo ago
FixSecurityService

Gate FFA acceptability on suspension in available-summary + available

available-summary now resolves the member's allotment and skips the product when suspended BEFORE the free-for-all short-circuit, and available() gates creditOk...

Kamo·4mo ago
Fixkamo-shared-library

Suspension now actually blocks acceptance (alert + accept + FFA)

findApplicableAllotments filtered 'AND la.isActive = true', so getMostSpecificAllotment returned a less-specific ACTIVE fallback (or nothing) when a member's sp...

Kamo·4mo ago
FixVOIPService

Implement POST /api/bulktext/send internal transactional SMS

SecurityService's BulkTextSmsClient (password-recovery + account-settings SMS) has always POSTed **************** to /api/bulktext/send, but the controller was ...

Sage·4mo ago
Fixkamo-internal

Send leadId as string when creating a comment

parseInt() rounded lead ids past JS MAX_SAFE_INTEGER, so the backend looked up a nonexistent lead and returned 404, surfacing as 'Failed to create post' on the ...

kamo·4mo ago
FixSecurityService

Accept leadId as string in createPost to preserve CRDB id precision

Lead IDs are CRDB unique_rowid() values that exceed JS MAX_SAFE_INTEGER. The frontend now sends leadId as a string; parse both String and numeric forms so findB...

Kamo·4mo ago
Fixkamo-internal

Resolve member names on /leads/credits + link to their account

The member column and filter showed raw ids because the name map was built from /api/security/members, whose CockroachDB Long ids serialize as JSON numbers and ...

kamo·4mo ago
Fixkamo-internal

Make EditableCard onEdit optional so reassignment gating type-checks

The assignment card passes `canReassignManually ? startEditAssignment : undefined` to EditableCard.onEdit, but onEdit was typed `() => void` (required), failing...

kamo·4mo ago
Fixkamo-internal

Busy state on Start Import + drop debug logs

- disable Start Import / Back and show a spinner + 'Importing…' while the import POST is in flight, preventing duplicate submissions on large files - remove [...

kamo·4mo ago
FixSecurityService

Correctness, scale & PII hardening in LeadImportController

- dedup via scoped LeadRepository query instead of findAll() over all tenants (was an OOM/DoS + cross-tenant exposure risk, re-run per 1000-row batch) - cap i...

Kamo·4mo ago
Fixkamo-shared-library

Scope import dedup query + org-guard member/vendor-product assignment

- **************** scoped, projection-only duplicate lookup for the manual importer (replaces a per-batch findAll() that hydrated every lead across all tena...

Kamo·4mo ago
July 1, 2026
Fixkamo-shared-library

Pin markedForReassignmentBy FK to INT8 (no inherited default)

Without columnDefinition, Hibernate copies members.id (INT8 DEFAULT unique_rowid()), so CockroachDB backfilled existing leads rows with bogus member ids on ALTE...

Kamo·4mo ago
Fixkamo-internal

Stop refresh icon blinking via infinite check loop

Once a domain was SSL-confirmed, checkDns unconditionally built a new domain object even when sslConfirmed was already true. The new object reference re-trigger...

kamo·4mo ago
FixEmailService

Return 422 (not 500) when member has no mailbox

listFolders and other read endpoints threw IllegalStateException from MailContext.toMailCredentials() when a member had no IMAP credentials provisioned, which t...

Sage·4mo ago
Fixkamo-internal

Don't fetch org with a precision-truncated id

LabelManager derived orgIdStr from getOrgIdString() (precision-safe) with a fallback to String(organization.id). organization.id is a JS number and silently tru...

kamo·4mo ago
FixSecurityService

Set site region + use node-local MinIO per pod

- Add kamo.minio.region (MINIO_REGION, default us-west-ca-s-1) so SigV4 signatures match the server's enforced site region; fixes background upload and sett...

Kamo·4mo ago
Fixkamo-shared-library

Sign requests with configurable site region

MinIO now enforces MINIO_SITE_REGION (us-west-ca-s-1) in the SigV4 authorization scope since site replication was enabled. The client was built without a region...

Kamo·4mo ago
Fixkamo-login

Drop background images that 404 instead of showing a broken frame

Track failed background image loads and filter them out of the Swiper carousel, so an incompletely provisioned theme (e.g. optionone, whose bg/2.webp was never ...

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