A post or note is edited, liked and deleted by its own id
Every item of a feed (the Clubhouse, a lead's or a pipeline record's notes) carries its stream's guid, so PostCard's edit, like and delete went to /posts/<strea...
Add Lead goes to the list when its creator may not open the new lead
A lead created with "Auto Assign / Unassigned" joins the assignment pool, owned by nobody, and the lead page refuses a member without VIEW_UNASSIGNED_LEADS on a...
Guard ampersands for every spelling of Spanish, keyed on the resolved language
guardAmpersands compared the caller's raw targetLang with {"es"}, so "ES", "es-419" or "es_MX" reached the same en->es model without the guard and came back wit...
Phone OAuth hops return the platform's members to internal.kamouniverse.com
kamouniverse.com is the platform's primary apex (kamo-shared-library 0e8cf90f). Sign-in ranks it first for the platform organization, the one organization holdi...
The bridge dials the room Meet uses; an AI joins a future meeting at its start; an AI that heard nobody is dialled again
- The dial-in resolver (I1), KM2's roomName and M1's join.roomName name the room Meet uses (the Kamo Meet provider's own room, else the typed name cleaned the...
OAuth return URLs accept both platform consoles; webinar cancel links keep the page that exists
kamouniverse.com is now the platform's primary apex (kamo-shared-library 0e8cf90f): OrgLinkHosts falls back to it, and ROOT_PREFERENCE makes it the platform org...
Edit, like and delete one post or note by its own id, never the whole stream
A feed, the organization's (the Clubhouse) or a lead's notes, is ONE POST session and every post or note is a message in it, so every item the feed lists carrie...
Never ban k3m1 — its node network joins the fail2ban allowlist
FreePBX runs with hostNetwork on k1m1. A pod on k3m1 reaches it SNATed to k3m1's InternalIP, 10.0.50.1, which none of the [DEFAULT] ignoreip ranges covered (the...
A lone call waits five minutes for company, not thirty seconds
Jigasi hangs up a call that nobody else joins within JIGASI_JVB_TIMEOUT (the image's default 30 s): Jicofo invites a participant only once there are two. An AI ...
SPF advice recognises kamouniverse.com; the brand's aliases are reserved on both apexes
SPF: kamouniverse.com publishes the same record as spf.kamocrm.com (v=spf1 ip4:47.181.8.84 mx -all), so a customer who wrote include:kamouniverse.com has alread...
Platform fallbacks name the primary apex, not a kamocrm.com literal
Four places kept their own "kamocrm.com" literal as the platform host they fall back to, so they could never follow the brand to kamouniverse.com. Each now read...
A quote's letterhead falls back to the primary platform apex
QuoteMapper kept its own "kamocrm.com" literal as the theme host of last resort, so a quote for an organization with no live domain still named the old brand's ...
Send Careers and the LLM registration link to kamouniverse.com
kamouniverse.com is now the platform's primary apex. Two links on the legacy www.kamocrm.com site that send visitors into the platform, and carry nothing tied t...
Read JustCall voicemail with INCOMING_VOICEMAIL, and file each under its agent
JustCall answers call_type=VOICEMAIL with 400 ("call_type must be one of ... INCOMING_VOICEMAIL"), so not one of the 241 voicemails on the JustCall account ever...
Docs trusts api.kamouniverse.com as a WOPI host
A member signed in on internal.kamouniverse.com (the platform's primary apex since 2026-09-28) opens documents with **************** DocsService takes the last ...
Docs trusts api.kamouniverse.com and serves docs.kamouniverse.com
A member signed in on internal.kamouniverse.com (the platform's primary apex since 2026-09-28) opens a document with **************** because DocumentController...
Kamouniverse.com refuses unknown recipients at RCPT instead of bouncing them
kamouniverse.com, the platform's primary apex, is an alias domain of kamocrm.com: every <x>@kamouniverse.com is the <x>@kamocrm.com mailbox. It was mapped by a ...
The desktop-ws route reaches only the terminal socket, not every SecurityService path
**************** matched PathPrefix(`/desktop-ws`) on internal.* and stripped the prefix, so **************** reached ANY SecurityService path from the internet...
KamoMail binds only an address on a domain the organization holds; the provider needs its right
The cross-tenant read path parked as SP99-T1-f. A self-registered organization could point its provider at its own IceWarp or Exchange (PUT /api/email/provider ...
One organization can no longer take another's <alias>.kamocrm.com routing
Any member of an organization with no root could add the root victim.kamocrm.com (POST /api/security/domains checked no right). Listing the domains then self-he...
A lead's notes stream, addressed by its guid, keeps the lead's own read rule
Every note on a lead now sends the lead stream's guid on /topic/media/feed/<orgId> (SP99-T3), which any member of the organization may subscribe to. The guid-ad...
A caller an AI member transfers rings the person from its own channel
FreePBX sends every blind transfer to its global TRANSFER_CONTEXT, from-internal-xfer-dest, which dials the target through a Local channel. A Local channel take...
A new commit log is translated at once, not behind the sweep's backlog
The first translation of a commit log and the sweep's retries shared one three-thread executor, first come first served. With the SP99 T6 repair's 326 commit lo...
An AI extension's AOR block adds to the AOR, not to the endpoint of the same name
FreePBX names an extension's endpoint and its AOR alike, and pjsip.conf includes pjsip.endpoint.conf before pjsip.aor.conf. A bare [7900](+) in pjsip.aor_custom...
The translation recount is the first statement of its own transaction
A locale save was an upsert and then a recount that reads the commit log's rows, in one transaction. Yugabyte restarts a read transparently only when it is the ...
A lead's Notes tab goes live — the feed listens on the shared media socket
The Hot Reassign ship check showed a note reaching the lead's All tab live but not its Notes tab. MediaStream (a lead's Notes, a pipeline record's notes, the Cl...
A lead's Notes tab goes live — the feed listens on the shared media socket
The Hot Reassign ship check showed a note reaching the lead's All tab live but not its Notes tab. MediaStream (a lead's Notes, a pipeline record's notes, the Cl...
One pod at a time translates a commit log, and a finished one is not redone
Both SecurityService pods run the translation sweep: its lock lasts only as long as the dispatch. Each took up the same 50 commit logs, and a pod's in-flight se...
Say what a VoIP API key can do
The FreePBX helper's uploads key now also rings members' mobiles (only on this organization's phone servers) and already pulled the managed dial plan; the API M...
Say what a VoIP API key can do
The FreePBX helper's uploads key now also rings members' mobiles (only on this organization's phone servers) and already pulled the managed dial plan; the API M...
A PBX ring event rings only members of the key's own org
APIService vouches for the API key's org in X-Org-Id and takes the phone server id from a header the key holder writes. The ring seam ignored the org, so any ke...
The FreePBX helper's one key rings a phone
kamo-asterisk-support holds a single API key, documented and issued as a VOIP_RECORDING_UPLOADS key, and sends its ring events with it. The ring endpoint accept...
Cap llama-server's prompt cache below the memory limit, so it stops being OOMKilled
llama-server's host-RAM prompt cache defaults to 8192 MiB (--cache-ram), the container's whole limit, so it grew until the kernel killed ollama: on 2026-09-28 i...
The workstation probe shows its results and ends
Run live against an awake AI workstation, the probe printed the descriptor and then nothing: kubectl debug -i (1.36) returned as soon as it had sent the probe t...
A Watch waits out the wake the server announced
An AI workstation's wake is now estimated at 600 seconds (one resume took 9 min 19 s), and the launch tab's ring counts that down, but the tab still gave up at ...
A lead that was ever assigned or opened can be deleted
LeadService.deleteLead cleared only lead_custom_form_data before deleting the row, and six other tables carry a foreign key onto leads(uid). Every assignment wr...
The meet bridge writes the dial status at hangup, so answered calls record it
Once Jigasi answers, Dial never returns (no 'g' option): either side hanging up ends the channel, so the **************** after Dial ran only for calls that wer...
A call joins its room as jigasi@auth.meet.Meet, not anonymously; config changes restart it
Each call joins its room over its own XMPP login. Without ENABLE_AUTH the image makes that login ANONYMOUS on meet.Meet, which Prosody's JWT host refuses ("SASL...
Probe the XMPP session, not /about/health, which a SIP gateway answers 500
Jigasi 1.1.369's Health.check throws "GW not ready." whenever it has a SIP gateway and no HEALTH_CHECK_SIP_URI, registered or not, so the health probes restarte...
A re-translation no longer deletes the translation it replaces
Since 1f715e4 (2026-09-23) saveLocaleTranslation loaded the locale's row to decide whether the count moved, bulk-deleted it and saved a new one. The load left t...
Indexing a listed page can no longer fail the listing
recordSyncedPage was @Transactional and caught every exception of its own. The index repositories join the caller's transaction, so a write that met a concurren...
The viewer's theme host is read before the transaction, never inside it
The Exec2Exec roster, its participant list and every conversation's faces read the viewer's organization's domains lazily, as a late statement of a read-only tr...
A streamed member turn retries once without an optional parameter the provider refused
Member chat streams through the adapter itself, outside ProviderCallExecutor, so it had no ParameterFallback. Since SP99-T12 every Hugging Face stream asks for ...
Store inbound RingCentral texts, and stop re-registering live JustCall webhooks
RingCentral: the SMS subscription was the bare /message-store filter, whose notifications are a change summary with no message in it, and the reader looked for ...
A team member is equal to another only when their ids are (SP10)
SP10 T47, live: MediaService answered "one or more memberIds not found" to a group chat of the owner and two AI members. Lombok's @EqualsAndHashCode(callSuper =...
Publish routes another stream's subject instead of pinning ours; lead notes reach the feed after commit
**************** asserted expectedStream(<own stream>) on every subject, so a subject another stream captures was refused with "expected stream does not match [...
Keep the OTK route's CRLF line endings
The previous commit rewrote them; only its one comment line changes. SP99-T10.
Keep ampersands out of LibreTranslate's en->es model, which quotes or truncates them
Moving en->es to LibreTranslate (27888ca) exposed a fault in its model: a spaced ampersand comes back as a double quote ("Billing & Payments" -> 'Billing " Paym...
The streamed member turn runs the member's tools and cites its sources, and a browser can open it
The /ws/ai-chat turn was text only: no Tool Plane tools, no tool loop, no knowledge-base citations, and its handshake took only the raw session id, which kamo-i...
An AI invite settles the caller's authority before it looks at the target
invite() answered 409 NOT_AN_ACTIVE_AI_MEMBER before 403 NOT_ALLOWED_TO_INVITE, so a member who could reach M1 but not invite could tell an active AI's member i...
Like what you see shipping?
All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.
