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
August 3, 2026
Fixkamo-signer-monorepo

Point the deploy kubeconfig at the LAN IP, not the k1m1 hostname

deploy_k1m1 had never succeeded (0/5 since the repo was created). The job rewrote the kubeconfig API server to https://k1m1:6443, but the runner's job container...

Kamo·1mo ago
FixEmailService

Add missing CampaignController REST endpoints for /api/email/campaigns

The bulk-email workspace/editor call GET/POST /api/email/campaigns etc., but only CampaignService (the @Service) was ever created — no @RestController exposed i...

Kamo·1mo ago
August 2, 2026
Fixkamo-signer-monorepo

Disable hreflang alternates header; make LANGUAGE_NAMES total

- routing.ts: set alternateLinks: false — the app is noindex/nofollow with no consumer for the Link: rel=alternate header next-intl emits by default for all...

Kamo·1mo ago
FixDocsService

Require a session on POST ****************

The handler took an HttpServletRequest but never used it, carrying the comment "No auth required — internal admin maintenance endpoint". APIService relays /api/...

Kamo·1mo ago
FixConversionService

Require a session on POST /backfill-conversions

The handler was declared backfillConversions() — it took no request at all — under the comment "No auth — internal maintenance, mirrors /backfill-thumbnails". I...

Kamo·1mo ago
FixSecurityService

Gate DELETE /api/security/org/{id} behind active god mode

The handler was `public void **************** Long id)` — no HttpServletRequest parameter at all, calling straight through to a bare deleteById. With ResourceSe...

Kamo·1mo ago
Fixkamo-internal

Delete /api/set-token and /api/get-jwt-token; add route guards

Both routes were dead — no caller anywhere in kamo-internal, kamo-login or kamo-register — and both leaked credentials. /api/set-token built its upstream URL f...

kamo·1mo ago
FixSecurityService

Require auth + org scope on job-title/department mutations

PUT and DELETE on /api/security/job-titles/{id} and /api/security/departments/{id} resolved no session at all — they read a UUID off the path and called straigh...

Kamo·1mo ago
July 31, 2026
Fixkamo-internal

Resolve template images from kept sources, not neighbouring slots

The composer re-resolved a template's image sources whenever the template config changed, and for 'member-avatar' it guessed the URL from whichever of signature...

kamo·1mo ago
FixSecurityService

Store and read avatars under one domain-independent prefix

Avatar object paths were prefixed with the domain of whatever host the request arrived on (getPublicBucketName → kamocrm-com, optionone-com, cluster-local, …), ...

Kamo·1mo ago
Fixkamo-internal

Double vertical scrollbar width for easier dragging

Bump the nav options scroll container from a 6px to a 12px webkit scrollbar and widen the thumb radius to match, giving members a larger drag target. The collap...

kamo·1mo ago
July 30, 2026
FixInitializerService

Register **************** repositories

LeadService now eagerly wires MarketLosConnectionResolver, which requires the integrations.los repositories **************** KI's explicit @EnableJpaRepositorie...

Kamo·2mo ago
Fixkamo-internal

Drop redundant "+" — pen now sets the balance both ways

The credit-balance pen is now an absolute set-to-N editor (backend mints when the value is raised, invalidates the excess when lowered), so the separate "+" dis...

kamo·2mo ago
FixSecurityService

Credit-balance pen sets an absolute target (mint up / invalidate down)

The Manage-Credits pen edit only ever LOWERED a balance: updateAllotment routed creditBalance to invalidateCreditsToTarget, which no-ops when target >= current....

Kamo·2mo ago
July 28, 2026
FixSecurityService

Master Machine SSO uses a VNC connection, not RDP

guacd cannot render KRdp's H.264-only RDP GFX. buildAutoConnectUrl now mints a vncConnection() for Master Machine (192.168.4.46:5900, shared password). Linux/Wi...

Kamo·2mo ago
FixKlusterServices

Master Machine uses VNC (x11vnc), not RDP

KRdp/RDP is incompatible with Guacamole: guacd has no RDP Graphics Pipeline (EGFX) and KRdp is H.264-only, so the connection authenticated but died with GRAPHIC...

Kamo·2mo ago
Fixkamo-internal

Add 'desktopMaster' to NavActionKey union — unblocks next build

The Master Machine launcher (navRegistry + NavOptionView + CommandPalette) references actionKey 'desktopMaster' but it was missing from the NavActionKey union, ...

kamo·2mo ago
FixEmailService

Remove ambiguous unsubscribe requestMatcher that crashed startup

EmailService mounts two servlets (MVC DispatcherServlet + Spring-WS MessageDispatcherServlet at /services/*), so a bare string requestMatchers( "/api/email/unsu...

Kamo·2mo ago
July 27, 2026
FixDaemonService

Notify the ASSIGNED steward of a routed decision, via email

DECISION_ROUTED's steward notification was a record-only no-op: StewardNotifier fanned out over SMS to a static CSV **************** that is empty by default, a...

Kamo·2mo ago
July 26, 2026
FixKlusterServices

Pin CockroachDB to v24.2.4 to avoid v24.3 no-license txn throttle

v24.3 (and 24.2.5+) enforce the new CockroachDB Software License; with no license key the cluster throttles to 5 concurrent open transactions cluster-wide. A v2...

Kamo·2mo ago
July 23, 2026
FixSecurityService

Pin RDP color-depth so KamoDesktop SSO reuses one xrdp session

The god-via-kamo-internal SSO path defines its Guacamole connection inline in the json-auth token, so the color-depth pin must live here too (kept in sync with ...

Kamo·2mo ago
FixKlusterServices

Pin RDP color-depth + reap xrdp sessions so god reuses one desktop

xrdp 0.9.24 keys sessions on <user,bpp> (Policy=Default) and never reaps disconnected ones (KillDisconnected=false, DisconnectedTimeLimit=0). The RDP user is al...

Kamo·2mo ago
Fixkamo-shared-library

Register WELCOME_MEMBER + WELCOME_TEAM_MEMBER canonical keys

Both templates ship as resource pairs on disk (welcome-member.{json,html}, **************** with matching templateKeys, and EmailService already has their sampl...

Kamo·2mo ago
July 22, 2026
Fixkamo-internal

Render member photos on avatars inside the chat window

The small avatar icons in a chat popup — the per-message sender avatar (MessageBubble) and the seen-receipt list (SeenIndicator) — all read SessionMember.avatar...

kamo·2mo ago
Fixkamo-internal

Show member avatars in chat tool window title bars

The tool-window title bar renders its icon from the window STORE props — ToolDock passes `avatarSrc={w.toolId === 'chat' ? w.props.avatarSrc : undefined}` and f...

kamo·2mo ago
Fixkamo-internal

Surface real upload errors, sync god mode to session

"Save failed: Full logo upload failed" discarded the status and body, so a 403 from the branding gate read identically to a MinIO outage. The server's own messa...

kamo·2mo ago
FixSecurityService

Make org branding authz reachable (owner, god mode, or right)

Uploading a logo to a child org 403'd with no way to succeed: canManageOrgBranding only admitted the org owner, and the isGodModeActive fallback could never ret...

Kamo·2mo ago
Fixkamo-shared-library

A suspended loan can be resumed, and is no longer offered to itself

SUSPENDED is deliberately not terminal — LoanFileStatus.isTerminal excludes it, because a loan is suspended for a fixable reason. But it had no forward arrow, s...

Kamo·2mo ago
Fixkamo-shared-library

Bound MlosAiClient with explicit connect and read timeouts

The client field-initialized a bare `new RestTemplate()`, so no timeout applied on any AI call and no builder could reach it. A hung provider blocked the caller...

Kamo·2mo ago
Fixkamo-internal

Stop the promote preview overcounting rows the server will reject

The "N approved row(s) will publish" caption counted a row whenever an APPROVED note_rate and base_price candidate existed for it, ignoring the values. A price ...

kamo·2mo ago
FixAIService

Classify vision failures so the retry loop and circuit breaker actually work

Two bugs in visionComplete, both of which defeated machinery built to handle them. A blank-content response was returned as SUCCESS and ended the retry loop. E...

Kamo·2mo ago
FixSecurityService

Thread orgId into the rate-sheet version-spine read

The gateway relayed only investorId, so the upstream had nothing to scope by and returned another tenant's version spine for a foreign investor id. Its siblings...

Kamo·2mo ago
Fixkamo-internal

Use the full page width; make renaming an agent visible

Two things I got wrong. **Width.** The brief was explicit — use the full width of the page, do not waste real estate — and I capped the studio at a centred 880...

kamo·2mo ago
Fixkamo-internal

Stop the lead view crashing on a lead with no name

/leads/view/{id} died with "Cannot read properties of null (reading 'preferredName')". LeadDTO.toDTO() only builds primaryContact inside `if (lead.getName() != ...

kamo·2mo ago
Fixkamo-internal

Retry an upload with the MIME type the server actually detected

The upload validates the multipart part's Content-Type against the type the server detects from the bytes, and that part type comes from the browser's File.type...

kamo·2mo ago
FixAIService

Never route vision to an adapter that cannot send an image

AiProvider.supportsVision is a hand-editable database flag, and routing trusted it alone. The HuggingFace and Cohere adapters never read imageUrls at all, and t...

Kamo·2mo ago
FixMediaService

Mount the live per-host cert instead of the expired wildcard secret

The cert-converter init container built its PKCS12 keystore from wildcard-kamocrm-com, a legacy multi-SAN secret that cert-manager orphaned when its Certificate...

Kamo·2mo ago
FixVOIPService

Stop pinning the expired wildcard-kamocrm-com secret

wildcard-kamocrm-com was a legacy multi-SAN secret that cert-manager orphaned when its Certificate was repointed at a per-host secret. Nothing renewed it and it...

Kamo·2mo ago
FixSecurityService

Stop pinning the expired wildcard-kamocrm-com secret

wildcard-kamocrm-com was a legacy multi-SAN secret that cert-manager orphaned when its Certificate was repointed at a per-host secret. Nothing renewed it and it...

Kamo·2mo ago
FixConversionService

Stop pinning the expired wildcard-kamocrm-com secret

wildcard-kamocrm-com was a legacy multi-SAN secret that cert-manager orphaned when its Certificate was repointed at a per-host secret. Nothing renewed it and it...

Kamo·2mo ago
FixDocsService

Stop pinning the expired wildcard-kamocrm-com secret

wildcard-kamocrm-com was a legacy multi-SAN secret that cert-manager orphaned when its Certificate was repointed at a per-host secret. Nothing renewed it and it...

Kamo·2mo ago
FixKlusterServices

Stop expired/orphaned secrets shadowing live per-host certs

update_tls_store() rebuilt the TLSStore from a plain Secret listing, bucketed only on name prefix and type, with no check that a Certificate still owned the sec...

Kamo·2mo ago
July 19, 2026
FixMediaService

Reject cross-org sales agents; widen bootstrap cache busting

salesAgentId was persisted from the request body unchecked, so a cross-org or dangling agent id could be stored on a WebChatIntegration. It failed safe only bec...

Kamo·2mo ago
FixAIService

Anthropic dropped every system message but the last

buildRequestBody assigned rather than accumulated the system field, so with more than one system message only the final one reached the model. In practice that ...

Kamo·2mo ago
FixAIService

Locked rules survive a section or whole-document override

An author taking over a rule section by hand replaced the entire section body, which silently discarded the locked pack rules inside it - so 'never quote a rate...

Kamo·2mo ago
FixSecurityService

Stamp the borrower quote's actor from the session

The quote requires createdByMemberId and the browser must never supply it. memberId(req) is hoisted out of the party-check branch so it resolves for stewards to...

Kamo·2mo ago
Fixkamo-internal

Correct the CATALOG_SOURCE ordinal — every rate-sheet upload was rejected

ImageAssocType.CATALOG_SOURCE is id 14 but ordinal 12: the ids skip 6, so id is not ordinal+1 past SYSTEM_WIDE. The panel sent 13, which is out of range for a 1...

kamo·2mo ago
July 18, 2026
FixAIService

Streamed replies were dropped, persisting blank assistant messages

Every successful chat completion came back as an EMPTY assistant bubble. The assistant rows were being saved with content_len=0 and is_error=false, so there was...

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