Live Change Log

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

17,853
Total Changes
4,572
Features
4,509
Fixes
32
Projects
Filter by project
All Projects17,853AIService110APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService347InitializerService299KBService73KlusterServices539MCPGatewayService43MediaService460RAGService61SecurityService1,516TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,550kamo-login318kamo-marketing580kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,320kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI522Chore670Docs226Feature4,572Fix4,509Other6,781Performance136Refactor273Revert23Style48Test68Upgrade1
September 8, 2026
OtherVOIPService

Put the stream in the config the pod actually reads

The previous commit set nats.jetstream.stream in **************** shipped, deployed β€” and the new pod still logged NATS stream 'CHAT_MESSAGES' already exis...

KamoΒ·3d ago
OtherVOIPService

Give voip.* a stream to live in, and stop lying about who sent the text

There was no VOIP_MESSAGES stream in NATS at all. Every `voip.*` publish answered 503 No Responders Available and both media pods logged, once, at boot: [V...

KamoΒ·3d ago
September 7, 2026
OtherVOIPService

Record what the carrier says happened to a text, and check 10DLC before it matters

Sending now succeeds and nothing arrives. Telnyx accepts the message, returns an id, and Verizon then refuses to deliver it: status delivery_failed code ...

KamoΒ·4d ago
OtherVOIPService

Normalise the sender at the gateway, and stop calling a refusal retryable

The previous commit normalised the sender number where it is stored in the number inventory and on the carrier, and the send still failed with the same carrier ...

KamoΒ·4d ago
OtherVOIPService

Normalise sender numbers to E.164 before they reach a carrier

Sending a text failed with "The message could not be sent. Try again in a moment.". Telnyx's own answer, from the voipservice log, was specific: Telnyx POST ...

KamoΒ·4d ago
FeatureVOIPService

A number can be shared by several members, and one of them receives it

A single OWNER_MEMBER_ID could say "this number belongs to Sarah" and nothing else. Real desks are not shaped like that: a support line is answered by four peop...

KamoΒ·4d ago
FixVOIPService

Stop telling people to add the text provider they already added

Reported from a real setup, and the report was right. An organization running FreePBX added Telnyx as a text provider, opened the SMS window, and was shown Free...

KamoΒ·4d ago
FixVOIPService

Tell a member the number is missing, not that their PBX cannot text

Reported from a real setup: an organization added Telnyx as a text provider, opened the SMS window, and was told "This phone server is a FreePBX PBX, which carr...

KamoΒ·4d ago
FixVOIPService

A frozen CHECK blocked every Telnyx AND JustCall provider from being created

Adding a Telnyx text provider 500'd. The log named it plainly and the screen said nothing useful: constraint **************** Failing row contains (..., 6)...

KamoΒ·4d ago
FeatureVOIPService

Serve the inbound webhook URL, from one definition

An administrator adding a text provider has to paste Kamo's inbound URL into the carrier's own console, and nothing told them what it was. Missing that step has...

KamoΒ·4d ago
September 6, 2026
FixVOIPService

Ask whether THIS NUMBER can text, not whether the org can

SmsGateway grew a number-aware availability() when routing moved onto the number, and then nothing called it with a number β€” both SmsController call sites used ...

KamoΒ·4d ago
RefactorVOIPService

Delete the Telnyx code nothing calls

Three methods I added that no caller reaches, removed while the reason is still fresh β€” this feature's worst bug was TelnyxProvider.provision() being defined an...

KamoΒ·4d ago
FixVOIPService

The "you cannot text" message stopped one step short of the fix

FreePBX and Teams told a member to add an SMS provider under Phone β†’ Providers. That was complete advice until numbers gained their own text route; now adding a...

KamoΒ·4d ago
FixVOIPService

Only the carrier that owns a webhook URL may verify its posts

The phone-server inbound path added in the previous commit verified against whatever provider carried the number. That is a forgery surface, and not hypothetica...

KamoΒ·4d ago
FixVOIPService

A Telnyx phone server could send texts and never receive one

Telnyx is both a phone server and a carrier, and a Telnyx messaging profile has exactly one webhook URL. So an organization that added Telnyx as a PHONE SERVER ...

KamoΒ·4d ago
FeatureVOIPService

Actually create the Telnyx account setup, carry MMS, and let a carrier-only org hold threads

Three gaps, and the first was the feature not working at all. TELNYX PROVISIONING WAS DEFINED AND CALLED BY NOTHING TelnyxProvider.provision(), ensureMemberCr...

KamoΒ·4d ago
FixVOIPService

Populate a new number before persisting it, not after

save() built an empty OrgPhoneNumber, persisted it, and then filled in E164 and PHONE_CANON β€” both NOT NULL. It works today because the UUID generator needs no ...

KamoΒ·4d ago
FeatureVOIPService

Route texts by NUMBER, and add Telnyx on both sides of it

An organization can buy its DIDs and its texting from one company and answer the calls with another. Kamo could not express that: a member's texting was a prope...

KamoΒ·4d ago
FixVOIPService

One send contract across all five providers, and stop dropping inbound texts

The SMS abstraction layer had five providers disagreeing about how to fail and an inbound path that discarded real customer messages in silence. Sending - Se...

KamoΒ·5d ago
September 5, 2026
FixVOIPService

Prove the deploy by digest, not by tag

The preceding 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 th...

KamoΒ·6d ago
FixVOIPService

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Β·6d ago
FixVOIPService

Stop a bad service-user JWT from disabling every member's softphone

Minting from a member's own JWT called configFactory.require(inst), which insists the phone server's SERVICE-USER JWT is present and well-formed. That credentia...

KamoΒ·6d ago
FixVOIPService

Bound the sign-in failure message carried back in the redirect

The RingCentral callback puts the server's own sentence in the query string so the member's tab can say what actually went wrong β€” nearly always an unregistered...

KamoΒ·6d ago
RefactorVOIPService

Keep "is this member connected" in one place

RingCentralMemberOAuthService had its own hasConnection and connectedExtensionNumber, and both answered only for the sign-in half. A member can hold either cred...

KamoΒ·6d ago
FixVOIPService

Revoke a reassigned member's RingCentral sign-in, don't just forget it

Offboarding deleted the member's credential row when they were moved off a phone server. That was the whole job while the credential could only be a JWT β€” Kamo ...

KamoΒ·6d ago
ChoreVOIPService

Make the RingCentral member redirect URI configurable

The sign-in hop's redirect URI was only the @Value default. It belongs beside the other two redirect properties: unlike them it is never re-hosted onto the tena...

KamoΒ·6d ago
FixVOIPService

Let a RingCentral member sign in instead of minting a JWT

A member's phone-settings tab asked for a JWT credential, and that was the only way to connect them. A RingCentral JWT belongs to one user and is minted by that...

KamoΒ·6d ago
FixVOIPService

Tell a RingCentral JWT from the app credentials pasted into its box

An org pasted its RingCentral app's credentials JSON β€” the {"clientId": …, "clientSecret": …, "server": …} blob the developer console shows on the same page as ...

KamoΒ·6d ago
September 4, 2026
FeatureVOIPService

Fall back to the org's own hostname for the Teams redirect

A redirect the org typed into its own registration still wins outright β€” Microsoft requires the URI replayed on the token exchange to match the authorization by...

KamoΒ·6d ago
FeatureVOIPService

Lock the shared sweeps, and run two pods

Every @Scheduled sweep here whose effect is shared now takes a named distributed lease through SingletonTaskRunner before it does anything, so it runs once acro...

KamoΒ·6d ago
FixVOIPService

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Β·6d ago
FeatureVOIPService

Teams Phone falls back to the org's own Entra app

The per-phone-server credentials still win β€” that is the most specific source. What changes is the fallback underneath them: the org's own MICROSOFT_TEAMS regis...

KamoΒ·1w ago
September 3, 2026
FeatureVOIPService

Let an on-premise PBX report a ringing extension

RingCentral and JustCall publish INBOUND_RINGING from their webhooks. FreePBX and KamoPBX publish nothing -- they are the customer's own Asterisk and nothing wa...

KamoΒ·1w ago
FixVOIPService

Encode JustCall query values exactly once

The client built its query with build(true), which declares the values already encoded β€” so nothing was escaped at all. The character that matters is "+": every...

KamoΒ·1w ago
RefactorVOIPService

Say plainly why every JustCall agent reads as ACTIVE

The user listing decided its status with "available is Yes or No -> ACTIVE, else UNKNOWN", which is a roundabout way of asking whether JustCall answered at all,...

KamoΒ·1w ago
FeatureVOIPService

Wire JustCall in through the phone provider abstraction

JustCall (api.justcall.io/v2.1) as a full PhoneProvider: call history, texts, voicemail, recordings, the agent directory and availability, plus signed account w...

KamoΒ·1w ago
September 2, 2026
FixVOIPService

Apply FreePBX config after every write, or the extension never reaches Asterisk

Extension 8777 (Aiden Perry, kamocrm) was created from KamoCRM on 2026-09-02 and never rang. The FreePBX GraphQL `addExtension` mutation had written `users`, `d...

KamoΒ·1w ago
August 30, 2026
FixVOIPService

An account with no number to text from is a 409, not a 500

Starting a text threw IllegalStateException when neither the member nor the instance had an outbound number, which Spring turned into a 500 with a stack trace. ...

KamoΒ·1w ago
August 27, 2026
FeatureVOIPService

Keyword interception at step 0 on the RingCentral rail (MS1 Task 4)

Today a STOP to a number no MEMBER_VOIP_CONFIG row owns hits the "No member found for to-number" branch and vanishes β€” and that branch is EXACTLY where an opted...

KamoΒ·2w ago
FeatureVOIPService

SmsKeywordService β€” the one writer for inbound keywords (MS1 Task 3)

Closes the TODO Task 2 left behind. Until this commit a verified inbound STOP reached BulkTextInboundController, was recognised, was logged, and was then DROPPE...

KamoΒ·2w ago
FixVOIPService

One source of truth for the platform settings

"Test connection" reported "no master account id" on a phone server whose provisioning had just succeeded, minutes earlier, using that same id. Two sources dis...

KamoΒ·2w ago
FixVOIPService

A half-provisioned phone server could never be finished, and said the wrong thing

An org's KamoPBX server has been reporting Error: Phone provider instance not found: **************** since it was created. The instance was never missing β€”...

KamoΒ·2w ago
FeatureVOIPService

Carrier-facing inbound SMS webhook (MS1 Task 2)

POST **************** -- form-encoded or JSON, guarded by the CARRIER'S OWN SIGNATURE. Why a new endpoint. /api/voip/webhook cannot receive a STOP and fails si...

KamoΒ·2w ago
FixVOIPService

Outbound external calls were missing from FreePBX call history

On an outbound external call FreePBX rewrites the CDR `src` to the trunk's outbound caller ID β€” the org's own DID β€” so a call ext 8080 placed to 9493747110 is r...

KamoΒ·2w ago
FeatureVOIPService

Implement KamoPBX extension, user and device management

The provider advertised extensionManagement, userManagement and deviceManagement as true while implementing none of them, so the UI would have shown buttons tha...

KamoΒ·2w ago
FeatureVOIPService

Decrypt the KamoPBX credential; test the refusal path

The master credential is stored as ciphertext by the platform settings UI, so it must be decrypted before use β€” handing ciphertext to the API as a password woul...

KamoΒ·2w ago
FeatureVOIPService

Read KamoPBX platform config from the database

Adding a KamoPBX phone server failed with a raw Kubernetes DNS error β€” 'I/O error on PUT ... **************** β€” shown to an organization admin who can neither r...

KamoΒ·2w ago
FeatureVOIPService

Provision a KamoPBX account when a phone server is created

Adding a KamoPBX phone server now creates the underlying account and writes the account id and realm back to configJson. Any configJson the client sent is DISCA...

KamoΒ·2w ago
FeatureVOIPService

Implement the KamoPBX provider

Replaces the stub. KamoPBX is Kamo's own platform, so the organization holds no credential at all: KamoPBXAccountProvisioner creates the account when a phone se...

KamoΒ·2w ago
FixVOIPService

A recording whose bytes are gone answers 410, not 500

Same split as the imaging proxy and the docs download. A call recording that is not in storage is permanently not there, and a player handed a 500 shows nothing...

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