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
November 8, 2026
FeatureDocsService

Held Office files and photos are first-class held legal uploads (no 45 s wait)

A requested-document upload Antivirus holds while busy is recorded at once for EVERY kind (antivirus_status PENDING, pinned by the original's content triple) an...

KamoΒ·3d ago
FeatureDocsService

Adopt a newer library edition; matrix cells carry assignment uids

POST **************** **************** moves an adopted requirement to the newest preset edition (wording and switches; the org's enabled/audience kept) and its...

KamoΒ·3d ago
FeatureDocsService

Compliance Requirements engine, Platform Library (Form W-9), withdrawal gate API

A generic engine: Requirement -> Compliance Record (on file) -> Triggers -> Gates. Its first configuration is the Form W-9 before a commission withdrawal. - Pl...

KamoΒ·3d ago
FeatureDocsService

Legal uploads use the Antivirus hold path instead of 'try again'

A requested-document upload that Antivirus holds (engines busy) no longer answers 503. A native PDF is its own rendition, so it is recorded at once, pinned by i...

KamoΒ·3d ago
FeatureDocsService

Turn Antivirus scanning on in docsservice

KamoAntivirus is Ready (StatefulSet kamowsantivirus 2/2, /readyz ready, release 2026.11.08.0101); a direct scan from the cluster returns MALICIOUS/TEST_FILE for...

KamoΒ·3d ago
FeatureDocsService

Assignment rows say what the member still owes

Adds signableOutstandingCount (signable documents not yet signed) and uploadsOwedCount (required requests with no live file) to each assignment row, so the memb...

KamoΒ·3d ago
FeatureDocsService

DocsService refuses locked documents everywhere and checks editor saves

- WOPI PutFile writes raw MinIO, so the save goes through AntivirusUploadGuard first: a harmful save writes nothing, keeps the document's last good content an...

KamoΒ·3d ago
November 7, 2026
FeatureDocsService

A returned signed document comes back prefilled, and the member can see what was marked

When HR returns a signed document, the fresh envelope now carries the member's earlier answers (read from ESigService's new internal field-values route and sent...

KamoΒ·3d ago
FeatureDocsService

Requested documents, HR review, Quick Requests and the SI pre-check

Members can now be asked to UPLOAD documents in a Legal & Compliance package, and a package can require an HR review before it is executed. Authoring (/api/doc...

KamoΒ·3d ago
October 11, 2026
FeatureDocsService

Declare the disclosure ledger recorder, paired with its repository scan (KamoCollab CP08 Task 13)

DisclosureLedgerConfig declares DisclosureRecorder; DocsServiceApplication's @EnableJpaRepositories gains **************** in the same commit. DisclosureLedgerW...

KamoΒ·4w ago
September 28, 2026
FeatureDocsService

The platform's careers site is careers.kamouniverse.com, and careers.kamocrm.com keeps its board

kamouniverse.com is the platform's primary apex; kamocrm.com stays a fully served legacy apex. - careers.platform-apex (where a job advert, an applicant's rece...

KamoΒ·1mo ago
September 27, 2026
FeatureDocsService

The document list searches file names when searchQuery is given

DocumentListRequest.searchQuery was accepted and never read, so a search returned the newest documents whatever was asked. A non-blank searchQuery now keeps the...

KamoΒ·1mo ago
FeatureDocsService

Show inherited qualifications on a posting's detail

A posting's public advert, the member's deep link and HR's editor now carry qualifications: [{category, importance, text}] (KamoAI SP03 D1) - the effective QUAL...

KamoΒ·1mo ago
September 25, 2026
FeatureDocsService

DocsService announces its own writes

KamoΒ·1mo ago
September 23, 2026
FeatureDocsService

Audio slides β€” media metadata, and learners play media through their assignment

An audio slide's navigation lives in media_meta_json (duration, waveform peaks, chapters), which the editor writes and the player reads back verbatim. It is sav...

KamoΒ·1mo ago
September 18, 2026
FeatureDocsService

The uploader's member id travels with the list and the history

The document list (/imaging/list) and a document's history carried the uploader's name only, so kamo-internal could show who uploaded a file but not open their ...

KamoΒ·1mo ago
September 11, 2026
FeatureDocsService

A save reaches every colleague with the template open

A save of a template's file told only the member who saved it, so a colleague with the same template open kept placing fields over pages the file had moved on f...

KamoΒ·2mo ago
FeatureDocsService

Read a template's layer by design version

The version history draws a template's fields over each version's pages. It asked for them through a document version (/{imgId}/{n}/design), and a template's wo...

KamoΒ·2mo ago
FeatureDocsService

Files and templates, edited in place, with the versions each category keeps

A document was two records: the upload, which nothing edited, and one modified copy derived the first time anyone opened it in either editor. The Docs manager s...

KamoΒ·2mo ago
September 9, 2026
FeatureDocsService

Serve the document categories from the enum that defines them

The docs settings page named its own categories and sent the ordinal it believed each one had. Those ordinals were written when ImageAssocType was six constants...

KamoΒ·2mo ago
September 6, 2026
FeatureDocsService

Gate the member board on being a team member with a role open

The member Careers tab now appears on two conditions and no right among them: the viewer is a team member, and the organization has at least one posting open an...

KamoΒ·2mo ago
September 5, 2026
FeatureDocsService

Retire applying without an account, and notify both sides of one that lands

The public board's Apply button is now a link into registration, so this drops the endpoints behind the old form: /{orgRef}/apply/{uid} in both content types, /...

KamoΒ·2mo ago
September 4, 2026
FeatureDocsService

Lock the shared sweeps, and run two pods

Every @Scheduled sweep here whose effect is shared now takes a named distributed lease through SingletonTaskRunner before it does anything, so it runs once acro...

KamoΒ·2mo ago
FeatureDocsService

The CV reader, employee referral links, and the form shape on the public listing

Three things the public careers site needed from this service. The form shape now rides on the public listing (the twelve ask* settings, the additional-info pr...

KamoΒ·2mo ago
FeatureDocsService

Apply-first, the job network, alerts, translation and retention

Eight things, all behind the anonymous careers surface, and all sharing the rules the single-org board already enforces rather than growing their own. APPLY-FI...

KamoΒ·2mo ago
FeatureDocsService

The anonymous API behind careers.<apex>

The public job board reads this. It is the only surface in Careers with no session, so the safety comes from the QUERY rather than from a rights check: PublicCa...

KamoΒ·2mo ago
September 3, 2026
FeatureDocsService

/api/docs/careers β€” job postings, the member board, and applying

Two controllers behind one feature, and the split is the point. /careers/** is HR's and requires MANAGE_JOB_POSTINGS; /careers/member/** is the employee's and r...

KamoΒ·2mo ago
September 2, 2026
FeatureDocsService

Fill a rectangle, honour a highlight's opacity, and redact

Three things about the way a prepared document renders the designer's marks. A rectangle was drawn as an outline, so the fill a member now picks to cover somet...

KamoΒ·2mo ago
August 22, 2026
FeatureDocsService

Announce a classic save to the member who made it

A WOPI save on a CLASSIC version now publishes docs.classic-saved.{memberId} so the Kamo PDF editor, if it is open on the form-fillable version, can redraw the ...

KamoΒ·2mo ago
FeatureDocsService

Save As branches a new original, not a new copy of one

PutRelativeFile was unimplemented, so "Save As" in the LibreOffice editor did nothing. It now does what the member means by it: the bytes become a brand-new ORI...

KamoΒ·2mo ago
FeatureDocsService

Derive modified versions instead of editing originals

Opening a document in the LibreOffice editor no longer hands over the original. It derives that document's CLASSIC version β€” once, reused every time after, and ...

KamoΒ·2mo ago
August 21, 2026
FeatureDocsService

Serve and sync the Selected Docs binder

POST /api/docs/binders/scratch fetches the caller's Selected Docs binder for one collection, creating it on first use, and replaces its documents with the grid ...

KamoΒ·2mo ago
August 14, 2026
FeatureDocsService

The outstanding-course badge moves when the course does, not a minute later

The NavTop obligation badge sums two counts β€” packages to sign and courses to take β€” and only one of them was live. The legal half has pushed since its NATS blo...

KamoΒ·2mo ago
FeatureDocsService

GET/PATCH the org's default legal text

/api/docs/legal/settings, behind the same guarded() funnel as every other mapping on this controller. The read NEVER creates a row: it resolves to LegalDefault...

KamoΒ·2mo ago
August 12, 2026
FeatureDocsService

Legal, training and resource summary for the HR Overview

One read per tab domain, each block gated on its own right and omitted rather than refused when out of reach.

KamoΒ·3mo ago
August 11, 2026
FeatureDocsService

The complete HR Training backend

Course authoring, publishing, assignment, the member player, server-side grading, WORM evidence and the reminder sweep β€” the whole module behind /api/docs/train...

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

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