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 11, 2026
Featurekamo-internal

Show whether someone is there, and their extension

Every row now carries a presence dot and word beside the name, and its extension in the detail line — so choosing a person no longer means picking a name and ho...

kamo·4w ago
FeatureSecurityService

Carry availability, presence and extension on a directory row

Picking a person is easier when the row says whether they are there and how to reach them, so each one now carries what they last declared, whether anything of ...

Kamo·4w ago
FeatureBillingService

Buy a block when an opted-in org runs out of room

Runs shortly after the nightly snapshot sweep, because that is what produces the usage figure it decides on — expanding against yesterday's number would buy a b...

Kamo·4w ago
FeatureInitializerService

Add the auto-expand columns

Kamo·4w ago
Featurekamo-shared-library

Opt-in auto-expand with a ceiling

Two columns on the subscription that holds the blocks: whether to buy another one automatically when the organization runs out of room, and the most it may ever...

Kamo·4w ago
FeatureBillingService

Let a catalog price change actually reach Stripe

Stripe Prices are immutable and the mapping holds one row per (org, type, code, cycle) behind a unique key, so once a price existed it could never change. A pri...

Kamo·4w ago
FeatureInitializerService

Add the columns that make a price change detectable

Order(0), nullable, no backfill — a null amount reads as "we do not know what this price was created with" and the reconciler treats it as unknown rather than a...

Kamo·4w ago
Featurekamo-shared-library

Record what each Stripe price was created with

The mapping stored only which price id to use, so a catalog price change could not even be noticed. ensurePlanPrices short-circuited on the row's existence and ...

Kamo·4w ago
Featurekamo-internal

Type the storage capacity the summary now returns

Keeps the client contract in step with BillingService, which now reports what the plan includes, what blocks were bought, the combined ceiling and the fraction ...

kamo·4w ago
FeatureBillingService

Report capacity alongside usage

The storage panel reported bytes stored against nothing at all — no allowance, no percentage, no money — so an owner looking at 400 GB had no way to tell whethe...

Kamo·4w ago
Featurekamo-shared-library

Give the storage allowance an effect

Storage was measured across nineteen domains, nightly, with a build-failing coverage test — and nothing anywhere computed an allowance or refused a byte. The pl...

Kamo·4w ago
Featurekamo-internal

Tell the requestor whether their agent is actually there

A silent thread does not distinguish "nobody has looked at this" from "my agent stepped away", and the person waiting cannot tell which. The notice under the co...

kamo·4w ago
FeatureMediaService

Reassignment reaches the new agent, and the requestor is told who is there

Reassignment did not reach anybody. assignmentOpenedAt records that a client put the conversation on screen, and it is what raises a ticket at sign-in — but it ...

Kamo·4w ago
Featurekamo-internal

Assign a chat request, and assign from the tickets list

Two gaps, same cause — assignment was treated as something that happens to a ticket rather than to a piece of work. The assign button was hidden for pre-ticket...

kamo·4w ago
Featurekamo-internal

Quote engine for the plan picker, matching what Stripe will bill

The arithmetic behind a live running total, kept apart from any component so the numbers can be tested directly. It mirrors **************** exactly: per-seat a...

kamo·4w ago
FeatureBillingService

Make a first plan purchasable, and return real plan prices

Two things stopped an organization ever buying a first subscription. Plan lists were reachable only through sub.marketId on a subscription the org already held...

Kamo·4w ago
Featurekamo-internal

Gate paid actions on a licensed seat, at the chokepoint

Nearly every gateable action in the product — dial an extension, email a member, open the AI assistant, play a recording, start a social conversation — is a bar...

kamo·4w ago
FeatureSecurityService

Resolve what a member may do, not just what their plan includes

Feature grants describe a plan. They never described this member, because the console gates navigation on org-level org.features — so a member with no license a...

Kamo·4w ago
FeatureBillingService

Bill per-unit add-ons by units bought, not by headcount

Threads the new add-on quantity through create and update: a FLAT add-on now takes its Stripe quantity from what the subscription actually bought, so four 10 GB...

Kamo·4w ago
FeatureInitializerService

Reprice Additional Storage as $2.50 per 10 GB, org-wide

The add-on described an organization-wide shared pool and was then priced USAGE_BASED at $4 with "25 GB" stated only in prose. Nothing ever submitted a storage ...

Kamo·4w ago
Featurekamo-shared-library

Give add-ons a unit size and a purchasable quantity

An add-on's unit only ever existed as prose inside its description ("Each unit adds 25 GB") and as a hardcoded constant in the marketing site, so nothing could ...

Kamo·4w ago
August 10, 2026
Featurekamo-internal

Pick the agent to reassign a ticket to, instead of typing their id

Assign and reassign opened a text box you typed a raw member id into — which meant already knowing the id of the person you wanted, for an action whose whole pu...

kamo·4w ago
FeatureMediaService

Endpoints for the sign-in auto-open handover

GET /sessions/chat/auto-open returns the chat conversations this member's client should raise; POST /sessions/{guid}/auto-opened records that it did. The durabl...

Kamo·4w ago
Featurekamo-shared-library

Durable record of a conversation the client raised by itself

MediaSessionMember gains AUTO_OPENED_AT, beside msgIdLastViewed because it is the same grain — a fact about one member's relationship to one session. That one a...

Kamo·4w ago
Featurekamo-internal

Overhaul the preferences panel

Four dropdowns and a switch on a panel washed top to bottom in the tenant colour at full strength, so every control fought its own background. Each select hid t...

kamo·4w ago
Featurekamo-internal

Replace the mailbox spinners with a skeleton that assembles

Every loading state on /messages was a Loader2 on an otherwise empty pane — the boot, the message list, the folder tree, the message body and the next page all ...

kamo·4w ago
Featurekamo-internal

Add and remove guests from the event dialog

The last thing the dialog could not do. It could display who was already on an event, but there was no way to put anyone there — the only guest control was "upd...

kamo·4w ago
FeatureEmailService

Manage an event's guest list

The dialog could show who was already on an event but never add or remove anyone; the only guest operation was re-notifying people who were somehow already ther...

Kamo·4w ago
Featurekamo-shared-library

Batched guest lookup, and delete-by-event

The event dialog shows who an event is with, and the list endpoint returns a month of events at a time. Asking for guests per event is a query per row; findByEv...

Kamo·4w ago
Featurekamo-internal

Tell the member what the event collides with, as they set it

The most useful thing a scheduling dialog can say is "you already have something then", and the endpoint to answer it existed all along with nothing calling it....

kamo·4w ago
FeatureEmailService

Let the conflicts endpoint exclude the event being edited

ConflictDetectionService has always taken an excludeEventId; this endpoint passed null. Without it an event overlaps itself, so the moment the event dialog star...

Kamo·4w ago
Featurekamo-internal

Rebuild the event dialog around when, not around fields

Ten identically weighted outlined fields in a column, in the order the columns happen to sit in the table: title, description, location, calendar, all-day, star...

kamo·4w ago
Featurekamo-internal

Auto Assignment strategy, and open an assigned conversation automatically

Topics settings gains the fourth strategy. The list rows and the edit dialog share the same label, and the key shipped to kamo-translation-dictionary first — me...

kamo·4w ago
FeatureMediaService

AUTO_ASSIGNMENT, and raise an assigned conversation on the agent's screen

A chat request and a submitted ticket are the same unit of work; the topic's strategy is the only thing that decides how either is handed over. The PRE_TICKET s...

Kamo·4w ago
Featurekamo-shared-library

AUTO_ASSIGNMENT strategy and a durable record of an unseen handover

AUTO_ASSIGNMENT(3) is appended to SupportAssignmentStrategyType — assign immediately to an agent who is genuinely online, preferring whoever holds the least wor...

Kamo·4w ago
Featurekamo-internal

A pinned app's chip launches the app, not its settings

The leading chip of a pinned band was linking to the app's settings landing — the same place its first entry already goes. It now borrows that app's nav option ...

kamo·4w ago
FeatureEmailService

Sync the organisation calendar to phones, without opening a hole

The shared calendar has no owner, so the account-scoped DAV listing could never return it: company events were plainly there on the web and invisible on every p...

Kamo·4w ago
FeatureInitializerService

Add and backfill accounts.date_created

Hibernate cannot add this one itself: ddl-auto emits it NOT NULL, which CockroachDB refuses on a table that already has rows. So it is added nullable here, back...

Kamo·4w ago
Featurekamo-shared-library

Record when an account was created

Account carried no creation timestamp at all — not a null column, no column. The account list has a Date Created column and orders by it, so that column has bee...

Kamo·4w ago
Featurekamo-internal

Pin an Enabled App to the home launchpad

Each Enabled Apps topic now carries a pin toggle, in the Settings sub-option menu and on its section header on the settings landing page. A pinned app gets its ...

kamo·4w ago
Featurekamo-internal

Give Mobile Copilot setup its own full-width page

The phone-provisioning surface was the third tab of the Interaction Center slideout, which capped it at a 500px rail — too narrow to show the install code and t...

kamo·4w ago
Featurekamo-internal

Rebuild the calendar around the current moment

The page was a functional grid with the chrome doing the talking: a 3px rainbow rule under the toolbar, a second one over the content, gradient buttons, and fou...

kamo·4w ago
FeatureInitializerService

Move calendars onto memberships and give each org a shared one

Calendars and events were owned by an account and carried no organisation. This attaches each to its owner's earliest membership — the organisation the account ...

Kamo·4w ago
Featurekamo-shared-library

Scope calendars to the member, and add the org-wide publishing right

UserCalendar and CalendarEvent hung off USER_ID alone and carried no organisation. A user is global and a member is that user inside one organisation, so an acc...

Kamo·4w ago
FeatureInitializerService

Hand shared address-book contacts back to their owners

EmailService now scopes every contact read to contact_books.owner_id, which leaves the contacts already sitting in an ownerless organisation-default book unreac...

Kamo·4w ago
FeatureVOIPService

Point at YugabyteDB and use PostgreSQLDialect

CockroachDB has been replaced by YugabyteDB. Connection strings move from cockroachdb-public:26257 to yb-tserver-service:5433, and the Hibernate dialect from **...

Kamo·4w ago
FeatureSecurityService

Point at YugabyteDB and use PostgreSQLDialect

CockroachDB has been replaced by YugabyteDB. Connection strings move from cockroachdb-public:26257 to yb-tserver-service:5433, and the Hibernate dialect from **...

Kamo·4w ago
FeatureRAGService

Point at YugabyteDB and use PostgreSQLDialect

CockroachDB has been replaced by YugabyteDB. Connection strings move from cockroachdb-public:26257 to yb-tserver-service:5433, and the Hibernate dialect from **...

Kamo·4w ago
FeatureMediaService

Point at YugabyteDB and use PostgreSQLDialect

CockroachDB has been replaced by YugabyteDB. Connection strings move from cockroachdb-public:26257 to yb-tserver-service:5433, and the Hibernate dialect from **...

Kamo·4w ago
FeatureMCPGatewayService

Point at YugabyteDB and use PostgreSQLDialect

CockroachDB has been replaced by YugabyteDB. Connection strings move from cockroachdb-public:26257 to yb-tserver-service:5433, and the Hibernate dialect from **...

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