Live Change Log

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

17,989
Total Changes
4,649
Features
4,558
Fixes
32
Projects
Filter by project
All Projects17,989AIService112APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService386InitializerService302KBService74KlusterServices547MCPGatewayService43MediaService462RAGService61SecurityService1,529TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,601kamo-login319kamo-marketing588kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,328kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI523Chore670Docs231Feature4,649Fix4,558Other6,781Performance136Refactor274Revert23Style48Test71Upgrade1
August 28, 2026
Featurekamo-login

Let a signed-in member reach the sign-in form, and back out of the workspace picker

Two halves of the same problem: the login page was a one-way street. It validated any existing *** cookie on load and, when the session was still good, redirec...

Kamo·2w ago
August 27, 2026
Fixkamo-internal

Stop force-cache pinning "this org has no wallpapers" forever

The console backdrop and the member Wallpaper editor both read the tenant's `config.json` for `backgroundImageCount`, and both asked for it with `cache: 'force-...

Kamo·2w ago
Fixkamo-internal

The grid fetched every page twice, then blanked itself to do it

Opening /leads showed the rows, dropped back to a loading state, and showed them again. It was fetching twice. STOMP raises onConnect on the INITIAL connect ex...

Kamo·2w ago
Featurekamo-shared-library

The credit note, the only correction path for a finalized invoice

B3: Kamo owns everything before finalize() and the provider owns everything after, and every provider on the roadmap treats a finalized invoice as immutable. So...

Kamo·2w ago
Featurekamo-shared-library

The document counter, and a number that cannot fork

Every existing document number on this platform is a check-then-insert race with no unique constraint behind it: quote numbers are COUNT(...)+1, subscription in...

Kamo·2w ago
Featurekamo-shared-library

The invoice entity, with every tax field and no tax engine

Kamo's own invoice, written only by InvoicingService. Nothing on it is supplied by a caller: every figure is derived from the lines on every write, which is the...

Kamo·2w ago
Fixkamo-internal

Stop the image proxy serving an hour-old copy of another org's branding

Theme asset URLs are stable and say nothing about their contents: an org's simple logo is always `<alias>/img/logo.svg`. Every org is also seeded with the base ...

Kamo·2w ago
FixSecurityService

Make seeded and uploaded branding revalidate, so an org stops being served the base theme it was seeded with

A new organization is seeded with the base theme — the platform's own logo and backgrounds copied to the new org's keys — and those keys never change when the o...

Kamo·2w ago
Featurekamo-internal

Choose the KamoDesktop resolution, and stop hiding why a launch failed

The remote desktop tracks the browser window and always has, so there was no way to have MORE desktop than window. A picker now sets a fixed size, stored per br...

kamo·2w ago
FeatureSecurityService

Let the caller choose a fixed KamoDesktop resolution

The remote desktop was never locked to a resolution — it tracks the browser window, and always has. guacd honours the client's size and xorgxrdp resizes the X s...

Kamo·2w ago
Docskamo-internal

Check in the useUserInfo shared-store handoff

The "no .md in repos" rule is retired. This handoff doc had been kept local-only; it belongs next to the code it describes.

kamo·2w ago
Chorekamo-signer-monorepo

Stop ignoring markdown

The "no .md in repos" rule is retired; docs, plans and READMEs are tracked like any other source file.

Kamo·2w ago
ChoreDocsService

Stop ignoring markdown

The "no .md in repos" rule is retired; docs, plans and READMEs are tracked like any other source file.

Kamo·2w ago
FeatureInitializerService

The REVOKEs three entity javadocs already claimed existed

BillingWormGuard, BillingDispatch and BillingSyncIssue each cite "a REVOKE UPDATE, DELETE in the KamoInitializer migration". No such migration existed — the sta...

Kamo·2w ago
Docskamo-internal

Close out BL1 and MS1

kamo·2w ago
Fixkamo-internal

Format every phone number a signature prints

The company lines went out as whatever the org record stored — "5555555555" — next to a member's line in the same block, so a signature could show a formatted n...

kamo·2w ago
Fixkamo-internal

One formatter for every number, US and international alike

The formatter every phone surface shared kept the LAST TEN DIGITS of whatever it was handed and dressed them as a NANP number, so "+44 20 7946 0958" rendered as...

kamo·2w ago
Featurekamo-internal

The billing proxy route, and MANAGE_BILLING_PROVIDER's four TS mirrors

Task 8, the kamo-internal half. Six mirrors of the rights architecture; four of them live here. 3. app/lib/rightsHierarchy.ts MANAGE_BILLING_PROVIDER ...

kamo·2w ago
FeatureSecurityService

The relay to InvoicingService, and the right that gates it

Task 8. SecurityService is the authorization boundary; InvoicingService is ClusterIP with no ingress, so this relay is the only way in. InvoicingServiceClient ...

Kamo·2w ago
Featurekamo-shared-library

MANAGE_BILLING_PROVIDER (277), a child of commerce settings

Task 8, mirror 1 of 6 (the Java enum) and mirror 2 (the parent(...) line). Id 277 was re-derived from origin/main immediately before allocating it, NOT taken f...

Kamo·2w ago
Featurekamo-internal

`?bug=<id>` opens that report's drawer

Where the new status-change email lands. It has to name the report rather than the tab: the status filter defaults to New, and that email is by definition about...

Kamo·2w ago
Featurekamo-internal

Glimmering unread cards, a live badge, and per-status counts

THE BADGE IS ABOUT YOU NOW, NOT ABOUT THE QUEUE. It counted every NEW report platform-wide, so it only ever fell when somebody moved a status — reading the queu...

kamo·2w ago
Fixkamo-internal

A window only announces its own conversation

The messageReceived handler dispatches chat:message-received, which is what makes ChatNotificationListener raise a chat window, and plays the arrival tone. Neit...

kamo·2w ago
FixMediaService

A relay only forwards its own conversation

ChatSessionSubscriptionManager publishes to a topic named after the session it subscribed FOR, never after the session the frame came from. That is safe only wh...

Kamo·2w ago
Fixkamo-shared-library

Filter every durable consumer to its own subject

A durable created through NatsMessageService.subscribe carried no filter subject, so it received the WHOLE stream regardless of the subject it was asked for. Th...

Kamo·2w ago
FixInitializerService

State the company phone column defaults where IF NOT EXISTS cannot swallow them

The 2026-08-27 run proved the ADD COLUMN ... DEFAULT FALSE never applied: ddl-auto builds the SessionFactory before any CommandLineRunner, so Hibernate had alre...

Kamo·2w ago
FeatureSecurityService

Tell the reporter when Send To AI moves their report

MediaService now emails a reporter whenever their bug or enhancement changes status, but a dispatch applies a status of its own — usually In Progress — through ...

Kamo·2w ago
FeatureEmailService

Preview variables for the bug-status-changed template

The admin preview renders a template against a sample variable map, and this one has no arm — so an org administrator opening SYSTEM_BUG_STATUS_CHANGED would se...

Kamo·2w ago
FeatureMediaService

Email the reporter when their bug or enhancement changes status

Triage was silent. Somebody filed a report and then had to keep opening the tab to find out whether anyone had looked at it — which is the same as not being tol...

Kamo·2w ago
FeatureMediaService

Per-viewer read state, a live badge, and per-status counts

THE BADGE WAS ABOUT THE QUEUE, NOT ABOUT YOU. /new-count counted every NEW report platform-wide, so it could only fall when somebody moved a status — reading th...

Kamo·2w ago
FeatureSecurityService

Announce the queue change when a report is dispatched to AI

A dispatch is the only thing that takes a report out of NEW from OUTSIDE MediaService, so without this it was the one transition the console's badge learned abo...

Kamo·2w ago
Fixkamo-internal

Show what THIS phone server costs, not just the org total

The extensions tab showed only the organization-wide figure, so an empty KamoPBX server displayed "21 billable extensions — $63.00 / month". The 21 were on a Fr...

kamo·2w ago
Featurekamo-shared-library

Per-viewer read state for system bug reports

SystemBugView is per VIEWER, not per bug — a firstViewedAt column on SystemBug would let whoever opened a report first clear it off every other manager's badge....

Kamo·2w ago
Featurekamo-shared-library

The canonical letter a bug reporter gets when their report moves

A member who files a bug or an enhancement had no way to learn what happened to it short of opening the tab and looking. This adds the template that tells them,...

Kamo·2w ago
FeatureInitializerService

System_bug_view — who has read which report

Per VIEWER, not per bug, and that is the whole reason it is a table rather than a first_viewed_at column on system_bug: triage is worked by several people at on...

Kamo·2w ago
FeatureBillingService

Per-server lines on the extensions summary

The phone server's extensions tab showed the organization-wide figure and nothing else, so an empty KamoPBX server displayed "21 billable extensions — $63.00 / ...

Kamo·2w ago
FeatureVOIPService

Keyword interception at step 0 on the RingCentral rail (MS1 Task 4)

Today a STOP to a number no MEMBER_VOIP_CONFIG row owns hits the "No member found for to-number" branch and vanishes — and that branch is EXACTLY where an opted...

Kamo·2w ago
FeatureVOIPService

SmsKeywordService — the one writer for inbound keywords (MS1 Task 3)

Closes the TODO Task 2 left behind. Until this commit a verified inbound STOP reached BulkTextInboundController, was recognised, was logged, and was then DROPPE...

Kamo·2w ago
Featurekamo-internal

Detach the chat navigator from the window it maximizes

The conversation navigator was a child prop of ToolWindowShell, rendered inside the maximized window's content box. Clicking a row in it opens that conversation...

kamo·2w ago
Featurekamo-internal

Company phone (main/toll free) on a member's signature, with their extension

The Content tab of **************** gains two switches: Company Phone (Main) and Company Phone (Toll Free). Enabled, they print the organization's published lin...

kamo·2w ago
FeatureEmailService

Persist the two company phone toggles

Reads and writes userCompanyPhoneMain / userCompanyPhoneTollFree on the signature field config, so the Content tab's new switches survive a save. saveFieldConf...

Kamo·2w ago
Featurekamo-shared-library

Attribute free extensions to the server they are on

An org running a busy FreePBX server beside a new, empty KamoPBX server saw "21 billable extensions — $63.00 / month" while looking at the KamoPBX one. Both num...

Kamo·2w ago
FeatureInitializerService

Land the company phone toggle columns before EmailService reads them

ADD COLUMN IF NOT EXISTS on **************** for user_company_phone_main and user_company_phone_toll_free. This service's ddl-auto: update would add both from ...

Kamo·2w ago
Featurekamo-shared-library

The company phone toggles an individual signature can carry

Two org-wide flags on email_signature_field_config: user_company_phone_main and user_company_phone_toll_free. They put the organization's published line on a me...

Kamo·2w ago
Featurekamo-shared-library

The inbound-keyword receipt, and re-key consent by campaign (MS1 Task 3)

Two things the consent ledger needs before an inbound STOP can be recorded tenant-scoped and exactly once. `SmsInboundReceipt` (comms_sms_inbound_receipt) is t...

Kamo·2w ago
FixVOIPService

One source of truth for the platform settings

"Test connection" reported "no master account id" on a phone server whose provisioning had just succeeded, minutes earlier, using that same id. Two sources dis...

Kamo·2w ago
Featurekamo-shared-library

The sync journal, and a terminal run that really is frozen

BL1 Task 5, shared-library half. Five journal enums, three entities and three repositories under **************** No stereotypes: BillingWormGuard is a plain fi...

Kamo·2w ago
Fixkamo-internal

Offer Finish setup on a KamoPBX server that was never provisioned

The card told the admin their phone system was "still being set up" and to wait. That was never going to clear: KamoPBX provisioning runs synchronously when the...

kamo·2w ago
FixVOIPService

A half-provisioned phone server could never be finished, and said the wrong thing

An org's KamoPBX server has been reporting Error: Phone provider instance not found: **************** since it was created. The instance was never missing —...

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