A transcript download answers 409 NOT_READY while the transcript is still being written
M7's errors are M6's plus INVALID_FORMAT (spec 4.4.1). A PENDING or TRANSCRIBING transcript answered 200 with an empty body for vtt and txt; it now answers 409 ...
AA text colours and named progress bars on the Computers and Capacity tabs
The state chip's "Ready" was --commerce-success as text (2.2:1) and the error text --commerce-error (3.8:1); they now use the AA colours the AI workstation pane...
Register with FreePBX under the names the image reads; one owner; health probes; host-only ingress
The roster, participants, history and send survive a database conflict too
Completes 279a389. After it shipped, production logged the same YugabyteDB 40001 "Restart read required" on Exec2Exec's roster (09-27 16:00Z, and three times ea...
Filter approval changes before the org-change debounce (SP10)
useOrgChanges coalesces a burst and hands onChange only its last frame, so testing isApprovalChange on that frame lost an APPROVAL followed within 400 ms by the...
Place the KamoAI voice cron keys clear of SP05's and SP10's
SP05's Tool Plane jobs add their cron fields after leadLedgerReconcileCron and their ConfigMap entries after kamoai-hire-steps, and SP10's tick adds its field a...
One recording subroutine; file names keep the call's UNIQUEID; AMI reads call events
[kamo-record] now does the recording for every path: the trunk and voicemail predial hooks here call it, and so will the attendant, direct, agent, internal and ...
A message that did not go stays in the box and says why
A failed send was swallowed in useChatConversation.onSend ("matching the old ChatBox"). The core removed the optimistic bubble, the Composer took the resolved p...
A conversation loads and a message sends on the first try
Chat has been failing in two ways a member notices at once: opening a conversation showed "Couldn't load messages" until Retry was pressed, and a sent message s...
A meeting invite answers with a summary, not the entity graph
Sending or updating a meeting invite answered with the CalendarEvent entity. Its attendees point back at their event, so Jackson recursed until the stack overfl...
A deleted task takes back its comment notifications too
Deleting a task (or clearing done tasks, or deleting their list) withdrew only its TASK_ASSIGNED and TASK_DUE notices. Every TASK_COMMENTED about it stayed in i...
A composer's meeting invite goes into the organizer's own calendar
MeetingInviteController handed MeetingInviteService.sendInvite the session's member id in the user-id slot, and sendInvite looked the calendar up with findByUse...
Caption a producer's button from the whole dictionary, not as its key path
KBService's task notifications name their button with the full dictionary path **************** (SP06 spec 4.11). The deck and the notification centre read prod...
A dry run through the web proxy stays a dry run
The /api/email/** proxy builds its own headers for the hop to EmailService and relayed only Range, so X-Kamo-Dry-Run never arrived: a member's dry run of a send...
The media.* host no longer reaches MediaService's server-to-server endpoints
The media-route IngressRoute sends every path on a media.* host straight to MediaService, past the API gateway, so the gateway's carve-outs (master spec section...
A composer names its last draft only through the mailbox that holds it
The composer kept the last saved draft as {folder, uid} and sent it as replacesDraft with whatever mailboxId the From was on at the time. EmailService expunges ...
A signature's icons do not put a paperclip on the message
"kamo Marketing teaser" listed with a paperclip and opened with nothing to download. It has no file: the two parts it carries are the 14px phone and email icons...
Hugging Face chat sends the tools and returns the tool calls
message.tool_calls, but HuggingFaceAdapter sent no tools (so tool_choice was dropped too) and never read tool_calls. Every HUGGINGFACE model therefore failed th...
A create Arive refused offers Resend at once, with Arive's reason
When the Create Loan Zap reports loan_create_failed the server keeps Arive's reason as the link's error and clears its pending clock. The header no longer spins...
A loan Kamo creates now links, and a refused one says why on the lead
Ian's Create Loan reached Arive, was refused inside the Zap, and Kamo never knew: Zapier had already answered 200, and Arive fires no new_loan for a loan made t...
The boot backfill counts row-less-by-design models apart
Every AIService start logged 'capability rows written for 21 model(s)' though completions models no capability Kamo uses (ruling SP01-T21), so they stay row-les...
Send Arive the language CODE, not its name — every Create Loan was refused
Arive's Zapier field shows language names but its API takes ISO 639-2 codes (chi, eng, kor, spa, tgl, vie; zxx for Other). Kamo sent "English", so Arive answere...
A model list anyone can read no longer passes a wrong key
The Hugging Face router and OpenRouter answer GET /v1/models with 200 for no key and for a wrong key, so Test connection read OK and sync reconciled 140 models ...
A hire-step owner answering 401 has not shipped yet, so the step waits
VOIPService and ComputeService answer any path they do not serve from their session layer with 401, so Ava's EXTENSION and WORKSTATION steps went FAILED before ...
Auto routing never picks a row-less model the catalogue says Kamo cannot call
The legacy router let a model with no capability rows through on the name rule legacy-completions *-instruct) get no rows by design, and their names pass the A...
An AI session or the System User holds no platform right in AIService
Master §11 'SP02 final fixes': a session whose intelligenceType is ARTIFICIAL resolves no platform right by any route (owner flag, god window, administrator row...
An AI member never founds an organization
The second door to IMPORTANT-1 of the SP02 final review. POST /api/security/organizations needs no right for a standalone organization: any signed-in user may c...
A calendar message's plain-text part says what its HTML says
The text/plain alternative of every calendar message was "You've been invited to: " + subject, so an instance cancellation read "You've been invited to: Cancell...
The member rights tab never offers to make an AI member an owner
SecurityService now answers 400 AI_NOT_OWNER when PATCH **************** sets isOrganizationOwner on an ARTIFICIAL member (SP02 final fix). The Organization Own...
Security-model writes require CONFIGURE_SYSTEM
Closes the SP02 final review's IMPORTANT-2. POST /api/security/models, PUT and DELETE /api/security/models/{id} and PUT /api/security/master-model only resolved...
An AI member is never an owner or a platform operator
Closes the door around the AI never-grantable floor that the SP02 final review found (IMPORTANT-1). Platform rights and the owner flag are not RoleRightTypes, s...
An AI member is never promoted to organization owner
**************** refuses isOrganizationOwner=true for an ARTIFICIAL target. The owner flag grants every platform right in the top-level organization and opens o...
Let the WebDAV verbs through Spring Security's firewall
StrictHttpFirewall admits only GET, HEAD, POST, PUT, PATCH, DELETE and OPTIONS, and answered every PROPFIND, PROPPATCH, REPORT, MKCOL and MKCALENDAR to /dav/** ...
The Repeat field says what a series save does; no repeat for a lead callback
The repeat now follows a move of the start's date, as the calendar service moves a series: a weekly repeat's days move with it, and an existing series' end date...
A moved series keeps its days, its end and its exceptions; a lead callback never repeats
A whole-series move (ALL, or THIS_AND_FOLLOWING) now carries the rule with it (spec D-9): UNTIL moves by the same local step, so the last instance stays; a week...
Family calls speak HTTP/1.1 on cleartext, never an h2c upgrade
The JDK client defaults to HTTP/2 and sends "Upgrade: h2c" with the first request to an http:// host. uvicorn (httptools) refuses the upgrade and drops the requ...
Size the reranker's TEI thread pools to its 1-CPU limit
The reranker runs embedding-model's TEI 1.9.4 under the same 1-CPU limit, so it takes the same sizing (KamoAI SP00 final review I-1): one tokenization worker, a...
Member initials in the ink that reads on their fill, and My tasks' scope toggle at 4.5:1
axe on the SP06 task screens (drawer, My tasks, lead Tasks tab) found white initials on memberColor's 55%-lightness fills at 2:1 (cyan) and 4.1:1 (magenta) - wh...
The Repeat field wears the event dialog's field style
The Repeat select, the interval and unit fields and the end date and count fields were stock MUI outlined fields (16px on white, square) inside a dialog whose e...
Record live kontak.kamocrm.com, desktop-1 sizing and the Docs host list
A .forgejo/ change makes the next deploy a full reconcile, which applies every manifest over live state. Four had drifted from live by hand or by another repo's...
CalDAV reads are authorised, bodies are generated, and a phone's PUT is parsed
Calendars are listed as calendar collections of events, resources are named by the UID their calendar-data states (encoded in hrefs), writes pass the read gate,...
The email.* host no longer reaches EmailService's server-to-server endpoints
The email-route IngressRoute sends every path on an email.* host straight to EmailService, past the API gateway, so the gateway's carve-outs (master spec sectio...
A verification resend that names its account goes to the account's own org
An organization with no domain has no register host of its own, so its members land on register.<platform apex>, whose host names the platform. The resend endpo...
An organization with no domain still sends its letters
A domain is optional when an organization is created, but every transactional letter such an org sent threw "has no domains; cannot build NoReply from-address" ...
Ics import and export work — rows in, rows out, series included
Import upserts each UID group (master, canonical rule, EXDATEs, edited and cancelled instances) with no reminders and no invitations; E11 reports {created, upda...
Size every TEI thread pool to the 1-CPU limit, and let probes outlast a batch
TEI 1.5's ONNX backend starts one inference thread per physical host core (24 on k1m1) and reads no thread setting, so under the pod's 1-CPU quota the CFS throt...
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.
