KamoCRM

Mabadiliko ya Tabianchi

Kila kipengele, kurekebisha na kuboresha, posted kama meli. Hakuna kitu kilichofichwa kwa ajili ya uzinduzi.

17,525
Mabadiliko ya Jumla
6,005
Features ya
5,287
Wa
30
Miradi ya Miradi
Filter ya Mradi
Miradi yote17,525AIService253APIService174BillingService157ConversionService110DaemonService138DocsService223ESigService91EmailService580InitializerService329KBService151KlusterServices741MCPGatewayService252MediaService602RAGService79SecurityService1,851TranslateService62VOIPService249VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,356kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,663kamo-signer-monorepo56kamolos114
Filter ya aina
Aina zoteBuild16CI523Chore775Docs3,255Feature6,005Fix5,287Other994Performance165Refactor278Revert23Style42Test161Upgrade1
August 26, 2026
Fixkamo-internal

Make every client component safe to render on the server

Next server-renders client components, so `window`, `document`, `localStorage`, `sessionStorage` and `navigator` do not exist during the render that produces th...

kamo·2mo ago
FixBillingService

Do not key ephemeral per-attempt Stripe creates

Round 2 review (Ruling 17) found "is this a create?" is necessary but not sufficient. The question that matters: can this subject legitimately be created more t...

Kamo·2mo ago
FixBillingService

Keys belong on Stripe creates only, not on mutations

Round 1 review (Ruling 15) found the Critical: a stable idempotency key on an update/cancel/attach/detach is not a safeguard, it is a bug. Those calls already s...

Kamo·2mo ago
FixKlusterServices

The auto-reconnect reload-looped every page into a blank screen

I shipped this and it took the desktop down: a blank white page and a tab loading forever. Disabled in-cluster immediately; this is the real fix. `ng-switch` s...

Kamo·2mo ago
Fixkamo-internal

Read-fence SMS/AI mark-reads, fold sessionType into sameSessions

Three review findings against Task 21, all plan-mandated: - markSmsRead/markAiRead had no read fence: a refresh or an inbound push resolving between the opti...

kamo·2mo ago
FixBillingService

Make every Stripe write idempotent, and fail the build on a new one without a key

A socket timeout on a Stripe write that actually succeeded is indistinguishable, from our side, from one that did not; without an idempotency key the retry crea...

Kamo·2mo ago
FixBillingService

Commit the processed flag with the money write, not ahead of it

markProcessed was REQUIRES_NEW, so it committed processed=true while the handler's money writes were still uncommitted in the suspended outer transaction. JpaTr...

Kamo·2mo ago
Fixkamo-internal

A thrown hexhead can no longer end a live call

SoftphoneTool never listened for the cancelable tool:requestClose that MessageTool uses to protect unsent text, so scoring the remove goal on a minimized softph...

kamo·2mo ago
Fixkamo-internal

A refresh mid-call no longer re-dials the customer

The tool-window snapshot replayed props verbatim, which is right for state and wrong for an instruction. `autoDial: true` survived into the restored window and ...

kamo·2mo ago
FixMediaService

Consistent error handling and layering on two review findings

Review findings on Tasks 14 and 15: - SystemBugController held a SystemBugRepository field and queried it directly for the new-bug count, while every other r...

Kamo·2mo ago
FixMediaService

Guard the unread-lookup itself, not just the broadcast

Review finding on Task 9: persistInbound is @Transactional, and only the broadcast() call inside the per-member loop was exception-safe (it swallows its own fai...

Kamo·2mo ago
August 25, 2026
Fixkamo-internal

Apply the branding the wizard just collected

Colours, logos and backgrounds chosen while creating an organization were not reaching it. The member opened their new workspace on default branding and had to ...

kamo·2mo ago
FixSecurityService

/org/current stops depending on a live Hibernate session

This endpoint is what the workspace shell loads before it renders, and the client refuses a record it cannot read — Organization.fromJSON throws without a domai...

Kamo·2mo ago
Fixkamo-shared-library

Make the retail webhook signature check fail closed and compare in constant time

validateSignature used to return true three ways without verifying anything: a null secret short-circuited, six of eleven provider types fell through default ->...

Kamo·2mo ago
Fixkamo-login

Continue stays disabled once a workspace is opening

The button already carried disabled={!selected || submitting}, but submitting was only true for the duration of the request. On success the page sets redirectin...

Kamo·2mo ago
Fixkamo-login

Only a spent token sends the member back to the start

Every non-ok status fell back to "Please sign in again", which is only true of 401 — the one status that means the selection token is really gone. SecurityServi...

Kamo·2mo ago
FixSecurityService

A failed workspace selection no longer destroys the sign-in

Reported as being thrown back to the email field with "Your sign-in timed out. Please sign in again." after clicking Continue. The timeout had not happened — th...

Kamo·2mo ago
FixSecurityService

Stop the logo pass starving backgrounds, and read <picture>

Diagnosed against a real site that returned six logos, brand colours and zero background images. Three separate causes, all ours. The logo pass could eat the e...

Kamo·2mo ago
Fixkamo-internal

Close the dead space under the lead grid's pager

The pager sits at the bottom of the grid Card's CardContent, and CardContent ships `&:last-child { padding-bottom: 24px }` of its own. That selector carries a c...

kamo·2mo ago
FixKlusterServices

The auto-reconnect was watching for a class that never appears

It keyed on **************** That class exists in Guacamole's stylesheet and in none of its templates, so the selector matched nothing: the script loaded, ran, ...

Kamo·2mo ago
FixKlusterServices

Cap Guacamole's heap, and unbreak the deploy that was blocking it

Two faults, one of them mine. MINE FIRST: the `node --test` gate added with the auto-reconnect script pointed at a DIRECTORY, and the runner's node resolves a ...

Kamo·2mo ago
Fixkamo-internal

Say plainly what the domain field is for

The hint explained the field in terms of the hosts it produces — internal.<domain> for the workspace, login.<domain> for sign-in — which means nothing to somebo...

kamo·2mo ago
FixInitializerService

Drop the frozen ordinal CHECK constraints Hibernate froze at create

Hibernate writes CHECK (col >= 0 AND col <= N) over an @Enumerated(ORDINAL) column at CREATE TABLE, where N is the highest ordinal that existed that day, and dd...

Kamo·2mo ago
Fixkamo-internal

Close five gaps in the website brand suggestions

Five things found reading the first cut back, all of them real. The "Added below" badge lied. It tracked only which card had been clicked, so hitting Remove on...

kamo·2mo ago
Fixkamo-internal

Enter as System Member no longer needs your own membership

The button was disabled by canEnterOrg, which asks whether the VIEWER holds a usable membership — so it was greyed out for exactly the orgs it exists to reach, ...

kamo·2mo ago
FixSecurityService

An unfinished domain picks a different host, not a refusal

Entering an org was refused outright unless its own custom domain had finished DNS and SSL. That was right while entering meant navigating to https://internal.<...

Kamo·2mo ago
FixKlusterServices

Stop the canary crying wolf after every legitimate restart

session_durable treated a REJECTED token as a durability failure. That is not the outage it guards: a gateway restart, or Guacamole's own inactivity timeout, in...

Kamo·2mo ago
FixKlusterServices

Stop every deploy from throwing everyone off their desktop

"An error has occurred and this action cannot be completed" after leaving a desktop open was not an idle timeout and not a browser problem. It was CI. deploy-s...

Kamo·2mo ago
FixMediaService

Build the search pattern outside the query, and parse the query in a test

likePattern turns an absent search term into '%' so no null parameter ever reaches a string expression, and escapes % and _ in the term so a search for a litera...

Kamo·2mo ago
Fixkamo-shared-library

Stop the bug list 500ing on every unfiltered load

PostgreSQL cannot infer a type for a null parameter inside a string expression: LOWER(CONCAT('%', :search, '%')) with a null :search guessed bytea, and the list...

Kamo·2mo ago
FixKlusterServices

Run a dispatched session in the workspace's common parent

sage's VS Code is a multi-root workspace holding all 63 repositories, so taking the first workspace folder rooted a bug about the login site in aiservice — the ...

Kamo·2mo ago
Fixkamo-shared-library

Add the AiDispatchRequest the pushed code already imports

SecurityService's SystemBugAiDispatchController and SystemBugAiDispatchService are on main and import **************** but the record itself was never committed...

Kamo·2mo ago
FixKlusterServices

Say what a dead KamoDesktop connection actually means

Guacamole's stock CLIENT.ERROR_TUNNEL_204 is "The requested connection does not exist. Please check the connection name and try again." There is no connection n...

Kamo·2mo ago
FixSecurityService

Stop the SSO token expiry from emptying a live desktop session

"The requested connection does not exist. Please check the connection name and try again." on a KamoDesktop reconnect was not a missing connection. It was the S...

Kamo·2mo ago
FixKlusterServices

Submit the bug report without simulating a keystroke

vscode:// URI handler and sent a synthetic Return. Measured on desktop-1, that cannot work: KDE's screen locker holds an exclusive X input grab whenever the scr...

Kamo·2mo ago
FixSecurityService

Send the member to the workspace host, not a relative path

SignInCompletionService returned a relative /validate?otk=. That resolves against the host that served the SIGN-IN — login.<apex> — and kamo-login has a /valida...

Kamo·2mo ago
FixSecurityService

Delete the "first organization in the database" fallbacks

Seven blocks across five controllers ended their org-resolution with, in effect: if the server name is localhost or a bare IP, return whichever organization the...

Kamo·2mo ago
FixSecurityService

Keep an alias unique platform-wide, on both write paths

Creation checked the alias only within one security provider, and PUT /org/{id} checked nothing at all — it applied whatever it was given. Both were reasonable ...

Kamo·2mo ago
August 24, 2026
Fixkamo-internal

Paint the branding of the org in the tab, not the host

getThemePath() derived the theme base from window.location.hostname. That answered the right question while every organization had a hostname of its own — and f...

kamo·2mo ago
Fixkamo-internal

Clear the cloned session in the enter-as tab

Entering an org opens a tab with window.open('', '_blank') and points it at /validate. That was cross-origin until now, so nothing was shared. It is same-origin...

kamo·2mo ago
Fixkamo-shared-library

The five pre-existing verticals must ship available

Shipping all six children PLANNING was wrong for five of them. RETAIL, RENTAL, SERVICE, SUBSCRIPTION and PROCUREMENT are not new functionality — they are what C...

Kamo·2mo ago
Fixkamo-internal

Read the session from the tab, not the shared cookie jar

46 client modules read the *** id out of document.cookie and sent it as X-***-Token. sessionStorage is per-TAB; a cookie is per-ORIGIN. While every organization...

kamo·2mo ago
FixSecurityService

Refuse an alias that names more than one organization

byAlias took LIMIT 1 over orgs.alias, which has no uniqueness constraint: the create path checks it per security provider and PUT /org/{id} does not check it at...

Kamo·2mo ago
Fixkamo-internal

The scheduled-support presenter picker offered nobody

The Presenters tab dropdown was empty for every organization, and always had been. GET **************** answers with { teamMembers, total }; the tab read data.m...

kamo·2mo ago
FixSecurityService

Resolve the domain on /org/current server-side

internal.kamocrm.com failed to render with "Invalid organization data: missing 'id' or 'domain'". Organization has no `domain` field -- it has a `domains` colle...

Kamo·2mo ago
Fixkamo-internal

Give /api/org/current the domain the client requires

internal.kamocrm.com failed to render with "Invalid organization data: missing 'id' or 'domain'". Organization.fromJSON refuses a record without a domain, and t...

kamo·2mo ago
Fixkamo-internal

Move jump-to-newest in with the toolbar's other actions

Search now owns the whole left track of the toolbar, because the empty part of that track is exactly the room the field opens into. The scroll-to-bottom control...

kamo·2mo ago

Je, unaona nini kuhusu usafiri?

Kila kitu kinaingia kwenye tovuti yako mwenyewe. Anza kwenye mpango wa bure na usome ukurasa huu tena katika mwezi mmoja.

Kuwa Huru MileleMtazamo wa bei