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 28, 2026
FixSecurityService

The endpoint ratchet sees the patient-SMS relay's internal-auth guard

**************** flagged **************** and .receipt (29e22ca7) as endpoints that resolve no session. They are server-to-server (VOIPService -> SecurityServic...

Kamo·2w ago
FixEmailService

A colleague's alias can be sent from when their mailbox can

Composing as a colleague offers their aliases in the From picker, but /send authorizes the From against the logged-in member, whose canSendAs knew only the coll...

Kamo·2w ago
FixEmailService

Dovecot push publishes once per mailbox, EHR letters get a subsystem; four stale tests fixed

Production: - DovecotPushService published every arrival, change and unread recount once per application spelling of the mailbox. That fan-out existed because...

Kamo·2w ago
October 27, 2026
FixMCPGatewayService

A signed-in supervisor's meeting request is their order even when terse ("Nell email Cole, supervisor test")

TPMEETAUTH live (sp00verify call 8daf1817): the supervisor's line was attributed SOLE / SUPERVISOR from their own stream, but DirectOrder did not read "Nell ema...

Kamo·2w ago
FixMCPGatewayService

A weak citation never hides the member's confirmation (order and approval stand-in)

Live 2026-10-27 (sp00verify, approval bc7dfe20): after KC Vera confirmed, the SI cited the unproven email it was asked in; that soft-refused and replaced both t...

Kamo·2w ago
FixMCPGatewayService

A member's confirmation in Kamo is the request an outside send carries (no approval for what their rights allow)

Live 2026-10-27 (sp00verify, request db6fff36): KC Vera confirmed in Kamo and the run ran on her order, yet mail to an outside address still went to the SI's su...

Kamo·2w ago
October 26, 2026
FixAIService

A failed confirmed action reads as the Tool Plane's sentence, never its JSON; guard the assistant beans' constructors

Live in sp00verify a confirmed send refused by the mail service came back to the chat as the refusal's JSON. The outcome now reads its message in plain words (i...

Kamo·2w ago
FixAIService

AssistantService names the constructor Spring uses, so new AIService pods start

8c28b82/32c04ee gave AssistantService two constructors without @Autowired; every new pod crash-looped (NoSuchMethodException AssistantService.<init>()) while th...

Kamo·2w ago
FixMediaService

An SI invited to a new table is told, and a sweep retakes any SI turn a frame missed

Live check (sp00verify): a table created with an SI invited published no frame, so the SI never looked and never sat. createTable now raises the turn event, and...

Kamo·2w ago
FixMCPGatewayService

Every notification kind decided (BILLING_INVOICE not offered to SIs); ClockPack names its Spring constructor

NotificationsPackTest and KnowledgeAndPeoplePacksTest were red on main since shared-lib added BILLING_INVOICE. ClockPack keeps its test constructor; the one Spr...

Kamo·2w ago
FixSecurityService

An order may be a teammate's proven email or a request they confirmed in Kamo

The Tool Plane now verifies orders given by a teammate's own email (email:<folder>/<uid> or the wake's email:<mailbox>|<folder>|<uid>) and by a request the memb...

Kamo·2w ago
FixMediaService

An SI's one wake for a member's invitation reads the names inside a transaction

Live check (sp00verify): the greeting notification failed with a LazyInitializationException walking the inviter's user outside a session, so the SI joined and ...

Kamo·2w ago
FixMediaService

CheddarLedger names its Spring constructor (the pod CrashLooped: no default constructor)

4b5d777's new pod could not build cheddarLedger: a second (test) constructor left Spring with no single constructor to use. The old pods kept serving. The bean ...

Kamo·2w ago
FixMediaService

CheddarLedger names the constructor Spring builds it with

Two constructors and no @Autowired: Spring looked for a default one, so every MediaService pod since 4b5d777 failed to start (CrashLoopBackOff; the old pods kep...

Kamo·2w ago
FixSecurityService

A generated personality keeps everything the SI already holds

Only an earlier generation's items, named by id and still marked as drafted, are replaced; a configure-assistant draft or a person's item stays, and a generated...

Kamo·2w ago
FixEmailService

MailProvenanceService names its Spring constructor, so EmailService starts again

5cd632f gave it a second public constructor; Spring found no default one and every new pod crash-looped ("No default constructor found"), holding the deploy on ...

Kamo·2w ago
FixMediaService

An SI plays a member's game with the member's PLAY_CHESS too (No Insubordination)

A game with a member is always at that member's request (they invited the SI, or told it to invite them), and a team member's direct order runs with the SI's ri...

Kamo·2w ago
FixSecurityService

Never push a stage to the external MLOS that the sync itself wrote

The Arive import walks a loan through Kamo's pipeline one step at a time; the 20s sync tick saw each half-walked status as a Kamo change and sent it to Arive, r...

Kamo·2w ago
FixSecurityService

Never send exception text (SQL included) to the browser

BaseLosController.error() put e.getMessage() in every 500 body; the pipeline page showed a full JDBC statement. The exception now goes to the log under a short ...

Kamo·2w ago
FixSecurityService

Pipeline reads retry on a Yugabyte read restart instead of failing the page

"We couldn't load the pipeline (JDBC … Restart read required)" appeared at random while the Arive import was writing loans. The deal and loan list reads are pur...

Kamo·2w ago
Fixkamo-shared-library

Retry the pipeline board read on a Yugabyte read restart; ignore impossible Arive dates

The board loads every loan over several statements; a concurrent write (the Arive import) made Yugabyte fail a later one with 40001, shown to the user as a raw ...

Kamo·2w ago
Fixkamo-shared-library

Use the org's own mortgage market, whatever it is titled

ensureMortgageMarket matched only the title "Residential Mortgage Loans", so an org that had renamed its market ("Loans", "KamoMLOS") got a second, empty mortga...

Kamo·2w ago
October 25, 2026
FixSecurityService

Retry the import's progress write on a Yugabyte read restart

The first live import stalled at RUNNING after page 1: saving the connection loads the org's domains, Yugabyte answered 40001, and the failure write hit the sam...

Kamo·2w ago
FixSecurityService

Billing write service starts again — the constructor keeps its @Autowired

The terminology commit inserted the code-checker field between @Autowired and the constructor, so the annotation moved onto the field and Spring found three una...

Kamo·2w ago
October 24, 2026
October 23, 2026
Fixkamo-shared-library

Invoice links keep working after a resend or reminder; a late-sent invoice is not chased the same hour

Every send and reminder minted a new view-online token and replaced the old one, so the link in the first email Harmony received read "no longer available" once...

Kamo·2w ago
FixBillingService

Invoice checkout sessions are unkeyed, like every checkout Session

A stable idempotency key would hand a returning customer the same, possibly expired, payment page ****************

Kamo·2w ago
FixBillingService

Cap only add-ons the organization holds

An add-on it does not hold is left to the existing entitlement gates, as before caps existed - paying organizations running a phone server without the add-on co...

Kamo·2w ago
FixSecurityService

The owners' invoice link opens on the workspace host the org can actually reach

Built internal.<domain> by hand, which OrgDomainRuleGuardTest forbids: an org whose own domain is not finished would get a link to a host that answers nothing. ...

Kamo·2w ago
Fixkamo-shared-library

The invoice link's token hash never serializes

Kamo·2w ago
October 22, 2026
Fixkamo-shared-library

Approving a card order grants paid access too

AUTO_BILL orders waited for a Stripe checkout that subscription invoicing no longer uses; the ledger charges the saved card on each billing day instead.

Kamo·2w ago
FixSecurityService

The billing job takes each subscription and invoice in its own transaction

Its first run raised Harmony's October invoice and lost it when one audit insert failed, because the whole prepare step was one transaction.

Kamo·2w ago
Fixkamo-shared-library

Subscription events store JSON states; billing steps run one row per transaction

**************** are jsonb, and every caller wrote a bare status like ACTIVE - an invalid JSON insert that rolled back whatever it was auditing (order activatio...

Kamo·2w ago
Fixkamo-internal

The POS proxy passes a PDF or an empty reply through instead of failing it as JSON

The invoice PDF and any 204 went through response.json() and became a 500.

Kamo·2w ago
FixBillingService

Stripe bills add-on licenses held, not mailboxes or extensions in use

Every add-on now takes its quantity from AddOnLicenses, the rule the order calculator and subscription invoices share: licenses bought, defaulting to the seat c...

Kamo·2w ago
Fixkamo-internal

Read subscription invoices, events and agreements under the keys the server sends

The server answers invoices/invoice, events and agreements/agreement; posApi read subscriptionInvoices, subscriptionEvents and subscriptionAgreements, so the In...

Kamo·2w ago
FixSecurityService

Catalog edits reach only the caller's organization; own-order callers cannot comp or price themselves

Every update and delete of a subscription plan, price, feature, add-on, bundle, volume discount, promotion or agreement template now checks that the row belongs...

Kamo·2w ago
Fixkamo-shared-library

Name the organization that owns a subscription catalog row

The catalog update/delete methods take a uid alone, so a caller holding the catalog right in any organization could edit another organization's plans, prices, a...

Kamo·2w ago
Fixkamo-marketing

A missing locale file renders English instead of throwing

i18n/request.ts and message-locales.ts imported messages/<locale>.json bare, so a build made while the dictionary had no file for a locale turned that locale's ...

Kamo·2w ago
FixBillingService

Read Stripe events from any API version, and replay the ones that failed

The live webhook endpoint renders events at 2026-03-25.dahlia; stripe-java pins 2024-12-18.acacia, so every invoice, payment and subscription event since has fa...

Kamo·2w ago
FixKlusterServices

Write Romanian with comma-below s and t

The model mixes the legacy cedilla forms into Romanian (6 of 90 such letters in the chat widget's regenerated file) and the dictionary's earlier Romanian did to...

Kamo·2w ago
FixKBService

One pod translates an article, not every pod at once

The sweep's fleet-wide lock is held only while it queues work, which takes milliseconds, so each pod ran its own sweep a minute or two apart and queued the same...

Kamo·2w ago
FixTranslateService

Never send an engine a text longer than it takes

IndicTrans answers a request over 20,000 characters with a permanent HTTP 413, so a long help article could never be translated into Tamil; a LibreTranslate wor...

Kamo·2w ago
FixKBService

Translate an article's words, not its Lexical JSON

contentJson was sent to the translation engines as if it were a sentence. On 2026-10-22 one sentence of it came back from Russian with the sentence gone and the...

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