Skip to content
KAMOUniverse

Changelog

What's new.

Every improvement to the platform, as it ships.

  1. · APIService

    Carve out /api/docs/internal/** for the disclosure label endpoint

    KamoCollab CP05 Task 23. DocsService gains POST **************** guarded only by the KamoAI internal secret and called in-cluster, so the public gateway ends the whole subtree with a 404 instead of forwarding it.

  2. · kamo-shared-library

    WorkLinkResolver and its wire, with SourceRef and RecordLinkKind.TASK (KamoCollab CP04 Task 8)

  3. · MCPGatewayService

    A team chat line is SEND_INTERNAL_MESSAGE, free while no charter layer names it (KamoCollab CP04 Task 20)

    Defect 5: ChatPack plans a CHAT post as SEND_INTERNAL_MESSAGE (support stays SEND_WEBCHAT_MESSAGE), chat_send/chat_mention declare it in alsoClasses, and chat_find_or_create_dm gets a planner with the class. CharterPolicy keeps each approval's source.level and executes an unnamed (absent or DEFAULT) SEND_INTERNAL_MESSAGE before the autonomy ceiling (D16). OnRequestOf skips a tool whose only class is SEND_INTERNAL_MESSAGE, and approvals_request offers ActionClasses.REQUESTABLE (ALL less SEND_INTERNAL_MESSAGE), so every SI's tools/list stays byte-identical (R1-1, ****************

  4. · AIService

    The brief's words for team chat, SEND_INTERNAL_MESSAGE (KamoCollab CP04 Task 12)

    An SI's brief now reads "Messaging colleagues in team chat" for the new action class in its approvals and escalation sections, instead of the default arm's "Send internal message". VERSION is unchanged (spec §5.15): the charter stamp move recompiles every brief once.

  5. · RAGService

    Note points carry their disclosure label, and note.rag.label updates it in place

    KamoCollab CP07 Task 11 (spec §5.17). An upsert may carry the note's label (scope, scopeRefs, allowedMembers, sensitivity/sensitivityLevel, confidential, teamMembersOnly, inherits, sourceKind, about, labelVersion); the label action sets it on the note's points without re-embedding. A malformed label is no label (the narrower, owner-only reading). The eight label payload indexes are created once each, off the startup thread.

  6. · KBService

    The DDL for checklist_items.blocked_at, pinned by a contract test (KamoCollab CP13 Task 1)

    When an SI's task became BLOCKED, for the stuck-work check. Re-runnable, additive, nullable, no CHECK, no backfill; applied by hand before the shared-lib entity maps the column.

  7. · kamo-shared-library

    Grants, approvers and overseers in ChatPolicyService; channels in the loader; the analyzer learns channels (KamoCollab CP04 Task 7)

    ChatPolicyService(loader, grants, graphs) answers interaction()/interactions(): a live CONTACT grant turns REQUIRES_APPROVAL into ALLOW (CONTACT_GRANT), the approver of what still needs approval and the overseer of a supervised verdict are named from the org graph (InteractionApprovers). verdict()/verdicts() are the grant-aware CHAT answer; the old constructors read no grants. The loader reads chat_policy_rule_channels in one query; the analyzer checks channels, initiator-only rules, mirrored directional qualifiers, TEAM/ROLE references, raises AI_ONLY and adds aiImpact for SIs off CHAT. The telemetry summary groups by channel.

  8. · kamo-shared-library

    The compile vocabulary: phrase tables and the outline (KamoCollab CP06 Task 4)

    PersonalityCompile (VERSION cp06-1, Band, band), TraitPhrases (every table of CP06 spec §5.2.1 as EnumMaps) and PersonalityOutline.build (spec §5.2.2): the archetype prose, the four heaviest band deviations, the changed work-style, social and decision-priority choices, and the strengths when they differ from the archetype's own (ruling CP06-T4-1). Pure; no bean.

  9. · kamo-internal

    Your turn is impossible to miss

    When the board becomes yours, a wave runs out from the piece your opponent just set down and lights each of your movable pieces as it passes them. The board's edge ignites into a brass ring that keeps lapping it, the window's own edge glows and breathes, and your seat gets a shimmering YOUR TURN pill with a pinging dot. When the wait was long (8s+), the tab was in the background, or the window was minimized, a "YOUR MOVE" banner also sweeps across the board with the move that was just played and a check warning. The light goes out the instant you play. Every loop is compositor-only CSS, paused when off, and cancelled under prefers-reduced-motion, which keeps a solid lit ring and the banner. The opponent's seat never animates.

  10. · kamo-internal

    Your turn is impossible to miss

    When the board becomes yours, a wave runs out from the piece your opponent just set down and lights each of your movable pieces as it passes them. The board's edge ignites into a brass ring that keeps lapping it, the window's own edge glows and breathes, and your seat gets a shimmering YOUR TURN pill with a pinging dot. When the wait was long (8s+), the tab was in the background, or the window was minimized, a "YOUR MOVE" banner also sweeps across the board with the move that was just played and a check warning. The light goes out the instant you play. Every loop is compositor-only CSS, paused when off, and cancelled under prefers-reduced-motion, which keeps a solid lit ring and the banner. The opponent's seat never animates.

  11. · AIService

    The ai_personality_renders DDL file and its contract test (KamoCollab CP06 Task 1)

  12. · EmailService

    The two contact notification kinds, and which members an internal address reaches (KamoCollab CP04 Task 11)

    CONTACT_REQUESTED and CONTACT_DECIDED are gated on ACCESS_CHAT and listed after MENTIONED. POST **************** ({orgId, addresses[]}, at most 100, KAMOAI_INTERNAL_SECRET) answers the members each address reaches: a member mailbox's address, a member's alias, or a primary mailbox on one of the org's alias domains. Shared, personal and unknown addresses are absent. One org-keyed query per batch, index-driven end to end.

  13. · kamo-shared-library

    Member facts from the graph, and the channel-aware evaluator (KamoCollab CP04 Task 6)

    MemberFacts gains the SI facts (intelligence type, teams, roles, SI supervisor, headed departments), filled by MemberFactsFromGraph. The evaluator learns channels: CHAT binds everyone, other channels bind SI actors only (NOT_BOUND), the default governs CHAT only, initiator-only rules match forward non-replies, and an SI and its supervisor are a protected line. TEAM, ROLE and INTELLIGENCE_TYPE selectors and the six new qualifiers now match (replacing CP04-T4a's interim false). REQUIRES_APPROVAL no longer permits starting or sending (D11). Every old constructor and the 4-argument evaluate keep their meaning; a frozen copy of the old evaluator proves CHAT identity over 2,000 random rulesets.

  14. · VOIPService

    The CP05 DDL for Confidential markers on calls

    KamoCollab CP05 Task 5 (spec 5.1, D8, D27): recordings and phone_call_log each gain is_confidential, confidential_set_by_member_id and confidential_set_at. Hand-applied in Task 6; a contract test pins it.

  15. · EmailService

    The CP05 DDL for per-thread Confidential markers and the thread_id indexes

    KamoCollab CP05 Task 4 (spec 5.1): public.email_thread_labels keyed by (org_id, thread_key), ix_thread_messages_thread and the partial ix_search_index_thread. Hand-applied in Task 6; a contract test pins it.

  16. · MediaService

    The CP05 DDL file — Confidential markers on chats and meetings, forwarded-message provenance (KamoCollab CP05 T3)

  17. · KBService

    The CP05 DDL for knowledge scopes, NAMED audiences, decisions and link provenance (KamoCollab CP05 T2)

  18. · SecurityService

    The DDL for org disclosure settings and the two lead communication label indexes (KamoCollab CP05 T1)

    org_disclosure_settings (eight columns, a missing row means the defaults, AUDIT by default) and ix_leadcomm_org_source / ix_leadcomm_org_email_thread, which the call and email label resolvers read by. Re-runnable and additive; CP05 Task 6 applies it. Cp05SecurityDdlContractTest pins its shape.

  19. · MCPGatewayService

    DDL for the SI tool-call policy verdict columns (KamoCollab CP08 T2)

    Three nullable ADD COLUMN IF NOT EXISTS on mcp_tool_call_audit: policy_decision, policy_rule, disclosure_event_id (spec §5.1, D11; master §6.10). Hand-applied by CP08 Task 3; a contract test pins the file's shape.

  20. · kamo-shared-library

    The communication-policy entities and repositories (KamoCollab CP04 Task 5)

    Rule channels, initiator-only rules and named approvers, the event channel, CONTACT grants beside REPLY grants, contact requests and session supervisors, and the SI approval reason, mapped to the CP04 DDL already applied.

  21. · SecurityService

    The DDL for the three append-only disclosure ledger tables (KamoCollab CP08 T1)

    The hand-applied DDL of spec §5.1: org_disclosure_events, its recipients and sources, seven org-and-time indexes, and a closing REVOKE that takes UPDATE, DELETE and TRUNCATE from kamo_app. A contract test pins every column, index and the REVOKE.

  22. · kamo-shared-library

    The interaction vocabulary (KamoCollab CP04 Task 4)

    Six InteractionChannels; TEAM, ROLE and INTELLIGENCE_TYPE selectors; six SI-aware qualifiers; InteractionApproverKind, ChatGrantKind, ContactRequestStatus and AiApprovalReason; the SEND_INTERNAL_MESSAGE action class (APPROVAL cap 19 -> 20); the CONTACT_REQUESTED and CONTACT_DECIDED notification kinds. All STRING enums, appended only. The evaluator matches nobody on the new kinds until CP04 Task 6 gives MemberFacts their facts.

  23. · kamo-shared-library

    The COLLAB resolver and DocstionProfile — restrictive mode, contact and delegation per relationship, additive escalation conditions with the strictest bound per trigger, specific attention and digest, additive watches, the view and the Docstion stamp (KamoCollab CP03 T10)

  24. · MediaService

    The DDL file for the communication policy — rule channels, contact requests, session supervisors, CONTACT grants (KamoCollab CP04 T1)

  25. · kamo-shared-library

    'cameras' joins SecurityService's org-change domains

  26. · kamo-shared-library

    KamoCameras app (39) and its four rights (333-336)

    VIEW_CAMERAS is the hub; MANAGE_CAMERAS, MANAGE_CAMERA_SITES and ACCESS_ALL_CAMERAS hang off it. PHI module CAMERAS is BLOCKED_PENDING_WORK until a per-view audit exists.

  27. · kamo-internal

    The pager counts from the server's own total

    EmailService now sends each listing's size in X-Total-Count (emailservice 12926f6) beside the bare array it always returned. The email proxy carries that header back on JSON answers, and the message list reads it: - Folders, labels and smart folders all get "51-100 of 1,240" and a working Last button. Labels and smart folders used to show the range alone. - Whether another page follows is decided by the total when there is one. A label's page can come back short because the index has not seen some labelled messages yet; that read as the end and paging stopped early. - A page that has emptied steps straight back to the last page there is. - The folder tree's count and the short-page inference remain fallbacks for Microsoft Graph and for an EmailService that sends no total. fetchFirstPage and the route prefetch are unchanged; fetchFirstListingPage shares their in-flight slot, so the mount fetch and the prefetch are still one request.

  28. · kamo-internal

    The pager counts from the server's own total

    EmailService now sends each listing's size in X-Total-Count (emailservice 12926f6) beside the bare array it always returned. The email proxy carries that header back on JSON answers, and the message list reads it: - Folders, labels and smart folders all get "51-100 of 1,240" and a working Last button. Labels and smart folders used to show the range alone. - Whether another page follows is decided by the total when there is one. A label's page can come back short because the index has not seen some labelled messages yet; that read as the end and paging stopped early. - A page that has emptied steps straight back to the last page there is. - The folder tree's count and the short-page inference remain fallbacks for Microsoft Graph and for an EmailService that sends no total. fetchFirstPage and the route prefetch are unchanged; fetchFirstListingPage shares their in-flight slot, so the mount fetch and the prefetch are still one request.

  29. · EmailService

    Message listings say how many messages they hold (X-Total-Count)

    The message list in kamo-internal can now be browsed by pages, and its pager needs the listing's size for "51-100 of 1,240" and a Last button. Every listing answered with rows alone, though most of them had already worked the count out and thrown it away. The total travels as an X-Total-Count header; the body stays the bare array every caller reads (the kamo-internal first-page fetcher refuses anything else, and @kamo/email-core reads the same endpoint). The header is left off when the total is unknown, never sent as a zero. - Folders (IMAP): **************** returns the EXISTS count it already reads to cut the page. MailReader.listMessagePage is new, with a default that reports the total as unknown (Graph keeps that for now); listMessages is unchanged for the sync, filter-rule and lead-mail callers. - Folders served from the metadata index: the total is the folder status that proved the index current, so rows and count describe one folder. - Shared mailboxes: same as folders. - Labels: the paged join-table query's own getTotalElements(). It also counts labelled messages the index has not seen yet, which are left off their page, so a short label page is no longer mistaken for the end. - Smart folders: inferred from a short page; one COUNT over the same conditions only for a full page or an empty one past the first.

  30. · kamo-internal

    Members choose to scroll the message list or browse it by pages

    The second column only ever loaded more mail as it was scrolled. A member can now pick Scroll or Pages under Filters ("Browse the list"). The choice is kept per member in ui-preferences (emailListBrowse) so it follows them between devices; Scroll stays the default, so nobody sees a change until they make one. Pages shows fifty messages at a time with First / Previous / Page X of Y / Next / Last at the foot of the list, and "51-100 of 1,240" where the folder tree has a count (the range alone for a label or a smart folder). Turning a page replaces the rows rather than appending, clears the selection and the Live updates keep the member's place: a mailbox change reloads the page on screen instead of returning to page 1, and a page that has emptied steps back one. Search results keep their own pager; only a folder's first page is cached. Switching modes starts again from the top when more than the first page was loaded. Strings: kamo-translation-dictionary 135c6cc5 ****************

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