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
October 5, 2026
FixSecurityService

Pin the heads' names query onto users_pkey — /*+ IndexScan(u users_pkey) */ first in the statement, as loadMembers and the org chart's people query; without it the legacy planner seq-scans all of users per head row (KamoCollab CP02 final fix)

Production EXPLAIN (sp00verify, read-only): the unhinted literal plan was a nested loop over Seq Scan on users (106 rows) for 1 and 2 ids; with the hint every p...

Kamo·1mo ago
TestSecurityService

**************** — every charter owner table carries every CharterItem column and its owner, from the docs/sql files in order and a dated legacy baseline (KamoCollab CP03 T7)

The program's one cross-table charter DDL guard (master R1-12). It reads every docs/sql/*.sql in filename order and collects what the six owner tables (dept_req...

Kamo·1mo ago
FeatureSecurityService

The hand-applied DDL for the charter ORG layer, the personality and Docstion columns and org archetypes, and its contract test (KamoCollab CP03 T2)

Spec §5.1's block, character for character: the twelve nullable trait/collab columns on the five charter owner tables, org_charter_items (cascading with its org...

Kamo·1mo ago
FeatureSecurityService

The visible listing's inputs come from the org graph — subordinates, AI supervisees and AI members as id strings; the manager and AI supervisor pairs are gone (KamoCollab CP02 T15)

**************** now takes the caller and reads the organization's org graph from the 60 s cache (orgGraphCache.get): - subordinateMemberIds = reports(caller, t...

Kamo·1mo ago
FeatureSecurityService

The manager line reads the org graph — cycle checks on a fresh graph, the directory on the cached one, and a member's own manager needs MANAGE_MEMBER_SECURITY to change (KamoCollab CP02 T12)

- MemberSecurityController: rejectManager keeps the self, org and record-active refusals and tests the loop with **************** the ten-level bound goes. ...

Kamo·1mo ago
TestSecurityService

Pin that a same-org Enter-As is refused before any audit row or session (KamoCollab CP00 final fix)

EnterAsController answers 400 'target is current session organization' before ImpersonationAudit.enteredAs runs, on both branches, so no same-org entry can writ...

Kamo·1mo ago
FeatureSecurityService

Reports read the org graph — a TEAM scope and a TEAM share reach the whole subtree, supervised AIs included (KamoCollab CP02 T11)

ReportScopeResolver.reportsTo is reports(member, true) of the cached graph: transitive and unbounded (the old walk stopped after ten levels), following the repo...

Kamo·1mo ago
FeatureSecurityService

Teams at member creation — teamIds on create-team-member, checked before anything is written, joined inside the creation transaction before the first applied rights, announced after the commit (KamoCollab CP01 T14A)

POST **************** (and the /create and /bulk-create paths that share MemberCreationService.create) take an optional teamIds for a person or an AI (master R1...

Kamo·1mo ago
FeatureSecurityService

SecurityService's chat policy reads member facts from the org graph, a graph loaded per snapshot (KamoCollab CP02 T10)

ChatPolicyBeanConfig builds ChatPolicySnapshotLoader with the graph constructor and orgGraphCache::fresh (ruling CP02-T17-3), as MediaService does, so the roste...

Kamo·1mo ago
FeatureSecurityService

Every SecurityService graph write announces the change, the team seam listens, and a ratchet keeps it so (KamoCollab CP02 T8)

Each write path of CP02 spec §3.5 (W1-W15) calls **************** cause) with §5.4.2's causes: member security (roles, department, job title, manager, level, ow...

Kamo·1mo ago
FeatureSecurityService

Teams on the member card and in the directory search — [{id, title}] by title, one team read per page (KamoCollab CP01 T16)

GET /api/security/members/{id}/card names a team member's teams ([] in no team; left out when the read fails, as on the profile). GET **************** gives eac...

Kamo·1mo ago
FeatureSecurityService

Teams in the effective-rights views — the diagnostics cascade's teams level, and Team: sources on the applied rights (KamoCollab CP01 T15)

The diagnostics cascade (GET **************** lists a team member's teams between the job title and the member, {teamId, title, roles, rights}, in the waterfall...

Kamo·1mo ago
FeatureSecurityService

PUT **************** — a team's charter-only save through TeamWriter, announced after the commit (KamoCollab CP01 T13)

The team charter endpoint of spec §5.6/§5.7 on LayerCharterController, beside the role, department and job-title ones: CONFIGURE_SYSTEM or god; the path id, unk...

Kamo·1mo ago
FeatureSecurityService

The TEAM charter layer — a member's teams after the job title, the TEAM subject, teamIds, and team hide markers (KamoCollab CP01 T12)

A member's teams become TEAM layers between the job title and the member, all at one rank and ordered by lower-case title then id; the teams' roles join the ROL...

Kamo·1mo ago
FeatureSecurityService

The team sub-resources (members, rights, roles) and the recalculation endpoint (KamoCollab CP01 T11)

GET|PUT **************** /rights and /roles, and POST **************** (spec §5.7). Reads are open to any session of the org; writes need CONFIGURE_SYSTEM or an...

Kamo·1mo ago
FixSecurityService

The failed-recalculation log names the repair path as /teams/{id}/recalculate-rights

SLF4J has no brace escape, so "{{id}}" was logged literally. "{id}" is not a placeholder and prints as written; the test now pins the path an operator would typ...

Kamo·1mo ago
FeatureSecurityService

TeamController — list, create, read, update and delete (KamoCollab CP01 T10)

GET|POST /api/security/teams and GET|PUT|DELETE /api/security/teams/{id} (spec §5.7). Every handler resolves the caller first (401 without an org); reads are op...

Kamo·1mo ago
FeatureSecurityService

The team domain — wire, validation, writer, service and the org-graph seam (KamoCollab CP01 T9)

TeamWire reads a team body tri-state (absent / null / value); TeamValidator checks titles, descriptions, timeouts, roles, rights (normalized as a level), staff-...

Kamo·1mo ago
FeatureSecurityService

SecurityService's org graph beans, the after-commit change publisher, its listener and the two internal routes (KamoCollab CP02 T7)

OrgGraphBeanConfig declares the loader (a read-only TransactionTemplate of its own, Clock.systemUTC()) and the 60 s OrgGraphCache. OrgGraphChangePublisher colle...

Kamo·1mo ago
FeatureSecurityService

Right-table housekeeping covers org_team_rights (KamoCollab CP01 T8)

RoleRightsSyncService names org_team_rights in all three of its lists, so on every boot a frozen CHECK on it is dropped, a row naming a removed right is deleted...

Kamo·1mo ago
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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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