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...
An impersonating admin may not set the member's status text
PUT /api/media/presence/status accepted a sudo session. It is now refused 403: unlike the heartbeat, which nobody chose to send and is ignored quietly, setting ...
A session type without its own gate takes no messages, and a session is described only to its readers
POST **************** authorized CHAT, SUPPORT_TICKET and SOCIAL and then simply ended, so a POST, SYSTEM_BUG or EXEC2EXEC session fell through every gate: any ...
Another org's agent, topic or AI member is a 400 naming the field
The sales agent and support topic checks threw a bare IllegalArgumentException that nothing caught, so saving one the org does not own answered 500. They, and t...
Close the AI identity edge cases the SP02 review left open
- A never-hired AI relabelled a person no longer keeps ai_state and the pause columns (master 6.1: NULL for a person). They are written only by SQL, so the ...
A lead you may not open takes no status change and no note
PUT /api/security/leads/{id} and POST /api/security/media/posts checked only the lead's organization, so a member without VIEW_UNASSIGNED_LEADS could change the...
An in-cluster model gets the time to read its prompt, inside the walk's budget
kamo-llm reads a prompt at about 110 tokens a second on k3m1 before it writes a word, so an E2 prompt past ~6k tokens spent E2's whole 60 s per-attempt bound (a...
A Hugging Face text stream is metered as the router counted it
HuggingFaceAdapter streamed through the interface's text-only default: every chunk was read for its text and nothing else, so no usage ever reached the executor...
An Ollama model's context is the window the server serves, not the trained one
OllamaDiscovery took model_info.*.context_length from /api/show: the window the model was TRAINED for. The registry listed granite4:tiny-h at 1 048 576 (and qwe...
Read a FreePBX sweep's mailboxes over one manager session
The voicemail sweep runs inside syncInstance's database transaction and asked FreePBX extension by extension, each over a fresh AMI connect and login. A manager...
Basic sign-in asks SecurityService's real credential check
DavAuthFilter posted Basic credentials to **************** which never existed (405), so every username-and-password sign-in from iOS or DAVx5 was answered 401 ...
CalDAV and CardDAV sign in with a username and password, through every sign-in gate
EmailService's DavAuthFilter posted Basic credentials to **************** a route that never existed (405), so since 2026-03-19 no phone (iOS, DAVx5) could add ...
A retired AI's hiring checklist says Retired, not "Everything is set up"
A retire skips every open hire step and adds TASK_HANDOFF, so by the server's count the hire is COMPLETE and the checklist read "Complete — Everything is set up...
The confirmation dialog and the landings' empty state follow a dark theme
ConfirmationDialog was drawn in fixed Tailwind greys: a #1f2937 title, #6b7280 small print, a #f9fafb well and a #f3f4f6 disabled button, so on a dark paper the...
Hosted Computers on the App Shelf, and a pinned band that opens it
The launchpad's sectionsForTool had no case for hostedComputers and fell through a default to an empty list. A parent tool with no sections is dropped from the ...
The rest of the red on a clean install — registry mocks, shared-lib lookup, a typed fetch mock
- ToolDock and MaximizedTabStrip mocked ../registry/tools without windowIcon, which both now call for every window (af879443f), so 36 tests threw on the fir...
Render the dev machine menu hook in a real root, and cover the cloud session row
devMachineSections.test.tsx called useDevMachineSections() bare, outside any render. It worked while useTranslations (mocked) was the hook's only React dependen...
Clear the session cookie on the bare apex, not ".apex"
Logout built the cookie domain as ".kamocrm.com". Tomcat's RFC 6265 cookie processor refuses a leading dot and throws, so logout answered 500 "Logout failed" af...
The DNS page opens on the org's primary domain, not whichever row came first
The domains list comes back in database order. The platform organization has three roots (kamocrm.com, kamouniverse.com, localhost), and each of the last two pa...
A platform apex can't be removed from the DNS page
The platform organization gained kamouniverse.com as a second root domain, and the DNS page then offered "Remove" on kamocrm.com. Deleting it took kamocrm.com a...
Send en->es, en->fr and en->pl to LibreTranslate, not Bergamot's tiny models
Bergamot's enes, enfr and enpl models are student.tiny11 builds decoded with beam-size 1, and they write words that do not exist: the charter message "Ask an ad...
A long workstation wake is asked about less often
An AI workstation's wake took 9 min 19 s against ComputeService's 75 s estimate (SP11 Task 30). Every computer_* call on a waking machine answered WORKSTATION_W...
Read FreePBX voicemail over the Asterisk Manager Interface
FreePBX's API has no voicemail messages: its voicemail module serves mailbox settings only. FreePBXProvider.getVoicemails GET /admin/api/api/rest/voicemail, a r...
A mail domain, and every account on it, belongs to the organization that proved it
The KamoMail server's virtual_domains and virtual_users are shared by every tenant, and nothing stopped one tenant from writing to another's part of them: - PO...
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.
