Live Change Log

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

17,916
Total Changes
4,605
Features
4,536
Fixes
32
Projects
Filter by project
All Projects17,916AIService110APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService371InitializerService300KBService74KlusterServices545MCPGatewayService43MediaService460RAGService61SecurityService1,519TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,573kamo-login318kamo-marketing584kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,321kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI523Chore670Docs226Feature4,605Fix4,536Other6,781Performance136Refactor274Revert23Style48Test69Upgrade1
August 28, 2026
Featurekamo-internal

Per-pane minimum size, applied on read as well as on drag

Threads an optional `min?: PaneSize | null` through clampPaneSize, the two resize-delta helpers, and the two preference read/write functions in the pure launchp...

Kamo·2w ago
Fixkamo-internal

Switching conversations no longer stacks windows behind the maximized pane

Takes @kamo/tool-core 0.1.5, where leaving the maximized pane became two gestures instead of one. A navigator row click hands the pane to another conversation a...

Kamo·2w ago
Fixkamo-register

Restore the verification screen's wallpaper, drop its ***, modernise its status plate

Three things wrong with /verification, all visible on one screen. The wallpaper never loaded. PostCompletionScreen called **************** but that parameter i...

Kamo·2w ago
FeatureSecurityService

Put a real time budget on resend-verification

The endpoint had no limit of any kind. The *** the register screen demanded before enabling its resend button was never read here — the request body is three fi...

Kamo·2w ago
Fixkamo-internal

Give the new tab a session, instead of one that bounces to login

"Open in new tab" was `window.open(location.href, '_blank', 'noopener,noreferrer')`. The session id is not in a cookie — it lives in sessionStorage, per tab, be...

Kamo·2w ago
FixInitializerService

Let a seeded org omit its year established

createOrg took the year as a primitive int, so every seed had to supply one even though YEAR_EST is nullable and the field is optional platform-wide. Integer, s...

Kamo·2w ago
Docskamo-shared-library

Record that Organization.YEAR_EST is optional and may be cleared

The column was always nullable and both server paths already handled null — CreateOrganizationPayloadParser maps an empty or unparseable value to null, and patc...

Kamo·2w ago
Fixkamo-register

YearEst is optional on the org, so admit the null that arrives

Year established is nullable on the Organization entity and SecurityService serializes the null explicitly, so the declared `number` was never the whole wire sh...

Kamo·2w ago
Featurekamo-internal

The org's year established is optional, and unset renders as absent

Nothing on the server ever required it — the column is nullable, the create parser maps an empty value to null, and patchOrganization applies only the keys a PU...

Kamo·2w ago
Performancekamo-internal

A conversation outlives the window showing it

Opening a chat window cost seven requests before a message rendered — history, members, receipts, mark-read, the unread snapshot, the counterpart's avatar and t...

Kamo·2w ago
Featurekamo-internal

Show a member only the tabs that are theirs to see

Three member-settings surfaces were open to people they cannot mean anything for. Each gate is on the MEMBER TYPE or the org's apps, never on checkRight — check...

Kamo·2w ago
FixRAGService

KB audience tiers are cumulative, matching KbReaderScope

The retrieval filter matched a reader's tier exactly: a TEAM_MEMBER had to match aiVisibleToTeamMembers and nothing else. So an article an author had deliberate...

Kamo·2w ago
PerformanceMediaService

Serve a reopened window only what it missed, and audit a page in one write

Two costs, both paid on every single open of a chat window. ?since on GET /sessions/{guid}/messages. A window being reopened wants the messages after the one i...

Kamo·2w ago
Fixkamo-internal

Centre the launchpad tiles that are only an icon and a name

A leaf app pane in its compact form shows no sub-item rows and no description, so the icon/title row was heading a column with nothing in it — pinned to the top...

Kamo·2w ago
Featurekamo-internal

Offer a member only the kinds they can receive

The notification centre and its settings drew every kind to everybody. A member with no Leads app was shown a "Lead callback" filter that could only ever return...

Kamo·2w ago
FeatureEmailService

A member is only told about apps they have

A notification kind belongs to an app — a lead callback is Leads, a meeting reminder is Meetings — but raise() asked only whether the member had muted it. So a ...

Kamo·2w ago
Featurekamo-internal

The console shows a reader what they may have, and no more

Two things the /kb page reported to anyone holding VIEW_KB_ARTICLES. The corpus. The audience chips an author ticks in the composer — Members, Team Members, Pu...

Kamo·2w ago
FeatureKBService

Enforce the audience chips on every human read

The composer has always offered an author three chips under "Visible to" — Members, Team Members, Public. They were written to the row and indexed into Qdrant s...

Kamo·2w ago
Fixkamo-internal

Restore the image-proxy and wallpaper work 266357d0 reverted, and land the permissions change it was meant to carry

266357d0 was built with the wrong index. Its tree came from a stale local HEAD rather than from the staged one, so it carried none of the permissions work its m...

Kamo·2w ago
Featurekamo-internal

A group per app, a console to grant them, and master notes as widgets

Three changes that turned out to be one. THE HOME PAGE. "My Master Note" and "Our Master Note" were bespoke panes rendered straight out of page.tsx, gated on n...

Kamo·2w ago
FixKBService

GET /master takes VIEW_NOTES, like every other read here

It was the one read in this controller that took no right, deliberately: the two master notes were called fixtures of the home launchpad rather than the Notes a...

Kamo·2w ago
Chorekamo-login

Delete /api/auto-login, which no longer has a caller

The endpoint existed to turn an existing *** cookie into an OTK and a redirect so the login page could forward a signed-in member straight into their workspace....

Kamo·2w ago
FeatureSecurityService

Seed the master-note widgets from VIEW_NOTES

The two master-note panes shipped with no right at all — "My Master Note" and "Our Master Note" were on every member's launchpad unconditionally — and this is t...

Kamo·2w ago
Featurekamo-shared-library

A security group per app, and the master notes as widgets

Ten new rights, 278-287: NOTES_MASTER_MINE_WIDGET and NOTES_MASTER_OURS_WIDGET, each with the four policy children every home widget carries. Both hang off VIEW...

Kamo·2w ago
FeatureKlusterServices

Swap the voicemail greeting to KamoCRM-LeaveVM

24.9s, down from 27.9s. Uploaded alongside the previous recording rather than over it, so rolling back is a one-line change to KAMO_VOICEMAIL_GREETING plus a di...

Kamo·2w ago
FixInitializerService

The invoice takes REVOKE DELETE, not REVOKE UPDATE

attachPdf writes PDF_BLOB_ID after the finalize transaction commits, on purpose: rendering inside it would hold the document-counter row lock across a MinIO rou...

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

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