KamoCRM

Live Change Log

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

17,594
Total Changes
6,048
Features
5,310
Fixes
30
Projects
Filter by project
All Projects17,594AIService258APIService174BillingService157ConversionService110DaemonService138DocsService223ESigService91EmailService582InitializerService329KBService151KlusterServices744MCPGatewayService261MediaService602RAGService79SecurityService1,864TranslateService62VOIPService250VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,377kamo-login339kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,674kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore775Docs3,257Feature6,048Fix5,310Other994Performance165Refactor278Revert23Style42Test162Upgrade1
August 7, 2026
FeatureDaemonService

Daily legal-package reminder tick

DaemonService owns the tick because DocsService cannot. DaemonService is strategy:Recreate — the old pod is gone before the new one starts, so a deploy window c...

Kamo·2mo ago
FeatureDocsService

Due-date reminder ladder and the batched, read-only sweep

The bucket is a pure function of (dueDate, today) and never of "when we last sent": UPCOMING_D{n} for the configured offsets, DUE_TODAY, then PAST_DUE_P{floor(d...

Kamo·2mo ago
August 6, 2026
FeatureDocsService

Tell the member — assigned, voided and completed

ONE hr.package_assigned per member per package, never one per document: that is what suppressInvite exists for, and 8 documents x 200 members is 1,600 envelopes...

Kamo·2mo ago
FeatureDocsService

Outbound email client and a Redis notification ledger

Idempotency with NO schema change. The reminder bucket is a pure function of (dueDate, today) and never of "when we last sent", so the only durable state a noti...

Kamo·2mo ago
FeatureDocsService

DocsService's first inbound internal-auth filter

DocsService has no service-to-service authentication: ResourceServerConfig is anyRequest().permitAll() and OTKPreAuthFilter CONTINUES the chain when X-OTK is ab...

Kamo·2mo ago
Featurekamo-shared-library

Four canonical HR legal-package templates

hr.package_assigned, hr.package_reminder, hr.package_voided and hr.package_completed, as {json,html} pairs plus four CANONICAL_KEYS entries. The CONSTANT is no...

Kamo·2mo ago
Featurekamo-internal

Signature button with a live legal-package badge

Hand-written into the fixed left cluster between My Profile and Log out. NAV_REGISTRY cannot express a position between two fixed controls and its badgeKey fiel...

kamo·2mo ago
Featurekamo-internal

Live pending-package count over the EXISTING chat socket

LegalPackageCountContext consumes **************** rather than opening a fourteenth STOMP connection for one integer, and subscribes to **************** — the d...

kamo·2mo ago
FeatureMediaService

Relay the legal-package count and guard per-member SUBSCRIBEs

legal.packages.> -> **************** core NATS, no stream — the same shape SupportStompRelayController and PlatformStompRelayController already use. topicFor is...

Kamo·2mo ago
Featurekamo-internal

Proxy the member's pending-package count

A static segment sibling to [uid] so App Router matches it first. PATH ONLY — forwardToApi owns the query string — and one upstream call, because the OTK is sin...

kamo·2mo ago
FeatureDocsService

Serve the caller's own pending-package count

GET **************** through memberGuarded() and the identity funnel. No memberId and no orgId parameter — both come from the session, because an id in a path i...

Kamo·2mo ago
FeatureDocsService

Emit the badge count on every transition that moves it

Four sites: delivery (none -> PENDING), void (open -> VOIDED), redelivery (open -> SUPERSEDED) and finish (open -> EXECUTED). Each passes the status it read BEF...

Kamo·2mo ago
FeatureDocsService

Publish the member's open-package count to core NATS

Connection.publish on legal.packages.{memberId}, NOT NatsMessageService: that service pins .expectedStream(CHAT_MESSAGES) in both publish and publishSync, so a ...

Kamo·2mo ago
Featurekamo-internal

Give the executed-package repair an actual button

POST **************** existed upstream and was tested, but nothing in the product could reach it: no proxy route, no helper, no button. Every failure branch in ...

kamo·2mo ago
Featurekamo-login

Forward the login host so recovery can resolve the org

Password recovery now accepts a member's primary mailbox address, which only names an account within one org. This proxy reaches SecurityService over cluster DN...

Kamo·2mo ago
FeatureSecurityService

Accept a member's primary mailbox address as a login identifier

The address a member gives out is usually the org mailbox flagged Primary on their member settings, not whatever is on their user account — so typing it into th...

Kamo·2mo ago
Featurekamo-internal

Download the executed package from the grid and the member's own page

Both surfaces go through the LEGAL endpoints, keyed on the assignment, not /api/imaging/download/{imgId}: that path additionally needs organization.isDocs and V...

kamo·2mo ago
Featurekamo-internal

Draw non-image attachments with the document manager's file-type icons

A staged .docx or .xlsx was a grey MUI outline with the extension lettered underneath — a shape invented for the tray, and one that says less than the icon the ...

kamo·2mo ago
FeatureDocsService

File after Finish, repair from HR, and download BY imgId

Filing is queued AFTER COMMIT and OFF the request thread. Finish is @Transactional in a service that also serves WOPI; holding a connection across N ESigService...

Kamo·2mo ago
FeatureDocsService

File the merged executed package into the member's own library

uploadDocument takes the SUBJECT'S Member, so Img.organization and Img.createdByMember derive from them and HR ends up having filed a document the member owns. ...

Kamo·2mo ago
Featurekamo-internal

Say what is too big, instead of "Failed to send email"

A draft that outgrew the send endpoint's limits produced one flat line of red text after the whole payload had been uploaded — or, when the body itself was the ...

kamo·2mo ago
Featurekamo-internal

Gate each Human Resources tab on its own right

Overview needs VIEW_OVERVIEW, Attendance MANAGE_TIMECARDS, Legal & Compliance MANAGE_LEGAL_AND_COMPLIANCE, Training MANAGE_TRAINING and Resources MANAGE_RESOURC...

kamo·2mo ago
FeatureDocsService

Enforce MANAGE_LEGAL_AND_COMPLIANCE on the package endpoints

LegalPackageAccess mirrors the Legal & Compliance tab gate, and that tab is now gated on one right of its own instead of VIEW_EMPLOYEES || EDIT_EMPLOYEES || MAN...

Kamo·2mo ago
FeatureSecurityService

Carry existing HR holders onto the new per-tab rights

A right that gates something already reachable is a removal of access: new rights insert as NOT_SPECIFIED, so the /hr tabs would have vanished on deploy for eve...

Kamo·2mo ago
Featurekamo-shared-library

One security right per Human Resources tab

The /hr tabs were gated on whichever pre-existing HR right happened to be an OR-term in the front end: Attendance opened on VIEW_SCHEDULES, Training on VIEW_EMP...

Kamo·2mo ago
Featurekamo-internal

Measure a draft against the send limits before uploading it

A body carrying inline base64 — HTML pasted from a web page, a forward's quoted content, a signature's images — can pass the per-part ceiling on its own. The se...

kamo·2mo ago
FeatureDocsService

The executed package certificate and the ordered merge

The certificate carries the package, the frozen version, the subject, the moment and address of execution, the attestation wording verbatim and both digests the...

Kamo·2mo ago
Featurekamo-shared-library

Expose the content-addressed store so chat attachments can dedup

Chat attachments never went through the hashing pipeline — they wrote a private "<imgId>/<fileName>" object per upload, so the same file attached three times oc...

Kamo·2mo ago
FeatureDocsService

The two byte sources for the executed artifact

LegalPinnedPdf extracts the frozen-digest rule out of the member read path so the wizard and the filed artifact read the SAME bytes through the SAME check — con...

Kamo·2mo ago
Featurekamo-internal

Member legal-compliance page and the package execution wizard

**************** is gated on identity (memberID === getMemberIdString(), compared as STRINGS because getMemberId() is lossy past MAX_SAFE_INTEGER) and includes ...

kamo·2mo ago
Featurekamo-internal

Member execution proxy routes and the pure wizard model

Eight 1:1 routes: /api/docs/legal/member/** through forwardToApi (PATH ONLY — forwardToApi owns the query string) and /api/esig/member/** direct to ESIG_SERVICE...

kamo·2mo ago
Featurekamo-internal

Port the kamo-signer signing core into kamo-internal

Every @kamo/* package is private:true with exports:"./src/index.ts" and no build step, so there is no publishable artifact — the files are copied and rewired on...

kamo·2mo ago
FeatureDocsService

Mount the member surface at /api/docs/legal/member/**

A separate controller with a separate funnel, because authorization here is identity and not an HR right. Routing these through guarded() would mean either lock...

Kamo·2mo ago
FeatureDocsService

Package attestation on finish, and the EXECUTED/AWAITING_OTHERS split

Writes the WORM LegalPackageAttestation: attestationTextSha256 from the FROZEN version (the package's draft wording is mutable and may already have been reworde...

Kamo·2mo ago
FeatureDocsService

Identity-authorized member read surface for assignments

LegalAssignmentOwnership is a SEPARATE guard from LegalPackageAccess on purpose: a member executing their own agreement holds no HR right, and widening the HR r...

Kamo·2mo ago
FeatureDocsService

Manifest canonical form and a spoof-resistant client IP

manifestSha256 hashes the ordered [{documentUid, contentSha256, orderIndex}] the member was actually shown, length-prefixed so a crafted uid cannot imitate a fi...

Kamo·2mo ago
FeatureESigService

Staff-authenticated member signing surface at /api/esig/member/**

OTKAuthFilter bypasses only /actuator, /api/esig/public and /api/esig/internal, so this prefix is behind staff OTK auth with orgId/memberId already on the reque...

Kamo·2mo ago
Featurekamo-internal

Assigned Packages sub-tab and deliver/redeliver/void actions

AG Grid Community over a MUI-paginated fetch — Community has no server-side row model, so the server pages and the grid renders exactly what it was handed. The ...

kamo·2mo ago
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

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