SP96 MemberSex, Member.sex and a gender on the voice record
members.sex is a nullable STRING column (FEMALE | MALE, null = not specified), so an AI member can speak with a matching voice. The TTS and REALTIME_AUDIO voice...
The platform API host is api.kamouniverse.com
The platform's OAuth apps now hold api.kamouniverse.com redirect URIs. The owner added them to every console (Google, Microsoft Entra, Zoho, RingCentral) and ke...
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 ...
Kamouniverse.com is the platform's primary apex
The brand moved from kamocrm.com to kamouniverse.com, but nothing the platform generates could follow it. Every "which of this org's domains" rule ranked by few...
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...
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 [...
Organizations and plans belong to a KamoUniverse universe
KamoUniverse sells the platform to four audiences - Business, Family, Community, Personal - each on its own plan ladder with packages that fit it (a family gets...
Meeting calls in AI_CALL telemetry — kind, meeting id, REMOVED, meeting events
AiCallKind {PHONE, MEETING} and AI_CALL.KIND / MEETING_ID (SP14 DDL **************** AiCallOutcome.REMOVED, the four meeting event types, and the member+meeting...
Keep the meeting transcript's ciphertext columns out of JSON
**************** has failed on main since f92765b1 added MeetingTranscript: transcriptTextCipher, transcriptVttCipher and summaryCipher had neither @JsonIgnore ...
Transcription runs on Kamo Speech, and PHI audio is routed only to in-cluster services
An AI workstation's take-over and MCP token are written only by their own UPDATEs
control_member_id/_started_at and **************** are now updatable = false, and HostedComputerRepository gains the only writes they get: recordControl, clearC...
AI call telemetry entities
AI_CALL and AI_CALL_EVENT (spec §4.2/§4.3): direction, status, outcome and event-type enums (STRING), the two entities and their repositories. AiCallStatus.LIVE...
Meeting minutes contract — prompt, JSON parse, markdown and HTML rendering
Mirrors kamoai-voice's minutes.py exactly: caps and chunks count code points (no split emoji), Unicode white space is stripped, only JSON arrays are lists, text...
AI voice line and per-server AI voice settings entities; outbound flag on extensions
Number-level AI voice consent ledger with append-only history
The gate also counts the number's newest REVOKED event, so a revocation survives its record moving to another number, a backdated re-grant and a stale whole-row...
Numeric participant member ids, AI participant fields, meeting title and dial-in PIN
Role, department and job-title charter write paths; legacy requirements keep other sections
Pure resolver — suppress/lock, additive, specific, restrictive, goals
Usage metering columns, routing preferences and budget alert ledger
Charter item entities for roles, departments, job titles and members; operating briefs
Item DTO, value type and section validation
Validation returns what the columns will hold (ruling SP03-T5): role refs as UUID.toString(), member/note/market ids as plain longs, at most 4 decimal places fo...
RRULE subset for scheduled responsibilities
The normal form has one spelling per rule (plain decimal numbers, lists without spaces, empty or repeated values), since the stored text feeds the charter stamp...
AI workstation profile, token and take-over columns
HostedComputerProfile {STANDARD, AI_WORKSTATION} (STRING, lenient parse to STANDARD); HostedComputer gains profile, ai_primary, the MCP token triple (cipher @Js...
Arive's loan_create_failed — the Create Loan Zap now reports a refusal
Arive fires no new_loan for a loan created through its API, so the Create Loan Zap's post-back is the only thing that can link the lead, and a refusal inside th...
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...
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...
Retire TASK_CHANGED — lead tasks are tasks and refresh on the checklists channel
The 29 header layouts as Handlebars templates, held to the legacy goldens
Mention rows
MediaObjMsgMention maps media_obj_msg_mentions (composite key obj_id + member_id). deleteByObjId is a derived delete, not a JPQL bulk DELETE, so an edit that ke...
The 29 signature layouts as Handlebars templates, held to the legacy goldens
Grant-all session rights honour member NUKEs and model FORCE rules
An ARTIFICIAL member is refused with the same IllegalStateException, so a caller's fallback applies the supervisor ceiling and never-grantable floor.
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.
