Live Change Log

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

17,865
Total Changes
4,581
Features
4,512
Fixes
32
Projects
Filter by project
All Projects17,865AIService110APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService348InitializerService299KBService74KlusterServices539MCPGatewayService43MediaService460RAGService61SecurityService1,519TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,553kamo-login318kamo-marketing584kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,320kamo-signer-monorepo50kamolos102
Filter by type
All TypesBuild24CI522Chore670Docs226Feature4,581Fix4,512Other6,781Performance136Refactor273Revert23Style48Test68Upgrade1
September 9, 2026
Testkamo-internal

Stop pinning setThemeSlug's argument list in a source assertion

`tabOrgResolution` was red on main. It asserts on the SOURCE of app/validate/page.tsx and required the literal text `setThemeSlug(orgRef)`, so `f9bd7621` — whic...

Kamo·2d ago
Fixkamo-internal

Early Bird and Twenty Doors read the laptop's clock, not the member's

`check-server-timestamps` was red on main: `rememberToday` bucketed the day with `new **************** which is the BROWSER's zone. The guard exists because tha...

Kamo·2d ago
Featurekamo-internal

The Show button, and the clock hook mounted

The client half of showing a hand nobody made you show, plus the mount point for the turn-clock audio that landed dead in the previous commit. SHOWING OUTRANKS...

Kamo·2d ago
Featurekamo-internal

Your own clock, out loud

A thirty-second clock a player is not watching is a hand lost to a timeout while reading an email, and the felt's draining bar only helps somebody already looki...

Kamo·2d ago
Fixkamo-internal

The chips were on the table, not on the felt

A member reported that the player opposite them had chips half off the table. Measured in a browser: NINE of the ten piles were off the cloth. The reader's own ...

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

Every logo on the Branding card can be downloaded

The download control shipped on one of the six artwork slots — the compact company logo — because the row was written inline at that one call site. The other fi...

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

The computer's reply was silent against the quickest level

The four move cues carried an 80ms throttle. Each is raised once per published frame the board could prove it understood, and a frame is a move — so there was n...

Kamo·2d ago
Fixkamo-internal

Six the adversarial review upheld

Ten reviewers, three skeptics each. Twelve findings survived; most of the rest were refuted because they had already been fixed. Of the twelve, six were still r...

Kamo·2d ago
Featurekamo-internal

A table that has ended sends you to the lobby, with the news

An invitation card outlives the table it points at. Somebody follows one ten minutes later, the game is over, and the window answered with a red error bar over ...

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

The captures get the room the notation was taking

Two things the member asked for after seeing it. **The move list is gone.** Nobody was reading a column of notation; what two colleagues playing each other wan...

Kamo·3d ago
Fixkamo-internal

What an adversarial read of the whole thing found

Ten reviewers over the change, three skeptics per finding. These are the ones that survived, and most of them were in the wiring rather than in the parts that h...

Kamo·3d ago
Chorekamo-internal

Sweep the two locals the pot block left behind

`potTotal` and the component-level `t` were the only readers of the pot block I moved into the chip layer, and both survived it — read by nothing, flagged by no...

Kamo·3d ago
Fixkamo-internal

Looking at an organization is not being in it

A workspace signed in to KamoCRM repainted itself as BluEleven - logo, colours, favicon, tab title, and the feature set driving the navigation - while every rec...

kamo·3d ago
Fixkamo-internal

Three things a browser said and jsdom could not

The panels were built and tested entirely in jsdom, which can say a label is present and cannot say how wide it ended up. Rendering them at the widths ChessTool...

Kamo·3d ago
Fixkamo-internal

The chips in the middle are worth what the number says

A settled pot draws the CONTESTED total now, not everything that went in. `hand.pot` keeps every chip that entered the hand; `totalPot` reports what was played...

Kamo·3d ago
Featurekamo-internal

The organisation's colour, and chips in the compact pot

Finishes two things the chip subsystem had built and not wired. THE BRAND, where a card never sits. The betting line, the wash under the pot and the lift under...

Kamo·3d ago
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·3d ago
Featurekamo-internal

The board is a table now

The first move of every game was wrong. Pieces were keyed by their position in a FEN scan, and scan order is not identity: after 1.e4 the element that had been ...

Kamo·3d 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·3d ago
Fixkamo-internal

The Games icon appeared for organizations that have no Games app

Reported on harmonyhomeloans, whose owner saw the icon in the top bar for an app their organization does not have, cannot enable in Apps & Features, and whose c...

Kamo·3d ago
Featurekamo-internal

The chips are objects on a table

A member asked for the poker chips to stop being decoration. They are a subsystem now: real denominations, real stacking, racks, a betting line, pots that add u...

Kamo·3d ago
Fixkamo-internal

The reveal turned your own cards face down, and four more from review

An adversarial review of the choreography commit, verified against the code. Six defects, two of which only a browser could have shown. YOUR OWN CARDS. The sho...

Kamo·3d 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·3d ago
Fixkamo-internal

The compact rail clipped a payout flag off the top of the window

The rail reserves a fixed strip above the pucks so a label does not make the strip taller and move the board — but it reserved room for ONE row and the showdown...

Kamo·3d ago
Featurekamo-internal

The table says what just happened

The felt re-rendered a STATE. It never presented an EVENT. Of twenty-six things that happen in a hand of poker, exactly two had any presentation at all — a card...

Kamo·3d 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·3d ago
Fixkamo-internal

The table list had nothing between it and the lobby header

The lobby's scroll container carried `px` and `pb` and no `pt` at all, so the first table's top border sat exactly on the container's edge, flush against the he...

Kamo·3d ago
Refactorkamo-internal

Move the balance out of the top bar and into the Games menu

The bar is fixed chrome and already crowded — greeting, branches, availability, the compliance clock, the bell, chat, language, account — and a balance is not s...

Kamo·3d 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
FixSecurityService

The same-commit-rebuild guard could never fire, so every dispatch failed

Rebuilding this service without a commit of its own — a workflow_dispatch, a re-run, or a kamo-shared-library change it must pick up — has been failing at deplo...

Kamo·3d ago
Fixkamo-internal

The wedge is yellow, and it stops depending on the tenant's brand

`/icon/cheddar.svg` was five paths of pure #000000 — a black cheese wedge, which on the nav bar's dark ground was very nearly nothing at all. It is a real chedd...

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

Four defects only a real browser could show

Rendered the felt, the compact layout, the lobby and the action bar in headless Chrome against a fabricated table and MEASURED them. Four things were wrong, and...

Kamo·3d ago
Featurekamo-internal

A poker table in a tool window, and Cheddar in the nav bar

Two genuinely different layouts, a lobby, an invite path that reaches anyone in the organization, and the wallet readout that appears whenever Games does. ## T...

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
Featurekamo-shared-library

The app, the right, and the six tables a poker game needs

HOLDEM (36) joins KAMO_UNIVERSE and CHESS under GAMES, with PLAY_HOLDEM (319). Both ids were the next free ones; nothing is renamed and nothing moves, because O...

Kamo·3d ago
Featurekamo-internal

The chat entry opens the pair's board, and you can ask an opponent back

Two colleagues who have played once have a board together for good, so the chat entry stops offering to introduce them. It reads "Open your game" and goes strai...

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
Featurekamo-shared-library

Record when a player was last prodded to come back

DATE_LAST_NUDGE, one clock per game rather than per sender — otherwise two people can take turns nudging each other every five minutes and call it twelve messag...

Kamo·3d ago
Featurekamo-internal

A capture shelf where the move list was, and a hexhead that says it is your turn

THE SHELF. A move list is a record; between two colleagues playing for fun the pieces you have taken are the thing worth looking at, so they get that space and ...

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

The board you play on now lives in the same room as the pane that started it

You chose a game in a dark room of board lacquer and brass, pressed start, and landed on a white MUI form with a board floating on it — `var(--surface)`, `divid...

Kamo·3d ago
Fixkamo-internal

The two mode plates were clipped by their own scroller, at every size

The selected plate lifts 2px and carries a 1px ring, and it is the first child of an `overflow-y: auto` column — so its top border sat 3px above the clip edge a...

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

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