Live Change Log

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

17,987
Total Changes
4,647
Features
4,558
Fixes
32
Projects
Filter by project
All Projects17,987AIService112APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService386InitializerService302KBService74KlusterServices547MCPGatewayService43MediaService462RAGService61SecurityService1,528TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,600kamo-login319kamo-marketing588kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,328kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI523Chore670Docs231Feature4,647Fix4,558Other6,781Performance136Refactor274Revert23Style48Test71Upgrade1
August 11, 2026
Featurekamo-shared-library

Shared WORM refusal guard

@Column(updatable=false) does NOT enforce immutability -- Hibernate silently omits the column from the UPDATE and the stale write looks like it succeeded. The o...

Kamo·4w ago
Featurekamo-shared-library

Domain enums and point-in-time version resolver

Enums are all @Enumerated(STRING) at the call site: ORDINAL emits a numeric range CHECK containing AND, which SchemaCleanupRunner's IN-list sweep deliberately s...

Kamo·4w ago
Featurekamo-shared-library

Let a billing group be its own payer

A group could be named and nothing else. Its subscription was never set — nothing in the platform called setSubscription — so subscription_uid stayed null forev...

Kamo·4w ago
Featurekamo-shared-library

The four training email templates

Same constant/dotted-key split as the HR legal family: the CONSTANT is the filename stem, the templateKey the platform SENDS is the dotted value inside each .js...

Kamo·4w ago
Featurekamo-shared-library

Stream document uploads and add the HR Training schema

ImageService gains uploadDocumentStreaming, the streaming counterpart of uploadDocument. The buffered form cannot express a large upload at all: readInputStream...

Kamo·4w ago
Fixkamo-shared-library

Recreate a durable consumer whose stored filter no longer matches

A durable JetStream consumer keeps the filter subject it was created with for the life of the stream. When the owning code later changes that subject, jnats ref...

Kamo·4w ago
Fixkamo-shared-library

Stop the pay-group entity sitting on a legacy table

BillingGroup was mapped to billing_groups. That table already existed — one of a seven-table subsystem (billing_group_members, _subscriptions, _licenses, _invoi...

Kamo·4w ago
Fixkamo-shared-library

Never let the quota service stop a service from starting

StorageQuotaService took its five repositories as required constructor arguments. Services in this estate component-scan com.kamo with a wildcard but declare an...

Kamo·4w ago
Testkamo-shared-library

Pin how the pool divides into per-mailbox limits

Dovecot needs a byte figure per mailbox, but storage is one organization-wide pool across eighteen domains. The division has to hold one property above all — th...

Kamo·4w ago
Featurekamo-shared-library

Make a failed payment mean something

PAST_DUE counted as fully live in both entitlement resolvers, with no timestamp and no cap, so a customer whose card failed kept every feature for as long as St...

Kamo·4w ago
Testkamo-shared-library

Pin the delegation-mode semantics

These predicates are what the surfaces hide themselves on, so getting one wrong either offers a button that cannot work or silently permits a charge the owner m...

Kamo·4w ago
Featurekamo-shared-library

Let members and groups pay for themselves, under the owner's rules

Three things were missing and one was actively harmful. account_members carried a global unique on member_id — a member could administer exactly ONE billing ac...

Kamo·4w ago
Featurekamo-shared-library

Show what turning off fail-open would cost

kamo.entitlement.fail-open grants any app the plan matrix never mentions. It is documented as a temporary valve for the catalog backfill — turn it off once the ...

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
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-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-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-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
Stylekamo-shared-library

Restore the CRLF endings on the attendee repository

The previous commit rewrote the file through a script that normalised its line endings, so a twelve-line addition arrived as a fifty-line rewrite. That buries t...

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-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-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
Performancekamo-shared-library

Geolite range index must be ASC, not YugabyteDB's default HASH

The IP lookup is a range scan: WHERE network_start <= ? ORDER BY network_start DESC LIMIT 1 YugabyteDB partitions the LEADING index column by HASH unless tol...

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
Fixkamo-shared-library

PublicChatApiKey.scopes jsonb binding

A field with an initializer was skipped by the earlier jsonb sweep, so this one still bound as varchar: 'column scopes is of type jsonb but expression is of typ...

Kamo·4w ago
Fixkamo-shared-library

CockroachDB-only SQL that PostgreSQL rejects

CockroachDB spells the text type STRING; PostgreSQL and YugabyteDB use TEXT. 25 casts across native queries were still emitting CAST(x AS STRING) and ::STRING, ...

Kamo·4w ago
Fixkamo-shared-library

@Lob String must pin LONGVARCHAR or PostgreSQL reads it as an OID

Hibernate's PostgreSQL dialect maps @Lob String to an OID (large-object reference) and reads it with getLong(). CockroachDialect mapped the same annotation to p...

Kamo·4w ago
August 9, 2026
Featurekamo-shared-library

Count each file once per organization, not once per upload

Billing was per imgs record, so an organization that uploaded the same file five times was charged five times. The owner's rule is one charge per distinct file ...

Kamo·4w ago
Performancekamo-shared-library

Match stored content on BLAKE3 alone, so a browser can afford to ask

Proving possession required both hashes, and a browser has no fast SHA3-256 — js-sha3 is pure JavaScript at ~25 MB/s. Measured on a 358 MB video that was ~20 se...

Kamo·4w ago
Featurekamo-shared-library

Bill generated thumbnails to the organization

Thumbnails and per-channel tracks are storage an organization's uploads cause, so on the owner's instruction they now count toward that organization's total rat...

Kamo·4w ago
Featurekamo-shared-library

Count branding and Docstive document storage

Almost everything an organization stores records its own size somewhere — an imgs row, a kb_media row, a mailbox measurement. Two things do not. Branding assets...

Kamo·4w ago
Featurekamo-shared-library

Count text message attachments

MMS attachments are stored, and were not counted. They are also not what they look like: VoipMessageService encodes the attachment as a data: URI and writes it ...

Kamo·4w ago
Featurekamo-shared-library

Count each kind of stored file as its own category

Call recordings, voicemails, chat attachments, HR resources, marketing materials, meeting recordings and every kind of document are all rows in imgs, distinguis...

Kamo·4w ago
Featurekamo-shared-library

Measure the mail Kamo actually hosts, per mailbox

EMAIL was sourced from email_metadata.search_index, which was wrong in both directions. It missed KamoMail entirely — an org on KAMO_MAIL has its messages and a...

Kamo·4w ago
Performancekamo-shared-library

Read the latest snapshot date without loading the history

A summary needs one date. It was reading it by loading a two-year range of snapshots and taking the max — five domains times every day of history, on every page...

Kamo·4w ago
Featurekamo-shared-library

Per-organization storage usage model

Nothing has ever summed storage per organization. Six entities carry a byte count per file, and no code aggregated any of them, which is why the account stats t...

Kamo·4w ago
Fixkamo-shared-library

A platform product is not one of its own tenants

isOrgEntitledToApp exempted only the top-level org, so an org marked isPlatformProduct was billed as if it were a customer. sign.pink sits on a FREE_DEFAULT sub...

Kamo·4w ago
Fixkamo-shared-library

Stop a page load from persisting the entitlement projection

computeEffectiveFeatures added the caller's Hibernate-managed OrgFeature rows straight to its output and then flipped isActive on them. Its own javadoc calls th...

Kamo·4w ago
Testkamo-shared-library

Pin the deprecated-alias exclusion

The catalog key is ServiceType's numeric id, and several retired constants deliberately share one with the app that replaced them — DOC_MANAGER with DOCS on 8, ...

Kamo·4w ago
August 8, 2026
Fixkamo-shared-library

Stop mortgage endpoints enforcing a personal-loan right

The LOS_* -> MLOS_* rename was applied to the enum declaration and nowhere else. Because the freed names were immediately re-declared as the personal-loan right...

Kamo·1mo ago
Performancekamo-shared-library

Answer the plan-matrix question for every app in one pass

The Apps & Features tab asks whether each app appears in the plan matrix, and the per-app form scans the plan-feature and add-on tables once per app — two dozen...

Kamo·1mo ago
Refactorkamo-shared-library

Resolve deprecation through the app catalog

An app the operator retires has to disappear everywhere, not just from the apps page — otherwise it keeps showing up in the security-model editor and in entitle...

Kamo·1mo ago
Featurekamo-shared-library

Make app availability and stage editable at runtime

Every attribute the apps settings page renders — display name, description, stage, deprecation — was a compile-time constant in the ServiceType enum, and "Avail...

Kamo·1mo ago
Featurekamo-shared-library

Resolve app entitlement by ServiceType; rename LOS to MLOS

Entitlement resolved ServiceType.name() against **************** The catalog's codes are marketing codes (USERS, VIDEO_CONF, HR_SYSTEM, ...) and never matched, ...

Kamo·1mo ago
Featurekamo-shared-library

Stream content-addressed storage so an object can exceed heap

Chat attachments are moving to a 3 GiB ceiling. storeContentAddressed took a byte[], which cannot express that at all — a Java array stops at Integer.MAX_VALUE ...

Kamo·1mo ago
August 7, 2026
Testkamo-shared-library

Script the half of the scan invariant this repo cannot see

SharedLibBeanSafetyTest can only police the library: it knows a bean requires a repository from some package, and nothing about whether the ~40 services scan it...

Kamo·1mo ago
Testkamo-shared-library

Detect the unsafe repository dependencies instead of listing them

The guard carried 29 baselined offenders and a location exemption, and caught none of the four outages it exists to prevent. Both were guesses standing in for a...

Kamo·1mo ago
Fixkamo-shared-library

Stop the mailbox pointer from failing startup platform-wide

DepartmentService is a @Service, and every service carries @ComponentScan("com.kamo"), so all ~40 of them construct it. Giving it a MailboxRepository therefore ...

Kamo·1mo ago
Featurekamo-shared-library

The five envelope-lifecycle email templates that were never written

An e-signature envelope had exactly two templates: the invite and the step-up code. Nothing existed for anything that happens AFTER a signer signs — which is wh...

Kamo·1mo ago
Featurekamo-shared-library

Let a department and an org point at one of their mailboxes

A department's contact email was free text, so it could name an address the org does not own -- two of the three departments with one set today do exactly that....

Kamo·1mo 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