Live Change Log

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

17,994
Total Changes
4,654
Features
4,558
Fixes
32
Projects
Filter by project
All Projects17,994AIService112APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService386InitializerService303KBService74KlusterServices547MCPGatewayService43MediaService462RAGService61SecurityService1,531TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,603kamo-login319kamo-marketing588kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,328kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI523Chore670Docs231Feature4,654Fix4,558Other6,781Performance136Refactor274Revert23Style48Test71Upgrade1
August 13, 2026
FixMediaService

Send an outbound attachment to the endpoint its type belongs to

Every social attachment went out through the adapter's sendImage, which on Telegram is /sendPhoto. A PDF or a zip posted there is rejected by the provider, and ...

Kamo·4w ago
Fixkamo-internal

Department speed dial hung on Loading forever

The loader effect listed departmentsState in its deps and set it to 'loading' on entry, so React tore that effect instance down immediately, the cleanup flipped...

kamo·4w ago
Fixkamo-internal

Make Delete actually delete, and select exactly one pill

Delete did nothing. The handler was hung off the pill's focus, and the pill never had focus: preventDefault() in the pointerdown handler — which is there to sto...

kamo·4w ago
Featurekamo-internal

Speed dial lists the org's department extensions

The tab shipped six invented entries — Sales Team on 1001, a Conference Room permanently ringing — so dialling one reached whatever happened to answer that exte...

kamo·4w ago
Featurekamo-internal

Widen chat, social, ai-chat and compose windows to the support size

The support ticket window opens at 460px while member chat, social chat, AI chat and the email composer all sat at 360-420. Same dock, same kind of content — th...

kamo·4w ago
Featurekamo-internal

Show unseen messages on every queue row, not just joined ones

The badge and the row tint were already here — they were simply never populated for most of the list. getUnreadFor read only the live per-session unread map, wh...

kamo·4w ago
FeatureMediaService

Stamp unseen counts on the ticket list, and keep the queue live

getTickets now bulk-loads an unseen-message count per row for the caller, beside the visitor rows it already loads that way, and getTicketDetail computes its ow...

Kamo·4w ago
Featurekamo-shared-library

Count unseen messages for a viewer who is not in the conversation

Unread has always been derived from the viewer's own MediaSessionMember row, so a conversation they had not joined produced no count at all. On a support queue ...

Kamo·4w ago
Featurekamo-internal

Delete, magnets, a right-click menu, and a clock that asks which

Six additions to the period graph and the nav clock. DELETE removes the focused pill. Backspace too, because on a Mac the key labelled "delete" IS Backspace an...

kamo·4w ago
FeatureSecurityService

Relay the punch void

Passthrough for POST /punches/{id}/void, the editor's delete key and the machinery behind merging two adjacent spans. Same authority as /correct, and for the s...

Kamo·4w ago
Featurekamo-shared-library

A punch can be voided without being deleted

Four nullable columns and a second write-once transition on TimecardPunch. A void says the punch should never have existed — a double tap on the clock, an aband...

Kamo·4w ago
FeatureInitializerService

The void columns on hr_timecard_punch

Mirrors four new nullable columns on the TimecardPunch entity. A void is neither a delete nor a correction: it says the punch should never have existed — a doub...

Kamo·4w ago
Fixkamo-meet

Size the org logo to 80% of the join column

The join screen capped the branding logo at 40px tall with objectFit contain, so it rendered letterboxed inside the 300px column and looked undersized no matter...

Kamo·4w ago
FixKlusterServices

Repair the kamouniverse backup, broken since the Yugabyte cutover

Renaming the dead CockroachBackupMissing alert in the previous commit made it fire immediately: no universe backup had succeeded since the 2026-08-09 migration....

Kamo·4w ago
ChoreKlusterServices

Retire CockroachDB now that YugabyteDB owns the data

CockroachDB v24.2.4 was pinned to the last release under the old free BSL terms and was replaced by YugabyteDB on 2026-08-09. Nothing has connected to it since;...

Kamo·4w ago
Refactorkamo-internal

One Plans & Billing screen instead of two that each answered half

The platform had two billing screens. /settings/account?tab=billing answered what the organization pays; Plans & Billing on the member profile answered what a p...

kamo·4w ago
FixInitializerService

Point at YugabyteDB, and stop `mvn test` migrating production

The datasource still named port 26257. That is the retired CockroachDB, which is still running and still answering, so a run against it succeeds completely and ...

Kamo·4w ago
Featurekamo-internal

Show the market onboarding panel when no CRM markets exist

/leads rendered the lead grid with an empty, disabled market tab bar for an org that had never configured a CRM market. It now shows the same onboarding panel /...

kamo·4w ago
August 12, 2026
FixInitializerService

Start again, and stop the billing migration deleting its own index

KamoInitializer could not start at all. Hibernate detects CockroachDialect, whose supportsInsertReturning() and **************** are both false, so an @Id carry...

Kamo·4w ago
Fixkamo-internal

Open at the newest message, and scroll up for the rest

Opening a long conversation showed the oldest loaded message first and then travelled down to the present while the member waited. Both chat surfaces scrolled t...

kamo·4w ago
Featurekamo-internal

The period graph, and a timecard you edit as a draft

Replaces the one-day timeline on **************** with a whole pay period, and changes what editing one feels like. The pills carry no text. They used to carry...

kamo·4w ago
FeatureSecurityService

Relay the editor's period range

Passthrough for GET /members/{id}/range, the period graph's read. from/to are forwarded only when present so TimecardService can resolve the member's own pay pe...

Kamo·4w ago
Featurekamo-internal

Raise a support conversation when somebody replies in it

Closing a support window is not leaving the conversation, but it was treated as if it were. ChatNotificationListener returned early on every SUPPORT_TICKET noti...

kamo·4w ago
FeatureMediaService

One conversation, many hands — join on open, name every message, re-open on a reply

A support ticket is worked by whoever is helping, not only by whoever it is currently stamped with. Assignment decides who the work is offered to and whose list...

Kamo·4w ago
Fixkamo-shared-library

Quote the feed queries' aliases, and stop counting your own support messages against you

Two independent defects in the Chats feed, both invisible from the Java side. The native chat/support/social queries aliased columns in camelCase without quoti...

Kamo·4w ago
Featurekamo-internal

Linkable tabs, a working Add Member, and a full history tab

Every tab on /account/view/{id} is a real route now — /members, /history and the rest are links somebody can send, bookmark, or land on. Old ?tab= links redirec...

kamo·4w ago
FeatureInitializerService

Create ACCOUNT_HISTORY

Mirrors the AccountHistory entity in kamo-shared-library. Written explicitly rather than left to ddl-auto because the defaults matter: ID and DATE_CREATED carry...

Kamo·4w ago
FeatureSecurityService

Account history endpoints, real member rows, an all-members directory

The account view can now say what has happened to an account and who is on it. - Every mutation on the account surface records history: create, field edits, ...

Kamo·4w ago
Featurekamo-shared-library

An audit trail for accounts, and a directory that includes non-staff

ACCOUNT_HISTORY records what happens to an account the way LEAD_HISTORY records what happens to a lead — deliberately the same columns, because the internal sit...

Kamo·4w ago
Featurekamo-internal

Confirm a clock in/out before writing the punch

The nav clock punched straight off the click. Every other control in that bar is idempotent or trivially undoable; a punch is a wage record that afterwards only...

kamo·4w ago
Refactorkamo-internal

One strip — filter and refresh beside the sub-tabs

The controls sat in a second full-width row under the tab strip holding three short words and an icon, spending a whole band of the pane on what fits in the spa...

kamo·4w ago
Fixkamo-internal

Make the option strip yield the room instead of the clusters colliding

The left cluster carried minWidth: 0 while its contents (correctly) refuse to shrink or wrap, so a crowded bar shrank the box below its own content and the cont...

kamo·4w ago
Featurekamo-internal

Segmented status filter in place of the select

Pending/Complete/All are three short peers that fit on one line, so a dropdown hid two of them behind a click and spent a label and a 170px well to say nothing....

kamo·4w ago
Fixkamo-internal

Skeleton tracks the shared grid helpers; test jsonBody's 204 guard

The loading skeleton in app/hr/overview/page.tsx still hand-wrote the 1800px breakpoint that OverviewPillars and friends extracted into primitives.tsx (WIDE_BRE...

kamo·4w ago
Fixkamo-internal

Follow the approval figure into currentPeriod, and stop null reading as zero

SecurityService 7c55054 moved awaitingApproval inside currentPeriod, where the window it describes actually is, and omits it entirely when there is no open peri...

kamo·4w ago
Fixkamo-internal

Two-up figure rows so no card label wraps

The figure labels are Operator Labels — uppercase, 11px, 0.12em tracking — which puts "Execution incomplete" at 158px, "Blocking exceptions" at 150px and "Await...

kamo·4w ago
Fixkamo-internal

Stop the fixed chrome labels breaking across two lines

A flex item's automatic minimum size is its min-content width, which for wrapping text is its widest word — so a crowded bar squeezed these controls narrow enou...

kamo·4w ago
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·4w ago
FixSecurityService

An unreadable close-readiness body is unknown, and the approval count moves into its window

The wrong-path bug is fixed and the response shape is verified, but the CLASS of failure it belonged to was still open: if TimecardService renames `blocking`, d...

Kamo·4w ago
Performancekamo-shared-library

Fetch the summary slices' to-one associations and count instead of scanning

The Overview's attention and recent slices read a title per row off a LAZY @ManyToOne, costing up to 16 extra selects per block under open-session-in-view. All ...

Kamo·4w ago
Fixkamo-internal

One glow on the clock icon, not two around the button

The rule carried BOTH a radial-gradient and a box-shadow. The gradient filled its own box while the box-shadow painted a separate ring outside it — two concentr...

kamo·4w ago
Featurekamo-internal

Slide a crowded nav instead of crushing its options

Pinning more options than a nav can show squeezed the tiles out of shape: both strips were raw overflow boxes and the tiles are flex children with no flex-shrin...

kamo·4w ago
Fixkamo-marketing

Locale-correct structured data, and a robots.txt rule that matched nothing

Every BreadcrumbJsonLd and ItemList URL was hardcoded to /en, so the structured data on /fr/terms told crawlers its breadcrumb parent was the English page — 19 ...

Kamo·4w ago
Fixkamo-internal

Line the card figures up on a shared baseline

Every figure on the masthead and the four pillar cards was its own stacked box — Operator Label above, value below. Operator Labels are uppercase with 0.12em tr...

kamo·4w ago
Fixkamo-internal

Withheld approval state renders as not-tracked, not clear

attendanceState() marked every member 'clear' whenever blockingExceptions was 0 and timecardState wasn't 'SUBMITTED' — true for every member under a caller lack...

kamo·4w ago
FixSecurityService

A failed close-readiness relay leaves awaitingApproval unknown, not a confident zero

With FINALIZE_PAY_PERIODS held, a 5xx/404/unparseable close-readiness response left awaitingApproval sitting at its initial 0 — the WARN log fired but the HR Ov...

Kamo·4w ago
Featurekamo-marketing

Index the collection detail pages in 19 more languages

The sync finished, so the ~2,400 detail pages that were noindexed for having English body copy now have real translations and can be indexed. Measured across al...

Kamo·4w ago
Fixkamo-internal

AwaitingApproval is nullable, and null is not zero

SecurityService now withholds the approval half of the summary from a caller without FINALIZE_PAY_PERIODS — resolveRole never admitted MANAGE_TIMECARDS to appro...

kamo·4w ago
FixSecurityService

Gate the approval half of hr-summary on FINALIZE_PAY_PERIODS

Pointing the composer at close-readiness widened privilege. That relay's own mapping guards with FINALIZE_PAY_PERIODS, and resolveRole does not admit MANAGE_TIM...

Kamo·4w 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