Live Change Log

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

17,992
Total Changes
4,652
Features
4,558
Fixes
32
Projects
Filter by project
All Projects17,992AIService112APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService386InitializerService303KBService74KlusterServices547MCPGatewayService43MediaService462RAGService61SecurityService1,530TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,602kamo-login319kamo-marketing588kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,328kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI523Chore670Docs231Feature4,652Fix4,558Other6,781Performance136Refactor274Revert23Style48Test71Upgrade1
April 25, 2026
Fixkamo-internal

Remove debug console.log statements and add missing routes

Remove all temporary debug logging added during WebSocket tracing from ChatBox, TicketChat, MemberItem, ChatTool, and useChatWebSocket; add redirect pages for /...

kamo·4mo ago
Fixkamo-internal

Prevent message header from expanding column on long addresses

The header's left flex child had no min-w-0, so long unbreakable email addresses in From/To/Cc forced its min-content width to grow, dragging the header (and th...

kamo·4mo ago
Fixkamo-internal

Hoist ChatWebSocketProvider above ToolProviders

ToolDock (and its tool windows like SupportTicketWindow → TicketChat) is mounted inside ToolProviders, which sits ABOVE PresenceWrapper in the tree to avoid unm...

kamo·4mo ago
Fixkamo-internal

Drop Shadow DOM in email renderer so overflow-x-auto fires

Shadow DOM was the root cause. Wide email content (fixed-width tables) inside the shadow tree painted past the host without contributing to the host's layout bo...

kamo·4mo ago
Fixkamo-internal

Align ChatWebSocketContext import path to match provider

TicketChat and ChatNotificationListener imported the context via the '@/app/contexts/...' alias while PresenceWrapper (the provider) imports it via the relative...

kamo·4mo ago
Fixkamo-internal

Force shadow host containment with inline styles + contain: layout

Class-based overflow-x-auto on the shadow host wasn't reliably winning against the shadow ':host { all: initial }' reset, so wide email content (fixed-width tab...

kamo·4mo ago
Fixkamo-internal

Scroll wide email content inside shadow DOM, not outside

The previous attempts at adding overflow-x-auto to light DOM ancestors could not catch wide email content because the shadow tree's visual paint overflow does n...

kamo·4mo ago
FixEmailService

Use getHasAttachments() to match Boolean wrapper type

**************** is a Boolean (wrapper), so Lombok generates getHasAttachments() not isHasAttachments(). The latter only exists for primitive boolean. Use Boole...

Kamo·4mo ago
FixMediaService

Expand JPA repository scan to include commerce package

The new kamo-shared-library brings in **************** which requires **************** (in com.kamo.z.shared.commerce). MediaService only scanned donotmodify.da...

Kamo·4mo ago
FixMediaService

Restore HashMap import in ChatWebSocketController

The previous refactor removed the HashMap import but the handleTyping method still constructs a HashMap for the typing event payload, causing the Forgejo build ...

Kamo·4mo ago
Fixkamo-internal

Add min-w-0 to email content div so overflow-x-auto fires

Without min-w-0, the flex-col child's default min-width:auto resolves to min-content, letting wide email tables expand the div past the column width. The outer ...

kamo·4mo ago
Fixkamo-marketing

Remove duplicate connectStomp call in sendMessage

When the first message creates a new session, onSessionCreated updates props which triggers useEffect to call connectStomp. The inline call in sendMessage was r...

Kamo·4mo ago
FixMediaService

Proactively create NATS consumer at session creation to prevent message loss

Previously the NATS JetStream push consumer was only created when a STOMP client sent /app/chat/subscribe. With DeliverPolicy.New, any messages published before...

Kamo·4mo ago
Fixkamo-internal

Close reconnect gap causing dropped real-time messages

Remove `connected` from subscription useEffect deps in TicketChat and ChatBox. Previously, every WebSocket reconnect triggered the effect cleanup which called u...

kamo·4mo ago
FixSecurityService

Allow system user to manage org branding and fix logo auth

- Add system user bypass as first guard in canManageOrgBranding so platform system user has full branding control over all non-parent orgs - Fix uploadLogo en...

Kamo·4mo ago
Fixkamo-internal

Contain horizontal overflow in email view pane to 3rd column

- Add overflow-x-hidden to MessageBrowser outer container as hard boundary - Add overflow-x-hidden to column 3 wrapper and overflow-x-auto to email content area...

kamo·4mo ago
FixKlusterServices

Replace Coqui TTS with Piper TTS (en_US-norman-medium)

Coqui VCTK model has no named speakers — replace with Piper TTS which has the exact norman[medium] voice. Piper binary (~3 MB) and model (~60 MB) are downloaded...

Kamo·4mo ago
FixEmailService

Reset stale hasAttachments on sync and accumulate correctly

- Reset has_attachments=false at start of bulk sync so stale true values from old false-positive MIME detection are cleared before re-indexing - Accumulate ha...

Kamo·4mo ago
Fixkamo-internal

Pre-populate FROM on reply/forward and fix send fromAddress

- DraftMessage now carries fromAddress so it flows from openNewMessage through to the composer - MessageBrowser stores the active mailbox emailAddress (includ...

kamo·4mo ago
FixEmailService

Support fromAddress override on send

Adds FromAddressRequest to EmailSendRequest so the frontend can specify which alias/shared/mailbox address to send from. SmtpOnlyProvider now uses that address ...

Kamo·4mo ago
FixKlusterServices

Add local_net for split-DNS / LAN client RTP fix

Phones on the same LAN as k1m1 connect via split DNS (domain resolves to 192.168.4.22 internally). Without local_net, Asterisk still advertises the external dom...

Kamo·4mo ago
FixKlusterServices

Persist sorcery contact=memory fix and block SIP scanner in startup.sh

- Inject [res_pjsip] contact=memory into sorcery.conf before Asterisk starts; the default sorcery-astdb SQLite backend silently drops all REGISTER contacts - ...

Kamo·4mo ago
Fixkamo-internal

Sub-tab content fills full content-area width

Drop the centered max-width constraint (was 920 / 1200 / 680 / 720 depending on tab) on SubTabShell. The page already lives inside SettingsView's content column...

kamo·4mo ago
FixEmailService

Fix attachment parsing and hasAttachment false positives

Three fixes to EmailImapService: 1. toEnvelope: narrow multipart check to multipart/mixed only — plain HTML+text emails (multipart/alternative) no longer sh...

Kamo·4mo ago
Fixkamo-internal

Add download button to classic view attachment section

The classic view (MessageBrowser) had its own attachment list that was missing the download button — only the conversation view was fixed previously. Also align...

kamo·4mo ago
April 24, 2026
FixEmailService

Add com.kamo.z.shared.commerce to EnableJpaRepositories scan

**************** (required by **************** in the shared library) lives under com.kamo.z.shared.commerce but was not included in the JPA repository scan, ca...

Kamo·4mo ago
Fixkamo-internal

Proper layout, padding, and provider logos

Layout / spacing fixes: - All six tabs (Providers, Extensions, Phone Users, Devices, Voicemail, Health) now wrap their content in a TabShell with px:{xs:2,md:...

kamo·4mo ago
FixEmailService

Correct field name and type in getFromAddresses response

Backend was sending 'email' key but frontend expected 'address', and sent type 'shared_mailbox' when frontend expected 'shared'. Also fixes hasMailboxes flag wh...

Kamo·4mo ago
Fixkamo-internal

Load FROM addresses from accessible mailboxes and aliases

Replaces the broken getFromAddresses() endpoint (which sent 'email' instead of 'address') with getAccessibleMailboxes() + listMemberAliases(), matching the same...

kamo·4mo ago
FixInitializerService

Use CockroachDB-compatible DROP INDEX CASCADE syntax

CockroachDB rejects ALTER TABLE ... DROP CONSTRAINT for UNIQUE constraints with: unimplemented: cannot drop UNIQUE constraint "uk_org_oauth_provider" using ...

Kamo·4mo ago
FixVOIPService

Include com.kamo.z.shared.commerce in repository scan

Latest kamo-shared-library propagates **************** (donotmodify.dao.services) which has a constructor dependency on **************** **************** The se...

Kamo·4mo ago
Fixkamo-internal

Add attachment download button and decouple mark-as-read

- Add a Download icon button to each attachment row so users can force a file download instead of only opening in a new tab - Decouple markConversationRead fr...

kamo·4mo ago
FixKlusterServices

Move hostPath from MinIO (rclone FUSE) to local /var/lib/pbx

MinIO via rclone FUSE does not support POSIX chmod or symlink() — both required by FreePBX's module system. Changed all FreePBX and MariaDB hostPath volumes fro...

Kamo·4mo ago
FixKlusterServices

Wrap fwconsole/amportal via php for MinIO FUSE hostPath

/var/lib/asterisk is backed by MinIO via rclone FUSE which doesn't support POSIX chmod, so fwconsole scripts can't be made executable on that volume. startup.sh...

Kamo·4mo ago
FixKlusterServices

Add preStop hook and terminationGracePeriodSeconds

Containers were getting stuck in Terminating because background Asterisk processes kept running after apache2ctl (PID 1) exited. preStop hook sends SIGTERM to A...

Kamo·4mo ago
FixKlusterServices

Add bootstrap.php require to regenerated /etc/freepbx.conf

The installer writes freepbx.conf with datasource='' and a require_once for bootstrap.php, which config.php depends on to load the FreePBX class. Our regenerate...

Kamo·4mo ago
FixKlusterServices

Regenerate /etc/freepbx.conf on restart

/etc is ephemeral (not a hostPath), so /etc/freepbx.conf written by the installer is lost on every pod restart. Added else branch to regenerate it from env vars...

Kamo·4mo ago
FixKlusterServices

Bypass start_asterisk, wait for control socket instead

start_asterisk uses `pidof asterisk` which returns a false positive on pod restarts, causing the wait-for-Asterisk loop to hang. Now startup.sh starts Asterisk ...

Kamo·4mo ago
FixKlusterServices

Start Asterisk in background, wait for it, then run installer

The entrypoint.sh does not run the FreePBX installer — it only starts services. startup.sh now replicates the entrypoint setup steps, starts Asterisk in backgro...

Kamo·4mo ago
FixKlusterServices

Let entrypoint handle install, not startup.sh

FreePBX installer (php install -n) requires Asterisk to already be running. Our startup.sh was calling it before Asterisk started, causing "Error communicating ...

Kamo·4mo ago
FixKlusterServices

Mount /etc/asterisk only, not /etc, to fix PHP simplexml error

Mounting the full /etc as a hostPath volume was corrupting PHP extension loading even after seeding from the image — simplexml_load_file undefined at install ti...

Kamo·4mo ago
FixKlusterServices

Reduce CPU limits to 2:1 ratio to eliminate overcommitment

Docs 4→1 core, jibri 4→2 cores, libretranslate 2→1 core, bergamot 2→1 core, coturn 1→0.5 core. Saves ~7.5 cores off node limits.

Kamo·4mo ago
FixKlusterServices

Switch to escomputers/freepbx:17 with correct architecture

tiredofit/freepbx has no FreePBX 17 image (abandoned since 2022). escomputers/freepbx:17 (updated Apr 2026, Asterisk 21 + FreePBX 17) requires a separate MariaD...

Kamo·4mo ago
Fixkamo-internal

Parse formData before forwarding to prevent binary corruption

request.text() on multipart/form-data corrupts binary file bytes; pass parsed FormData as init.body so forwardToApi skips request.text() and lets fetch regenera...

kamo·4mo ago
Fixkamo-internal

Remove minHeight:100vh causing double scrollbars

The outer box's minHeight:100vh exceeded the layout's calc(100vh - 56px) container, which caused both the browser-level scroll and the inner overflow:auto to be...

kamo·4mo ago
Fixkamo-internal

Drop stale Pay column header from security-models table

When the Employee Self-Pay Kamo Fees field was removed, the matching TableCell in the row body was deleted but the header row still had the '<TeamMember> Pay' c...

kamo·4mo ago
FixSecurityService

Surface real reason behind GoDaddy 400 error

GoDaddy now returns HTTP 400 with code=UNABLE_TO_AUTHENTICATE and body "Bad Request : Bad Request" when an account does not meet their current production Domain...

Kamo·4mo ago
Fixkamo-internal

Censorship sub-tab now renders ATF first per spec

Reorders the Censorship sub-tab cards to match the requested order: 1. Alcohol, tobacco & firearms 2. Allowed Member Age Ranges 3. Allowed Employee (Team ...

kamo·4mo ago
FixSecurityService

Eager-load domains via findByIdWithDomains, drop @Transactional

@Transactional on a controller method keeps a DB connection open across the entire MinIO upload, and also risks LazyInitializationException if the inner getOrga...

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