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
FixDocsService

A held photo's PDF rendition is marked converted by a targeted update

Found by the live held-JPEG test: on LegalHeldUploads' background thread the stored rendition ImgDat is detached, and save() merged its orphan-removal 'images' ...

KamoΒ·3d ago
FixDocsService

Certificates name people by name and email, never by member id

The Executed Package Certificate and the Review Certificate printed raw member ids ("Sam Supervisor (1200096283021512387)"). They now show the name plus a human...

KamoΒ·3d ago
FixDocsService

An approved package is filed, not left EXECUTION_INCOMPLETE

**************** called imgDatRepository.save on the ImgDat that uploadDocument returned from its own transaction. The entity is detached, so save() merges it a...

KamoΒ·3d ago
November 7, 2026
FixDocsService

Reviewer notices skip the platform System User

The System User is an administrator of every organization, so it holds REVIEW_LEGAL_SUBMISSIONS everywhere and every submission in every org mailed hr.package_n...

KamoΒ·3d ago
FixDocsService

The SI pre-check card settles when a package has a No Review item

The pre-check reads SUBMITTED submissions only, and an item whose review is off is sealed ACCEPTED at finish, so its files were never read. The review workspace...

KamoΒ·3d ago
FixDocsService

Legal, careers and training emails present EmailService's own secret

DocsService sent X-Internal-Auth from internal.auth.secret, which is ESigService's secret (***). EmailService's InternalAuthFilter compares against mlos-interna...

KamoΒ·3d ago
FixDocsService

Send phone JPEGs to ConversionService so they arrive upright

A portrait phone photo is stored on its side with an EXIF orientation tag. LegalUploadStore converted JPEGs in-process with ImageIO, which ignores the tag, so a...

KamoΒ·3d ago
October 18, 2026
FixDocsService

Binders and the share lists take VIEW_DOCUMENTS (SITP TP14)

Every BinderController route (list, get, create, scratch, update, duplicate, delete, items, reorder, shares, render) took a session alone, so a member without V...

KamoΒ·3w ago
FixDocsService

/imaging/download answers its bytes again instead of 500 (SITP TP13)

Since d1a8762 the download body was a StreamingResponseBody inside the method's ResponseEntity<?>. Spring hands a StreamingResponseBody to its streaming handler...

KamoΒ·3w ago
FixDocsService

Stop logging the database password at startup

com.zaxxer.hikari at DEBUG makes HikariConfig print its whole configuration on every start, including dataSourceProperties {password=...} and password......; Pr...

KamoΒ·3w ago
October 14, 2026
FixDocsService

A resume whose bytes are already stored records the key they were stored under

Same rule as the other content-addressed attach paths (shared library abaec95b): fileExt is part of the storage key, so a resume already held under another name...

KamoΒ·3w ago
October 7, 2026
FixDocsService

Tell TranslateService to stop before this client does

The careers client reads for 60 seconds, and TranslateService worked to its own default of 100, holding a LibreTranslate worker for 40 seconds after nobody was ...

KamoΒ·1mo ago
September 28, 2026
FixDocsService

Docs trusts api.kamouniverse.com and serves docs.kamouniverse.com

A member signed in on internal.kamouniverse.com (the platform's primary apex since 2026-09-28) opens a document with **************** because DocumentController...

KamoΒ·1mo ago
September 23, 2026
FixDocsService

Pin kamo-shared-library 1.6.1, the only version that exists

The library moved to 1.6.1 and this service still asked for 1.6.0. There is no window in which both resolve: the library is never published to a remote, so the ...

KamoΒ·1mo ago
FixDocsService

DocsService is no longer published directly at docs-api.kamocrm.com

The docs-api-ingress IngressRoute sent the internet straight to DocsService, around the api gateway (and its identity-header stripping). Nothing used the host: ...

KamoΒ·1mo ago
FixDocsService

Require MANAGE_DOCS_SETTINGS on every doc-settings mutation, not just some

The settings page always sent a member without MANAGE_DOCS_SETTINGS away, but ten mutation endpoints in ImagingSettingsController never asked themselves: canMan...

KamoΒ·1mo ago
FixDocsService

Scope thumbnail backfill to the caller's org; gate history reads by clearance

Two independent gaps in ImagingController: - /backfill-thumbnails selected candidates platform-wide (no organization predicate at all; the last-resort tier w...

KamoΒ·1mo ago
FixDocsService

Throttle the anonymous careers talent-alert form

CareersPublicController's POST /{orgRef}/alerts is the one anonymous, unauthenticated endpoint in this service that sends an email on every accepted call, with ...

KamoΒ·1mo ago
FixDocsService

Apply the per-party/issued/trashed checks everywhere byte-adjacent paths need them

**************** applied the issued-document check but not the per-party (ACCOUNT_MEMBER_VAULT/LOAN) or trashed-row checks that /download, /stream and the sibli...

KamoΒ·1mo ago
FixDocsService

A document share now actually reaches its recipient, and edit is gated

**************** matched an ImgShare by ImgShare.member β€” the SHARER, who created the row so they can list what THEY shared (getSharesByImage) β€” instead of ImgS...

KamoΒ·1mo ago
FixDocsService

Re-check clearance when rendering a binder's document items

BinderItem pins the Img row it was built from at assembly time. BinderRenderer.renderItem handed that Img straight to **************** with no check at all for ...

KamoΒ·1mo ago
FixDocsService

Stop trusting any https://api.<anything> as a Docs WOPI host

k8s/Docs-deployment.yaml's aliasgroup1 was 'https://api\..*'. Docs's alias matcher (RegexUtil::getValue, std::regex_match) requires only that the WHOLE candidat...

KamoΒ·1mo ago
FixDocsService

Gate chat attachments, voicemails and call recordings by more than org+clearance

MediaService/telephony store chat attachments (CHAT_ATTACHMENT) and voicemail/call recordings (VM_RECORDING, CALL_RECORDING) at ACCESS_LEVEL 0. Every generic im...

KamoΒ·1mo ago
FixDocsService

Bind every WOPI endpoint to the document its token was minted for

CheckFileInfo was the only WOPI endpoint that both compared the access token's document against the request path and re-checked live access; GetFile, PutFile, P...

KamoΒ·1mo ago
September 18, 2026
FixDocsService

A document's history loads, and names the people on it and on its shares

GET /imaging/history/changes and /history/downloads built each row with Map.of, which throws on a null β€” and a row with no IPv6 address, no prior data or no mem...

KamoΒ·1mo ago
September 13, 2026
FixDocsService

Accept OCI image indexes when resolving the built digest [skip ci]

The images are pushed as OCI image indexes, so asking the registry for a single image manifest only answered 404, the digest came back empty and the check faile...

KamoΒ·1mo ago
FixDocsService

Restart when a same-commit rebuild leaves pods on the old digest [skip ci]

The rollout step tried to detect a same-commit rebuild by comparing the Deployment's image reference before and after `set image`. "Apply manifests" has already...

KamoΒ·1mo ago
September 11, 2026
FixDocsService

Sharing a document works again, as someone who can read it

The share dialog sends a document id as a string β€” an img id is an int64 past 2^53, which a JSON number would round β€” and createShare cast it to Number. Every s...

KamoΒ·2mo ago
September 10, 2026
FixDocsService

Legal, training and careers emails link only to live hosts

- Legal: the org's console (OrgLinkHosts.internalOrigin) and the member page's Legal & Compliance tab. It linked the bare apex, which serves the marketing s...

KamoΒ·2mo ago
September 9, 2026
FixDocsService

A rename answered with no Url skips Docs's rename callback

Docs shares one client-side callback between RenameFile and Save As, and **************** skips its whole body β€” the File_Rename event the embedding page listen...

KamoΒ·2mo ago
FixDocsService

Losing the race to store identical content is not a failed save

The look-up before the ImgDat insert is not a lock, and kamowsdocs runs two replicas behind one gateway β€” two documents whose bytes are identical (two members c...

KamoΒ·2mo ago
FixDocsService

A Save As that changes format is not the source document's type

uploadDocument refuses an upload whose claimed MIME type disagrees with what it detects from the bytes, and saveAsNewDocument claimed the type of the row it was...

KamoΒ·2mo ago
FixDocsService

A Docs save could not store bytes the platform already held

Saving a document twice, and renaming one, both ended in "Document cannot be saved, please check your permissions" β€” and after five retries Docs gave up and dis...

KamoΒ·2mo ago
September 5, 2026
FixDocsService

Retry the two reads a catalog bump broke document editing with

WopiController.checkFileInfo is called repeatedly through an editing session β€” on open, around locks, after every save β€” so a conflict on its organization looku...

KamoΒ·2mo ago
FixDocsService

Prove the deploy by digest, not by tag

The preceding commit stops `set image` being a silent no-op. This asserts the outcome: after the rollout, the tag is resolved to a digest at the registry and th...

KamoΒ·2mo ago
FixDocsService

A rebuild of the same commit deployed nothing and reported success

The image is tagged with the commit SHA, so rebuilding the same commit produces an identical image reference. `kubectl set image` then changes nothing, the Depl...

KamoΒ·2mo ago
September 4, 2026
FixDocsService

Let a rollout finish what the old pod was doing

Deploys replaced the only pod of each service with nothing to catch the requests in flight. Three settings, applied across the fleet: - preStop sleeps 10s befo...

KamoΒ·2mo ago
FixDocsService

Three self-invoked transactions that were doing nothing

@Transactional and @Async are PROXIES. A call from inside the same bean never reaches one, so all three of these annotations were inert. Found by audit, not by ...

KamoΒ·2mo ago
FixDocsService

A country is not its enum name

Every card on every careers surface has been printing "United states" β€” the words after the first lose their capitals when an enum name is prettified β€” and "CΓ΄t...

KamoΒ·2mo ago
September 3, 2026
FixDocsService

A REQUIRED resume is now actually enforced

A review of my own commit found the enforcement it claimed. JobApplicationService carried the comment "a REQUIRED resume is enforced at that point by requireRes...

KamoΒ·2mo ago
August 27, 2026
FixDocsService

A document whose bytes are gone answers 410, not 500

The streaming download caught every storage failure as one unexpected error and returned 500, which tells a reader nothing and leaves a viewer with a blank erro...

KamoΒ·2mo ago
August 21, 2026
FixDocsService

Let an unscoped binder hold its own grid's documents

sameCollection demanded an exact assoc_object_id match in both directions, which made every binder in My Docs refuse every document My Docs was showing it. The ...

KamoΒ·2mo ago
August 15, 2026
FixDocsService

The document verbs are enforced, as the org's security model resolves them

ImagingController checked ImageAccessLevelType and nothing else, and DocumentController checked only that a session existed. Access level is a real control but ...

KamoΒ·2mo ago
August 14, 2026
FixDocsService

Enforce the doc-share alias rights server-side

GET /shares/resolve-alias turns a guessable alias into a real person's NAME and required only a valid session. The rule lived solely in ShareDocumentDialog, and...

KamoΒ·2mo ago
FixDocsService

Writing the org legal settings needs BOTH HR rights

The Legal & Compliance settings tab is the only writer and is now offered only to a member holding MANAGE_HRS_SETTINGS *and* MANAGE_LEGAL_AND_COMPLIANCE, so the...

KamoΒ·2mo ago
FixDocsService

Connect DocsService to NATS so the badge lights without a refresh

LegalPendingCountPublisher takes its NATS Connection as required=false and returns quietly when it is null. The shared NatsConfig is **************** and this C...

KamoΒ·2mo ago
August 12, 2026
FixDocsService

One snapshot per block, and figures that say what they measure

Both summarize methods are @Transactional(readOnly = true). Each issues six or seven reads whose figures are cross-checked ACROSS query boundaries: countOverdue...

KamoΒ·3mo ago
FixDocsService

Fill the per-member overdue rollup instead of sending zero

Both summary services built members[] with .overdue(0). The Overview's matrix branches on that field, so legal and training could only ever render amber or gree...

KamoΒ·3mo ago
FixDocsService

Bound the Resources block to count/sum/recent queries

**************** was loading the org's entire non-hidden HR_RESOURCE Img collection into memory to filter trashed, sum bytes and take 5 recent rows in Java β€” un...

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

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