Live Change Log

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

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

The organization owner can open the opt-out list

A brand-new right is granted to nobody on the day it deploys, so a list gated only on MANAGE_EMAIL_OPT_OUTS would ship visible to no organization. The owner hol...

KamoΒ·2h ago
FixEmailService

Name the sender once at the top of the preference page

With a logo, the name is its alt text and is not written out again beneath it; without one, the name is the header. It was shown, and read aloud, twice.

KamoΒ·14h ago
FixEmailService

The opt-out list only names contacts from organization books

A member's personal address book is theirs; the org-wide opt-out list must not become a way to see whose private contacts include someone.

KamoΒ·14h ago
FixEmailService

Every campaign is sent as the org's bulk sender, and its From never pauses it

A campaign's own from_email/from_name are no longer read: the From is always the address and name on Settings > Email > Bulk Email Sender (else the org's NoRepl...

KamoΒ·17h ago
FixEmailService

Startup checks for the one-address-per-campaign index instead of creating it

EmailService ran CREATE UNIQUE INDEX on every startup. DDL on this cluster costs every service about fifteen minutes of "schema version mismatch", too much to r...

KamoΒ·17h ago
FixEmailService

Review fixes to the provider blob, delivery reports and test send

The provider blob is always written in a transaction of its own, so its lock query stays the first statement and a lost lock race can be retried even when a cal...

KamoΒ·18h ago
FixEmailService

A from the platform relay would refuse pauses the campaign instead of failing its recipients

Failing the recipients made every one of them contacted, so once the From was fixed the campaign could never send to those addresses. The send path now checks t...

KamoΒ·18h ago
FixEmailService

The platform relay is recognised by one host-and-port check everywhere

Refusing an off-domain From matched the relay by host and port, while the warm-up's delivery tracking and the test send's advice matched by host alone, so a pro...

KamoΒ·18h ago
FixEmailService

Live campaign progress reaches browsers on every replica

The STOMP broker is in-heap per pod and progress is raised on whichever pod holds the dispatch lease or received a delivery report, so browsers on the other pod...

KamoΒ·18h ago
FixEmailService

The smtp envelope sender is set to the bare from address

Campaign mail now carries a display name in its From, and the relay it goes through accepts only its own sender domain, judged by MAIL FROM. mail.smtp.from is n...

KamoΒ·19h ago
FixEmailService

A missing mailing address no longer blocks sending

assertSendable refused to schedule or send a campaign without a physical address. The org's address still goes in the footer when it has one on file; when it ha...

KamoΒ·20h ago
FixEmailService

A hold'em invitation is gated on the right to play hold'em

HOLDEM_INVITE was in neither the gated nor the ungated map, so it shipped ungated and failed the test that exists to catch exactly that.

KamoΒ·20h ago
FixEmailService

A line break in a sender's display name can no longer start a header

Jakarta Mail encodes commas, quotes and non-ASCII in a display name but passes a raw CR/LF through, so displayedAs now flattens control characters to spaces bef...

KamoΒ·20h ago
FixEmailService

The NoReply recorder names the constructor Spring should use

It has two, the second for tests, and with neither marked Spring picks neither: the context failed with "No default constructor found" and took EmailSmtpService...

KamoΒ·21h ago
September 10, 2026
FixEmailService

Template logos come from a live theme host

resolveLogoUrls built the logo URL from the org's first domain whatever its state, so an org still setting up its domain got a logo URL that could not be fetche...

KamoΒ·2d ago
September 7, 2026
FixEmailService

A notification raised on the wrong pod reached nobody

The broker here is enableSimpleBroker β€” in-heap, per pod, no relay β€” and this deployment runs two replicas. MemberNotificationService published straight into it...

KamoΒ·4d ago
FixEmailService

The last two durable consumers become queues, and contact sync reaches every pod

The mail relay was one of four NATS subscriptions on a plain durable consumer. A plain durable admits exactly ONE subscriber, so at two replicas the second is r...

KamoΒ·4d ago
FixEmailService

A bulk mark-read announces itself, so the nav badge follows it

The single-message endpoints have always published the mailbox events that move the nav badge and reload the other tabs. The three batch endpoints β€” flags, move...

KamoΒ·4d ago
FixEmailService

Every pod relays the mailbox push, so the unread badge moves again

The browser's email relay bound a DURABLE NATS consumer named after the member ("email-ws-<id>"). A durable push consumer admits exactly one subscriber, so with...

KamoΒ·4d ago
FixEmailService

A service may change a meeting's link, and the room is told

updateEvent restated the title, description, location, colour, timezone and deep link, and dropped meetingUrl β€” so a link added to a callback that had already b...

KamoΒ·5d ago
FixEmailService

A preference PUT was resetting every setting it did not mention

Reported as "when I enable repeating sound it does not save". It saved. Then the next preference the member touched turned it off again β€” and the settings page ...

KamoΒ·5d ago
FixEmailService

A meeting link can be set, not only read

meetingUrl has been on the entity, in EventDto and in meetingSignature for as long as the dialog has existed, and nothing could ever write it. EventRequest did ...

KamoΒ·5d ago
FixEmailService

The join link reaches the guest's calendar, not just their inbox

An invitation carried its meeting link in the html body and nowhere else, so a guest who accepted it on Monday and opened their calendar on Friday had no way in...

KamoΒ·5d ago
September 6, 2026
FixEmailService

Watch a mailbox for the phone, not only for the browser

An IMAP IDLE listener is the only thing that notices a message arriving; it publishes email.inbox.<addr>, which is what eventually asks MediaService to buzz a p...

KamoΒ·5d ago
FixEmailService

Give the bug-status preview the denial block it now renders

SystemBugStatusEmail pre-renders two conditional blocks, and the admin preview has to supply both. Present and empty rather than absent: an unsupplied placehold...

KamoΒ·6d ago
September 5, 2026
FixEmailService

A catalog bump emptied the sweep instead of failing it

Both reads the sweep depends on already sat inside a catch that logs and carries on, so a Yugabyte conflict never surfaced as an error β€” it surfaced as a tick t...

KamoΒ·1w ago
FixEmailService

Prove the deploy by digest, not by tag

The previous commit stops `set image` being a silent no-op. This asserts the outcome: after the rollout, the tag is resolved to a digest at the registry and the...

KamoΒ·1w ago
FixEmailService

A rebuild of the same commit deployed nothing and reported success

The image is tagged with the commit SHA, so rebuilding the same commit produces an identical image reference. `kubectl set image` then changes nothing, the Depl...

KamoΒ·1w ago
FixEmailService

Stop one member reaching another's calendar integration, and stop the endpoints handing out the credential

Two defects on the /settings/integrations/member endpoints, both live and both reachable by any signed-in member. The id was the only access control. Every /me...

KamoΒ·1w ago
FixEmailService

Create a subfolder under its parent, not beside it with a dot in its name

createFolder joined a parent to a new folder's name with a hardcoded ".". On Gmail, which separates its hierarchy with "/", that produced a top-level folder lit...

KamoΒ·1w ago
FixEmailService

Take the folder from the query, so a Gmail folder can be addressed at all

The folder travelled as a path segment, and Gmail separates its hierarchy with "/" β€” its Sent folder is `[Gmail]/Sent Mail`. There is no way to put that in one ...

KamoΒ·1w ago
FixEmailService

Report the folder separator and special-use role so Gmail's folders are recognisable

A member on Google Workspace saw every one of their folders listed under "My folders" with its raw path for a label β€” "[Gmail]/Sent Mail", "[Gmail]/Spam" β€” and ...

KamoΒ·1w ago
FixEmailService

Stop a provider config save from discarding another form's fields

Every config panel posts only the fields it owns, flat, alongside the provider type -- the Google Workspace panel sends nothing but serviceAccountJson. PUT /api...

KamoΒ·1w ago
September 4, 2026
FixEmailService

Stop a Yugabyte read restart from silently killing a transactional send

EmailTemplateService.sendToUser is the endpoint behind every service-to-service transactional email on the platform, and it was @Transactional over three reads:...

KamoΒ·1w ago
FixEmailService

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

KamoΒ·1w ago
FixEmailService

Open the message, not the mailbox

The app has a route per (folder, uid). Being told about a mail and then landing on a list to hunt for it is the kind of small wrongness that makes a notificatio...

KamoΒ·1w ago
FixEmailService

System mail must not send as a domain we do not authenticate

Transactional mail always went out as NoReply@{org primary domain} through our own relay. That is only safe while Kamo hosts the org's mail: then we control the...

KamoΒ·1w ago
FixEmailService

Personal mailboxes read the OAuth registry, not dead config

Connecting a personal Gmail or Outlook mailbox has been building its consent URL with client_id= empty, and every attempt was refused by the provider. The cred...

KamoΒ·1w ago
September 3, 2026
FixEmailService

Restore the transaction the attachment overload left behind

baf3c88 added an attachment parameter to sendToUser by moving the whole body into a new six-argument overload. The @Transactional stayed on the five-argument si...

KamoΒ·1w ago
FixEmailService

Stop an attachment holding an IMAP connection open forever

getAttachment returned Jakarta Mail's lazy IMAPInputStream straight out of withStore, which puts the Store back in the pool the instant the lambda returns. Two ...

KamoΒ·1w ago
September 2, 2026
FixEmailService

Show a pasted screenshot instead of a broken image

Jakarta Mail hands back a MIME header exactly as it arrived, folds and all: RFC 5322 lets a mail header run over several lines by breaking it at a CRLF followed...

KamoΒ·1w ago
FixEmailService

Report a failed association at WARN, not at DEBUG

Lead association swallows its failures on purpose β€” a problem attaching a message must never break the sweep that was reading the mailbox β€” so the log line is t...

KamoΒ·1w ago
FixEmailService

Keep the words typed after an inserted photo

The same reported message had a sign-off underneath its photo. That did not arrive either β€” the reading pane showed an empty body above the attachment. There i...

KamoΒ·1w ago
FixEmailService

Let a photo attached from a phone be opened

A member sent themselves a message from an outside account with a file attached. The message arrived; the file was nowhere in it β€” no preview, no download link,...

KamoΒ·1w ago
FixEmailService

Give a folder with an ampersand in its name its message count

A mailbox called "Bugs & Enhancements" showed no count in the sidebar while every folder beside it showed the right one, and the mailbox totals were short by ex...

KamoΒ·1w ago
FixEmailService

Make a listed message searchable, not merely stored

The index is written from two directions. Opening a message runs the full indexer, which writes the row and then computes its search_vector. Listing a folder wr...

KamoΒ·1w ago
FixEmailService

Make label: search read the table that records labels

The clause tested si.label_ids, an array column on the search index. Nothing has ever written it β€” labelling a message inserts into email_metadata.message_label...

KamoΒ·1w ago
August 30, 2026
FixEmailService

Serve smart folders and labels as messages, not as index rows

Both endpoints answered out of email_metadata.search_index and handed the client what the table holds. A smart folder returned SearchIndexEntity β€” messageUid, f...

KamoΒ·1w ago
August 27, 2026
FixEmailService

Stop asking Graph for a message size the legacy type lacks

Every listing for Mike@OptionOne.com returned 400 RequestBroker--ParseUri ("Could not find a property named 'size' on type **************** and the mailbox was ...

KamoΒ·2w ago
FixEmailService

Stop the unread card offering mail that was read and deleted

The home-page unread-mail widget reads email_metadata.search_index directly β€” it must not spend an IMAP connection, which is the whole reason it exists β€” and th...

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