KamoCRM

Live Change Log

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

17,374
Total Changes
5,891
Features
5,258
Fixes
30
Projects
Filter by project
All Projects17,374AIService242APIService174BillingService157ConversionService110DaemonService137DocsService223ESigService91EmailService568InitializerService329KBService151KlusterServices738MCPGatewayService235MediaService592RAGService79SecurityService1,822TranslateService62VOIPService248VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,321kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,631kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,252Feature5,891Fix5,258Other993Performance165Refactor278Revert23Style42Test159Upgrade1
October 5, 2026
FeatureSecurityService

The hand-applied DDL for teams, and its contract test (KamoCollab CP01 T2)

**************** is spec §5.1's block verbatim: org_teams, org_team_members, org_team_roles, org_team_rights (type INT4, unique (team_id, type), master CP-D3) a...

Kamo·2w ago
FeatureSecurityService

Impersonation and Enter-As write access-log rows (KamoCollab CP00 T9)

Both impersonation doors write IMPERSONATION_STARTED (HIGH) in the target's org with logEventSync after every refusal check and before the session is minted; a ...

Kamo·2w ago
FixSecurityService

A created member's activation welcome waits for the commit, so a swallowed 40001 can no longer turn the create into a silent rollback

POST **************** answered 200 with a member id and a user id that never existed (KamoCollab CP00 Task 0, 2026-10-05, sp00verify). The activation welcome ra...

Kamo·2w ago
October 4, 2026
FixSecurityService

A rename clears the phonetic spelling of the name it changed (SP94-F-1)

The AI's speech pairs the org's CURRENT name with whatever spelling is stored. The Getting-Started wizard renames through PUT /org/{id} without sending a spelli...

Kamo·2w ago
TestSecurityService

SP96 the pin test's real controller takes the charter-change publisher

SP95 T6 (de022c1) added KamoaiEventPublisher to MemberCharterController's constructor after this test was written, so the rebased test no longer compiled (and C...

Kamo·2w ago
FeatureSecurityService

Cap the org's two phonetic name spellings on the settings PUT (SP94 T4)

titlePhonetic and titleShortPhonetic ride PUT /api/security/org/{id} under the same rights as title/titleShort (ownership or CONFIGURE_SYSTEM, never god-mode on...

Kamo·2w ago
FeatureSecurityService

A rename reaches the member's mailboxes (SP95 T36)

After a committed change of a person's "First Last", SecurityService posts {previous, current} to EmailService's **************** once per membership of the use...

Kamo·2w ago
FeatureSecurityService

A charter save reaches the AI runtime at once, and the charter profile names the company (SP95 T6)

**************** now carries a cause. The rights path sends RIGHTS; a committed charter save sends CHARTER for each affected AI member, with the member's curren...

Kamo·2w ago
FixSecurityService

Assigning a computer reads the one member, not the whole organization

HostedComputerAccess.isMember loaded every member of the organization to test one id, and emailOf, called right after it on the same assign path, did the same t...

Kamo·2w ago
FeatureSecurityService

SP94 DDL for the org's two phonetic name columns, pinned by a contract test

orgs.title_phonetic and orgs.title_short_phonetic, both nullable VARCHAR(255) with no default and no CHECK, the same shape as users.name_phonetic. Hand-applied ...

Kamo·2w ago
September 29, 2026
FixSecurityService

The AI-dispatch audit trail names people the same way chat does

**************** hand-duplicated MemberDisplayNames' pre-fix precedence (usernameAlias wins unconditionally over the real name), with its own comment warning th...

Kamo·3w ago
FeatureSecurityService

A colleague's call card for AI calls, and consent to AI calls on one's own profile (SP95 T5)

- GET **************** (X-Internal-Auth): a team member's name, kind, whether they are still here, their effective zone (work site, member, org, UTC), the E...

Kamo·3w ago
TestSecurityService

SP96 the charter's VOICE TTS pin is refused and resolves to nothing

SecurityService picks up the retired pin from shared-lib (Task 14); no SecurityService code read it. Pins the service's side: a member item naming voiceModelId/...

Kamo·3w ago
FeatureSecurityService

SP96 hire options to leave out the phone extension and the workstation

An AI hire's create body takes aiPhoneExtension and aiWorkstation (JSON booleans, true when absent). A step left out is created SKIPPED with NOT_REQUESTED_AT_HI...

Kamo·3w ago
FeatureSecurityService

SP96 sex on the member profile and at creation, gated as personal data

GET /api/security/members/{id} names sex (FEMALE, MALE or null) only to a caller who may read it (MemberSexAccess, spec D3); the key is absent for anyone else. ...

Kamo·3w ago
FeatureSecurityService

SP96 DDL for members.sex, pinned by a contract test

A member's sex is a nullable VARCHAR(16) (FEMALE | MALE, NULL = not specified), hand-applied in SP96 Task 3. The contract test keeps the file re-runnable, with ...

Kamo·3w ago
September 28, 2026
FixSecurityService

An address on either platform apex signs in to the account holding its twin

The owner signed in on login.kamouniverse.com with the brand's new address and was told "User does not exist". The account's address is Sage@KamoCRM.com. Since ...

Kamo·3w ago
FeatureSecurityService

Theme folders still showing the retired KamoCRM placeholder move to the KamoUniverse one

Every new org's theme folder is seeded from public/default/. Until today its full logo was the KamoCRM wordmark. The seed is now the KamoUniverse wordmark, buil...

Kamo·3w ago
FixSecurityService

A like is stamped, so it saves

media_obj_reports.date_created is NOT NULL, and the like was built without it: @ColumnDefault only shapes the DDL, so Hibernate wrote NULL and every like failed...

Kamo·3w ago
FixSecurityService

Edit, like and delete one post or note by its own id, never the whole stream

A feed, the organization's (the Clubhouse) or a lead's notes, is ONE POST session and every post or note is a message in it, so every item the feed lists carrie...

Kamo·3w ago
FeatureSecurityService

New authenticator enrollments are labelled KamoUniverse

The otpauth issuer was the literal "KamoCRM". Only new enrollments change. An existing authenticator entry keeps its label and keeps working, because the code c...

Kamo·3w ago
FixSecurityService

SPF advice recognises kamouniverse.com; the brand's aliases are reserved on both apexes

SPF: kamouniverse.com publishes the same record as spf.kamocrm.com (v=spf1 ip4:47.181.8.84 mx -all), so a customer who wrote include:kamouniverse.com has alread...

Kamo·3w ago
FixSecurityService

Platform fallbacks name the primary apex, not a kamocrm.com literal

Four places kept their own "kamocrm.com" literal as the platform host they fall back to, so they could never follow the brand to kamouniverse.com. Each now read...

Kamo·3w ago
FeatureSecurityService

Kamouniverse.com is the primary apex, and a domain is verified by where it resolves

"Changed the domain from kamocrm.com to kamouniverse.com on /setup/dns. It said it set it but could not verify anything, and after a refresh it still said kamoc...

Kamo·3w ago
FixSecurityService

One organization can no longer take another's <alias>.kamocrm.com routing

Any member of an organization with no root could add the root victim.kamocrm.com (POST /api/security/domains checked no right). Listing the domains then self-he...

Kamo·3w ago
FixSecurityService

A lead's notes stream, addressed by its guid, keeps the lead's own read rule

Every note on a lead now sends the lead stream's guid on /topic/media/feed/<orgId> (SP99-T3), which any member of the organization may subscribe to. The guid-ad...

Kamo·3w ago
FixSecurityService

A new commit log is translated at once, not behind the sweep's backlog

The first translation of a commit log and the sweep's retries shared one three-thread executor, first come first served. With the SP99 T6 repair's 326 commit lo...

Kamo·3w ago
ChoreSecurityService

Rebuild so a lead that was ever assigned or opened can be deleted

SecurityService's DELETE /api/security/leads/{id} runs the shared library's LeadService.deleteLead. The fix that releases the lead's assignment history, comment...

Kamo·3w ago
FixSecurityService

The translation recount is the first statement of its own transaction

A locale save was an upsert and then a recount that reads the commit log's rows, in one transaction. Yugabyte restarts a read transparently only when it is the ...

Kamo·3w ago
FixSecurityService

One pod at a time translates a commit log, and a finished one is not redone

Both SecurityService pods run the translation sweep: its lock lasts only as long as the dispatch. Each took up the same 50 commit logs, and a pod's in-flight se...

Kamo·3w ago
FixSecurityService

A re-translation no longer deletes the translation it replaces

Since 1f715e4 (2026-09-23) saveLocaleTranslation loaded the locale's row to decide whether the count moved, bulk-deleted it and saved a new one. The load left t...

Kamo·3w ago
RefactorSecurityService

One builder for both feed answers, tested without the controller

getFeed built the lead's and the organization's response in two copies of the same block; feedResponse builds both, so streamGuid cannot be in one and missing f...

Kamo·3w ago
FeatureSecurityService

A feed names the stream it lists (streamGuid)

The browser's feed reloads when /topic/media/feed/<orgId> says a note was written in its own stream. A lead with no notes yet has no post whose guid names that ...

Kamo·3w ago
DocsSecurityService

The sign-in check is reachable from the internet edge; the secret is its only gate

The javadoc said /api/internal/dav/sign-in was reached over ClusterIP, as if that were the only way in. It is not: klusterservices **************** routes inter...

Kamo·3w ago
TestSecurityService

Pin the bare cookie domain against Tomcat's own cookie processor

bc54945 stopped logout clearing *** on ".kamocrm.com", which Tomcat's RFC 6265 processor refuses by throwing from addCookie: logout answered 500 after the sessi...

Kamo·3w ago
FixSecurityService

Close the AI identity edge cases the SP02 review left open

- A never-hired AI relabelled a person no longer keeps ai_state and the pause columns (master 6.1: NULL for a person). They are written only by SQL, so the ...

Kamo·3w ago
FixSecurityService

A lead you may not open takes no status change and no note

PUT /api/security/leads/{id} and POST /api/security/media/posts checked only the lead's organization, so a member without VIEW_UNASSIGNED_LEADS could change the...

Kamo·3w ago
FixSecurityService

CalDAV and CardDAV sign in with a username and password, through every sign-in gate

EmailService's DavAuthFilter posted Basic credentials to **************** a route that never existed (405), so since 2026-03-19 no phone (iOS, DAVx5) could add ...

Kamo·3w ago
FixSecurityService

Clear the session cookie on the bare apex, not ".apex"

Logout built the cookie domain as ".kamocrm.com". Tomcat's RFC 6265 cookie processor refuses a leading dot and throws, so logout answered 500 "Logout failed" af...

Kamo·3w ago
FixSecurityService

A platform apex can't be removed from the DNS page

The platform organization gained kamouniverse.com as a second root domain, and the DNS page then offered "Remove" on kamocrm.com. Deleting it took kamocrm.com a...

Kamo·3w ago
FixSecurityService

Two more root-domain picks follow OrgDomains.primaryDomain

BranchTypeController's parentRootDomain (the create-branch wizard's web-alias zone) and PortalAccountController's api.<root> (borrower-portal sign-in) each took...

Kamo·3w ago
FeatureSecurityService

Organizations are created in a KamoUniverse universe and bill from its catalog

KamoUniverse sells Business, Family, Community and Personal plan ladders from the platform org. SecurityService decides which ladder an organization is on, and ...

Kamo·3w ago
FeatureSecurityService

Kamouniverse.com is a platform apex, not a tenant domain

login.kamouniverse.com and register.kamouniverse.com become the platform's KamoUniverse sign-in and sign-up doors, backed by a root org_domains row on the platf...

Kamo·3w ago
September 27, 2026
FixSecurityService

Watch and Take over open their connection in the gateway's client

Guacamole 1.5.5's client reads the #/client/<id> fragment with atob (one character per byte) and btoa's every connection name it lists, so a name outside Latin-...

Kamo·3w ago
FeatureSecurityService

List the org's active AI members

Kamo·3w ago
FeatureSecurityService

Internal resolve for KamoAI and the charter source behind SP02's routes

I2 POST **************** answers S3's resolution for the org it is given, behind the KamoAI secret, with S3's draft reader and S3's org-checked department walk ...

Kamo·3w ago
FeatureSecurityService

Member charter read and edit; nobody edits their own

S4 reads a member's effective charter, S5 its own items with whether the caller may change them, and S6 replaces them (diffed by id). A write runs in MemberChar...

Kamo·3w ago
FeatureSecurityService

Record and revoke AI call consent per phone number

Kamo·3w 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