An access policy and its lists are one write, and tenants never see a Kamo service's in-cluster address
SP98 Task 1 A-7 and A-8. - A-7: AccessPolicyWriter saves the policy and replaces its lists in one transaction, retried whole on a Yugabyte conflict (@RetryOnD...
One verification run per provider across both pods
SP98 Task 1 A-6. A provider's verification (up to 200 probes on the tenant's key) holds a Redis lease, SET NX with a 10-minute TTL renewed before every probe an...
Feedback only under its own conversation, no folder cycles, logged and key-free failures, and a visitor's conversation searches the public knowledge base
SP98 Task 1 (A-1 to A-5, and the controller's knowledge-audience addition): - A-1: rating a message answers 404 unless the message belongs to the {guid} conve...
SP96 DDL for members.sex, pinned by a contract test
A member's sex is a nullable VARCHAR(16) (FEMALE | MALE, NULL = not specified), hand-applied in SP96 Task 3. The contract test keeps the file re-runnable, with ...
SP96 member sex and stable AI voices — spec, plan, ledger, PROGRESS row, master §11 row
LUNA GPT-6 fix rulings — reasoning_effort none, tool-bearing chat turns require TOOL_CALLING
A reworded GPT-6 tool refusal is warned once, and a full effort memory forgets the oldest
Review follow-ups for the reasoning_effort none fix: - A 400/422 that names reasoning_effort and tools but is not the refusal ToolEffortFallback reads logs on...
SP98-T18 ship rulings — /notes keys beside a chat box, and the live look
SP14 Task 31 verification — rulings SP14-T31a–c and fix1–12, master §11 SP14-T31, §9 item 13 evidence
Media_timeout back to livekit-sip's default
957fc4f re-applied a 20-minute media timeout for a quiet meeting's AI leg. With the fail2ban ban on 47.181.8.84 lifted and FreePBX sending RTP straight over the...
A quiet meeting keeps its AI (media_timeout 20m), again
Reapplies 960331f, reverted in 5d70873 on the wrong suspicion: the RTP loss seen right after that deploy was fail2ban's ban on 47.181.8.84 (fixed in the previou...
Livekit-sip's RTP never takes the router, and its hairpin is never banned
FreePBX names its public address (pbx.k1.kluster.kamocrm.com) in the SDP and the Contact it gives livekit-sip, which is outside local_net, so RTP and in-dialog ...
A chat box or tool window no longer takes the wall's keys (SP98 T18)
/notes treated any role="dialog" as a modal, so while the owner's Exec2Exec chat box (or any chat box or tool window, a floating note among them) was open, N, C...
A chat turn that offers tools requires TOOL_CALLING, and a failed probe clears supports_tool_use
Member chat and the public widget routed TEXT_GENERATION only and attached tools afterwards, so gpt-6-luna (TOOL_CALLING FAILED) took every tool-bearing - The ...
A GPT-6 tool call is asked once more at reasoning_effort none, and the model is learned
reasoning_effort "none" and refuse the default effort they apply when none is sent, so every TOOL_CALLING probe and agent step on gpt-6-luna/sol failed. - Reas...
SP98-T19 rulings — deep-link stash, live voicemail, old SMS conversations, signature picker names
Name the image pickers' Scale sliders too (SP98-Q-1)
The harness's axe pass over the image pickers found the Scale slider beside each select unnamed the same way (axe label, critical). Its caption now names it.
Name the image source selects (SP98-Q-1)
The Image Source select's floating label was tied to nothing, so each of the two pickers was an unnamed combobox (axe aria-input-field-name). The label now name...
Open SMS and voicemail links that arrive signed out (SP98-Q-2)
?openSms= and ?openVoicemail= now go into the pre-sign-in stash (@kamo/tool-core 0.1.7 carries them), and the bootstrap opens them from it after the bounce, as ...
The voicemail list updates live (SP98-Q-3)
Nothing in the browser subscribed to /topic/voip/voicemail/<member>, where MediaService relays VOIPService's new-voicemail frame, so the card arrived and the li...
Name a card's conversation past the newest 300 (SP98-Q-4)
A window opened from an SMS card by conversation id looked its number up in the newest 300 conversations, so an older one opened under a blank header. When that...
A recording's action item is never due before its meeting
Live (SP14 Task 31, Step 9), a recording made on 2026-09-28 said 'by October second' and the model wrote 'due 2024-10-02' into the summary emailed to the partic...
Silence is never sent to the speech service, and no chunk reaches 30 s
Kamo Speech (Speaches) answers 500 'No clip timestamps found' for a chunk of 30 s or more in which its VAD finds no speech (faster-whisper's no-VAD path refuses...
SP98 T7 ship ruling — the invitation disclosure checked live as Ava Minutes through the Tool Plane
The persona Quick Tip describes the charter and the on/off switch, not publishing (SP98 T17)
The AI Sales Agent Setup tab's Quick Tips still said to publish an agent and that publishing saves a copy. Personas have no saved copies: the charter is saved a...
The persona Quick Tip describes the charter and the on/off switch, not publishing (SP98 T17)
The AI Sales Agent Setup tab's Quick Tips still said to publish an agent and that publishing saves a copy. Personas have no saved copies: the charter is saved a...
A stored recording is transcribed, under the id it was saved with
MeetingRecording.id is @GeneratedValue, so save() of the entity whose id ingest had set by hand merged it and the row got an id of its own. The pipeline was han...
The KamoMail domain check reads once a minute, and rows off an org's domains leave every list
SP99-T1-f, finished (SP98 Task 8). SP99's final review already refuses a KamoMail binding whose address is not on a domain the organization holds (95c58af); thi...
Tasks, notes and calendar polish (SP98 T18)
- /notes: a new note or checklist made from My tasks brings the wall back (P-1) - Checklist rows leave out the assignee when it is the viewer (P-2) - Lead Tasks...
SP98 T24 rulings — Kamo IndicTrans engine, its quality and sizing, en->ta routing, ship order
Send en->ta to Kamo IndicTrans, and log which engine answered
No provider claimed en->ta (LibreTranslate lists no Tamil, Bergamot serves German only), so the router returned the English source for every Tamil request, and ...
An English-to-Tamil engine, so Tamil stops being English
LibreTranslate lists no Tamil and Bergamot serves German only, so every en->ta request (the dictionary sync, Help Center articles, chat) matched no provider and...
The heap fits the container, so a meeting is never OOMKilled
The image starts java -Xmx${JIGASI_MAX_MEMORY:-3072m} and the container was limited to 1Gi: the heap could outgrow the container, and Jigasi was OOMKilled mid-m...
Permanent forwards expire from the browser cache after an hour instead of never
From 2026-09-23 to 09-27 the kamouniverse-to-kamocrm redirectRegex 301'd kamouniverse.com to www.kamocrm.com. Traefik sends such a redirect with no Cache-Contro...
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.
