Live Change Log

See what we're building, in real-time. Every feature, fix, and improvement shipped across the platform.

17,905
Total Changes
4,602
Features
4,528
Fixes
32
Projects
Filter by project
All Projects17,905AIService110APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService369InitializerService299KBService74KlusterServices545MCPGatewayService43MediaService460RAGService61SecurityService1,519TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,566kamo-login318kamo-marketing584kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,320kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI523Chore670Docs226Feature4,602Fix4,528Other6,781Performance136Refactor274Revert23Style48Test69Upgrade1
August 6, 2026
FixESigService

Enforce required fields on the server, not just in the browser

submit() validated only consent and step-up; it accepted an empty values list and still marked the recipient SIGNED. Ports validation.ts (esign-core), including...

Kamo·1mo ago
FixESigService

Bind every recipient to a template signer slot

No caller supplied signerUid, so recipients were created without one. buildSession filters a signer's fields by signerUid, so myFields came back empty, completi...

Kamo·1mo ago
Docskamo-internal

Add the legal package entities plan

Phase 1 of the HR Legal & Compliance series: the com.kamo.z.shared.hr.legal entity set and its schema migration.

kamo·1mo ago
Fixkamo-internal

Drive the mail badge from pushed unread counts, not a 30s poll

MailButton ran setInterval(fetchUnreadCount, 30_000) in every open tab, and each tick called /api/email/folders — an endpoint that opens every folder in the mai...

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

Fail the run when a required UNIQUE index cannot be created

ensure() caught Exception and logged, so a failed CREATE UNIQUE INDEX reported success and the service booted with no uniqueness guarantee at all — the one outc...

Kamo·1mo ago
Fixkamo-shared-library

Make the audience FKs and the attested wording actually hold

Five defects from the whole-branch review, all in the evidence path. The audience FKs did not cascade. cascade = CascadeType.DETACH is a persistence-context ca...

Kamo·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo ago
FixInitializerService

Scope empty binders to (MY_DOCS, '') not the owner's member id

The My Docs DocManager never passes an assocObjectId prop, so it always resolves and queries (3, ''). BACKFILL_EMPTY_SQL was scoping empty binders to (3, member...

Kamo·1mo ago
Docskamo-internal

Add the Legal & Compliance design and the binder-scoping plan

The design is the full cross-repo analysis of the HR Legal & Compliance module (package templates, delivery, execution wizard, navtop badge, notification email)...

kamo·1mo ago
Fixkamo-internal

Guard loadBinders by request identity, not scope value

sameBinderScope alone can't tell two in-flight requests for the SAME scope apart (A -> B -> A), so a slower older request could still overwrite a newer one. Tra...

kamo·1mo ago
Fixkamo-internal

Show only the binders belonging to the open collection

OrganizerTab already received assocType/assocObjectId and passed them to the editor's document picker, but loaded the binder LIST unscoped — so every DocManager...

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

Correct javadoc on Hibernate ddl-auto behavior for NOT NULL columns

CockroachDB rejects ADD COLUMN ... NOT NULL without a DEFAULT on a populated table, so Hibernate's ddl-auto attempt fails (logged, non-fatal) rather than no-opp...

Kamo·1mo 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·1mo 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·1mo 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·1mo 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·1mo ago
Fixkamo-internal

Add a close button to the automated-imports manage dialog

The manage popup had no dismiss affordance in its header — only the backdrop and Esc closed it. Add an X icon button beside the edit action.

kamo·1mo 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·1mo ago
Otherkamo-internal

Rename the DocManager Organizer tab to Binders

The tab lists binders, so name it for what it holds. Points the tab label and the row action at the renamed dictionary keys (tabs.binders, addToBinder); the pic...

kamo·1mo ago
Fixkamo-internal

Tell a tool component when its window is maximized

Maximizing a tool window repaints the shell at 100vw/100vh but leaves the window's stored size untouched, and that stored size is what ToolDock hands the compon...

kamo·1mo ago
Fixkamo-internal

Keep fields on the page when a document opens at a remembered zoom

Reopening a document could draw every field small and up in the corner, until one click of the zoom control snapped them all into place. The page box that fiel...

kamo·1mo 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·1mo ago
Fixkamo-internal

Stop replies drawing a gridded copy of the quoted signature

Replying to a message sent from Kamo showed the signature twice: the live one, and above it a mangled version of the quoted original's, drawn as a bordered spre...

kamo·1mo 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·1mo ago
Fixkamo-internal

Number pages against the document the reader gets

Modifiers were keyed off a page's index in the design, which is an identity that survives deletion and reordering, not a position. So deleting page 2 left the p...

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

Stop tracking build output

target/ was committed here, alone among the Java services — every other one ignores it. Compiled classes and surefire reports churn on every build and can only ...

Kamo·1mo 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·1mo ago
Fixkamo-internal

Load the number in the softphone without placing the call

Tapping an extension or a number on a correspondent card passed autoDial, so the call went out the moment the softphone registered. The card opens on hover, whi...

kamo·1mo ago
Fixkamo-internal

Give the card's readout labels room to breathe

The label column was a hand-picked 76px. DEPARTMENT is wider than that, so it overflowed its box and sat flush against its value with no gap, and LOCAL TIME wra...

kamo·1mo 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·1mo ago
Fixkamo-signer-monorepo

Group an imported radio field's buttons natively

The buttons of one AcroForm radio field are imported as separate linked fields, one choice each, so each keeps its own box on the page. They were named after th...

Kamo·1mo 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·1mo ago
Fixkamo-internal

Paint the correspondent card in the tenant's brand colour

The card was tinted with --accent-comms, the fixed indigo the instrument panel uses to mark the messages family. On the solid "New message" button that reads as...

kamo·1mo ago
Fixkamo-internal

Stop dark-mode pastes landing as invisible text in the composer

Copying an answer out of ChatGPT (or any dark-themed page) and pasting it into the compose body produced a large white block with nothing in it, and the message...

kamo·1mo ago
Fixkamo-internal

Share the public join link, not the members-only redirect

A meeting link written into an email was pointing at /meet/join/<id>, which mints a one-time key from the clicker's Kamo session — and redirects anyone without ...

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

Stop Hibernate mangling the "::" casts in the native SQL

Hibernate's native-query parser treats "::" as an escaped colon and forwards a single ":". CockroachDB received **************** ARRAY[]:text[]), ' ') and r...

Kamo·1mo ago
FixEmailService

Keep retrying the indexer's durable NATS consumer after a deploy

A rolling deploy overlaps pods and the outgoing one still holds the durable consumer, so the incoming pod's bind to "email-metadata-indexer" fails with [SUB-900...

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

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing