A supervisor's read of an AI member's notes is written to phi_access_log (KamoCollab CP00 T8)
GET /api/notes/members/{memberId}, .../{noteId} and .../{noteId}/versions now record the read after it succeeds, through the shared PhiAccessRecorder: one LIST ...
The team domain — wire, validation, writer, service and the org-graph seam (KamoCollab CP01 T9)
TeamWire reads a team body tri-state (absent / null / value); TeamValidator checks titles, descriptions, timeouts, roles, rights (normalized as a level), staff-...
Build member facts from the org graph, next to the old query path (KamoCollab CP02 T5)
ChatPolicySnapshotLoader gains a constructor taking LongFunction<OrgGraph>. With it, load() maps the organization's graph to MemberFacts through the new MemberF...
Bounded recalculation by member id, and role edits that reach team members (KamoCollab CP01 T7)
**************** recalculates exactly these members: read by id in chunks of 500 (never the organization's members), each chunk through recalcChunk (the TEAM le...
SecurityService's org graph beans, the after-commit change publisher, its listener and the two internal routes (KamoCollab CP02 T7)
OrgGraphBeanConfig declares the loader (a read-only TransactionTemplate of its own, Clock.systemUTC()) and the 60 s OrgGraphCache. OrgGraphChangePublisher colle...
The loader, its eight org-bounded queries, the 60 s cache, the change event, the wire codec and the department head mapping (KamoCollab CP02 T4)
- OrgGraphFactsRepository (donotmodify.dao.repos): eight native queries, each bounded by org_id through an index; users and CP01's team tables are pinned onto...
The TEAM level of the rights and session-timeout waterfalls (KamoCollab CP01 T6)
TeamLevels (pure, not a bean) reads a set of members' teams in four queries whatever their number (one when none is in a team): memberships, the teams, their ro...
Link the AI screens to their help articles by path, and fix the AI settings tips that showed placeholders (SP98 T23)
- /help-center/<path> (app/help-center/[...path]): opens the article in /kb when the reader's own knowledge base holds the help center (the platform organiz...
Link the AI screens to their help articles by path, and fix the AI settings tips that showed placeholders (SP98 T23)
- /help-center/<path> (app/help-center/[...path]): opens the article in /kb when the reader's own knowledge base holds the help center (the platform organiz...
The AI Team area, fifteen KamoAI articles, refreshed AI and notification articles, and links that work on the public site (SP98 T23)
Content (authored, under content/): - New category AI Team (after AI Assistant) with three sections and 15 articles: AI team members explained, hiring, superv...
The AI Team area, fifteen KamoAI articles, refreshed AI and notification articles, and links that work on the public site (SP98 T23)
Content (authored, under content/): - New category AI Team (after AI Assistant) with three sections and 15 articles: AI team members explained, hiring, superv...
Calendar chat lines say they are system lines (KamoCollab CP00 T5)
MediaChatClient.sendDirect now posts "source": "SYSTEM" beside fromMemberId, toMemberId and message: a calendar invitation or cancellation is a notice written i...
Org-graph listeners may subscribe to the org-graph change subject
KamoCollab CP02 Task 6A (master R1-23, CP-D75). SecurityService publishes **************** after every org-graph write; each service that caches the org graph e...
CharterLevel.TEAM, between the job title and the member (KamoCollab CP01 T5)
Appends TEAM to CharterLevel (after DEFAULT; ORG from CP03 comes next, R1-11) and states in its Javadoc that resolution order is CharterLayer.rank, never the de...
Right-table housekeeping covers org_team_rights (KamoCollab CP01 T8)
RoleRightsSyncService names org_team_rights in all three of its lists, so on every boot a frozen CHECK on it is dropped, a row naming a removed right is deleted...
The phone server's outbound policy in Settings: new extensions' outside calls, and the toll-fraud guards (SP93 T14)
The AI voice card on a FreePBX server gains the two SP93 settings VOIPService already stores: whether a brand-new extension starts allowed to dial outside, and ...
The pure org graph core: OrgGraph, its builder, nodes and relationships (KamoCollab CP02 T3)
Package com.kamo.z.shared.org.graph (pure, no beans), per KamoCollab master §6.2 and CP02 spec §5.2-§5.3: - enums OrgRelationship, CounterpartKind, OrgGraphChan...
The team entities, repositories and limits (KamoCollab CP01 T4)
Team (org_teams), TeamMembership (org_team_members, @IdClass Key), TeamRole, TeamRight (type through RoleRightTypeIdConverter) and TeamCharterItem (team_charter...
The hand-applied DDL for department heads and the org-graph load indexes, and its contract test (KamoCollab CP02 T1)
The hand-applied DDL for teams, and its contract test (KamoCollab CP01 T2)
**************** is spec §5.1's block verbatim: org_teams, org_team_members, org_team_roles, org_team_rights (type INT4, unique (team_id, type), master CP-D3) a...
The DDL for media_objs.source, who wrote a chat line (KamoCollab CP00 T1)
A nullable VARCHAR(16) column, re-runnable, with no CHECK and no backfill; NULL reads as MEMBER. Hand-applied by CP00 Task 3. **************** keeps the file ad...
Impersonation and Enter-As write access-log rows (KamoCollab CP00 T9)
Both impersonation doors write IMPERSONATION_STARTED (HIGH) in the target's org with logEventSync after every refusal check and before the session is minted; a ...
The brief names DEPARTMENT_MANAGER as the head of your department (KamoCollab CP02)
DEPARTMENT_MANAGER now routes to the department head (the org graph's departmentManagerCandidates), so the brief says "the head of your department". CharterComp...
MediaObjSource and MediaObj.source, createMessage with a source, findTwoPersonChatSession, and the impersonation/Enter-As access-log events (KamoCollab CP00 T4)
- MediaObjSource {MEMBER, SYSTEM, SERVICE}; MediaObj.source (STRING, column SOURCE, length 16, nullable, no default) and sourceOrMember(), which reads NULL as...
FreePBX voicemail in Settings: the manager-interface fields, shared voicemail boxes, and a player that says why
SP98 Task 15. - The FreePBX form gets the four Asterisk Manager Interface fields voicemail needs (host, port, username, secret). The stored secret is never sh...
Voicemail uploads name their message, and Kamo can ask for one it has no audio of
A voicemail upload now carries the message's own id, <mailbox>/<msg_id> from the msgNNNN.txt Asterisk writes beside it, as its unique id: VOIPService files Free...
Shared voicemail boxes, and FreePBX voicemail audio from the message itself
Shared boxes (SP98-N-2). A mailbox on the PBX that no Kamo extension is (K1M1's 8100, "KamoCRM Main Line") was never synced. The sweep's single AMI session now ...
Phonetic spellings of the company name and short name in Company Info (SP94 T7)
Two optional fields beside Company Name and Short Name, loaded from and saved to PUT /api/security/org/{id} as **************** A blank box is sent as null so a...
E5 speaks the org's name and short name in the phonetic spellings the org set (SP94)
The speech model is sent the caller's input with every whole-word mention of the org's name or short name replaced by its phonetic spelling (OrgPhoneticSpeech)....
Phone_call says plainly when the org's outbound policy blocks a number, and names text or email instead (SP93 T12)
K6 refuses a number the phone server's toll-fraud guards block with 409 BLOCKED_BY_OUTBOUND_POLICY (SP93 T11). phone_call now answers it as its own status, with...
The PBX's managed policy carries the toll-fraud block list (SP93 T7)
/internal/voip/pbx-config answers blockedPatterns, the phone server's guards as Asterisk patterns **************** for kamo-asterisk-support's [kamo-toll-fraud-...
Cap the org's two phonetic name spellings on the settings PUT (SP94 T4)
titlePhonetic and titleShortPhonetic ride PUT /api/security/org/{id} under the same rights as title/titleShort (ownership or CONFIGURE_SYSTEM, never god-mode on...
The outbound gate refuses a number the toll-fraud guards block (SP93 T9)
[kamo-outbound-gate] gains a GotoIf on kamo-asterisk-support's managed [kamo-toll-fraud-blocked] list, between the SP13 AI-transfer line and the Goto onward, an...
The phone server's toll-fraud guards for KamoAI's pre-flight check (SP93 T6)
GET **************** answers {blockInternational, blockPremiumRate, blockHighRiskAreaCodes, blockedPrefixes} for one phone server, read by its id; a server that...
Remove the charter voice catalogue, GET /api/ai/charter/voices (SP96)
The charter no longer pins a voice: an AI member remembers one per speech model, read and chosen at **************** The charter editor's voice picker was the c...
Phonetic spellings of the org's name and short name, for the AI's speech (SP94 T3)
Organization.titlePhonetic / titleShortPhonetic (TITLE_PHONETIC, TITLE_SHORT_PHONETIC, VARCHAR(255), nullable), on patchOrganization's allow-list beside title/t...
Render the toll-fraud block list as [kamo-toll-fraud-blocked] (SP93 T8)
The PBX policy pull now carries blockedPatterns, the Asterisk extension patterns of the phone server's optional toll-fraud guards. Fetch keeps only an underscor...
New extensions start as the phone server's outbound setting says (SP93 T5)
A new extension, a person's or an AI member's line, now starts allowed to dial outside only when its phone server's newExtensionsOutboundAllowed setting is on. ...
The phone server's outbound policy in the AI voice settings (SP93 T4)
GET and PUT **************** carry SP93's five fields: newExtensionsOutboundAllowed, blockInternational, blockPremiumRate, blockHighRiskAreaCodes and blockedPre...
The member voice endpoints, to read and choose an AI member's voice per speech model
SP96 Task 10 (spec §5.5): - GET **************** the router's TTS candidates for the AI (actor AI with the member; never AiCallRuntime.guard, so a paused or r...
A verified request from someone who may approve is the approval: an ON_REQUEST row, the action at once, its outcome on K3b (SP95 T34)
When the charter asks for approval and the AI cites a verified request (onRequestOf), K3 is asked with mode ON_REQUEST, the requester and the reference. An APPR...
Per-phone-server outbound policy and OutboundCallPolicy (SP93 T3)
SP93 Task 3 (spec §5.2, D1, D4-D6): - AiVoiceInstanceSettings gains **************** BLOCK_INTERNATIONAL, BLOCK_PREMIUM_RATE, BLOCK_HIGH_RISK_AREA_CODES (bool...
An AI may cite the request it acts on (onRequestOf), checked by reading it; a run's taint says where it came from (SP95 T31)
Every AI write that may need approval takes the optional onRequestOf (chat:<conversation>/<message>, task:<item>, task:<item>/comment:<id>) on tools/list. The p...
The brief says which company the AI works for, and words a call to a colleague (SP95)
The charter profile SecurityService sends now carries orgName, the org's spoken name (short name, else display name, else legal name; SP95 D15). The brief's ide...
The DDL file for the phone server's outbound policy
SP93 Task 1. Five NOT NULL DEFAULT columns on AI_VOICE_INSTANCE_SETTINGS: **************** BLOCK_INTERNATIONAL, BLOCK_PREMIUM_RATE, BLOCK_HIGH_RISK_AREA_CODES a...
A member's new name reaches their mailbox's display name (SP95 T35)
POST **************** {previous, current} -> {updated}, behind the KamoAI internal secret like provision-mailbox. The mailboxes the member holds as primary whos...
Call colleagues in the charter, the phone server's team line, and "Asked for" on an action someone asked for (SP95 T26)
- Charter: PLACE_INTERNAL_CALL beside PLACE_CALL; APPROVAL holds one item per class (19, ruling SP95-T4-1). - Phone server card: the team line (defaultTransferE...
A rename reaches the member's mailboxes (SP95 T36)
After a committed change of a person's "First Last", SecurityService posts {previous, current} to EmailService's **************** once per membership of the use...
An org that ranks OpenAI transcription first streams STT through it, and every ticket names its session dialect (SP95)
transcription model was dropped as ADAPTER_UNSUPPORTED and every streaming STT ticket went to Kamo Speech on CPU. Each catalogue row now names the session (the ...
Route website contact forms, on the session-creation budget
POST /api/public-chat/contact proxies to MediaService's new contact endpoint through the same site-key, origin and scope checks as every other public-chat call,...
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.
