Live Change Log

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

17,966
Total Changes
4,633
Features
4,554
Fixes
32
Projects
Filter by project
All Projects17,966AIService112APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService383InitializerService300KBService74KlusterServices547MCPGatewayService43MediaService462RAGService61SecurityService1,526TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,589kamo-login319kamo-marketing588kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,325kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI523Chore670Docs228Feature4,633Fix4,554Other6,781Performance136Refactor274Revert23Style48Test71Upgrade1
August 26, 2026
FixEmailService

Build the org logo URL from its alias, not its domain

Transactional email is sent to real inboxes, so the header and footer logos have to resolve without any client-side theme JavaScript — they are built exactly th...

Kamo·2w ago
FixEmailService

Conflict detection now finds conflicts

Delegates to findBusyForMemberInRange and excludes the event being edited in Java, where a null exclusion cannot poison a SQL predicate. The test it replaces m...

Kamo·2w ago
August 25, 2026
ChoreEmailService

Pin kamo-shared-library 1.6.0

The library moved to 1.6.0 while every consumer stayed on 1.5.0. Consumer CI builds the library from a fresh clone into a cold ~/.m2 and ci-settings.xml mirrors...

Kamo·2w ago
FeatureEmailService

Serve Google's OAuth callback on /api/email/oauth/callback

The platform console needs an address to show an operator setting up the Google Workspace registration, the way VOIP has /api/voip/oauth/callback. The only emai...

Kamo·2w ago
August 22, 2026
FixEmailService

Actually move an event when its calendar is changed

The dialog has always offered a calendar picker when editing and the PUT has always carried the chosen calendarId, but updateEvent had no parameter for it — so ...

Kamo·3w ago
PerformanceEmailService

Send a guest count instead of every guest

Kamo·3w ago
FeatureEmailService

Serve the home-page unread digest from the index, never from IMAP

A widget on the home page is on screen for everyone all day, whether or not anybody is reading mail — and a member's IMAP connections are a shared budget of ten...

Kamo·3w ago
FeatureEmailService

Publish and accept an event's guest audience

Kamo·3w ago
FeatureEmailService

Resolve an event's guest audience into people

Kamo·3w ago
FeatureEmailService

Serve and announce the home-page calendar widgets

CalendarWidgetService answers what a widget actually needs and the calendar page hasEarlier/hasLater so an arrow greys out instead of offering an empty page. Th...

Kamo·3w ago
August 21, 2026
FeatureEmailService

Scan the org's mailboxes for a lead's past e-mail on request

Serves the "Associate Past E-Mails w/ Lead" tick-box. Given a lead and the address just recorded on it, read INBOX and Sent of every mailbox in that lead's orga...

Kamo·3w ago
August 16, 2026
FixEmailService

Size the pod above its own JVM heap ceiling [skip ci]

The image starts the JVM with -XX:MaxRAMPercentage=70 -XX:+AlwaysPreTouch, so the heap alone may take 70% of the container limit and pre-touch keeps every commi...

Kamo·3w ago
August 15, 2026
FixEmailService

Campaigns take the bulk-email rights, like the recipient resolver already did

Bulk email was half-enforced and the halves were in different services. **************** in SecurityService has gated recipient resolution on MANAGE_BULK_EMAIL ...

Kamo·4w ago
FixEmailService

Mailbox administration takes a right, and three endpoints get a session

MailboxController enforced no right at all. MANAGE_EMAIL_ACCOUNTS existed only as a checkRight in the browser and VIEW_EMAIL_ACCOUNTS was referenced nowhere, so...

Kamo·4w ago
FixEmailService

Every contact endpoint takes the verb that names it

ContactRestController checked ownership carefully — orgOf, userOf, assertBookIsMine, assertGroupIsMine, and 404 rather than 403 so somebody else's id is never c...

Kamo·4w ago
August 14, 2026
FeatureEmailService

Publish every change of state, not only arrivals

A member has this open in more than one tab about as often as not, and often on a phone as well. Each of those holds its own socket and draws its own bell, and ...

Kamo·4w ago
FeatureEmailService

A paged, filterable history

The centre could answer one question: the most recent hundred, unread or not, with no way to ask for what had already been read. So anything a member had seen w...

Kamo·4w ago
FeatureEmailService

Read one event by id

The lead page holds a callback's event id and wants to reopen it in the same dialog the calendar uses, so it needs to be able to fetch the event on its own. Sc...

Kamo·4w ago
ChoreEmailService

Rebuild against the shared-lib event-range fix

No source change here. Service CI clones kamo-shared-library at build time, so picking up c1e68a9 — which stops an omitted date window failing every calendar ev...

Kamo·4w ago
FixEmailService

Put a callback on a calendar the member can actually see

Callbacks were not reaching the calendar at all. This service picked the target calendar by account — findPrimaryByUser — and a user is global while a member is...

Kamo·4w ago
FixEmailService

Stop envelopes claiming a consent answer nobody asked for

remoteImagesAllowed was a primitive boolean, and only the three endpoints that fetch a whole message ever assign it. The folder listing does not — answering it ...

Kamo·4w ago
FixEmailService

Make event reminders actually notify someone

Three faults, one symptom. Members reported that calendar notifications did not work, and all three reasons were on this side. Reminders were never written. Th...

Kamo·4w ago
FeatureEmailService

One integer for the mail badge, and count what the index path is worth

Three things, all about knowing rather than assuming. The nav-top unread badge fetched the entire folder tree and picked INBOX out of the result — the most exp...

Kamo·4w ago
FeatureEmailService

Prove a folder unchanged with HIGHESTMODSEQ, then serve it from the index

Turns the index-backed message list on, by fixing the thing that made it unsafe rather than by flipping the flag. The old check compared message counts and UID...

Kamo·4w ago
FixEmailService

Record all three IMAP flags, and say why the index cannot serve a list yet

The migration has run, so is_answered exists and SearchIndexService now writes it alongside is_read and is_starred. The index has recorded two of the three flag...

Kamo·4w ago
FixEmailService

Do not read or write is_answered before its column exists

Follows the shared-library change unmapping the field. Nothing in the deployed path now touches a column that KamoInitializer has not yet created. The index-ba...

Kamo·4w ago
FeatureEmailService

Serve a folder listing from the index when it can prove it is current

The rows behind a message list are already in Postgres — the metadata index holds sender, subject, date, size, attachment and flags for every message it has see...

Kamo·4w ago
PerformanceEmailService

Stop opening every folder, and stop refetching every message

Two round-trip problems on the /messages critical path, both invisible in the code that caused them. listFolders opened each folder read-only to read two integ...

Kamo·4w ago
August 12, 2026
FixEmailService

Stop leaking an IMAP IDLE connection on every browser reconnect

Interrupting the IDLE thread cannot end an IDLE: it is parked in a blocking socket read that only sees the flag once the read returns on its own, up to Dovecot'...

Kamo·4w ago
August 11, 2026
FixEmailService

The source half of 1b3553f, which committed only its tests

1b3553f staged its two new test files and nothing else, so it landed asserting a nullable FolderManager.setFlags that did not exist yet and cannot compile on it...

Kamo·4w ago
FixEmailService

Stop an unnamed IMAP flag from being overwritten

IMAP flags are independent, so "mark this read" must say nothing about the star. EmailImapService.setFlags has always taken nullable Booleans and skipped the nu...

Kamo·4w ago
ChoreEmailService

Rebuild against the shared-library JetStream consumer reconcile

Picks up kamo-shared-library f3a7283. Eight members hold an email-ws-<id> consumer still filtered on email.inbox.<addr> from before subscribeToNats moved to ema...

Kamo·4w ago
FeatureEmailService

Size each mailbox against the organization's storage

Dovecot now enforces a per-mailbox limit, and nothing was setting the column it reads. This writes it nightly, after the storage snapshot so the capacity being ...

Kamo·4w ago
FixEmailService

Stop shipping a shared credential as a config default

The platform's shared password was baked in as the fallback for DB_PASSWORD and MINIO_ROOT_PASSWORD, so it lived in this repo and in the built image as well as ...

Kamo·4w ago
August 10, 2026
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
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
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
FixEmailService

Take the caller from the session, not from the query string

GET /api/calendar/calendars took userId as a request parameter, so changing a number in the URL read anyone's calendars — and because calendars carried no organ...

Kamo·4w ago
FixEmailService

Make MKCOL create a book that can actually be stored

mkCol built a ContactBook carrying neither an organisation nor an owner and returned 201 regardless, so creating an address book from a CardDAV client failed at...

Kamo·4w ago
FixEmailService

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
FixEmailService

Scope address books to the member who owns them

Contacts were scoped by organisation alone. listBooks(orgId) was findByOrganizationId(orgId), and the contact list query opened WHERE c.contactBook.organization...

Kamo·4w ago
ChoreEmailService

Rebuild against shared-library @Lob LONGVARCHAR fix

Hibernate's PostgreSQL dialect read @Lob String columns as OIDs via getLong(). Affects notes, contacts, calendar, OAuth tokens, IMAP passwords, email campaign b...

Kamo·4w ago
FeatureEmailService

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
August 9, 2026
FixEmailService

Publish row ids as strings — a new book 404'd the moment you selected it

CockroachDB unique_rowid() produces 64-bit ids. A real one from contact_books is 1200081912680906758; JavaScript's JSON.parse rounds anything past Number.MAX_SA...

Kamo·4w ago
FeatureEmailService

Persist and serve the whole contact, not just its name

The REST layer serialised the JPA entities directly. A Contact has no mapping to its emails, phones, addresses, organisations, URLs, IMs or relationships — thos...

Kamo·4w ago
FeatureEmailService

Measure each org's own KamoMail mailboxes

Walks every mailbox Kamo hosts and records, per arrival day, the RFC822 bytes it holds — headers, body and encoded attachments, across every folder including Tr...

Kamo·4w ago
FixEmailService

Record message sizes instead of writing zero

SearchIndexService wrote sizeBytes = 0 for every message it ever indexed, under the comment "Not available from envelope". It was available — the fetch profile ...

Kamo·4w ago
CIEmailService

Retry the shared-library build, which the LAN uplink keeps corrupting

Three builds died today on "Tag mismatch" pulling a jar — and the mirror added an hour ago did not help, because kbservice, mcpgatewayservice and ragservice hit...

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