KamoCRM

Live Change Log

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

18,590
Total Changes
6,669
Features
5,584
Fixes
30
Projects
Filter by project
All Projects18,590AIService282APIService179BillingService166ConversionService118DaemonService147DocsService258ESigService99EmailService629InitializerService344KBService162KlusterServices771MCPGatewayService277MediaService622RAGService79SecurityService2,026TranslateService62VOIPService265VectorService11kamo-apps29kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,761kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,861kamo-signer-monorepo61kamolos115
Filter by type
All TypesBuild23CI527Chore794Docs3,288Feature6,669Fix5,584Other1,001Performance174Refactor284Revert23Style45Test177Upgrade1
August 7, 2026
Fixkamo-shared-library

Stop the mailbox pointer from failing startup platform-wide

DepartmentService is a @Service, and every service carries @ComponentScan("com.kamo"), so all ~40 of them construct it. Giving it a MailboxRepository therefore ...

Kamo·3mo ago
CIMediaService

Mirror Maven Central and retry, so one bad byte stops killing the build

The startup fix could not ship: the build died resolving byte-buddy with "Tag mismatch", which reads like a missing artifact but is a download corrupted mid-tra...

Kamo·3mo ago
FixMediaService

Return 409 on every lost claim race, add manager claim path

Round 1 review fixes for the accept-popup claim endpoint: - an ordinary lost race (loser's isClaimableBy already false post-commit) now raises TicketAlreadyCl...

Kamo·3mo ago
Featurekamo-internal

Switch mailboxes from the same searchable picker the composer uses

The switcher was the weaker half of the pair: a select holding every mailbox the member can open, which for org-wide access is every mailbox in the org. It also...

kamo·3mo ago
FeatureEmailService

Let /sendable drop the alias group for callers that open mailboxes

The /messages mailbox switcher offers the same set as the composer's From field, minus one thing: an alias cannot be opened. Mail addressed to it lands in the m...

Kamo·3mo ago
Featurekamo-internal

Proxy the queue-summary and claim endpoints

kamo·3mo ago
FixMediaService

Scan the email repositories DepartmentService now needs

MediaService CrashLooped on every pod since shared-lib 1.5.0: DepartmentService is a @Service, so the wildcard @ComponentScan("com.kamo") builds it here whether...

Kamo·3mo ago
FixESigService

The expiry sweep ran with no transaction

@Transactional is applied by a proxy and sweep() called expireDue() on this, so the annotation was inert. The expiry notices read the envelope's organization do...

Kamo·3mo ago
Fixkamo-signer-monorepo

A party who already signed gets their copy, not the document again

The session always started at "welcome", so a signer following the link in their completion email — or simply reopening the invitation — was walked through the ...

Kamo·3mo ago
Featurekamo-internal

Download the executed document, and choose a real signing order

The sender had no route to the finished document at all. EnvelopeSummary advertised a signedDocumentUrl pointing inside the kamo-signer app's own BFF, authentic...

kamo·3mo ago
FixSecurityService

Keep co-borrowers on one routing order

deriveSigners numbered borrowers 1, 2, 3… as a display index. ESigService now ENFORCES routing order instead of merely reporting it, so leaving the counter in p...

Kamo·3mo ago
FixESigService

Close out the signing lifecycle — notices, routing, guards, expiry

Everything after a signer presses Finish was incomplete. Notices: an envelope's last signature produced a flattened PDF in MinIO that only the final signer eve...

Kamo·3mo ago
FeatureEmailService

Preview variables for the e-signature templates

The admin template editor renders every placeholder blank for a key with no sampleVariables arm, so the seven esign templates previewed as a page of empty gaps ...

Kamo·3mo ago
Featurekamo-shared-library

The five envelope-lifecycle email templates that were never written

An e-signature envelope had exactly two templates: the invite and the step-up code. Nothing existed for anything that happens AFTER a signer signs — which is wh...

Kamo·3mo ago
Featurekamo-internal

Rebuild the mortgage market settings into seven coherent tabs

The MORTGAGE market page carried fifteen tabs, twelve of them lender config, and several answered the same question in two places: hedging was switched on under...

kamo·3mo ago
Featurekamo-internal

Pick the From address from a searchable dialog, not a dropdown

A select cannot hold this list. Everything the /messages switcher offers is sendable, and for a member with ACCESS_ALL_MEMBER_MAILBOXES that is every mailbox in...

kamo·3mo ago
FeatureEmailService

Searchable, paged endpoint for the addresses a member can send from

GET /api/email/mailboxes/sendable answers the same question as /accessible — every address the member may send as — but as one merged stream that is searched an...

Kamo·3mo ago
FeatureMediaService

Report the caller's claimable ticket queue

Kamo·3mo ago
Fixkamo-internal

Match the TypeScript DTOs to the Java ones they proxy

/api/webinar/* is a passthrough, so every TS field name that drifted from the Java DTO silently read as undefined instead of failing to compile. The settings ta...

kamo·3mo ago
FeatureMediaService

GET /types/{typeId}/slots so the settings editor can list slots

The settings UI has always fetched this path, but only POST/PUT/DELETE were mapped, so the Availability Slots tab got a 405 and rendered empty. Unlike /slots/av...

Kamo·3mo ago
Docskamo-internal

Record the compatibility bridge and what retires it

The bridge is invisible from the code that will eventually delete it -- the field looks like a real part of the request. Name the condition that ends it: Securi...

kamo·3mo ago
Featurekamo-internal

Assign a mailbox to a department and to the organization

The department dialog's contact email was free text, so it could name an address the org does not own. It becomes a picker over the org's real mailboxes -- the ...

kamo·3mo ago
FeatureInitializerService

Mailbox pointers for departments and orgs, and backfill the departments

DEPTS.MAILBOX_ID and ORGS.CONTACT_MAILBOX_ID, both plain UUID with no FK to email_provider.mailboxes: mailboxes sync from external providers and can be removed ...

Kamo·3mo ago
Fixkamo-internal

Populate the Quick Tips and use the shared help primitives

The scheduled-support tips rendered four placeholder strings ("How Step1"…); replace them with real guidance covering the type → presenters → slots → reminders ...

kamo·3mo ago
Fixkamo-internal

Compose from the mailbox you have open, and offer every one you can access

New Message opened the composer on the member's default mailbox: only onBehalfOf was passed, and only for another member's mailbox, so a personal or shared mail...

kamo·3mo ago
Featurekamo-shared-library

Let a department and an org point at one of their mailboxes

A department's contact email was free text, so it could name an address the org does not own -- two of the three departments with one set today do exactly that....

Kamo·3mo ago
Featurekamo-internal

A Manager field on Position, and one people picker for the whole app

The Position card gains Manager, optional. It is a search, not a dropdown: an org can hold thousands of names, and the only thing a select with all of them guar...

kamo·3mo ago
FeatureSecurityService

Set a manager, and search the directory a page at a time

GET **************** answers one page of the session org's directory. Search, ordering and paging happen in the database; a hostile ?size= is capped. Words are ...

Kamo·3mo ago
Featurekamo-shared-library

A manager, and a directory search that survives a big org

TeamMember gains an optional self-reference for who it reports to. columnDefinition is pinned to INT8 so Hibernate cannot copy Member.ID's DEFAULT unique_rowid(...

Kamo·3mo ago
FeatureInitializerService

Give a team member a manager

Adds MANAGER_ID to member_team_member, a nullable self-reference for the reporting line. Nothing is backfilled: no manager is a complete answer, both at the top...

Kamo·3mo ago
FeatureInitializerService

Add DEPTS.PARENT_DEPT_ID for nested departments

Nullable with no backfill -- null means top level, which is what every existing department was and most will stay. Declared plain UUID with an explicit DROP DE...

Kamo·3mo ago
FeatureSecurityService

Thread the parent department through create and update

DepartmentService now takes its request DTO instead of eight positional arguments, so the parent joins the payload rather than becoming a ninth in a row of same...

Kamo·3mo ago
Featurekamo-internal

Draw departments as an org chart with a parent picker

The departments tab was a flat list, so an org with Operations > Customer Success > Onboarding had no way to say so and no way to see it. Add/edit gets a Paren...

kamo·3mo ago
Featurekamo-shared-library

Let a department sit under a parent department

Departments were a flat list, so an org chart with Operations > Customer Success > Onboarding had no way to say so. Department gains an optional self-referencin...

Kamo·3mo ago
Featurekamo-internal

Grow the To/Cc/Bcc fields to three rows, then scroll

The recipient fields in the compose tool window were a single nowrap row that had to be dragged sideways to read, and the window is 360px wide and not resizable...

kamo·3mo ago
FixSecurityService

Stop losing organizations to swallowed exceptions, and accept the full create payload

createOrganization could destroy a customer's signup and report nothing useful. Transaction integrity: - Five Docstors ran behind try/catch that only looked sa...

Kamo·3mo ago
Featurekamo-internal

Make org creation survivable, and offer every branding option up front

The wizard could fail a customer in ways nothing on screen explained, and it asked for a fraction of what Settings → Behavior & Labeling exposes. Creation reli...

kamo·3mo ago
FixAPIService

Encode the decoded token exactly once on the way upstream

21670e5 routed SocialWebhookController through UpstreamUri's FULLY-PRE-ENCODED entry point, but its URL is a hybrid: `token` is an @PathVariable, so Spring hand...

Kamo·3mo ago
Fixkamo-internal

Make the create-account form tell you what happened

Creating an account from a lead appeared to do nothing. The server was returning a 500 (see the AccountAddress fix in kamo-shared-library), but the only error U...

kamo·3mo ago
Fixkamo-internal

Make the create-account form tell you what happened

Creating an account from a lead appeared to do nothing. The server was returning a 500 (see the AccountAddress fix in kamo-shared-library), but the only error U...

kamo·3mo ago
FixSecurityService

Make account creation atomic, org-scoped and rights-gated

createCustomer saved the Account before writing its addresses, and was not transactional — so when the address insert failed, the half-built Account stayed comm...

Kamo·3mo ago
Fixkamo-internal

Keep the right-click menus inside the viewport

Right-clicking a folder low in the sidebar opened its menu below the fold. The flip-at-the-edge logic was there but never ran: the component returns null until ...

kamo·3mo 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