Live Change Log

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

17,989
Total Changes
4,649
Features
4,558
Fixes
32
Projects
Filter by project
All Projects17,989AIService112APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService386InitializerService302KBService74KlusterServices547MCPGatewayService43MediaService462RAGService61SecurityService1,529TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,601kamo-login319kamo-marketing588kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,328kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI523Chore670Docs231Feature4,649Fix4,558Other6,781Performance136Refactor274Revert23Style48Test71Upgrade1
August 6, 2026
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·1mo ago
Docskamo-internal

Add the legal package CRUD plan

Phase 3 of the HR Legal & Compliance series: DocsService package CRUD, the content fingerprint, publish freezing a byte-pinned version, audience preview, and th...

kamo·1mo ago
Fixkamo-internal

Wire publish and audience preview, and stop rendering a broken label

publishPackage, previewAudience and getPackage shipped with no caller. The templates grid now has a Publish row action — disabled when the package has no binder...

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

Restore external images in email bodies

External images stopped rendering when the page-level image policy shipped. The middleware sets `img-src 'self' data: blob: https://theme.<apex> https://*.<apex...

kamo·1mo ago
Docskamo-internal

Add the signing-correctness plan

Phase 2 of the HR Legal & Compliance series, shippable on its own: signer-slot binding, server-side required-field enforcement, invite suppression, and recipien...

kamo·1mo ago
Fixkamo-internal

Cap the send dialog's recipients at the template's declared slots

The Send for signature dialog seeds one recipient row and offers an unbounded "Add recipient", but it never fetched the template's signer slots. ESigService rej...

kamo·1mo ago
Refactorkamo-internal

Drive the remaining polled screens from NATS/WebSocket

Fifteen network polls across the app, replaced with the events that were already happening or with events added to the services that own the state. Mail — the ...

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
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
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
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
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
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
Fixkamo-internal

Stop recipient names being clipped to a letter

The chips were inline-flex boxes whose label carried `truncate`. A flex child with overflow hidden is allowed to shrink below its own content, and nested inside...

kamo·1mo ago
Refactorkamo-internal

Put per-file upload settings inline to halve card height

The Description/Folder/Doc Type/Access Level fields sat on a second line under the file row, so every pending upload cost ~108px. Move them into the top row bet...

kamo·1mo ago
Fixkamo-internal

Drop the inset around the Resources document manager

DocManager brings its own toolbar and grid chrome, so the 32px wrapper padding was only shrinking the grid inside an already-bounded pane. The wrapper stays as ...

kamo·1mo ago
Featurekamo-internal

A contact card behind every name on a message

Every person shown in a read view was a dead end. To and Cc rendered as displayNameFor(a).join(', ') — a comma wall of display names with no address, no hover, ...

kamo·1mo ago
Fixkamo-internal

Show the full section-index rail instead of a nested scrollbar

The left nav rail was capped at calc(100vh - 128px) with overflowY: auto, so an org with most features enabled (up to 18 sections across 4 groups, ~710px) grew ...

kamo·1mo ago
Fixkamo-internal

Portal the break-glass dialog to the body

Clicking break glass opened the dialog inside the nav rail instead of over the page. The overlay is a bare fixed-position motion.div, not a MUI Dialog, so it ha...

kamo·1mo ago
Fixkamo-internal

Proxy foreign org logos so the tenant img-src policy can't block them

/network is the one page that renders another tenant's branding: it lists every organization in the network and loads each logo from that org's own theme.<domai...

kamo·1mo ago
Fixkamo-internal

Merge a caller's query with the browser's instead of concatenating

forwardToApi appended the browser's query string to whatever it was given, so a caller passing its own query produced a URL with two '?'. Everything after the f...

kamo·1mo ago
Fixkamo-internal

Keep upload Folder/Doc Type labels shrunk over native selects

The per-file Folder and Doc Type selects start with an empty value, so MUI left their labels at rest position while the native <select> still painted its first ...

kamo·1mo ago
Fixkamo-internal

Let a tab fill the content area, so the document manager gets full height

The content wrapper was a plain block, so a page's `flex: 1` had no flex parent to resolve against and the wrapper sized to its contents. DocManager's root is `...

kamo·1mo ago
Fixkamo-internal

Merge same-named vendors and products in the filter bar

An org routinely holds one lead supplier under several vendor records, so on the "All Markets" tab the Vendor dropdown listed the same name once per record — id...

kamo·1mo ago
Fixkamo-internal

Remove the filter button from datagrid column headers

AG Grid 32 defaults to the "new" column menu. On Community (no enterprise module) that means no header menu button ever renders — the only header-cell affordanc...

kamo·1mo ago
Fixkamo-internal

Drop the description line above the Resources document manager

It described a tab that now shows its own contents, so it was only taking space. descriptionKey goes optional rather than staying as an unrendered string: a tab...

kamo·1mo ago
Fixkamo-internal

Stop double-appending the query string on the communications route

All / Calls / Texts / Emails failed with "We couldn't load this lead's communications". The backend was fine — direct calls returned 200 with real entries. The ...

Kamo·1mo ago
Featurekamo-internal

Resources tab is the org's HR document library

Replaces the Resources placeholder with DocManager on a document collection of its own — ImageAssocType.HR_RESOURCE, bucket imaging-hr-resources — org-scoped th...

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