Live Change Log

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

17,845
Total Changes
4,566
Features
4,508
Fixes
32
Projects
Filter by project
All Projects17,845AIService110APIService138BillingService132ConversionService85DaemonService107DocsService189ESigService78EmailService347InitializerService299KBService73KlusterServices539MCPGatewayService43MediaService459RAGService61SecurityService1,515TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,546kamo-login318kamo-marketing580kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,319kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI522Chore669Docs226Feature4,566Fix4,508Other6,781Performance136Refactor273Revert23Style48Test68Upgrade1
September 11, 2026
FeatureMediaService

The faces answer says how many people are in the conversation

GET **************** now carries `participants`: the console puts a face beside each message only when three or more people are in a conversation, since between...

KamoΒ·2h ago
FeatureMediaService

A face for every message in every chat window

GET **************** answers, for one conversation, the photo to draw beside each message: everybody on it now AND everybody who ever wrote in it (a roster forg...

KamoΒ·11h ago
FeatureMediaService

A meeting link in the conversation, always on the platform's Kamo Meet

POST **************** lets either side of an Exec2Exec conversation add a meeting link, behind the same gate as sending a message. The meeting is created as the...

KamoΒ·11h ago
FeatureMediaService

Faces on the desk β€” a client's photo, last sign-in and presence

The desk's roster now carries, for every client, their own photo (users.avatar_id, built on the operator's live theme host β€” the only one their console loads im...

KamoΒ·12h ago
FeatureMediaService

A conversation reaches the phone

A message on an Exec2Exec line now goes to the recipients' phones as well as their consoles: the customer's phone when KamoCRM replies, every desk member's phon...

KamoΒ·14h ago
September 10, 2026
FixMediaService

Chat and bug emails link to the console the recipient can reach

ChatEmailNoticeService named the recipient org's first domain whatever its state. The reported case: Exec2Exec letters to makeitpopsigns.com, sent before its DN...

KamoΒ·20h ago
FeatureMediaService

The desk's count of client messages not yet viewed

GET **************** returns how many messages from clients this EXEC2EXEC_ACCESS holder has not viewed, across every conversation, and each roster row carries ...

KamoΒ·20h ago
FeatureMediaService

Seat the whole desk on every chat, show who is on it, close the chat feeds

- Standing membership: every explicit EXEC2EXEC_ACCESS holder sits on every Exec2Exec conversation. Exec2ExecDeskReconciler seats and unseats from the grant...

KamoΒ·21h ago
TestMediaService

Parse the desk's audience query at test time

findHolderMemberIdsOf lives in the shared library, so nothing in this package parsed it β€” and a mistyped path there crash-loops MediaService at boot, every endp...

KamoΒ·1d ago
FixMediaService

A customer's message reaches the desk, not only the thread

An executive wrote into their Exec2Exec chat and nobody at KamoCRM heard. announce() told the session's own members, and an operator is only a member of a conve...

KamoΒ·1d ago
FeatureMediaService

Serve the executive channel

A conversation with its own audience rule and no ticket machinery, following SystemBug's shape: its own package, its own controller, its own visibility, and Med...

KamoΒ·1d ago
FixMediaService

An announce that throws must not roll back the buy-in

`announceToConversation` runs INSIDE the transaction that seats the host and charges them β€” unlike `announceTable`, which the controller calls after the fact. T...

KamoΒ·1d ago
FixMediaService

Colleagues in the invite list, and an invitation from a chat that arrives

Two reported defects, both in who a table can reach. **The invite dialog offered accounts.** `invitableFor` read `members.findByOrganizationId`, and an organiz...

KamoΒ·1d ago
September 9, 2026
FeatureMediaService

No empty tables, numbered tables, and one table per member

Four rules, all of them things a member reported seeing broken. EMPTY TABLES. A lobby showed three tables while one game was being played. Two had no seats at ...

KamoΒ·2d ago
TestMediaService

Prove the endpoints actually CONSULT the entitlement, not just that it works

GamesEntitlementTest proves the gate answers correctly. Nothing proved the three controllers ask it β€” and that distinction is the entire defect this change set ...

KamoΒ·2d ago
FixMediaService

A hand shown on the flop is five cards, and gets a name

`showHand` named a hand only with a full five-card board, while `finishHand` scores one from three β€” and two hole cards plus a three-card flop ARE a five-card h...

KamoΒ·2d ago
FeatureMediaService

Show the hand nobody made you show

A pot taken with everybody folding is the one hand at the table whose contents only its owner knows, and there was no way to say what it was. Showing a bluff is...

KamoΒ·2d ago
FixMediaService

A raiser could raise again after being called

One character, and it decided pots. `canRaise` is exactly `!actedThisStreet`, so that boolean is the whole of "may you raise". The service reconstructs it from...

KamoΒ·2d ago
FeatureMediaService

Opening a table buys you into it, and the last one out closes it

Both ends of a table's life allowed the same thing: a table with nobody at it. OPENING ONE COST NOTHING AND SEATED NOBODY. A host could put a table in front of...

KamoΒ·2d ago
September 8, 2026
FeatureMediaService

The plies, and how long each one took

Two things the move panel needs, neither of them on the published frame. `GET /games/{id}/moves` hands over every ply in order. It is a separate read rather th...

KamoΒ·2d ago
FixMediaService

Chess, Hold'em and the wallet never asked whether the org has the app

The companion to the kamo-internal commit, and the half that actually mattered. The browser gate was cosmetic: ChessController, HoldemController and CheddarWall...

KamoΒ·2d ago
FixMediaService

A re-let chair was handed the previous occupant's mucked hand

Two defects the linger made reachable, found by reviewing the commit that added it. THE REDACTION. viewFor matched hand-seat rows to seats by seat NUMBER alone...

KamoΒ·2d ago
FixMediaService

The felt never saw a showdown, and a fold-out pot was counted twice

Two defects that were invisible for the same reason, and the data a poker table needs to present a result at all. THE SHOWDOWN NOBODY COULD WATCH. finishHand()...

KamoΒ·2d ago
FixMediaService

New table 500'd on a ternary that unboxed a null button

Pressing New table answered 500: NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because the return value of HoldemTable.getButtonSeat()...

KamoΒ·3d ago
PerformanceMediaService

Stop rebuilding the wallet and the guest list on every check

`viewFor` fetched the recipient's Cheddar balance and queried the whole organization's member list β€” both per RECIPIENT, on every published frame. At a full tab...

KamoΒ·3d ago
FixMediaService

The clock could never have fired, and a full all-in re-opened nothing

Two defects found by reading the code back, neither of which any test could see. ## The clock would have thrown on its first tick `HoldemDeadlineSweep` carrie...

KamoΒ·3d ago
FixMediaService

Spring Data does not register a NESTED repository interface

MediaService crash-looped on the Hold'em image. The six repositories shipped as nested interfaces inside one `HoldemRepositories` class β€” one file rather than s...

KamoΒ·3d ago
FeatureMediaService

A server-authoritative Texas Hold'em, and the Cheddar wallet seam

Up to ten players a table, started from any conversation, with anyone else in the organization invitable into it. Every rule lives here; the browser owns none. ...

KamoΒ·3d ago
FeatureMediaService

The chat entry is a door to the pair's board, and you can ask them back

Two colleagues who have played once have a board together for good. So the chat entry stops offering to introduce them: `gameWith` answers with the SHARED game ...

KamoΒ·3d ago
RefactorMediaService

The frame stops carrying an archive nothing renders

The window's notation panel is gone β€” the captured pieces have that space β€” so `moveList` and `fenHistory` came off the published view. `fenHistory` alone was s...

KamoΒ·3d ago
FixMediaService

Map.of throws on a null value, so "no game yet" was a 500

`gameWith` answered with `Map.of("game", …)`, and `Map.of` rejects a null value with a NullPointerException. So the one endpoint whose documented normal answer ...

KamoΒ·3d ago
FeatureMediaService

The inviter plays immediately, and the invitee is told when it is their turn

An invitation used to produce a board the inviter could look at and not touch, waiting on somebody who might be away from their desk. Now the game is running fr...

KamoΒ·3d ago
FixMediaService

Let a refusal keep the sentence it was written with

The chess code refuses with reasons meant to be read β€” "not your turn", "this game is not in play", "illegal move". None of them reached anybody. `server.error....

KamoΒ·3d ago
RefactorMediaService

Drop a field that was always false and a statement that did nothing

`aiThinking` was on every published board and was never once true β€” the AI answers inside the request that provoked it, so the window that asked already knows i...

KamoΒ·3d ago
OtherMediaService

Stop letting one bad boot deafen the VOIP relay for the pod's life

The relay subscribed once, from @PostConstruct, and never again. When VOIPService's voip.> stream did not exist β€” which it did not β€” both replicas logged exactl...

KamoΒ·3d ago
FeatureMediaService

A whole game of chess, server-authoritative, over NATS

The rules live in ONE place and it is this one. ChessEngine implements the whole ruleset β€” move generation, legality under pin and check, castling, en passant, ...

KamoΒ·3d ago
September 7, 2026
FixMediaService

Stop writing "/" as the destination of a review notification

The Growth Hub has no screen of its own β€” kamo-internal's widgetRegistry says so where it decoders to give the widget an href: "the widget IS the feature". So t...

KamoΒ·3d ago
FeatureMediaService

A reporter filter, for platform team members only

The board is global β€” every organization sees every report β€” and what protects a customer is SystemBugIdentityPolicy withholding WHO filed a row. A control that...

KamoΒ·3d ago
FeatureMediaService

An approval settles the member's achievement

Approving a submission now tells SecurityService to recount that member's SPREAD_THE_WORD standing, so the trophy lands in the same second as the decision rathe...

KamoΒ·4d ago
FeatureMediaService

The queue a member works through, and the queue an admin reviews

MediaService's Growth Hub surface at /api/media/marketing/growth. It owns this for the same reason it owns tracking, the scoreboard, materials and Canva β€” and b...

KamoΒ·4d ago
FeatureMediaService

Relay an unlock to the member it happened to, and to nobody else

SecurityService publishes **************** on core NATS; this puts it on **************** Same arrangement as the training badge, and for the same underlying re...

KamoΒ·4d ago
TestMediaService

Parse every declared query, not the two somebody remembered

The three queries this feature added were never parsed by anything. That matters more than a wrong predicate would: Spring Data validates every @Query while it ...

KamoΒ·4d ago
FixMediaService

A redacted status event kept its type, and pin the redaction

Two things, both found by writing the test for the actorName path rather than by reading it. messageType was being read off the body AFTER redaction. redactEve...

KamoΒ·4d ago
FeatureMediaService

Open the board to every org, withhold who filed each report

The tenancy check is gone from visibleOr404 and from all four queries, so every organization can read, comment on and vote on every report. SystemBugIdentityPol...

KamoΒ·4d ago
September 6, 2026
FixMediaService

Stop the presence gate silencing every mail notification

A member with a live MediaService socket was treated as having already seen every non-call push, mail included. That is true of what travels on that socket β€” a ...

KamoΒ·4d ago
FeatureMediaService

The thread page names its reader, and drops an unused helper

`viewerMemberId` on the thread page, so the console can tell the viewer's own reactions from everybody else's without a second call to /api/user-info. A ref fil...

KamoΒ·4d ago
FeatureMediaService

The thread behind a report, and the two statuses that need one

`SystemBugThreadService` is the whole feature: a report's MediaSession, the status events written into it with the reason their author gave, the comments anybod...

KamoΒ·4d ago
FeatureMediaService

Let the reporter confirm their own fix, and carry a denial's reason

Adds POST /{id}/verify-fix β€” the one status change in this feature that is not gated on MANAGE_SYSTEM_BUGS. A separate endpoint rather than a hole in the one be...

KamoΒ·5d ago
FeatureMediaService

Relay coder usage onto a per-member topic

menu subscribes to over the existing chat STOMP connection. Built as a twin of the training relay β€” same subject shape, same single-token rule, same core-NATS-...

KamoΒ·5d ago
FixMediaService

Credit a signup whose page views were never recorded

**************** was the ONLY thing in the fleet that ever inserted into MARKETING_VISITORS, so the whole conversion pipeline silently depended on a browser bea...

KamoΒ·5d 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