Changelog
What's new.
Every improvement to the platform, as it ships.
· KBService
InheritsFrom on NOTE and TASK labels, and provenance on the two append endpoints — inheritsFrom = the LEARNED_FROM links (about unchanged); an SI's journal or My Master Note section entry carries LEARNED_FROM links stored with its X-Kamo-Run-Id (one row per record, ABOUT raised) and narrow-only label fields (LABEL_WIDENS otherwise); a person naming any is USE_RELEASE; a level alone no longer needs a marker field (KamoCollab CP07 Task 10)
· kamo-shared-library
Provenance fields on the journal and My Master Note append requests — optional links, sensitivity, confidential and confidentialSetByMemberId, for an SI's entry (KamoCollab CP07 Task 10)
· EmailService
CALENDAR_EVENT labels and thread keys on mail rows — the labels endpoint serves every resolver, CalendarEventLabelResolver labels an event of the org (owner, member, department and job-title audiences through the org graph, member attendees; others EMAIL:), and search and conversation rows carry threadKey (KamoCollab CP07 Task 7)
CalendarEventLabelReads reads the event by primary key and organization (live only), its audience and attendees by the event-id indexes, and users to members by uk_member_org_user, in the resolver's one read-only transaction. Scope ORGANIZATION for GUESTS_ORG_WIDE, else PARTICIPANTS; Confidential when IS_PRIVATE or CLASSIFICATION is CONFIDENTIAL, set by the owner; about = SOURCE_TYPE:SOURCE_ID when the type is a RecordLinkKind. An unreadable org graph is 503 LABELS_UNAVAILABLE. DisclosureLabelController takes every DisclosureLabelResolver bean, as kbservice's does. EmailThreadKeys.stamp fills threadKey on /api/email/search and conversation rows; the IMAP search batch now fetches References and In-Reply-To so a search row names the same thread as getMessage.
· MCPGatewayService
Labels with the principal-private fallback, the source ledger with encrypted excerpts, withheld items and held decisions; mount the platform key (KamoCollab CP07 Task 16)
LabelService resolves labels through CP05's DisclosureLabelClient over the six owners (60 s cache per org and ref; inherited refs to depth 3); a ref no owner labels, and every AI_RUN ref, is private to the run's principal. SourceLedger, WithheldStore and HeldDecisions hold kamo:tool:sources/withheld (24 h) and kamo:tool:held (8 days). ExcerptCipher encrypts excerpts (cut to 4,000 characters) with PlatformSecretCipher; Secret platform-enc-key is mounted and mapped to platform.enc-key. Nothing calls these yet.
· VOIPService
The SMS_THREAD label — a VOIP_CONVERSATIONS row of the organization, its member the one participant and owner, the external number as PHONE:<E.164> through ContactCanon's key (an unreadable number names no party), no about, never Confidential; served by POST **************** (KamoCollab CP07 Task 8)
· AIService
The render store and the renderer — ai_personality_renders over JDBC, the outline against the archetype's own values (built-in or the org's, read through I3), and model prose through the router with validation and one corrective retry (KamoCollab CP06 Task 6)
· kamo-shared-library
HumanShareGate — one check of a person's deliberate share against DisclosurePolicy (D23's ALLOW, WARN or BLOCK; D24's mode, acknowledgement and dry run) and its one ledger event through DisclosureRecorder, written before the share and failing closed in ENFORCE (KamoCollab CP05 Task 27)
· EmailService
DISCLOSURE_REQUESTED belongs to no app, listed after APPROVAL_DECIDED — the information's owner is told whatever rights they hold (KamoCollab CP07 Task 6, D38)
· KBService
The provenance display gate — a reader who is not a note's owner sees its LEARNED_FROM and DERIVED_FROM links only for sources they are cleared for (participant or owner, existing access, the management chain), every other one of a relation collapses into one restricted placeholder, and an unresolvable or unavailable source is restricted, never an error; labels from the six owners through KBService's DisclosureLabelClient, cached 60 s per (org, ref); applied after the service returns on every no...
· MCPGatewayService
The org graph and its eviction, the disclosure settings cache, Redis hash operations and the run context endpoints (KamoCollab CP07 Task 15)
· kamo-shared-library
The names other services need — **************** (no app), **************** and AiApprovalReason.DISCLOSURE, each appended and fitting its column (KamoCollab CP07 Task 5)
· MCPGatewayService
The communication policy's interim gate — an SI's call that contacts colleagues is judged by MediaService after FORBIDDEN and before the charter's approval: COLLAB_DENIED explains itself, REQUIRES_APPROVAL asks one INTERACTION_POLICY approval (a verified request may stand in), an approval opens its CONTACT grants, AUDIT hits are reported, and an org with no policy is asked once a minute (KamoCollab CP04 Task 21)
· VOIPService
VOIPService declares the disclosure ledger recorder, with its repository scan in the same commit (KamoCollab CP08 Task 14)
· VOIPService
Call history rows carry callLogId, the PHONE_CALL_LOG id a call's disclosure SourceRef names, from one bulk lookup per page; a failed lookup leaves it null (KamoCollab CP08 Task 14)
· kamo-shared-library
The run context (RunAudienceKind, RunExternal, RunContext with validate and union, RunContextWire), RemoteWorkLinkResolver over both work-link endpoints, and LabelOwner's CALENDAR_EVENT (EMAIL) and SMS_THREAD (VOIP) (KamoCollab CP07 Task 4)
· SecurityService
The org archetype endpoints — GET/POST **************** and GET/PUT/DELETE …/{id} (the seven built-ins read-only, the org's own up to 50, writes with CONFIGURE_SYSTEM, every check before any write in PersonalityArchetypeWriter, 409 ARCHETYPE_IN_USE with the usage per charter table) and the internal GET **************** (KamoCollab CP03 T17)
· MediaService
The communication policy for other services — POST **************** (one target, many, or a conversation's peer; CHAT replies and WORK_LINK derived here), /events (CHAT stored as NULL) and /grants (30-day CONTACT grants naming the approval), behind the KamoAI internal secret, and the work-link client over kbservice and securityservice (KamoCollab CP04 T16)
· KBService
NOTE, TASK and KB_ARTICLE disclosure labels and POST **************** — a note by its master and knowledge scope (team, department, organization, named audience), sensitivity and Confidential marker; a task NAMED to its read matrix with an SI owner's or assignee's supervisor from the org graph; an article by its published audience tier; about = ABOUT and LEARNED_FROM links, never DERIVED_FROM; behind the KamoAI secret, 503 LABELS_UNAVAILABLE on a database failure (KamoC...
· kamo-shared-library
Inheritance — DisclosureLabel.inheritsFrom on the wire, and DisclosurePolicy's step 3: a record learned from others is cleared only for those cleared for its sources, to depth 3 and 50 refs, failing closed; resolve and release follow (KamoCollab CP07 Task 3)
· VOIPService
Confidential markers on calls and the CALL label — PUT **************** writes the recording and its call log with one audit row, the metadata carries the marker and the call log id, and POST **************** (KamoCollab CP05 Task 22)
· DocsService
DOCUMENT disclosure labels on /api/docs/internal, and call recording files under decision 4 — the KamoAI-secret subtree, the org graph, and CallRecordingAccess for CALL_RECORDING and VM_RECORDING Imgs (KamoCollab CP05 Task 24)
· kamo-shared-library
DisclosurePolicy's need-to-know, OPEN and release bases, outside and public recipients, SendReleaseAuthority, ReleaseOwners and resolve — one releaser or DENY (KamoCollab CP07 Task 2)
· KBService
Provenance links on notes and tasks, and an SI's narrow-only label fields — LEARNED_FROM from SIs only, DERIVED_FROM from nobody (RELATION_NOT_ALLOWED), one row per record with the stronger relation, a replace that keeps provenance, the SI's run from X-Kamo-Run-Id; SIs may raise sensitivity and carry a source's Confidential marker (LABEL_WIDENS otherwise), people get USE_RELEASE (KamoCollab CP05 Task 17)
· SecurityService
The LEAD, CONTACT and ACCOUNT labels and POST **************** LeadCommsReadGate delegates to shared-lib's LeadCommsReadRule (KamoCollab CP05 Task 14)
· VOIPService
Decision 4 on every recording read — participants, their chain, VIEW_CALL_LOGS, a linked lead's readers, in every org (KamoCollab CP05 Task 21)
RecordingController now runs tenancy (404), then the PHI capability (403), then CallRecordingAccess through access/RecordingAccessService (403 RECORDING_NOT_PERMITTED with a denied audit row). A ?st= stream token reads its rights from member_rights_applied and is never god; the lead path needs the CRM app (CrmAppGate, 30 s cache). PhiPlaybackAuthorizer keeps only the capability half, which voicemail playback also calls. Permitted reads write BASIS=<basis> into the audit justification. voipservice declares the org graph and evicts it on ****************
· kamo-shared-library
The decision vocabulary and DisclosurePolicy.decide's structural bases — group expansion, the actor, owner and participants, inactive and sensitivity, SourceClearance's existing access and management chain; ALLOW or REQUIRE_RELEASE (KamoCollab CP07 Task 1)
· SecurityService
The external field view of a lead, ?fieldAudience=EXTERNAL (KamoCollab CP07 Task 9)
LeadFieldMask.applyExternal keeps exactly spec §5.18's fields, reduces the assignee to name and title, and nulls every other LeadDTO field through a fail-closed allow-list. getLeadById applies it after the existing gates and colleague mask; any other fieldAudience value is a 400 naming the field. The PHI-access record of the read is unchanged.
· SecurityService
The ORG charter endpoints — GET /api/security/org/charter for any org session (items, counts, editable with CONFIGURE_SYSTEM) and PUT with CONFIGURE_SYSTEM, a full replace by id in OrgCharterWriter's one transaction, announced to the org's SI members (KamoCollab CP03 T16)
· KBService
Per-note keys for shared notes — note-<id> is a fourth key label, NoteKeys moves a note and its whole history onto it, and every read and append honours it (KamoCollab CP05 Task 16)
· kamo-shared-library
CallRecordingAccess and LeadCommsReadRule — decision 4's one rule for every recording door (god, participant, VIEW_CALL_LOGS, VIEW_VOICEMAIL for a voicemail, the management chain under decision 3a, the lead Communications gate), its facts loader, and the lead read rule moved to shared-lib (KamoCollab CP05 Task 12)

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