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
April 20, 2026
FeatureSecurityService

Extract RoleRightsSyncService and add sync-rights endpoint

- RoleRightsSyncService: centralizes role rights sync logic for both OrgRole and **************** tables; startup and on-demand - DataLoader: delegates to Rol...

Kamo·5mo ago
FixSecurityService

Use getOrganizationByIdWithFeatures in AppAvailabilityInterceptor

Resolves LazyInitializationException on /api/security/leads and all other CRM/POS-gated paths. The interceptor called org.getFeatures() after the transaction cl...

Kamo·5mo ago
FixSecurityService

Resolve Members tab showing empty due to Hibernate TYPE() base-class issue

Hibernate's TYPE(m) = :type JPQL filter returns 0 results when the bound parameter is the base Member class (JOINED inheritance). This affects the members-subsc...

Kamo·5mo ago
OtherSecurityService

Enable Hibernate SQL logging to diagnose members query returning 0

Temporarily enabled org.hibernate.SQL=DEBUG to see what SQL the TYPE() JPQL query generates for the members-subscribers endpoint.

Kamo·5mo ago
OtherSecurityService

Add diagnostic logging to getMembersAndSubscribers endpoint

Logs orgId, query result count, and per-member isActive status to help diagnose why Members tab shows empty list.

Kamo·5mo ago
FeatureSecurityService

Add GET /branch-types/creatable and /{id}/usages endpoints

/creatable returns branch types filtered by the caller's creator-type (OWNERS/TEAM_MEMBERS/MEMBERS) via AppliedModelEnforcementService. /{id}/usages returns th...

Kamo·5mo ago
FixSecurityService

Use correct session key 'memberID' instead of 'MID'

KSessionService stores member ID under key 'memberID' but both **************** and OrganizationController were reading session.get("MID") which always returned...

Kamo·5mo ago
FixSecurityService

Exclude master model from models list; add debug log to child-org creation check

SecurityModelController now filters out the org's master model (identified by org.getMasterModelID()) from the /api/security/models response — it is managed exc...

Kamo·5mo ago
FixSecurityService

Read session rights as List<String> names, not CSV of integer IDs

Session rights are stored as a JSON array of RoleRightType name strings. Both **************** and OrganizationController were casting them to String (causing C...

Kamo·5mo ago
April 19, 2026
FeatureSecurityService

Add GET /branch-types/creatable endpoint with creator-type filtering

Returns only the branch types the calling member is permitted to create a child org under, based on their OWNERS/TEAM_MEMBERS/MEMBERS classification against the...

Kamo·5mo ago
FeatureSecurityService

Gate /network child-org creation by right + member-type applicability

Wires the applied-security-model child-org creation gate end-to-end: - SecurityModelController + MasterModelController round-trip the three new apply-to flag...

Kamo·5mo ago
ChoreSecurityService

Rebuild for kamo-shared-library update (appConfig upsert-only fix)

Pulls the hardened **************** that no longer deletes appConfig rows whose service types are absent from the caller's payload — prevents silent data loss w...

Kamo·5mo ago
FeatureSecurityService

Applied-model is the read-time source of truth for feature availability

Closes the "stale DB leaks a disabled feature" gap by gating every surface that touches OrgFeature / ServiceType through the applied security model. - ********...

Kamo·5mo ago
ChoreSecurityService

Surface root-cause on MasterModelController GET failure

When GET /api/security/master-model 500s, log the full stack trace to stderr (captured by kubectl logs) and include the root-cause message on the wire rather th...

Kamo·5mo ago
FeatureSecurityService

Wire applied-model enforcement across every controller

Every non-role setting on the applied security model is now enforced at the exact controller boundary it governs, and the scalar settings round-trip cleanly thr...

Kamo·5mo ago
FeatureSecurityService

Enforce system-role assignment and auto-admin for team-member owners

MemberSecurityController now enforces the three assignment invariants defined in the brainstorm spec: - saveMemberSecurity: before persisting the caller's requ...

Kamo·5mo ago
FeatureSecurityService

Master-model + applied-model endpoints and template-aware org seeding

Adds the controllers that surface the new branch-type security flow: - /api/security/master-model (GET/PUT) manages the current org's master model; only writ...

Kamo·5mo ago
FeatureSecurityService

Wire branch types into security model CRUD endpoints

Kamo·5mo ago
FeatureSecurityService

Add POST **************** endpoint

Kamo·5mo ago
FeatureSecurityService

Auto-sync missing role rights on startup

Kamo·5mo ago
FixSecurityService

Use core NATS pub/sub for email-verified SSE fan-out

Replaces in-memory ConcurrentHashMap broadcast with NATS core pub/sub so all pods receive verification events regardless of which pod handled the token. Falls b...

Kamo·5mo ago
FixSecurityService

Use avatarType field + JDBC for photo URL generation to handle Hibernate proxies

**************** previously used instanceof AvatarPhoto to determine avatar type and cast to read fileExtension. When Hibernate returns a base-class proxy (e.g....

Kamo·5mo ago
FeatureSecurityService

Pass human-readable expiry time to email verification template

Add humanizeMinutes() helper that formats minutes as days/hours/minutes (e.g. "1 day" for 1440 min). Pass as {{expiryText}} to match updated canonical template ...

Kamo·5mo ago
April 18, 2026
FeatureSecurityService

Add code-based email verification path to /verify-email endpoint

The endpoint now handles both token (link click) and userId+code (manual 6-digit entry). Token path unchanged; code path hashes the supplied code and matches ag...

Kamo·5mo ago
FixSecurityService

Populate all EMAIL_VERIFICATION template variables

Was sending only {token, code} — template also needs orgName, firstName, verifyLink, and expiryMinutes. Load org and user to build the full vars map, and resolv...

Kamo·5mo ago
FixSecurityService

Use subdomain-aware SQL to match findByDomain JPQL logic

Org domain lookup in resendVerification was doing an exact-match query that failed for subdomains stored as child records (e.g. 'api' with parent 'kamocrm.com')...

Kamo·5mo ago
FixSecurityService

Correct EmailService URL port in configmap (4203 -> 80)

EmailService K8s service exposes port 80, not 4203. Verification emails were timing out on every registration attempt.

Kamo·5mo ago
FixSecurityService

Bypass JPA org lookup to avoid Hibernate cascade flush error

**************** triggers **************** which causes a Hibernate auto-flush. That flush fails because Organization.features was previously replaced with a pl...

Kamo·5mo ago
FixSecurityService

Use getReferenceById to avoid cascade orphanRemoval flush error on registration

Loading Organization via findById inside @Transactional caused Hibernate to detect the features collection was de-referenced during auto-flush, throwing JpaSyst...

Kamo·5mo ago
FeatureSecurityService

Add register-photo endpoint for unauthenticated post-registration avatar upload

POST **************** accepts userId + file/fileSm/fileMd/fileLg without a session. Guards: user must be unverified and have no avatar yet, preventing abuse aga...

Kamo·5mo ago
FixSecurityService

Align registration field names and response shape with frontend contract

Frontend sends nameFirst/nameLast but controller read firstName/lastName, causing 400 "First name is required". Success response now returns {status, userId, al...

Kamo·5mo ago
FixSecurityService

Add SecurityService and dao.repositories to EnableJpaRepositories scan

UserPhoneLookupRepository in recovery package was not picked up because EnableJpaRepositories only listed dao.repos and commerce. Added the SecurityService base...

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