Live Change Log

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

17,848
Total Changes
4,568
Features
4,508
Fixes
32
Projects
Filter by project
All Projects17,848AIService110APIService138BillingService132ConversionService85DaemonService107DocsService189ESigService78EmailService347InitializerService299KBService73KlusterServices539MCPGatewayService43MediaService459RAGService61SecurityService1,515TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,548kamo-login318kamo-marketing580kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,320kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI522Chore670Docs226Feature4,568Fix4,508Other6,781Performance136Refactor273Revert23Style48Test68Upgrade1
September 7, 2026
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
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
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
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
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
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
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
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
September 3, 2026
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
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
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
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
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
FixVOIPService

The extension sweep no longer erases every member assignment

MemberVoipConfigController.put writes an assignment to two places - MEMBER_VOIP_CONFIG and **************** - and **************** then cleared the second on it...

KamoΒ·2w ago
August 26, 2026
FixVOIPService

Give the text-conversations coder a tiebreaker so tied timestamps aren't dropped

lastActivityAt, so a conversation sharing that exact timestamp was excluded from the lost from the list permanently, not just misordered. Reachable in practice ...

KamoΒ·2w ago
FixVOIPService

Gate the voicemail nav count on VIEW_VOICEMAIL

**************** handed any authenticated member holding a MemberVoipConfig row the instance-wide unread-voicemail count with no rights check at all, even thoug...

KamoΒ·2w ago
August 23, 2026
FixVOIPService

Stop RingCentral OAuth signing white-label tenants out

Two faults, both on the same hop, and each one hides the other. RingCentral rejects every scope value this app can ask for β€” "invalid_request / Parameter [scop...

KamoΒ·2w ago
August 16, 2026
FixVOIPService

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
FixVOIPService

Working with voicemail takes a right, not just handling PHI

VoipVoicemailController required VIEW_CALL_LOGS on exactly one path β€” playback, and only when the organization handles PHI. Listing voicemails with their transc...

KamoΒ·3w ago
August 5, 2026
FixVOIPService

Isolate call ingest per row and link only after it commits

Two faults with one root: ingest participated in the sweep's transaction. A throw inside a participating transaction marks the SHARED transaction rollback-only...

KamoΒ·1mo ago
FixVOIPService

Skip soft-deleted extensions in the call-history sweep

syncExtensions soft-deletes by flipping status to UNKNOWN rather than removing the row, so the list accumulates every extension an instance has ever had. Each o...

KamoΒ·1mo ago
FixVOIPService

Close a cross-mailbox hole and six more Teams defects

Adversarial review of 6df0008 confirmed 24 findings. The important ones: CRITICAL β€” any member could delete a colleague's mail. Teams voicemail ids were compos...

KamoΒ·1mo ago
August 3, 2026
FixVOIPService

Scan the shared MFA repositories

MfaEnrollmentService is a @Service in kamo-shared-library, so the wildcard @ComponentScan("com.kamo") in this application constructs it whether or not this serv...

KamoΒ·1mo ago
FixVOIPService

Harden the kubectl download against flaky egress [skip ci]

dl.k8s.io over the runner's egress intermittently drops mid-transfer: curl: (56) OpenSSL SSL_read: decryption failed or bad record mac which fails the deploy ...

KamoΒ·1mo ago
July 22, 2026
FixVOIPService

Stop pinning the expired wildcard-kamocrm-com secret

wildcard-kamocrm-com was a legacy multi-SAN secret that cert-manager orphaned when its Certificate was repointed at a per-host secret. Nothing renewed it and it...

KamoΒ·1mo ago
July 11, 2026
FixVOIPService

Guard /internal/voip with InternalAuthFilter as documented β€” it 401'd on session auth

VoipInternalSyncController always documented InternalAuthFilter as its guard, but /internal/voip was never in PROTECTED_PREFIXES nor excluded from the OTK sessi...

KamoΒ·2mo ago
July 8, 2026
FixVOIPService

Constant-time internal-auth secret compare (timing oracle)

Replace String.equals with MessageDigest.isEqual so response latency cannot leak the X-Internal-Auth shared secret byte-by-byte. Fleet-wide sweep of the copy-pa...

KamoΒ·2mo ago
July 7, 2026
FixVOIPService

Return 200 allFalse for unconfigured org capabilities

GET /api/voip/capabilities threw ProviderNotConfiguredException (422) when an org had no phone provider, logging a red console error on every page load for phon...

KamoΒ·2mo ago
July 3, 2026
FixVOIPService

Exclude /api/voip/sms/templates from OTK session filter

The doc-07 SMS template endpoints are session-less internal calls guarded by InternalAuthFilter (X-Internal-Auth), but OTKValidationFilter still ran on them and...

SageΒ·2mo ago
July 2, 2026
FixVOIPService

Implement POST /api/bulktext/send internal transactional SMS

SecurityService's BulkTextSmsClient (password-recovery + account-settings SMS) has always POSTed **************** to /api/bulktext/send, but the controller was ...

SageΒ·2mo ago
April 29, 2026
FixVOIPService

Build recording MinIO object key like imaging stream

Omit the extension when FILE_EXT is null/empty so the object name matches RecordingImagingService and ImagingController. Java string concat with null produced {...

KamoΒ·4mo ago
FixVOIPService

Resolve call history extension from member_voip_config, not phone_extension

**************** was NULL for some extensions even when member_voip_config correctly mapped the member to their extension. Using member_voip_config (same source...

KamoΒ·4mo ago
FixVOIPService

Surface imaging fallback when provider has no call history

KamoPBXProvider.getCallHistory now returns null instead of throwing **************** so the 501 response no longer bypasses the imaging fallback. The provider c...

KamoΒ·4mo ago
April 28, 2026
FixVOIPService

Resolve member→extension before VM/CDR provider lookup

CallController was passing memberId where FreePBX (and other PBX-style providers) expect an extension number β€” voicemail listing returned empty because no PBX e...

KamoΒ·4mo ago
April 27, 2026
FixVOIPService

Capture newExtNumber as final for lambda capture in MemberVoipConfigController

newExtNumber is conditionally reassigned inside the if (isVoipEnabled && ...) block, which makes it not effectively final. The TeamMember sync block reads it fr...

KamoΒ·4mo ago
April 26, 2026
FixVOIPService

Don't wipe member assignment on sync from providers that lack metadata

**************** unconditionally overwrote PhoneExtension.assignedMemberId with whatever the provider returned. FreePBX (and any provider that doesn't track whi...

KamoΒ·4mo ago
FixVOIPService

Use extensionId as external ID, not Relay node id

FreePBX returns the same Relay id (ZXh0ZW5zaW9uOg== = "extension:") for every extension because the id field is not populated. Using it caused all extensions to...

KamoΒ·4mo ago
FixVOIPService

Rewrite all GQL queries/mutations against live schema introspection

Verified every field name and type against the actual FreePBX 17 schema. Full set of corrections: Queries: - fetchAllExtensions: remove non-existent 'voicemail...

KamoΒ·4mo ago
FixVOIPService

Correct GraphQL field name to fetchAsteriskDetails

FreePBX API returns "Did you mean fetchAsteriskDetails?" β€” rename the health check query and its data path accessor accordingly.

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