Live Change Log

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

17,865
Total Changes
4,581
Features
4,512
Fixes
32
Projects
Filter by project
All Projects17,865AIService110APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService348InitializerService299KBService74KlusterServices539MCPGatewayService43MediaService460RAGService61SecurityService1,519TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,553kamo-login318kamo-marketing584kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,320kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI522Chore670Docs226Feature4,581Fix4,512Other6,781Performance136Refactor273Revert23Style48Test68Upgrade1
August 8, 2026
FixKlusterServices

Stop the 60s entrypoint read timeout capping uploads

respondingTimeouts.readTimeout is the deadline for reading a WHOLE request, body included, and Traefik v3 defaults it to 60s where v2 had no limit. That silentl...

Kamo·4w ago
August 7, 2026
FixKlusterServices

Pin the remaining hostPath workloads to the node holding their data

Same fault as embedding-model, found by auditing every hostPath volume in the repo. A hostPath is node-local and nothing replicates it, so an unpinned pod can b...

Kamo·1mo ago
FixKlusterServices

Pin to the node its model weights are actually on

The model is a hostPath under /var/lib/embedding-model on k1m1, and nothing replicates it. When k3m1 joined, the new ReplicaSet's pod was scheduled there and ne...

Kamo·1mo ago
August 5, 2026
FixKlusterServices

Stop the passdb from splitting a mailbox across two maildirs

password_query returned `email as user`, which overwrote the %Lu-lowercased login name with the row's stored casing. user_query then interpolated %n from the re...

Kamo·1mo ago
FixKlusterServices

STUN answered on the wrong node, so kamocrm.com:3478 was dead

coturn is hostNetwork with no nodeSelector, so it was scheduled on k3m1 (public 47.181.8.87). Its own --external-ip, and every client's `stun:kamocrm.com:3478`,...

Kamo·1mo ago
FixKlusterServices

Bridge advertised only private ICE candidates — no meet had media for 35 days

The bridge never completed a single ICE connection in the 35 days this pod has been up (0 successes, 18 terminations). Every conference joined over XMPP fine an...

Kamo·1mo ago
FixKlusterServices

Liveness probe could never pass — cause of 920 restarts in 35 days

Root cause: the liveness probe was `tcpSocket: port 10000`, but Scylla's REST API binds to api_address 127.0.0.1 (its default) while a tcpSocket probe dials the...

Kamo·1mo ago
August 4, 2026
CIKlusterServices

Manage ScyllaDB through deploy-services instead of by hand

scylladb/ held complete manifests but had no deploy step — the comment said it was "deployed MANUALLY after the 16TB drive swap" because the data dir /mnt/backu...

Kamo·1mo ago
FixKlusterServices

Resync drifted manifests with live before enabling full reconciles

Auditing what a full reconcile would apply turned up two manifests that had drifted far enough from the cluster that re-applying them would have caused an outag...

Kamo·1mo ago
RefactorKlusterServices

Rename cluster ratestack-scylla -> kamo-scylla, correct ownership docs

This instance is kamo's: it backs the `kamouniverse` keyspace (read/written by **************** through the scylladb-direct ExternalName) and the `audit` keyspa...

Kamo·1mo ago
ChoreKlusterServices

Scale ratestack MySQL to 0 and suspend its backup job

The ratestack estate has been torn down to free cluster resources for kamocrm. The cluster-services MySQL instance serves ratestack only (kamo and mail each run...

Kamo·1mo ago
August 3, 2026
FixKlusterServices

Stop the avatar-resolver policy blocking every login

This policy took the whole platform's login offline for hours. Cilium enforces egress against the RESOLVED BACKEND, after service DNAT, so the port it matches ...

Kamo·1mo ago
FeatureKlusterServices

Egress containment for the avatar resolver, as a CiliumNetworkPolicy

Reinstates what 8f6c672 reverted, in the only form that actually works here. The earlier attempt failed because a plain NetworkPolicy cannot express this clust...

Kamo·1mo ago
RevertKlusterServices

Drop the avatar-resolver egress policy

Reverts the policy added in 06db7db and patched in 24f76ae. It took SecurityService down for roughly six minutes in production (pod 0/1, Hikari connections dyin...

Kamo·1mo ago
FeatureKlusterServices

Contain egress from the avatar resolver; note the Redis eviction pool

SecurityService now runs a fetcher whose target URL is chosen by an untrusted party — a BIMI record is DNS content published by whoever owns a sending domain, a...

Kamo·1mo ago
July 28, 2026
FixKlusterServices

Master Machine uses VNC (x11vnc), not RDP

KRdp/RDP is incompatible with Guacamole: guacd has no RDP Graphics Pipeline (EGFX) and KRdp is H.264-only, so the connection authenticated but died with GRAPHIC...

Kamo·1mo ago
July 27, 2026
FeatureKlusterServices

Add "Master Machine" (kamo-dev-1) RDP device to Guacamole

Local Kubuntu workstation shares its live Plasma/Wayland session over RDP via KRdp. Adds an idempotent bootstrap SQL connection (192.168.4.46:3389, sage/shared ...

Kamo·1mo ago
July 26, 2026
FixKlusterServices

Pin CockroachDB to v24.2.4 to avoid v24.3 no-license txn throttle

v24.3 (and 24.2.5+) enforce the new CockroachDB Software License; with no license key the cluster throttles to 5 concurrent open transactions cluster-wide. A v2...

Kamo·1mo ago
July 23, 2026
FixKlusterServices

Pin RDP color-depth + reap xrdp sessions so god reuses one desktop

xrdp 0.9.24 keys sessions on <user,bpp> (Policy=Default) and never reaps disconnected ones (KillDisconnected=false, DisconnectedTimeLimit=0). The RDP user is al...

Kamo·1mo ago
July 22, 2026
FixKlusterServices

Stop expired/orphaned secrets shadowing live per-host certs

update_tls_store() rebuilt the TLSStore from a plain Secret listing, bucketed only on name prefix and type, with no check that a Certificate still owned the sec...

Kamo·1mo ago
July 16, 2026
FixKlusterServices

Explicit priority so the OTA updates route wins over the general theme route

Traefik ranks by rule-string length; the general /public/ theme route is longer, so the expo-updates header injection never ran. priority:100000 forces the win.

Kamo·1mo ago
FeatureKlusterServices

Self-hosted expo-updates headers for Mobile Copilot OTA

expo-protocol-version:1 + expo-sfv-version:0 response headers that the expo-updates client requires and static MinIO cannot emit. Longer path prefix wins over t...

Kamo·1mo ago
July 15, 2026
FeatureKlusterServices

Expose AIService /ws/ai-chat via api.* hosts for mobile clients

IngressRoute (priority 100, websecure, ws-upgrade middleware sans compress) routes wss://api.<domain>/ws/ai-chat to kamowsai-service:80 — same pattern as the me...

Kamo·1mo ago
July 14, 2026
FixKlusterServices

Raise guacamole memory 1Gi→2Gi to stop OOM mid-RDP-session

The Tomcat webapp idles near ~800Mi, so a 1Gi ceiling left almost no headroom. Opening an RDP session pushed RSS over 1Gi and the container was OOMKilled (exit ...

Kamo·1mo ago
July 8, 2026
CIKlusterServices

Only deploy components whose config changed; never needlessly reinstall

deploy-services.yml re-applied every service AND reinstalled cluster operators (cert-manager, KubeVirt, CDI — with 600s waits) on every push to main, so a one-l...

Kamo·2mo ago
FixKlusterServices

Move data dir off MinIO FUSE mount to local disk

rspamd's /var/lib/rspamd was hostPath-backed by the rclone FUSE mount of the MinIO shared-files bucket. Every hyperscan recompile / map refresh rewrote files th...

Kamo·2mo ago
FixKlusterServices

/dev/shm 2Gi (headless Chrome needs >=2GB) + 6Gi mem limit

Jibri's 10-config init aborts with '/dev/shm must be at least 2GB' when shm is 512Mi, crash-looping the recorder. Bump the tmpfs to 2Gi and the memory limit to ...

Kamo·2mo ago
OtherKlusterServices

Meet-secrets **************** for jibri recording ingest

Lets jibri finalize.sh authenticate its recording upload to MediaService; matches the cluster *** value MediaService validates against.

Kamo·2mo ago
FeatureKlusterServices

Make whisper-asr independently scalable (HPA, multi-node)

Remove the single-node pin and switch to a per-pod model cache so pods can schedule on any node, and add an HPA (min 1 / max 4, CPU 75%, deliberate scale-up giv...

Kamo·2mo ago
FeatureKlusterServices

Rebrand Guacamole client connection status text to KamoDesktop

Override **************** so the 'Connecting to Guacamole...' screen (and related status) reads KamoDesktop.

Kamo·2mo ago
FixKlusterServices

Correct Guacamole branding manifest version field

Manifest used guacManifestVersion:1.0; the bundled extensions use guacamoleVersion. The wrong field made Guacamole reject the branding extension ('Unable to rea...

Kamo·2mo ago
FeatureKlusterServices

Prosody moderator module, whisper-asr, jibri recording upload

- Meet-prosody: version-control the custom-plugins ConfigMap (captures the existing token_verification no-op override that was created out-of-band) and add ...

Kamo·2mo ago
July 7, 2026
FeatureKlusterServices

Enable Guacamole json-auth SSO + KamoDesktop rebrand

- JSON_SECRET_KEY (optional) on guacamole from the shared desktop-sso secret enables the bundled guacamole-auth-json extension the god-SSO links validate agai...

Kamo·2mo ago
DocsKlusterServices

Design spec for KamoDesktop god SSO icons + Guacamole rebrand

Two god-only nav icons (Linux/Windows) in kamo-internal that open Guacamole in a SecurityService (god-eligible gate), deep-linked straight to each instance. Reb...

Kamo·2mo ago
FixKlusterServices

Move guacd to pod network (MTU fix) + unicast WoL

guacd on hostNetwork (k1m1 eno49 MTU 1500) vs guacamole pod on cilium overlay (MTU 1420): RDP connected but large frames were dropped across the boundary -> 'Gu...

Kamo·2mo ago
FixKlusterServices

Watch the desktop namespace for IngressRoutes

desktop.kamocrm.com IngressRoute lives in the desktop ns, but Traefik's CRD provider only watched **************** — so the route was ignored and requests fell ...

Kamo·2mo ago
FixKlusterServices

Import VM disk as Filesystem, not Block

CDI's block importer crashlooped: 'blockdev: cannot open /dev/cdi-block-volume: Permission denied' — it can't access the raw Longhorn block device. Filesystem v...

Kamo·2mo ago
FixKlusterServices

Correct KubeVirt VM cloud-init field + modernize spec

- cloudInitNoCloud userdata secret field is 'secretRef' (not userDataSecretRef); KubeVirt v1.8.4 pruned the wrong field -> 'must have at least one userdatasou...

Kamo·2mo ago
FeatureKlusterServices

Hardened KubeVirt remote desktop + Guacamole gateway

Adds a full remote-desktop stack, GitOps-applied via the deploy workflow: - KubeVirt + CDI installed at deploy time (pinned-stable release URLs) - desktop-1: K...

Kamo·2mo ago
DocsKlusterServices

Design spec for hardened KubeVirt remote desktop + Guacamole gateway

KubeVirt Kubuntu VM (16Gi/500Gi Longhorn) behind Apache Guacamole HTML5, exposed at desktop.kamocrm.com via Traefik (TLS + rate-limit + IP-ban). Adds LAN Window...

Kamo·2mo ago
FixKlusterServices

Proactively provision browser-only aliases (media.*)

The log-scan discovery mechanism can never bootstrap the `media` alias: it is only ever contacted by the browser over a WebSocket/XHR subresource (SockJS /ws/in...

Kamo·2mo ago
July 3, 2026
July 2, 2026
OtherKlusterServices

Provision R1 MEDIA JetStream stream via idempotent bootstrap Job

Media/lead-feed events (media.feed.*, media.post.*) had no JetStream stream, so publishes returned '503 No Responders Available For Request' (chat.> is covered ...

Kamo·2mo ago
July 1, 2026
OtherKlusterServices

node-config(k1m1-runner): record data.forgejo.org IPv4 pin + capacity=6

Documents the live on-node change: data.forgejo.org is IPv6-only and k1m1 has no IPv6 route, so job containers hung ~133s and actions/checkout failed. Pin its I...

Kamo·2mo ago
June 30, 2026
FixKlusterServices

Correct FPBXCONF heredoc + repoint universe Scylla

- freepbx: the FPBXCONF here-document closing delimiter was indented (8 spaces); bash requires <<WORD delimiters at column 0, so startup.sh died with 'unexpec...

Kamo·2mo ago
DocsKlusterServices

Note ratestack Forgejo :3000 node registry config requirement

ratestack apps pull from the Forgejo registry 192.168.4.22:3000 (plain HTTP, auth required), which must be added to each node's registries.yaml (mirror -> http ...

Kamo·2mo ago
FixKlusterServices

Pin kamo Traefik to k1m1; make auto-cert single-cluster

SSL errors: kamo Traefik is a LoadBalancer with externalIPs 192.168.4.22 (k1m1) + externalTrafficPolicy=Local, so it MUST run on k1m1 — the pod rebalance moved ...

Kamo·2mo ago
OtherKlusterServices

Consolidate klusterservices onto single k1m1+k3m1 cluster

- NATS: standalone single pod pinned k1m1 (drop k2m1 + generic cluster variants) - CockroachDB: pin k1m1, single-node --join - MySQL: single instance moved in f...

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