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
September 5, 2026
Featurekamo-shared-library

Apply from inside the workspace, and say so to both sides

The public careers board's Apply button is now a link into registration, so every application is filed against a session. Two fields carry the candidate from th...

Kamo·1mo ago
Featurekamo-shared-library

A product's application is published, not assumed

`LeadVendorProduct` gains `applicationEnabled` and `webChatIntegrationId`. A product existing in the CRM is not a decision to publish a form the whole internet...

Kamo·1mo ago
Fixkamo-shared-library

Cover the three shared reads a catalog bump still reached users through

Same defect as the sign-in fix, found by reading the fleet's logs rather than one report: eight hours of pod logs across email, media, docs, daemon and security...

Kamo·1mo ago
Fixkamo-shared-library

Retry the two rights reads that stand between a password and a session

MemberRightsAppliedService carried @RetryOnDbConflict on its WRITE entry points only. The class therefore read as covered while the two methods the authenticate...

Kamo·1mo ago
Fixkamo-shared-library

The update DTO needs the first-time-buyer field too

68ce0e0f added `isFirstTimeBuyer` to the CREATE request and wired both call sites in LeadService — but the second one reads UpdateLeadRequest's own nested Mortg...

Kamo·1mo ago
Fixkamo-shared-library

Put back the CRLF a Python edit stripped from two files

Both files are CRLF in this repo, and rewriting them through Python's text mode converted every line — turning a fifteen-line addition into a 771-line diff in 6...

Kamo·1mo ago
Featurekamo-shared-library

Record whether a borrower says this is their first home

A first-time buyer is eligible for programmes nobody else can use, so a lead that does not carry the answer costs the officer a call to ask it. The public appli...

Kamo·1mo ago
Featurekamo-shared-library

Give a lender somewhere to put the truth about itself

The public mortgage application page composed its legal footer out of nothing — a hardcoded California licence, an invented NMLS number, a fictional address — a...

Kamo·1mo ago
Fixkamo-shared-library

Bring the organization inside the retried read instead of leaving it to fire later

Member.organization is LAZY, so findById left a proxy behind and the real SELECT happened whenever something first dereferenced it. Under open-in-view that is t...

Kamo·1mo ago
Featurekamo-shared-library

Retry the member reads that fail first after a DDL

The member-by-id load is close to the first statement an authenticated request performs, so a catalog-version bump hits it before it hits anything else. That is...

Kamo·1mo ago
Featurekamo-shared-library

Retry a transactional method in a NEW transaction, and stop rights failing open

Two fixes that only make sense together. @RetryOnDbConflict retries a method OUTSIDE its transaction, so each attempt begins a fresh one. Retrying inside the t...

Kamo·1mo ago
Featurekamo-shared-library

Let the console ask what a seat change costs before making it

changeSeats now raises an invoice for the startup fee on new heads, which turns a number in a dialog into a charge — ten hires on a $99 plan is $990, and on a l...

Kamo·1mo ago
Featurekamo-shared-library

Record whether a domain's SPF authorizes us to send as it

Two columns beside the ownership and SSL flags, answering the third DNS question about a domain: may we put its name on the From line of the transactional mail ...

Kamo·1mo ago
Featurekamo-shared-library

Charge the startup fee, per seat, and let one customer out of it

The startup fee has been half-built for as long as the model has existed. SubscriptionPlan carried a setupFee, SubscriptionOrder carried a setupFee, OrderLineTy...

Kamo·1mo ago
Featurekamo-shared-library

Retry the database errors Yugabyte expects a client to retry

Applying DDL bumps the catalog version, and every physical backend still holding the old one fails its next statement with SQLState 40001 — "schema version mism...

Kamo·1mo ago
September 4, 2026
Featurekamo-shared-library

Address an org's OAuth callbacks to its own domain

An OAuth redirect URI is held by a third party. A member pastes it into Google's or Microsoft's console, and from then on the value the service sends on the aut...

Kamo·1mo ago
Featurekamo-shared-library

A detection rule an org cannot switch off, and the letter it sends

PROGRESSIVE_LOGIN_LOCKOUT joins DetectionRuleType. Every other value on that enum describes something a tenant opts into; this one describes a control SecurityS...

Kamo·1mo ago
Fixkamo-shared-library

Share the delivery consumer, so a second pod is not refused

Caught in production the moment services went to two replicas on 2026-09-04. Every pod carrying this class logged, once, at boot: [Webhook] Failed to subscri...

Kamo·1mo ago
Featurekamo-shared-library

A distributed lock, so a scheduled sweep can survive a second replica

There is no ShedLock anywhere on this platform and there never has been. All 97 @Scheduled sweeps across 18 services are correct only because each service runs ...

Kamo·1mo ago
Featurekamo-shared-library

A logo overlay for the sign-in and sign-up sites

Two more columns in the vocabulary home_logo_overlay already established: a token, not a hex, so an org that rebrands keeps an overlay matching its new colours....

Kamo·1mo ago
Featurekamo-shared-library

Add a queue-group subscribe, so work is shared rather than pinned to one pod

Companion to subscribeEphemeral. Two different jobs, two different consumers: subscribeEphemeral every pod must see every message (anything ending in a STO...

Kamo·1mo ago
Stylekamo-shared-library

Restore this file's CRLF line endings

The previous commit rewrote it with a script that normalised it to LF, turning a 90-line addition into a whole-file diff. No content change.

Kamo·1mo ago
Featurekamo-shared-library

Add an ephemeral subscribe, so more than one pod can serve a conversation

A durable push consumer admits exactly ONE subscriber. The second pod to bind the same name is refused with [SUB-90012] Consumer is already bound to a subscript...

Kamo·1mo ago
Featurekamo-shared-library

The two reads the platform Users list is built on

A paged, searched finder over USERS, and a batched membership count. The finder is unfiltered by isFake on purpose. Reviewing and clearing that flag is part of...

Kamo·1mo ago
Featurekamo-shared-library

A right for user accounts, and a parked address for changing one

Three additions, all of them the shared half of work that lands in SecurityService and kamo-internal. PlatformRightType.MANAGE_USERS, appended. A user account ...

Kamo·1mo ago
Featurekamo-shared-library

Gate Publish on god ELIGIBILITY, not an open window

The Publish flag shipped gated on godModeActive — GD plus a deliberately opened 30-minute break-glass window. Every god-eligible operator then found the switch ...

Kamo·1mo ago
Fixkamo-shared-library

System_bug.published needs a column DEFAULT, or it is never created

The field was declared `@Column(nullable = false)` with no columnDefinition, so ddl-auto emitted `ADD COLUMN published boolean not null` — which Postgres REFUSE...

Kamo·1mo ago
Featurekamo-shared-library

Three public transactional templates, and the org patch keys behind them

The careers site now writes to people who have no account, which is new for this platform: every other transactional template goes to a member. Three canonical ...

Kamo·1mo ago
Featurekamo-shared-library

The Publish flag on a system bug, and the query rule behind it

A system bug already crossed the tenancy line in one direction. This adds the second visibility rule on top of it: a report a god-mode operator filed privately ...

Kamo·1mo ago
Featurekamo-shared-library

The schema behind apply-first, the network, alerts and retention

member_id on hr_job_application becomes NULLABLE, which is the whole of apply-first: five steps stood between pressing Apply and answering the first question, a...

Kamo·1mo ago
Fixkamo-shared-library

An empty platform registration is not "connect with Kamo's app"

isPlatformEnabled now also requires a client id, matching what OrgOAuthClientController reports as platformEnabled. Without that the meetings screen and the bri...

Kamo·1mo ago
Featurekamo-shared-library

An organization can bring its own OAuth2 client

Until now the client id and secret for every OAuth provider came from one platform-wide registration, so an org could only connect what Kamo had registered — an...

Kamo·1mo ago
Featurekamo-shared-library

The two columns a public job board needs

publish_externally decides whether an advert reaches careers.<apex> at all. It is a separate axis from status: an internal-only posting is fully AVAILABLE and m...

Kamo·1mo ago
Featurekamo-shared-library

Careers is a platform alias, not an org's own

OrgResolutionService.byHost reads a leading label that is not a known platform alias as an ORGANIZATION's alias within the domain behind it, so without this ent...

Kamo·1mo ago
September 3, 2026
Featurekamo-shared-library

The schema behind a row of footer badges

The email signature footer held one image, named by footer_image_source and sized by a percentage. It now holds a ROW of them: the three built-in sources plus a...

Kamo·1mo ago
Featurekamo-shared-library

A dispatch names the terminal it is running in

Send to AI is hosted in a Remote Terminal now, so the answer has to say which one — the console opens that window, and opening it is what starts the session. B...

Kamo·1mo ago
Featurekamo-shared-library

Job postings and applications — the schema behind /hr/careers

Two entities, six enums and two repositories under com.kamo.z.shared.hr.careers, plus the three shared types the feature had to widen. JobPosting is three grou...

Kamo·1mo ago
Testkamo-shared-library

Wire the accept-gate mock into the FFA spend test

acceptNextLead consults LeadAcceptEligibilityService before it reaches any of the credit logic these cases are about, and the test builds the service by reflect...

Kamo·1mo ago
Featurekamo-shared-library

Widen the accept gate, obfuscate masked contact info, let free-for-all leads be claimed

Three related changes to the lead-assignment core. **The accept gate now asks two questions, over every assigned lead.** LeadAcceptEligibilityService replaces ...

Kamo·1mo ago
Featurekamo-shared-library

Record a dev-machine terminal in the access log

A member opening a shell on desktop-1 now has an event type of its own. That machine holds a cluster-admin kubeconfig and its accounts have passwordless package...

Kamo·1mo ago
Featurekamo-shared-library

Send an account's company alongside its contact for customer pickers

Six customer pickers read AccountSummaryDTO — the order editor, the service-job form, the subscription detail and wizard, and the pipeline signups tab — and eve...

Kamo·1mo ago
Featurekamo-shared-library

Add JUST_CALL as a phone provider type

Appended at ordinal 5. **************** is EnumType.ORDINAL and carries no CHECK constraint, so appending is safe and inserting anywhere else would silently re-...

Kamo·1mo ago
Fixkamo-shared-library

Comping an account now drops its cached entitlements

SecurityService answers /api/security/entitlements/me out of Redis with a 15-minute TTL, invalidated by messages on kamo.entitlements.invalidate. Every self-ser...

Kamo·1mo ago
Fixkamo-shared-library

Editing a draft order's seats or cycle now reprices it

updateDraftOrder set seatCount and billingCycle and saved. Both are price drivers, and neither the order's money fields nor its line items were touched, so the ...

Kamo·1mo ago
Featurekamo-shared-library

A paper colour per block

**************** holding a palette ID — "lemon", "glass" — and never a hex value. Stored the way notes and launchpad panes store theirs, for the reason that ma...

Kamo·1mo ago
Fixkamo-shared-library

A comped order now grants the add-ons it sold

Comping an account granted the plan and nothing else. provisionCompSubscription copied plan, seats, cycle, source and status onto the AccountSubscription and ne...

Kamo·1mo ago
Fixkamo-shared-library

Bind content_json as JSON, or every insert fails

REPORTED: "Failed to create sales script". The server said exactly why: column "content_json" is of type jsonb but expression is of type character varying ...

Kamo·1mo ago
September 2, 2026
Featurekamo-shared-library

IMPERSONATE, so an operator can enter a tenant as one of its members

Appended to PlatformRightType rather than inserted: getSortOrder() returns ordinal(), so a right added in the middle renumbers every right below it in the conso...

Kamo·1mo ago
Fixkamo-shared-library

An archived market's scripts leave the Interaction Center

findMarketIdsWithActiveScripts asked only whether the SCRIPT was active, so a market the organization had retired still appeared as a sub-tab for as long as any...

Kamo·1mo ago
Featurekamo-shared-library

The script a member reads on a call, as ordered blocks

Two tables and two rights. SALES_SCRIPTS hangs off a lead market the way a LeadVendor does; SALES_SCRIPT_BLOCKS holds the parts, each one a Lexical document plu...

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