KamoCRM

Live Change Log

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

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

Resolve session from X-***-Token header in CallerSessionResolver

The kamo-internal -> APIService BFF path forwards the session as the X-***-Token header, but the resolver only read the X-OTK attribute or the *** cookie — so B...

Kamo·4mo ago
FixSecurityService

PatchLoanFile is no longer a status backdoor; unblocking a condition needs the underwrite right; clear cascades

**************** status changes are the pipeline state machine's job (POST /transitions enforces legal arrows + per-arrow role gate + open-blocking-condition ga...

Kamo·4mo ago
FixSecurityService

Inject KamoDesktop SSO env directly + wire guac-sso into tracked k8s deployment

- @Value reads KAMO_GUAC_SIGNING_KEY / DESKTOP_PASSWORD from env directly (runtime application.yml is configmap-mounted, so property indirection wouldn't bind...

Kamo·4mo ago
FixSecurityService

Borrower submit fires the Application-Taken side effects (doc checklist + notify)

The portal borrower submit is PATCH loan-file {statusId:2}, which bypassed the operator /transitions endpoint where the Application-Taken side effects live — so...

Kamo·4mo ago
FixSecurityService

Borrower cannot escalate loan-file status or edit the URLA after submission

Two related borrower-authorization holes on the self-service app endpoints: - Privilege escalation (#2): patchLoanFile applied any statusId with no caller-ri...

Kamo·4mo ago
FixSecurityService

Borrower self-create idempotency + orphan compensation; don't relay an empty checklist as success

MortgageAppController.create() borrower self-create branch: - Idempotency (#2): resume an existing owned DRAFT via findOwnedDraft instead of minting a duplica...

Kamo·4mo ago
FixSecurityService

Revert securityProvider to self-pointing; self-heal member applied rights

Two prod issues from the securityProvider-mirror change: 1. Enter-as-System-Member failed with "No membership in the organization's security provider" for e...

Kamo·4mo ago
FixSecurityService

Interpret lock LAST_EDIT_AT as UTC for epoch-millis expiry

dbNow() now returns DB-UTC wall-clock (now()::timestamp), so recover the absolute instant with toInstant(UTC) instead of the JVM default zone — keeps the browse...

Kamo·4mo ago
July 6, 2026
FixSecurityService

File new accounts under the org of the domain, not kamocrm

/register bound the new member's org to the request Host, but the org signal never survived the hop: kamo-register proxies every signup to the shared api.kamocr...

Kamo·4mo ago
FixSecurityService

Scope borrower's loan document-requirements to their own party

The enriched /document-requirements read authorized any party to the app and returned EVERY party's requirements, so on a joint loan a borrower saw the co-borro...

Kamo·4mo ago
FixSecurityService

Per-party vault authorization + per-party notification routing

The account vault held documents per-PARTY (shared human) but authorized access per-ACCOUNT — two HIGH multi-human defects on a joint loan: - PII leak / lockou...

Kamo·4mo ago
FixSecurityService

Pipeline per-transaction grouping was broken

TransactionSummaryDTO.loanUids carried LOAN-FILE uids, but the pipeline console keys rows on the APPLICATION uid — so grouping silently fell back to one row per...

Kamo·4mo ago
FixSecurityService

Member-vault upload was broken (access_level NOT-NULL)

The account-level imaging path had never actually run (0 vault Imgs in prod): uploadDocument was passed accessLevel=null. Pass CONFIDENTIAL for borrower PII (ID...

Kamo·4mo ago
FixSecurityService

Satisfy-across confused-deputy IDOR + account party self-heal

- HIGH: satisfy-across gated on the path partyId but fanned out over the DOCUMENT's own party downstream; verify the document belongs to the authorized party ...

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
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
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
July 3, 2026
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
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
July 2, 2026
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
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
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
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
July 1, 2026
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
FixSecurityService

Stop cross-org background image leak; order-safe reorder + staging bucket

Reordering only re-uploaded new files to their new index, dropping reordered existing images and leaving imageBgCount claiming unpopulated slots; provisioning t...

Kamo·4mo ago
FixSecurityService

Return 404 for a missing org instead of 200 with empty body

getOrganizationById returned a bare null, which Spring serialized to HTTP 200 with an empty body; clients calling response.json() then threw 'Unexpected end of ...

Kamo·4mo ago
FixSecurityService

Let the System User resolve any org's applied model

The cross-org gate returned 403 when orgId != session org and the caller had no Member row in the target org. The platform-wide System User operates across ever...

Kamo·4mo ago
June 30, 2026
FixSecurityService

Canonicalize webhook repo name to public-projects casing

After the cluster migration the Forgejo repos were recreated lower-cased (securityservice), but historical rows and the public-projects filter use canonical cas...

Kamo·4mo ago
FixSecurityService

Generate favicons via multi-node logo read, not single-node exists()

generateAndUploadFavicons() gated on minioService.exists(), which only stats the current MinIO host. When the simple logo was written to (or only replicated ont...

Kamo·4mo ago
June 16, 2026
FixSecurityService

Expose GD (god eligibility) in /user-info for kamo-universe

The session stores the GD flag (KSessionService) but /user-info never returned it, so kamo-universe's KamoIdentity always deserialized is_god=false and the god/...

Kamo·4mo ago
FixSecurityService

Case-insensitive email lookup so reset emails send

Password recovery lowercased the input but findByEmailEmail does a case-sensitive match against the stored email (e.g. Sage@KamoCRM.com), so the user was never ...

Kamo·4mo ago
June 15, 2026
FixSecurityService

Carry impersonation audit trail across org jumps

When the caller is already an impersonation session (a god admin acting as another member, carrying SUDO_MEMBER_ID), entering another org from /network minted t...

Kamo·4mo ago
June 10, 2026
FixSecurityService

Select the SUBSCRIPTION market for platform setup

KamoCRM owns several markets **************** so resolveProductMarket must pick the SUBSCRIPTION-type (platform-access) market rather than the first active one....

Kamo·5mo ago
June 8, 2026
FixSecurityService

Regenerate favicons on labeling save; sniff real logo type

provisionUpdate (run on every custom-labeling save) wrote config/css/manifest but never regenerated favicons — those were only produced by provisionFull. An org...

Kamo·5mo ago
FixSecurityService

Seed globals.css from template when org folder lacks it

provisionUpdate (run on every color save) rewrote the org's css/globals.css in place, but that object only exists once provisionFull has copied it from the defa...

Kamo·5mo ago
May 21, 2026
FixSecurityService

Detach before replacing features collection in /org/domain

The previous fix wired the applied-model projection into **************** but called org.setFeatures(projected) on the still-managed entity. The Organization.fe...

Kamo·5mo ago
FixSecurityService

Resolve ambiguous /org/domain handler — Commerce nav was disappearing

SecurityController had a second **************** that collided with **************** Spring rejected the request with "Ambiguous handler methods mapped" → 500 →...

Kamo·5mo ago
May 12, 2026
FixSecurityService

Add /me/language endpoint that bypasses SystemUserGuard

The NavTop language picker did nothing for the System User signed into a sub-org: PUT **************** runs SystemUserGuard first, which 403s every System-User ...

Kamo·6mo ago
FixSecurityService

Never gate Kamo-owned subdomains on TXT ownership

Child orgs that picked a Kamo web alias (e.g. gnosia.demo.kamocrm.com) were getting "TXT record found but verification code doesn't match" in the DNS setup UI. ...

Kamo·6mo ago
FixSecurityService

Grant top-level org owners cross-org delete/update access

deleteDomain and updateDomain previously rejected platform admins operating on child-org domains because they checked isUserOwnerOfOrg against the target org di...

Kamo·6mo ago
May 11, 2026
FixSecurityService

Allow deleting per-org *.kamocrm.com subdomains

The endsWith(".kamocrm.com") guard blocked every demo org from swapping its platform subdomain (e.g. gmosia.demo.kamocrm.com) for a custom domain. The platform ...

Kamo·6mo ago
FixSecurityService

Propagate child-org-creator admin status to parent-org membership

When a user creates a child org they become its owner + admin (via **************** Their PARENT-org membership, however, is whatever it was before — typically ...

Kamo·6mo ago
April 30, 2026
FixSecurityService

Mint owner OTK with grant-all rights without DB round-trip

After **************** assigns the Administrator role and writes member_rights_applied, the OTK-minting block was re-reading those rows via **************** ins...

Kamo·6mo ago
April 29, 2026
FixSecurityService

Allow elevated access on getDomainById and verify-dns endpoints

Top-level org owners and system members were getting 403 on getDomainById and verify-dns because those endpoints checked isUserMemberOfOrg directly. Adds hasEle...

Kamo·6mo ago
April 28, 2026
FixSecurityService

Prevent duplicate root domains and fix primary domain display

ONE_DOMAIN_PER_ORG check incorrectly excluded .kamocrm.com web-alias domains, allowing an org to accumulate multiple root domains (and 10 aliases each) by retry...

Kamo·6mo 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