Changelog
What's new.
Every improvement to the platform, as it ships.
· SecurityService
A new SI member's fields, placement and voice in the configure draft, and K5 GET **************** — fields by the member creation rules (INVALID_FIELD, USERNAME_TAKEN), placement part by part (NOT_FOUND, TITLE_TAKEN with the existing one used, TOO_MANY_TEAMS, MISSING_RIGHT, SUPERVISOR_NOT_ELIGIBLE), the supervisor defaulted to the creator and RIGHTS_CLIPPED_BY_SUPERVISOR, the voice checked through AIService's internal voice options (VOICE_NOT_OFFERED, VOICE_NOT_COMPATIBLE...
· kamo-shared-library
ConsultRouting, whom an SI asks first and by which channel — the role order and mode of each Docstion preference, people only, each once, at most three, team leads by team title (KamoCollab CP13 Task 5)
· kamo-internal
Confidential on mail threads, calls and meetings, and the mail forward's share check — the reading pane, the media player, the call history's row menu and the meeting header each mark their record; a forward names its original (forwardOf) and the composer answers the check with the disclosure notice, Send anyway resending with the acknowledgement (KamoCollab CP05 T37)
· kamo-shared-library
The behavior vocabulary — initiative and persistence bands, review depth and proactive checks, escalation and conflict styles, Docstion preference, the follow-up, stuck-work and confidence policies, the signal rule, and one SI's BehaviorProfile (KamoCollab CP13 Task 4)
Pure types in **************** The Docstion's mode ceiling caps the initiative band (REACTIVE caps at REACTIVE, INDEPENDENT at BALANCED) and its bounds only tighten: E = **************** BLOCKED), T = max(CONFIDENCE_THRESHOLD_PCT, LOW_CONFIDENCE). An SI without a PERSONALITY section gets BehaviorProfile.inactive(): nothing acts. BehaviorProfile.of never throws.
· KBService
Notes publish their disclosure labels to RAG — the note.rag.upsert payload carries the note's label (scope, scopeRefs, allowedMembers = participants and NAMED members, sensitivity and its level, confidential, teamMembersOnly, inherits, about, labelVersion 1) from NoteLabelResolver, and the new note.rag.label {action, noteId, orgId, label} carries a new one without the text; both leave only after the writer's transaction commits and read the label in a new read-only transaction, gated by RagPhiGa...
· kamo-internal
BFF relays and API clients for the personality editor — seven relays (charter catalog, affected SI members, the organization charter, archetypes and one archetype, the personality preview and approved prose) keep each upstream path, verb, body and refusal; personalityApi and PersonalityApiError read reason, field, code, match, usage, problems, requiredRight and index; charterApi gains orgCharter and saveOrgCharter (KamoCollab CP09 Task 10)
· MCPGatewayService
The config pack — config_catalog, config_current, config_lookup and config_propose, a person's reads (HUMAN_ONLY, READ, AI Workforce, any of the four hiring and configuring rights) that ask SecurityService's configure endpoints with the caller's OTK, AIService's voice options with the *** and the knowledge base under the caller's own right and app; a refusal reaches the model by its reason; the four tools are not content (CP10 D27), Js gains anyObject, anyObjectList and uuidList, and config_ j...
· SecurityService
K4 POST /api/security/configure/propose — the configure assistant's charter changes validated as the creator would save them: ConfigureChange and ConfigureChangeParser (SET_ITEM, SET_GROUP, REMOVE_ITEM, SET_FIELD, SET_PLACEMENT, SET_VOICE; INVALID_CHANGE, NOT_IN_SCOPE, HIDE_NOT_OFFERED), ConfigureProposalService (rights per change, registry clamp, item shape, identity-replace apply, list rules with CAP_REACHED, references, up to three resolve passes clamping to inherited bounds and refusing LOCK...
· AIService
Goal lines read the MetricRegistry: the label from the registry (the key when unknown), a lower-is-better metric as a ceiling, a percent with its sign; every pre-CP14 goal line unchanged, VERSION kept (KamoCollab CP14 Task 7)
· AIService
Who is a new outside person — POST **************** answers each email:/phone: key true when the org's contact state has no row, or neither a touch nor a person engaged; one IN read of at most 20 keys, the KamoAI secret only, 503 when unread (KamoCollab CP12 Task 17)
· AIService
The SI rehearsal judge, the draft brief and build identity — POST **************** (EVALUATION_JUDGE_V1, one EVAL textOnce call, PHI-eligible unless NOT_PHI, strict JSON or UNSURE, cost and model, no model text logged), POST **************** (I2 with draftLayer, CP06's read-only render peek, compiled as compileMember, nothing written), GET /api/ai/internal/build from build-info (KamoCollab CP15 Task 8)
· kamo-internal
Supervised conversations — members see a quiet notice that a manager can read along, the overseer reads read-only with no composer and no heartbeat, a lock for a missing approval offers 'Ask for approval', and /supervised-chats lists what the viewer oversees, each row opening the conversation as ?openChat does (KamoCollab CP04 T28)
· AIService
The limit-label default and the brief rule of every LIMIT key — the sixteen keys keep their lines, the SI pair budget prints only away from its default, the memory switches and unknown keys never print (KamoCollab CP12 Task 6)
· kamo-internal
Item helpers and client validation for the personality and Docstion sections — items.ts and collabItems.ts edit exactly one identity and hand every other item back as the same object (CP-D14 extended to keys and kinds), validate.ts mirrors CharterItems' PERSONALITY and DocsTION rules without the lint, validateItems runs both whether or not the sections are shown, and the editor words GROUP_INCONSISTENT, UNKNOWN_VALUE and FIELD_NOT_ALLOWED (KamoCollab CP09 Task 9)
· kamo-internal
An SI's disclosures on its workbench and in the run drawer (KamoCollab CP08 Task 18)
The workbench gains a full-width Disclosures card after Runs, for the SI's supervisor or an auditor (VIEW_ACCESS_LOGS). It lists the SI's ledger events from **************** in the shared DisclosureEventGrid, with a role column and, for a supervisor, Open run, which opens the run drawer. A supervisor sees source summaries only; a 403 shows the refusal, never an empty list. RunDetailDrawer takes the SI's memberId (RunList passes it) and lists the run's events after its tool calls, one line each (time, channel, action, decision chip, recipients, source summary). The grid exports DecisionChip, Recipient and disclosureWord so the drawer's lines read exactly like the grid's rows.
· kamo-internal
Mark a conversation confidential from its toolbar, forward a message, and say whose words a forwarded message carries (KamoCollab CP05 T36)
The chat toolbar gains the Confidential toggle every surface will share: a lock that is pressed when the conversation is marked, whose tooltip says who marked it and on which day, and that stays focusable but unavailable to anyone the marker rule would refuse. The window reads the marker when the conversation opens, when the browser regains focus and after a toggle (no live frame carries it); a refusal is said in the rule's own words, and an Exec2Exec answer takes the toggle off. "Forward" in a message's menu (not on a removed, pending or system line) opens a dialog: one of the member's recent conversations, or people from the chat directory, never both, and an optional comment. The human share check answers through the shared DisclosureNoticeDialog: a warning offers "Send anyway", which resends with the acknowledgement; a block is final. Any other refusal is said under the form, the organization's chat-policy wording included. A forwarded message wears "Forwarded · <author> · <when written>" above its body, never where it came from. BFF relays for GET|PUT **************** and POST /api/media/messages/forward pass status and body through as text. Needs @kamo/chat-core 0.1.23 (forwardMessages, ForwardRefusal, ChatMessage.forwardedFrom): the package.json/lock bump lands at ship time, once kamo-js has published it.
· SecurityService
K3 GET /api/security/configure/lookup — departments with root-to-leaf paths, job titles with their own archetype, teams with member counts, roles, SI-eligible supervisors with whether their applied rights cover the placement's grants (PlacementGrants, PlacementGrantsLoader: team-member role, department, job title, teams as one peer level, closure, never-grantable floor), and colleagues (KamoCollab CP10 Task 6)
· kamo-internal
The trait registry mirror and the tendency link math — registry.ts (the 60 keys in PersonalityTraitKey order, relationships, adaptation channels, group choices and defaults, the seven tendency links, the Docstion kinds with their field ranges and the watch direction, modes, escalation bounds, text maxima) and tendencyLinks.ts (derive and the minimal-move inverse exactly as shared-lib TendencyLinks, rulings CP03-T5-1..3), checked against the production catalog and built-ins captured in sp00v...
· SecurityService
Business metric values under the member's own report rights — MetricExecutionService (the registry key, the active member, the report's app, VIEW_REPORTS and mayRun, the resolved scope; values cached in Redis per org, metric, scope and window, measured in one read-only transaction), POST **************** the REPORT disclosure label (ReportLabelResolver), report runs answer scopeLevel, GET **************** and the charter catalog lists th...
· SecurityService
The configure assistant's reads — K1 POST /api/security/configure/catalog (every setting, compact, with what the layers above leave the subject, archetypes with keyTraits, canSave) and K2 POST /api/security/configure/current (resolved, stamps, own items with origin, inherited texts), ConfigureSubject, ConfigureAccess and ConfigureRefusal; the org's name never reaches the model (KamoCollab CP10 Task 5)
· kamo-internal
Contact requests — Ask to chat on the member card and from a refused chat start, the request dialog naming the approver, /contact-requests with To decide and Mine, the request page where the approver decides and the requester starts the chat, and the Requests view in the communication policy (KamoCollab CP04 T27)
· kamo-internal
"Waiting to send" and consults in the SI room — what an SI holds for a recipient's digest (waiting and the last 7 days, why, when it sends, how it ended), its text and Cancel for a supervisor, and the consults it asked and was asked, metadata only (KamoCollab CP12 T34)
· kamo-internal
The Disclosure history dialog and its seven mounts (KamoCollab CP08 Task 17)
"Who has been told about this" for one record: DisclosureHistoryDialog asks **************** (keyset Load more, member zone or UTC, a 403 says the refusal, never an empty grid; a new record starts at the first page). Offered with VIEW_ACCESS_LOGS on the lead More menu, the chat toolbar, the mail reading pane's More menu (EMAIL_THREAD by the thread root), the call history row (CALL by callLogId, only when the row has one), the note toolbar (not while creating), the Docs row actions (disclosureHistory before trash; column width from maxRowActions) and the meeting page beside Back. The Disclosure Log's source cell now opens the dialog instead of narrowing the log (ruling CP08-T16-1).
· kamo-internal
Settings → Security → Disclosure — posture, Audit or Enforce (asks first), leak check, default daily SI interruptions and digest time, read-only without Configure System; RELEASE_TO_ORGANIZATION under VIEW_NOTES; RELEASE_INFORMATION after SEND_INTERNAL_MESSAGE with APPROVAL at 21; the three disclosure access-log events; the six new record-link kinds, a task and a member opening their pages (KamoCollab CP05 T35)
· MediaService
The rating target of a chat message, and the communication policy's red-team hook — POST **************** {orgId, messageId, raterMemberId, raterRights[]} answers {messageId, sessionGuid, sessionType, senderMemberId, senderIntelligenceType, removed, readable} (SessionAccessGuard.canRead; one read-only transaction of key reads; 404 NOT_FOUND off the org) behind the KamoAI internal secret; a published communication policy tells kamoai-service after the commit (policy-chan...
· AIService
Speech style on E5 — an optional voice_style {stability, style, speed} and instructions checked before any call, each candidate sent the parts its model takes (ElevenLabs voice_settings; OpenAI instructions except tts-1, and a speed other than 1), the top-level speed still refused, and X-Kamo-Speech-Style naming what the answering model applied (KamoCollab CP06 Task 12)
· kamo-internal
The "SI colleagues" card in the Work room — how SI members may reach a person: urgency to interrupt and to call, the daily interruption budget, the digest time and channel, the channel order; the member changes it, an administrator reads it (KamoCollab CP12 T33)
· kamo-internal
The SI memory review's client and relays, the two memory switches in the charter editor, and the three memory access-log types (KamoCollab CP11 T22)
- charter: LIMIT_KEYS gains maxMemoryCards (0-5000) and maxContextKnowledgeChars (0-15000), no default (unset is off); LIMIT maxItems is one item per key (18), held equal by sections.test.ts - access log: AI_MEMORY_CORRECTED, AI_MEMORY_RELABELED, AI_MEMORY_DELETED in the filter list (accessLogEvents.ts, which SystemAccessLogsManager's EVENT_TYPES is) - memoryApi: list / correct / relabel / remove over **************** zod rows with string ids only; a restricted row (kind, date, Delete) chosen by the server's restricted flag and never read as a content row; refusals keep KBService's code - BFF: GET memory, PUT and DELETE memory/{noteId}, POST memory/{noteId}/relabel, each through forwardToApi and relayUpstream; non-digit ids refused before anything is sent
· kamo-internal
The Disclosure Log tab — ledger client, BFF pass-throughs and the shared event grid (KamoCollab CP08 Task 16)
app/lib/disclosureLedger.ts mirrors the shared-lib vocabularies (decisions, channels, actions, recipient kinds, bases; parity-tested), builds the keyset query, classifies decisions (D20) and derives a mail thread's EMAIL_THREAD ref by EmailService's root rule. Five BFF pass-throughs relay SecurityService's status and body untouched; the export relays X-Kamo-Export-Truncated. DisclosureEventGrid (KamoAgGrid) is the one grid the admin log, the history dialog and the SI workbench share; DisclosureLogManager adds the readiness tiles, filters, keyset Load more, the LOCAL/UTC toggle and the EXPORT_ACCESS_LOGS export. The tab, its settings-menu entry and its landing card land together.
· kamo-internal
Four SI templates in AUDIT that can switch the policy on, a channel-aware simulator with 'This is a reply' and 'Approval needed' naming the approver, a channel on every activity row, and channel or starting-only rules left out of the matrix with their own caption (KamoCollab CP04 T26)

Your universe is waiting.
Start free in minutes. Add products whenever you are ready — no migration, no new logins.
Free forever — no credit card required