KamoCRM

Live Change Log

Every feature, fix and improvement, posted as it ships. Nothing is held back for a launch.

17,395
Total Changes
5,910
Features
5,260
Fixes
30
Projects
Filter by project
All Projects17,395AIService242APIService174BillingService157ConversionService110DaemonService137DocsService223ESigService91EmailService568InitializerService329KBService151KlusterServices738MCPGatewayService235MediaService592RAGService79SecurityService1,830TranslateService62VOIPService248VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,328kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,637kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,252Feature5,910Fix5,260Other993Performance165Refactor278Revert23Style42Test159Upgrade1
August 6, 2026
Featurekamo-internal

Legal package deliver/redeliver/void proxies and assignment client

Thin 1:1 forwardToApi routes — one upstream request each, because OTKAuthFilter does getAndDelete and a per-member loop in a Next route would need one OTK per m...

kamo·2mo ago
FeatureDocsService

Org-scoped, paged, filterable legal package assignment listing

Built on the EntityManager rather than a shared-lib repository method: the filter set is dynamic and adding it to kamo-shared-library would force a shared-artif...

Kamo·2mo ago
FeatureDocsService

Void legal package assignments, org-wide or for named members

Per-assignment outcomes — voided, skipped-executed, not-found — because an admin voiding a package for six named people needs to know which had already executed...

Kamo·2mo ago
FeatureDocsService

Redeliver a changed package, superseding the open assignments

Refused unless the live fingerprint differs from the published one. Binder.dateUpdated is dead and Img has no revision counter, so that fingerprint is the only ...

Kamo·2mo ago
FeatureDocsService

Deliver a legal package to its audience, off the request thread

Plan on the request thread (two cheap queries, so the response is exact about who is included and who was skipped and why), write off it: 200 members x 8 docume...

Kamo·2mo ago
FeatureDocsService

Delivery planner — incremental targeting, email pre-filter, due dates

Deliver is the new-hire path and is meant to be re-run, so members who already hold an assignment are subtracted rather than given a second copy of the same ins...

Kamo·2mo ago
FeatureDocsService

ESigService internal client for legal package delivery

DocsService's first outbound service-to-service client. Posts to **************** (origin MANUAL, never metered) with suppressInvite=true — HR sends one notific...

Kamo·2mo ago
Featurekamo-internal

Package Templates sub-tab for Legal & Compliance

Replaces the HrTabPlaceholder body only — the route, the tab entry and the gate already exist in hrTabs.ts. AG Grid Community list plus a create/edit dialog wit...

kamo·2mo ago
Featurekamo-internal

Legal package proxy routes, client api and pure helpers

Thin 1:1 forwardToApi routes under /api/docs/legal — one upstream request each, because OTKAuthFilter does getAndDelete and a fan-out loop in a Next route would...

kamo·2mo ago
FeatureDocsService

Audience resolution preview

Resolves a saved or draft audience through TeamMemberRepo.findAudience, which is the only reader carrying the mandatory ACTIVE + recordState eligibility predica...

Kamo·2mo ago
FeatureDocsService

Publish freezes a version with byte-pinned documents

Pins img_dat_id plus a content hash, not img_id: saveImgContent repoints the same Img at new bytes on every Docs save, and resolveSource walks to the dat live a...

Kamo·2mo ago
FeatureDocsService

Legal package CRUD at /api/docs/legal/packages

List, create, get, update and delete, with ordered binder refs and audience rows replaced as a set. Org comes from the session on every path — DocsService is pe...

Kamo·2mo ago
FeatureDocsService

Legal package wire contract and request normalization

Ids cross as strings (unique_rowid exceeds MAX_SAFE_INTEGER). Binder order is the list order, de-duplicated, and a non-numeric entry 400s rather than being skip...

Kamo·2mo ago
FeatureDocsService

Content fingerprint for legal packages

Binder.dateUpdated never moves after INSERT, so a package's content has no change signal to compare. Adds a SHA-256 over the canonical ordered binder/item tuple...

Kamo·2mo ago
FeatureSecurityService

Push platform-admin state changes instead of being polled for them

Every platform screen backed by this service refreshed on a timer, because this service has no WebSocket and therefore no way to tell anyone anything: the close...

Kamo·2mo ago
FeatureEmailService

Publish mailbox-change events so the mail views stop polling

The folder tree, conversation list and message list each ran their own 30-second timer, reloading on the chance that something had moved. The WebSocket already ...

Kamo·2mo ago
FeatureMediaService

Relay SecurityService platform events onto STOMP

SecurityService owns the platform-admin surface — system configuration, DNS provisioning, commerce sync — but has no WebSocket endpoint, so every screen backed ...

Kamo·2mo ago
Featurekamo-shared-library

Let sync progress and domain state be announced instead of polled

Two hooks for the push conversion in SecurityService, where several platform screens refreshed on timers because there was no way to tell them anything. Retail...

Kamo·2mo ago
FeatureESigService

Allow a sender to suppress the per-envelope invite email

Creating an envelope unconditionally emailed an invite, so a caller batching many envelopes behind one notification had no way to stay quiet. Null preserves the...

Kamo·2mo ago
FeatureEmailService

Push INBOX unread counts over NATS/WebSocket instead of polling

The nav-top mail badge in kamo-internal refreshed itself by calling /api/email/folders every 30 seconds, per browser tab. That endpoint walks the entire folder ...

Kamo·2mo ago
FeatureInitializerService

Land the legal package schema

Adds com.kamo.z.shared.hr.legal to the repository scan list and ensures the uniqueness and lookup indexes the entity mapping cannot express safely.

Kamo·2mo ago
Featurekamo-shared-library

Record package attestation as append-only evidence

The package-level 'I have read and agree' is a different legal instrument from the E-SIGN consent to transact and from any per-document signature, and it is the...

Kamo·2mo ago
Featurekamo-shared-library

Add per-member assignments and per-document progress

The document row is the join that makes N e-sign envelopes read as one package. The badge count comes off the assignment status, not e-sign status: recipient st...

Kamo·2mo ago
Featurekamo-shared-library

Freeze package content into immutable versions

Pins the ImgDat blob id and its SHA-256, not just imgId — a Docs save repoints the same Img at new bytes, so imgId alone would let two members sign different do...

Kamo·2mo ago
Featurekamo-shared-library

Target a package at departments, job types or named members

Shaped on SystemUserAccess. Adds the audience resolver to TeamMemberRepo, which was an empty interface; the ACTIVE + recordState predicate is what keeps termina...

Kamo·2mo ago
Featurekamo-shared-library

Add the legal package template entities

A package is an ordered set of binders plus an audience. Binder references are soft ids because binders are user-deletable and cascade their items. The attestat...

Kamo·2mo ago
Featurekamo-internal

Make the binder store aware of its collection

The store is a module singleton, so it now tracks the active scope, clears on a scope change, and drops stale in-flight responses.

kamo·2mo ago
FeatureDocsService

List and create binders within one collection

Scopes the visible-binder query to the DocManager's (assocType, assocObjectId), stamps the scope on create, inherits it on duplicate, and bumps last_modified fr...

Kamo·2mo ago
FeatureInitializerService

Backfill the collection each existing binder belongs to

Derives the scope from the first DOC item's Img; empty binders fall back to the owner's My Docs. Applies NOT NULL only after the backfill.

Kamo·2mo ago
Featurekamo-shared-library

Narrow binder visibility to one document collection

Replaces findVisibleToMember with a scoped variant and drops the two unreferenced finders that sorted by the dead date_updated column.

Kamo·2mo ago
Featurekamo-shared-library

Give a binder the document collection it belongs to

Binders had no assoc scoping, so every DocManager rendered the same global per-member pool and a binder built under Marketing could be filled with HR documents....

Kamo·2mo ago
Featurekamo-internal

Group the meeting-invite fields by meaning when maximized

Splitting the form into equal halves used the wrong unit. It stretched a date input across half the window and stranded its All-day box at the far edge, left tw...

kamo·2mo ago
Featurekamo-internal

Keep the quoted original out of the editable body

Replying dropped the whole quoted message into the Quill editor as body text. Quill can only model a simple grid, so every layout table in the quote was flatten...

kamo·2mo ago
Featurekamo-internal

Pair the meeting-invite fields into two columns when maximized

The invite form stacks eight full-width rows, which in a maximized compose window pushed the body editor most of the way off screen while leaving half the windo...

kamo·2mo ago
FeatureESigService

Apply page operations and modifiers to the signed document

The designer has always offered page rotate, delete, reorder and add-blank, plus watermark, page-number and label modifiers, and the flatten read none of it: it...

Kamo·2mo ago
Featurekamo-internal

Give every popup tool window 40px more room in both axes

Each tool's defaultSize and minSize in the registry grows by 40x40, and the geometry that was hardcoded alongside it moves with it rather than drifting out of a...

kamo·2mo ago
Featurekamo-internal

Drag, cut, copy and paste recipient chips between To, Cc and Bcc

Moving someone from To to Bcc meant deleting the chip and typing the address again from memory. Chips are now selectable and can be dragged or carried on the cl...

kamo·2mo ago
Featurekamo-internal

Rotate the field overlay with the page, flag unread imports, order fields for reading

Three things that only start to matter once a document arrives carrying forty detected fields instead of two hand-placed ones. Page rotation: rotating a page t...

kamo·2mo ago
August 5, 2026
Featurekamo-internal

Read Acrobat format actions when detecting fillable fields

Acrobat stores a field's intended format as JavaScript in /AA, which pdf.js surfaces as actions.Format. That is the author's declaration rather than a guess off...

kamo·2mo ago
Featurekamo-internal

Insert a new meeting link at the coder from the composer

Adds a footer action to the compose window that creates a meeting with the organization's configured provider and writes its join link into the body wherever th...

kamo·2mo ago
Featurekamo-internal

Rebuild a fillable PDF's AcroForm fields as native Kamo fields

Opening an editable PDF in the document editor now reads its AcroForm widget annotations off the pdf.js document and recreates each one as a DesignField on the ...

kamo·2mo ago
FeatureInitializerService

Create the email search_vector column and its inverted index

**************** never existed. EmailService's own V1__email_metadata_schema.sql declares it, but that migration never ran -- the table came from this service's...

Kamo·2mo ago
Featurekamo-internal

A contact card behind every name on a message

Every person shown in a read view was a dead end. To and Cc rendered as displayNameFor(a).join(', ') — a comma wall of display names with no address, no hover, ...

kamo·2mo ago
FeatureEmailService

Resolve the people behind the addresses on a message

A message header knows an address and whatever display name the sender chose to put beside it. The organization already knows far more — colleagues, address boo...

Kamo·2mo ago
Featurekamo-internal

Resources tab is the org's HR document library

Replaces the Resources placeholder with DocManager on a document collection of its own — ImageAssocType.HR_RESOURCE, bucket imaging-hr-resources — org-scoped th...

kamo·2mo ago
Featurekamo-shared-library

HR_RESOURCE assoc type for the org HR resource library

The /hr Resources tab publishes handbooks, policies, forms and reference material to the whole team, and no existing assoc type fits: MY_DOCS is a person's own ...

Kamo·2mo ago
Featurekamo-internal

Human Resources module shell with five route-backed tabs

Adds /hr with the accounts-page chrome in its route-backed form (the same one /marketing already uses): a layout owning the gradient hero and underlined tab bar...

kamo·2mo ago
Featurekamo-internal

Complete the Communications tab

Each sub-tab now holds its own data, and All interleaves every channel by date. Notes keeps MediaStream, because notes are authored here — but readOnlyChrome s...

Kamo·2mo ago
FeatureSecurityService

Unified communications timeline API

GET **************** returns one date-ordered page across notes, calls, voicemails, texts, e-mails and chat; ?channel= narrows it. Three sources are merged. Ca...

Kamo·2mo ago

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.

Start Free ForeverView Pricing