Live Change Log

See what we're building, in real-time. Every feature, fix, and improvement shipped across the platform.

17,888
Total Changes
4,594
Features
4,520
Fixes
32
Projects
Filter by project
All Projects17,888AIService110APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService364InitializerService299KBService74KlusterServices542MCPGatewayService43MediaService460RAGService61SecurityService1,519TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,557kamo-login318kamo-marketing584kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,320kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI522Chore670Docs226Feature4,594Fix4,520Other6,781Performance136Refactor274Revert23Style48Test69Upgrade1
September 10, 2026
Fixkamo-internal

Stop a revoked executive's window; raise only chats waiting on the desk

- A MEMBER_REMOVED naming the viewer unsubscribes the transcript, empties it, disables the composer and says why. Revoking Exec2Exec Access used to leave th...

Kamo·1d ago
Fixkamo-marketing

Draw the search icon down from the full-size mark instead of doubling the small one

The 192px icon Google lists was the 96px export with every pixel doubled. It is now downscaled from the 820px master, so its edges are drawn rather than stepped...

Kamo·1d ago
Fixkamo-marketing

Give Google a canonical it can read, and stop redirects outvoting it

Search Console began excluding pages as "Duplicate without user-selected canonical", "Duplicate, Google chose different canonical than user" and "Alternate page...

Kamo·1d ago
Fixkamo-marketing

Publish prices search engines accept, and the ones the page actually shows

Search Console's product snippet report flagged "Invalid price format" on both `price` and `priceSpecification.price`. The cause was Enterprise going out as "pr...

Kamo·1d ago
Featurekamo-marketing

Hand Google the green-tile mark, because it lists the largest icon we declare

Search shows one icon per site and takes the largest one declared, apple-touch-icon included, so the 180px touch icons (ours and the theme's) outranked everythi...

Kamo·1d ago
Featurekamo-internal

Show who from KamoCRM is on the chat, and how to reach them

The customer's window now lists the KamoCRM executives on their conversation, re-read whenever somebody is added or removed. The line shows NAMES only, with tit...

Kamo·1d ago
FeatureSecurityService

Say when the desk changes

Granting or revoking Exec2Exec Access now publishes exec2exec.desk.changed, so MediaService can put an executive on every chat — or take them off — as the toggl...

Kamo·1d ago
Featurekamo-shared-library

Carry the executive's phone line on a message

ChatMessageDto gains senderPhone and senderPhoneExt, set only when the sender is KamoCRM staff: the platform org's main line plus the extension that reaches tha...

Kamo·1d ago
Featurekamo-internal

Stop at a pinned Interaction Center; keep windows under every menu

Two follow-ups to 0c5ef994 (maximize beside the nav). A PINNED Interaction Center now takes its width away from the maximized pane. Pinned, the panel is worked...

Kamo·1d ago
Featurekamo-internal

Maximize beside the nav, not over it

A maximized tool window used to take the whole viewport. It, its navigator column and its tab strip were all pinned at (0,0) at the dock's stacking level, over ...

Kamo·1d ago
TestMediaService

Parse the desk's audience query at test time

findHolderMemberIdsOf lives in the shared library, so nothing in this package parsed it — and a mistyped path there crash-loops MediaService at boot, every endp...

Kamo·1d ago
Fixkamo-internal

Raise the conversation when a customer writes, and on a reply

An executive's message reached nobody at KamoCRM: nothing on the console read an Exec2Exec frame. Exec2ExecDeskOpener now raises that customer's window — named,...

Kamo·1d ago
FixMediaService

A customer's message reaches the desk, not only the thread

An executive wrote into their Exec2Exec chat and nobody at KamoCRM heard. announce() told the session's own members, and an operator is only a member of a conve...

Kamo·1d ago
Featurekamo-shared-library

List the members who hold a platform right

countHoldersOf answered how many; the Exec2Exec desk needs who. Grant rows alone are the wrong answer to "who works the desk" — the top-level owner holds every ...

Kamo·1d ago
Featurekamo-internal

The executive channel in the console

A direct line between a customer executive and the KamoCRM executives: the chat half of the support window with no ticket, no status, no rating and no queue. T...

Kamo·1d ago
FeatureSecurityService

Store the Welcome Message

The greeting the platform sends first over Exec2Exec, on the platform config singleton where every other platform-wide setting already lives. Two new endpoints...

Kamo·1d ago
FeatureMediaService

Serve the executive channel

A conversation with its own audience rule and no ticket machinery, following SystemBug's shape: its own package, its own controller, its own visibility, and Med...

Kamo·1d ago
Featurekamo-shared-library

The executive channel's foundation

One standing conversation between a customer executive and the KamoCRM executives, keyed on the USER rather than on a member — which is what lets it follow some...

Kamo·1d ago
Featurekamo-signer-monorepo

The org's wallpaper behind every page, and white copy on it

kamo-sign was the one white-labelled surface still painting a flat grey. It now plays the inviting organization's background photography the way kamo-login, kam...

Kamo·1d ago
FixMediaService

An announce that throws must not roll back the buy-in

`announceToConversation` runs INSIDE the transaction that seats the host and charges them — unlike `announceTable`, which the controller calls after the fact. T...

Kamo·2d ago
Featurekamo-internal

Finish the category page — width, one back arrow, real words

The three managers were written to sit inside a nested tab of a tab. As a page of their own they needed the space they now have. - Configuration capped itself ...

Kamo·2d ago
Fixkamo-internal

The nudge the inviter could never send, and a chat invite that rejoins

**Nudge.** The rail hid the button unless it was the opponent's turn, which reads as a rule about fairness and is a rule about nothing — the server has never ha...

Kamo·2d ago
Fixkamo-internal

One "on" colour, and a retry that does not cascade

Two things left over from the categories table. The allow swatch was tinted by whether the setting is locked — primary for locked, a green for unlocked. The lo...

Kamo·2d ago
FixMediaService

Colleagues in the invite list, and an invitation from a chat that arrives

Two reported defects, both in who a table can reach. **The invite dialog offered accounts.** `invitableFor` read `members.findByOrganizationId`, and an organiz...

Kamo·2d ago
September 9, 2026
Featurekamo-internal

Categories are a table, and each one opens as its own page

/settings/features/docs carried eight tabs: General, then seven that each mounted the same three managers against a different ordinal. Seven copies of one scree...

Kamo·2d ago
Testkamo-internal

Cover the topInset the maximized window already honours

ToolWindowShell has taken a topInset since the tab strip landed — it starts the window below the strip and stops it short by the same amount, or the strip is dr...

Kamo·2d ago
Fixkamo-signer-monorepo

Publish the packages from CI, with a token that can actually publish

The secret exists now — a Forgejo token scoped to `write:package`, added to this repository — so `publish_packages` does the publishing instead of a person doin...

Kamo·2d ago
FeatureDocsService

Serve the document categories from the enum that defines them

The docs settings page named its own categories and sent the ordinal it believed each one had. Those ordinals were written when ImageAssocType was six constants...

Kamo·2d ago
FixESigService

The certificate must not claim a disclosure nobody was shown

Verified against a real completed envelope on the cluster, and the closing paragraph read "Each signer was shown, and accepted, the consumer disclosure required...

Kamo·2d ago
Docskamo-signer-monorepo

Why AssuranceLevel only ever reports SES

ESigService reports SES and only SES now. eIDAS Article 26 lets a signature call itself ADVANCED only if the signature creation data is something the signatory ...

Kamo·2d ago
FixESigService

Stop asserting an eIDAS assurance tier this product does not implement

`buildSession` reported `stepUpRequired ? "AES" : "SES"`, so requiring a one-time passcode made every signing session assert an ADVANCED electronic signature — ...

Kamo·2d ago
Refactorkamo-internal

Stop forking the signing surface, and offer the whole signed record

kamo-internal carried a hand-copied fork of the external signer app — fifteen files under app/lib/esign, app/stores/esign and app/components/esign/signing, each...

Kamo·2d ago
Featurekamo-signer-monorepo

A compact trigger for the signed-copy menu

The sender's envelope list and any table of assigned packages have a row, not a hero slot, and the labelled pill does not fit one. `iconOnly` gives the SAME men...

Kamo·2d ago
Featurekamo-signer-monorepo

The § 7001(c) disclosure ships with the code, in twenty-two languages

`@kamo/esign-core` now carries the consumer disclosure itself — six clauses, every language the product signs in, and `consentDisclosure(locale, brand)` to fill...

Kamo·2d ago
Fixkamo-signer-monorepo

Publish the packages from a job of their own, and never nest a second pdf.js

The publish steps sat inside `build`, so run 12014 failed and took the image with it — and `pnpm install --frozen-lockfile` was clean locally, which is the tell...

Kamo·2d ago
FeatureESigService

A real Certificate of Completion, and the three copies of a signed record

What the flatten pipeline appended was one page per signature carrying seven lines: name, email, member id, timestamp, capture method, IP, user agent. No routin...

Kamo·2d ago
Featurekamo-shared-library

Record WHICH consent disclosure a signer accepted, and in which language

`consentedAt` records that somebody ticked a box. 15 U.S.C. § 7001(c) is a list of specific things a consumer must be told BEFORE consenting — the right to pape...

Kamo·2d ago
Featurekamo-signer-monorepo

One signing surface for both apps, and the white label finally paints

The signing UI existed twice — here, and hand-copied into kamo-internal's legal execution wizard — and the two had drifted in both directions. `@kamo/esign-core...

Kamo·2d ago
Fixkamo-internal

The envelope dashboard could not tell "not emailed" from "not opened"

The warning naming an undelivered invitation lives in the send response, so it is gone the moment the dialog closes. After that the dashboard is all there is — ...

Kamo·2d ago
TestESigService

Prove submit actually writes the signature date, and ignores the wire

The unit tests around this cover the pieces — the format, the type predicate, the required-field exclusion — and none of them can see the wiring. A signature_da...

Kamo·2d ago
Featurekamo-signer-monorepo

Render the Signature Date field, and make readOnly mean something

Three changes, of which only the first is new work. **`signature_date`** is a field ESigService fills at the instant the signer signs — never the browser, whos...

Kamo·2d ago
Featurekamo-internal

A Signature Date field, and a send that admits when nothing was emailed

**"Sent" was not the same thing as "delivered", and the dialog never said so.** ESigService discarded the result of every invitation email, so a send whose mail...

Kamo·2d ago
FixDocsService

A rename answered with no Url skips Docs's rename callback

Docs shares one client-side callback between RenameFile and Save As, and **************** skips its whole body — the File_Rename event the embedding page listen...

Kamo·2d ago
FixDocsService

Losing the race to store identical content is not a failed save

The look-up before the ImgDat insert is not a lock, and kamowsdocs runs two replicas behind one gateway — two documents whose bytes are identical (two members c...

Kamo·2d ago
FixESigService

Every e-signature email was a silent 403, and a Signature Date field

**No e-sign email had been leaving the cluster.** EmailService gates /api/email/templates/send on the cluster-wide internal-auth secret (mlos-internal-auth -> I...

Kamo·2d ago
FixDocsService

A Save As that changes format is not the source document's type

uploadDocument refuses an upload whose claimed MIME type disagrees with what it detects from the bytes, and saveAsNewDocument claimed the type of the row it was...

Kamo·2d ago
FixDocsService

A Docs save could not store bytes the platform already held

Saving a document twice, and renaming one, both ended in "Document cannot be saved, please check your permissions" — and after five retries Docs gave up and dis...

Kamo·2d ago
Featurekamo-internal

Open at the front of a new session, stay put inside one

Two rules that only make sense together, and the panel did the opposite of both. A member arriving in a NEW browser tab — a fresh sign-in, a second tab opened ...

Kamo·2d ago
Fixkamo-marketing

The offer countdown could not hydrate, so React threw the banner away on every load

The homepage has been throwing React #418 — "the server rendered text didn't match the client" — on every load, in production as well as locally. The mismatch i...

Kamo·2d ago
Featurekamo-marketing

Give the film a watch page, because Google will not index it from the homepage

Search Console reports the one video on this site as "video is not on a watch page". That is not a bug in the hero — it is Google saying the homepage is about t...

Kamo·2d ago

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing