KamoCRM

Live Change Log

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

18,391
Total Changes
6,526
Features
5,537
Fixes
30
Projects
Filter by project
All Projects18,391AIService276APIService177BillingService161ConversionService117DaemonService146DocsService240ESigService93EmailService619InitializerService344KBService162KlusterServices769MCPGatewayService277MediaService620RAGService79SecurityService1,995TranslateService62VOIPService265VectorService11kamo-apps26kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,691kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,824kamo-signer-monorepo57kamolos114
Filter by type
All TypesBuild23CI525Chore794Docs3,286Feature6,526Fix5,537Other1,001Performance174Refactor281Revert23Style45Test175Upgrade1
August 11, 2026
FeatureDocsService

The member-facing Training API

Registers com.kamo.z.shared.hr.training in @EnableJpaRepositories — @EntityScan is broad so the entities are found either way, but repositories are not. Two au...

Kamo·3mo ago
FixDocsService

Declare the object-storage secret the ConfigMap no longer carries

The MinIO key was moved out of the ConfigMap into the minio-app-credentials secret, but the envFrom that supplies it was only ever applied to the live deploymen...

Kamo·3mo ago
FixDocsService

Stop shipping a shared credential as a config default

The platform's shared password was baked in as the fallback for DB_PASSWORD and MINIO_ROOT_PASSWORD, so it lived in this repo and in the built image as well as ...

Kamo·3mo ago
August 10, 2026
RefactorDocsService

Reading a session no longer renews it

The expiration on the Redis record IS the session; when it lapses the member is signed out. This service holds its own copy of KSessionService against that SHAR...

Kamo·3mo ago
ChoreDocsService

Rebuild against shared-library @Lob LONGVARCHAR fix

Hibernate's PostgreSQL dialect read @Lob String columns as OIDs via getLong(). Affects notes, contacts, calendar, OAuth tokens, IMAP passwords, email campaign b...

Kamo·3mo ago
FeatureDocsService

Point at YugabyteDB and use PostgreSQLDialect

CockroachDB has been replaced by YugabyteDB. Connection strings move from cockroachdb-public:26257 to yb-tserver-service:5433, and the Hibernate dialect from **...

Kamo·3mo ago
August 9, 2026
FixDocsService

Stop renewing the shared *** TTL for idle users

Caught with redis MONITOR: this pod was issuing GET + PEXPIRE against a *** key whose owner had been idle for over an hour, seconds after SecurityService had co...

Kamo·3mo ago
August 7, 2026
FixDocsService

Accept repeated status params so the gateway cannot corrupt the filter

Opening **************** answered "Unknown status: **************** for every member. The member grid sent the bucket as one CSV value. A comma in a query valu...

Kamo·3mo ago
FeatureDocsService

Server-side paging for the member assignment listing

The member surface asked for MAX_SIZE unconditionally and sliced the result in the browser, so a grid that showed a page had already downloaded a whole employme...

Kamo·3mo ago
FixDocsService

Never chase a member who already signed, and keep the subject plain

Two behavioural defects in the phase-8 notification path. 1. The reminder sweep ran over OPEN_STATES, which includes AWAITING_OTHERS — "this member finished...

Kamo·3mo 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·3mo 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·3mo 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·3mo 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·3mo ago
FixDocsService

Let a failed pending-count read out instead of downgrading it

publishFor caught Exception around countByTeamMemberIdAndStatusIn and turned it into a WARN. That catch was not only around the badge: the query runs inside the...

Kamo·3mo 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·3mo 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·3mo 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·3mo ago
FixDocsService

Guard the destructive imaging paths and make the repair reachable

DELETE /imaging/delete/{imgId} is the one destructive imaging path and was not wired to the issued-document guard. ImageService.deleteDocument authorizes on org...

Kamo·3mo ago
FixDocsService

Stop colleagues reading a member's HR-issued documents

isPerPartyRestrictedAssoc covers only ACCOUNT_MEMBER_VAULT and LOAN, so assoc 1 — SERVICE_APPLICATION, what /settings/member/{id}?tab=docs renders — has no per-...

Kamo·3mo 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·3mo 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·3mo 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·3mo 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·3mo 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·3mo ago
FixDocsService

Resolve the document bucket from ImageAssocType.BUCKET

DocumentService hardcoded "imaging-mydocs" while every other read path went through ImageAssocType.getBucket(). Now that storage is one bucket, point it at the ...

Kamo·3mo ago
FixDocsService

Wire DocsService to ESigService so Deliver stops 503ing

LegalEsignClient.isConfigured() was false in the cluster: neither internal.auth.secret nor legal.esig.service-url was supplied, so Deliver refused every package...

Kamo·3mo ago
FixDocsService

Prove WHOSE signature Finish counts, and report the live one

verify() compared the caller to assignment.teamMemberId but never to the ENVELOPE RECIPIENT's member — it trusted the recipientUid the delivery fan-out wrote. A...

Kamo·3mo 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·3mo 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·3mo 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·3mo 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·3mo ago
FixDocsService

Commit before the fan-out, and stop redeliver reissuing nothing

Redeliver published the new version row, flipped every OPEN assignment to SUPERSEDED, and submitted the reissue from inside that same uncommitted transaction. T...

Kamo·3mo 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·3mo 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·3mo 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·3mo 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·3mo 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·3mo 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·3mo ago
FixDocsService

Widen the read gate to match hrTabs.ts, make a cleared due date actually clear

LegalPackageAccess.requireRead demanded VIEW_EMPLOYEES alone while hrTabs.ts admits the Legal & Compliance tab on VIEW_EMPLOYEES || EDIT_EMPLOYEES || MANAGE_HRS...

Kamo·3mo ago
FixDocsService

Enforce HR rights and make the fingerprint see the e-sign design

All seven /api/docs/legal mappings authorized on org membership alone, so any authenticated member could list, edit, delete and publish legal packages — and aud...

Kamo·3mo 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·3mo 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·3mo 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·3mo 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·3mo 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·3mo ago
FixDocsService

Enforce document/binder collection scope in addItem

BinderService.addItem checked read access and refused VAULT/LOAN documents, but never compared the document's own collection to the binder's, so a hand-crafted ...

Kamo·3mo 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·3mo ago
August 5, 2026
FixDocsService

Mirror Maven Central and retry, so a corrupt transfer stops killing the build

The HR_RESOURCE rebuild failed on hibernate-core:6.5.3.Final with 'Tag mismatch' — a transfer corrupted in flight, not a missing artifact. The shared-lib stage ...

Kamo·3mo 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