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
September 23, 2026
Fixkamo-internal

The Hold'em invite is a kind the site knows: label, icon, filter and mute

MediaService has raised HOLDEM_INVITE notifications since Hold'em shipped, but the kind was missing here: the toast's eyebrow printed the raw translation key, t...

Kamo·6d ago
Featurekamo-internal

The member who caused a notification opens their card from it

"Dana Reyes dealt you in", "Weekly sync · Dana Reyes", an unread-chat card whose body is the sender: EmailService (29cb21e) now sends actorMemberId (as text) an...

Kamo·6d ago
Fixkamo-internal

Gate adding people and moving a position as the server does, and list every storage area

- The Add and Bulk Add buttons on /account, and the four create pages, need MANAGE_MEMBERS (MemberAdministrationGate), which SecurityService now enforces. Som...

Kamo·6d ago
FixKlusterServices

Five reasons the golden image had never actually been built

The build had never been run. Running it found one bug per attempt, and the first three would each have produced a plausible-looking image with something missin...

Kamo·6d ago
TestEmailService

StatusReasonAdviceTest's alias case also needs MANAGE_EMAIL_ACCOUNTS

Same shape as the AliasResponseMemberIsTextTest fix: this class's one shared session lacked the right, so createAlias's new gate answered 403 "MANAGE_EMAIL_ACCO...

Kamo·6d ago
Fixkamo-shared-library

Count an org's unconfirmed talent-alert rows for the anonymous form's cap

DocsService's public talent-alert subscribe endpoint sends a confirmation email on every accepted call, with no limit on how many not-yet-confirmed rows one org...

Kamo·6d ago
Fixkamo-shared-library

UpdateDocType now requires the doc type to belong to the document's own org

ImageService.updateDocType loaded the target ImgDocType by UUID alone; requireEditableAndOwned proves the caller may edit the Img, but says nothing about whose ...

Kamo·6d ago
Fixkamo-shared-library

Org-scoped counterparts for the thumbnail-backfill candidate queries

DocsService's /backfill-thumbnails admin endpoint selected candidates from **************** (platform-wide, no organization predicate) or, as a last resort, a r...

Kamo·6d ago
Fixkamo-internal

Clearing the image version has to send "", not null

**************** merges rather than replaces, and for the image version a null means "leave whatever is there alone" — only a blank string clears it: if (i...

Kamo·6d ago
FixVOIPService

Right checks, SSRF/credential guards and cross-org fixes across VOIP

Findings 2-6 from the phone-system audit, fixed together because several share files. 2. HIGH — VoipInstanceController had no right check on any mutating endpo...

Kamo·6d ago
TestBillingService

Growth Hub files are reported on their own line

This pins the GROWTH_HUB domain kamo-shared-library gained today. Before it, no domain claimed the Growth Hub's two associations, and the imaging pass dropped t...

Kamo·6d ago
Featurekamo-shared-library

The Notes app is "Notes & Checklists"

The Notes app holds checklists as well since 2026-09-23 (steps ticked off as they are done, a step that waits until the steps before it are finished, a checklis...

Kamo·6d ago
FixSecurityService

Adding people and member security need their rights

POST /members/create, /create-team-member and /bulk-create, and GET /members/lookup-user, now require MANAGE_MEMBERS or an open god window. They checked only fo...

Kamo·6d ago
FeatureMediaService

The Hold'em invite and the meeting reminder say who they are from

MemberNotificationClient.raise gains an overload carrying actorMemberId/actorName (the id sent as text; the old signature is unchanged and sends neither). Holde...

Kamo·6d ago
FeatureEmailService

Who caused a notification travels with it, so the bell can draw them as a member

- NotificationRequest gains actorMemberId/actorName; the old constructor stays for every producer that predates them. - raise() keeps the pair only when both ...

Kamo·6d ago
Featurekamo-shared-library

A notification can say whose doing it is

MemberNotification gains ACTOR_MEMBER_ID (INT8) and ACTOR_NAME (255): the member who caused it - who dealt you in, whose meeting is starting, who wrote to you -...

Kamo·6d ago
FeatureInitializerService

The Notes plan feature is "Notes & Checklists"

The Notes app holds checklists as well since 2026-09-23 and is called "Notes & Checklists" everywhere it is named. The pricing page's comparison chart takes its...

Kamo·6d ago
Chorekamo-internal

The NOTES mirrors say "Notes & Checklists", as Java now does

ServiceType.NOTES is renamed in kamo-shared-library, in copy only: the display name is "Notes & Checklists" and the description now covers the checklists. Both ...

Kamo·6d ago
Fixkamo-internal

The platform tab, and three links that showed their own keys

Two bugs, both reported from the running site. THE SETTINGS LINKS SHOWED KEY PATHS The three Hosted Computer sub-links carried key: 'computers' | 'capacity' | ...

Kamo·6d ago
FixDocsService

Require MANAGE_DOCS_SETTINGS on every doc-settings mutation, not just some

The settings page always sent a member without MANAGE_DOCS_SETTINGS away, but ten mutation endpoints in ImagingSettingsController never asked themselves: canMan...

Kamo·6d ago
FixDocsService

Scope thumbnail backfill to the caller's org; gate history reads by clearance

Two independent gaps in ImagingController: - /backfill-thumbnails selected candidates platform-wide (no organization predicate at all; the last-resort tier w...

Kamo·6d ago
FixDocsService

Throttle the anonymous careers talent-alert form

CareersPublicController's POST /{orgRef}/alerts is the one anonymous, unauthenticated endpoint in this service that sends an email on every accepted call, with ...

Kamo·6d ago
ChoreEmailService

Scrub copies of live credentials from config and dumps

A sweep of every repo for the values of the cluster's live Secrets (2026-09-23) found copies here: the JWT signing secret as a `${JWT_SECRET:<literal>}` default...

Kamo·6d ago
Fixkamo-shared-library

UpdateDocType now requires the doc type to belong to the document's own org

ImageService.updateDocType loaded the target ImgDocType by UUID alone; requireEditableAndOwned proves the caller may edit the Img, but says nothing about whose ...

Kamo·6d ago
Fixkamo-shared-library

Org-scoped counterparts for the thumbnail-backfill candidate queries

DocsService's /backfill-thumbnails admin endpoint selected candidates from **************** (platform-wide, no organization predicate) or, as a last resort, a r...

Kamo·6d ago
Fixkamo-shared-library

Count an org's unconfirmed talent-alert rows for the anonymous form's cap

DocsService's public talent-alert subscribe endpoint sends a confirmation email on every accepted call, with no limit on how many not-yet-confirmed rows one org...

Kamo·6d ago
ChoreSecurityService

Scrub copies of live credentials from config and dumps

A sweep of every repo for the values of the cluster's live Secrets (2026-09-23) found copies here: the JWT signing secret as a `${JWT_SECRET:<literal>}` default...

Kamo·6d ago
ChoreInitializerService

Scrub copies of live credentials from config and dumps

A sweep of every repo for the values of the cluster's live Secrets (2026-09-23) found copies here: the JWT signing secret as a `${JWT_SECRET:<literal>}` default...

Kamo·6d ago
Featurekamo-internal

A switched-to mailbox stays live, and the search box is polished

Live updates. The page asks EmailService to watch the mailbox it has open when it is not the member's own (/app/email/watch, re-sent after a reconnect, stopped ...

Kamo·6d ago
ChoreAPIService

Scrub copies of live credentials from config and dumps

A sweep of every repo for the values of the cluster's live Secrets (2026-09-23) found copies here: the JWT signing secret as a `${JWT_SECRET:<literal>}` default...

Kamo·6d ago
Chorekamolos

Scrub copies of live credentials from config and dumps

A sweep of every repo for the values of the cluster's live Secrets (2026-09-23) found copies here: the JWT signing secret as a `${JWT_SECRET:<literal>}` default...

Kamo·6d ago
ChoreBillingService

Scrub copies of live credentials from config and dumps

A sweep of every repo for the values of the cluster's live Secrets (2026-09-23) found copies here: the JWT signing secret as a `${JWT_SECRET:<literal>}` default...

Kamo·6d ago
Featurekamo-internal

Audio lessons — upload a recording, and learners can really navigate it

Authors (/hr/training course editor) - "Upload file" on every slide, beside "Choose media": audio (MP3, M4A, AAC, WAV, OGG/Opus, FLAC), video or an image, thr...

Kamo·6d ago
FeatureKlusterServices

A way to actually build the golden image

build-golden-image.sh said "Run by CI (see ../../.forgejo/workflows/)". No such workflow was ever written. It needs libguestfs, qemu-img and virt-customize, non...

Kamo·6d ago
FeatureConversionService

Audio — a waveform thumbnail at upload, and peaks and transcripts on demand

An uploaded audio file fell through to the Docs PDF path, which cannot open one, so every audio upload ended "Conversion failed" with a blank library tile. Audi...

Kamo·6d ago
FeatureDocsService

Audio slides — media metadata, and learners play media through their assignment

An audio slide's navigation lives in media_meta_json (duration, waveform peaks, chapters), which the editor writes and the player reads back verbatim. It is sav...

Kamo·6d ago
Featurekamo-shared-library

Audio uploads pass the MIME check, and slides carry media metadata

Every audio upload but MP3 was refused as a MIME mismatch. An upload is accepted only when the browser's type and Tika's sniff resolve to the same ImageMimeType...

Kamo·6d ago
TestEmailService

AliasResponseMemberIsTextTest's session carries the right createAlias now needs

The full suite caught what the targeted run alone would not have: this fixture's session had no rights on it, so createAlias's new MANAGE_EMAIL_ACCOUNTS gate 40...

Kamo·6d ago
PerformanceEmailService

Calendar reminder sends move off the shared scheduler thread

Spring's default single scheduler thread is shared by every @Scheduled method in this service — the 1-second campaign pulse, the drip engine's tick, and Reminde...

Kamo·6d ago
FixEmailService

An IMAP/SMTP connection test must not be usable as a network probe

POST /api/email/member-imap/test and /{id}/imap/test connected to whatever host and port the caller supplied and returned the raw exception message. Any authent...

Kamo·6d ago
FixEmailService

Alias, domain and personal-mailbox admin actions need a management right

create/delete on an email alias, **************** on the org's sending domains, and **************** on a personal (self-hosted) mailbox all needed only a sessi...

Kamo·6d ago
FixEmailService

A member's mailboxes and aliases are only readable inside their own organization

GET **************** took no HttpServletRequest at all — no session, no org check anywhere on the path — and GET **************** checked that the CALLER had a ...

Kamo·6d ago
FixEmailService

A calendar export or import must be one the caller can actually open

GET /export/calendar/{id} and POST /import/{calendarId} took the calendar's UUID alone — no HttpServletRequest, so no session, no org or member check at all. An...

Kamo·6d ago
ChoreSecurityService

No live credentials in application.yml defaults

The local-development defaults carried the database OWNER's password (${DB_PASSWORD:<literal>}), and apiservice/securityservice also the live changelog webhook ...

Kamo·6d ago
ChoreMCPGatewayService

No live credentials in application.yml defaults

The local-development defaults carried the database OWNER's password (${DB_PASSWORD:<literal>}), and apiservice/securityservice also the live changelog webhook ...

Kamo·6d ago
ChoreInitializerService

No live credentials in application.yml defaults

The local-development defaults carried the database OWNER's password (${DB_PASSWORD:<literal>}), and apiservice/securityservice also the live changelog webhook ...

Kamo·6d ago
ChoreDocsService

No live credentials in application.yml defaults

The local-development defaults carried the database OWNER's password (${DB_PASSWORD:<literal>}), and apiservice/securityservice also the live changelog webhook ...

Kamo·6d ago
ChoreDaemonService

No live credentials in application.yml defaults

The local-development defaults carried the database OWNER's password (${DB_PASSWORD:<literal>}), and apiservice/securityservice also the live changelog webhook ...

Kamo·6d ago
ChoreConversionService

No live credentials in application.yml defaults

The local-development defaults carried the database OWNER's password (${DB_PASSWORD:<literal>}), and apiservice/securityservice also the live changelog webhook ...

Kamo·6d ago
ChoreAPIService

No live credentials in application.yml defaults

The local-development defaults carried the database OWNER's password (${DB_PASSWORD:<literal>}), and apiservice/securityservice also the live changelog webhook ...

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