Mabadiliko ya Tabianchi

Kuona nini sisi ni kujenga katika muda halisi. Kila kipengele, kurekebisha, na kuboresha kusafirishwa kwenye jukwaa.

17,925
Mabadiliko ya Jumla
4,612
Features ya
4,537
Wa
32
Miradi ya Miradi
Filter ya Mradi
Miradi yote17,925AIService110APIService138BillingService133ConversionService85DaemonService107DocsService189ESigService78EmailService373InitializerService300KBService74KlusterServices546MCPGatewayService43MediaService461RAGService61SecurityService1,520TranslateService45VOIPService173VectorService8kamo-analytics6,157kamo-apps18kamo-asterisk-support19kamo-capcha17kamo-capcha-widget4kamo-internal4,576kamo-login318kamo-marketing584kamo-meet90kamo-nowww18kamo-register206kamo-shared-library1,322kamo-signer-monorepo50kamolos102
Filter ya aina
Aina zoteBuild24CI523Chore670Docs226Feature4,612Fix4,537Other6,781Performance136Refactor274Revert23Style48Test70Upgrade1
August 26, 2026
FixMediaService

A child org's lobby offers its own backgrounds, not the platform's

The folder holding an org's meeting backgrounds and theme config was derived from a hostname — the request's, or the org domain the sidecar passed — by taking t...

Kamo·2w ago
FixESigService

The signer app gets the sender's brand, not Kamo's

Two separate ways the same wrong assumption showed up. The signing page's logo URL was https://<org fqdn>/theme/logo-full.<ext>, which is not a path anything s...

Kamo·2w ago
FixEmailService

Build the org logo URL from its alias, not its domain

Transactional email is sent to real inboxes, so the header and footer logos have to resolve without any client-side theme JavaScript — they are built exactly th...

Kamo·2w ago
Fixkamo-shared-library

Editing top-level lines no longer deletes every option's lines

Quote.lineItems is orphanRemoval=true and option rows set both quote and option — which is why QuoteMapper filters on getOption() == null twice. A bare clear() ...

Kamo·2w ago
Fixkamo-shared-library

An option quote keeps the tax and shipping staff entered

recalculate zeroed taxTotal and shippingTotal whenever a quote had options. Both were still stored on the row and still rendered by QuoteMapper, so a staff memb...

Kamo·2w ago
Fixkamo-shared-library

Terminal guards on cancel and revise, and stop swallowing bad input

cancel() and revise() had no isTerminal() guard, so an ACCEPTED quote could be flipped to CANCELLED or REVISED while acceptedAt and acceptedByName survived — a ...

Kamo·2w ago
Fixkamo-internal

A healthcare market could not be edited

The edit screen still built its picker by mapping over a hardcoded array of seven verticals. HEALTHCARE was not among them, so a healthcare market opened to a s...

kamo·2w ago
Fixkamo-internal

Gate the population-level surfaces on their own rights

EXPORT_PATIENT_DATA, VIEW_QUALITY_MEASURES and MANAGE_PATIENT_PORTAL were added to Java in August and never mirrored into the client enum, so RoleRightType.THE_...

kamo·2w ago
Fixkamo-shared-library

Stop dropping the market and the customer account

CreateQuoteRequest has always declared marketUid and accountUid and QuoteService.create has never read either, so Quote.market and Quote.customerAccount were NU...

Kamo·2w ago
Fixkamo-internal

The clinical rights were ungrantable

The permission editors render one section per enabled app and filter each role's rights by that section's serviceType. There was no EHR section, so all ~30 clin...

kamo·2w ago
FixAIService

Remove the unreviewed-reply unread-count endpoints

Paired with the kamo-internal removal of the AI unread badge: the count never told the member anything actionable (no push channel backs it, so non-zero only ev...

Kamo·2w ago
Fixkamo-internal

Remove the AI unread-count indicator entirely

It never told the member anything actionable: AIService has no push channel for assistant replies, so a nonzero count only ever meant "you minimized the window ...

kamo·2w ago
Fixkamo-internal

The new workspace is opened by a click, from /network

Creating an org disabled the form, did the work, and then appeared to do nothing: no new tab, and the button back to reading "Create Organization". window.open...

kamo·2w ago
Fixkamo-internal

Patch a self-created session's guid back onto the window's props

When opened without a sessionGuid (launcher / nav / command palette), AiChatTool POSTs a new session and calls setSessionGuid(guid) but never told the tool-wind...

kamo·2w ago
Fixkamo-internal

Switcher column opts out of presence it cannot honestly show

Passes showPresence={false} to its ConversationsPane mount. This column renders under ToolDock, a sibling of **************** (see ToolProviders.tsx's own doc c...

kamo·2w ago
Fixkamo-internal

Thread showPresence to rows, and gate the empty state on prefsLoaded

- Adds `showPresence` (default true), forwarded to every ConversationRow — the pane-side half of the switcher-column presence fix (see ConversationRow's own...

kamo·2w ago
Fixkamo-internal

Row honors showPresence, and formats a TEXT preview's E.164 sender

Two whole-branch-review findings against this component: - ConversationRow always read **************** directly. Mounted inside the switcher column (a sibli...

kamo·2w ago
Fixkamo-internal

Give the Chats tab pane a definite height, not just min-height

The chats-tab motion.div had `height: undefined` (only `minHeight: '100%'`), so its containing block was auto-height and ConversationsPane's own `height: 100%` ...

kamo·2w ago
Fixkamo-internal

Close review round 1 on the chat-switcher column

- ChatSwitcherColumn: move the collapse preference's PUT out of the setCollapsed updater into the click handler itself. The updater was impure (it fired a f...

kamo·2w ago
Fixkamo-internal

Stop the fallback-bucket flash, guard the double-click

Review found the pane had dropped the old chats-list component's prefsLoaded gate: activeBucket started at initialBucket/DEFAULT_BUCKET and was handed to useCon...

kamo·2w ago
Fixkamo-internal

A restored maximized window remembers where it came from

A snapshot written while a window was maximized used to lose what that window would return to, so a restored session's first conversation-switch dropped it in t...

kamo·2w ago
Fixkamo-internal

Stop the text branch's retry storm, pin the observer re-root

voipApi.getConversations goes through apiCall, which throws on any non-2xx — unlike loadMore's other two branches, which fetch() directly and check res.ok. The ...

kamo·2w ago
Fixkamo-shared-library

Pin ServiceJob's join columns to INT8

Exporting the table's DDL showed org_id, engagement_id and customer_uid each emitted as INT8 DEFAULT unique_rowid() — inherited from the referenced key. Three f...

Kamo·2w ago
Fixkamo-internal

Stop the previous commit's CRLF rewrite of memberColor

The previous commit's one-word doc-comment edit (dropping the ChatsList reference) rewrote the whole memberColor function from LF to CRLF: this file mixes line ...

kamo·2w ago
Fixkamo-shared-library

Stop discarding status changes and answering 200

updateWorkOrder parsed the requested status inside catch (Exception ignored), saved the entity unchanged, and returned 200 with a DTO showing the old value. The...

Kamo·2w ago
Fixkamo-internal

Stop deriving the org's theme domain, and freeze the form while it works

The wizard derived the new org's domain from GET /org/{id}. That endpoint returns the entity, and its `domains` is LAZY — serialized as null outside a transacti...

kamo·2w ago
FixSecurityService

Create returns the domain its theme is provisioned under

The caller cannot work this out and must stop trying. GET /org/{id} answers with the entity, whose `domains` is LAZY and serializes as null outside a transactio...

Kamo·2w ago
Fixkamo-internal

Stop the tracking-link strip clipping its own text

Marketing Tools -> Tracking Codes drew the member's link strip with the eyebrow cut through its capitals, the icon sliced top and bottom, and the line under it ...

kamo·2w ago
FixVOIPService

Give the text-conversations coder a tiebreaker so tied timestamps aren't dropped

lastActivityAt, so a conversation sharing that exact timestamp was excluded from the lost from the list permanently, not just misordered. Reachable in practice ...

Kamo·2w ago
Fixkamo-internal

The new workspace opens once, ready, and as itself

Three faults with one cause, reported after creating Carl's Jr: the new tab said ?org=kamocrm.com, showed Kamo's logo and none of the org's colours — while its ...

kamo·2w ago
Fixkamo-shared-library

Delete findConflictingEvents, which never returned a row

Four independent defects, any one of which emptied the result set: it filtered e.user.id while both callers pass a member id and the two columns never coincide;...

Kamo·2w ago
FixEmailService

Conflict detection now finds conflicts

Delegates to findBusyForMemberInRange and excludes the event being edited in Java, where a null exclusion cannot poison a SQL predicate. The test it replaces m...

Kamo·2w ago
Fixkamo-internal

Remove the recurrence control, which discarded what it collected

The switch, frequency select and occurrence count rendered on the calendar page and reached no payload: composeDraft never read them and onSave never sent them....

kamo·2w ago
Fixkamo-internal

Settle the loading gate on the gate, not on a "load started" flag

Two follow-ups to the session store, one of them a real defect. ensureLoaded decided foreground-vs-background from an `everLoaded` flag set when the first fore...

kamo·2w ago
FixSecurityService

A push token may be claimed by one device row, not every past sign-in

Companion to MediaService 8a809b3, which stopped members getting the same chat message three-plus times on their phone. That change made dispatch collapse dupli...

Kamo·2w ago
FixMediaService

One phone, one alert — collapse duplicate push destinations

Members were getting the same chat message three-plus times on their phone. Registrations are unique on (device_token_id, org_id, push_kind), NOT on the push t...

Kamo·2w ago
Fixkamo-internal

A tab only names an organization it actually has

Opening TacoBell from /network put ?org=kamocrm.com on the new tab. The tab lands on /validate, which renders inside this shell BEFORE its session exists — so t...

kamo·2w ago
FixSecurityService

Recover a lost background count from the images themselves

commitBackgroundOrder writes the images to STAGING, and imageBgCount is only a record of how many it wrote — which made that one column a single point of failur...

Kamo·2w ago
FixSecurityService

Gate the nine Service Work endpoints on a right

They shipped checking only that the caller had a session, so any member of an org could read and mutate every work order in it regardless of role. ASSIGN_SERVI...

Kamo·2w ago
FixSecurityService

Drop the nine Service Work endpoints from the unguarded baseline

They are gated as of e6e1d02, so their baseline entries no longer match an unguarded endpoint and **************** fails on the stale lines. Requiring the remov...

Kamo·2w ago
FixSecurityService

Stop the customer **************** rights reading every tenant's rows

Every endpoint that accepted a VIEW_OWN_* right as an OR-alternative loaded its record by primary key alone, never checking who it belonged to: getSubscription,...

Kamo·2w ago
Fixkamo-internal

The org reference belongs in proxy.ts, not a second middleware file

Next 16 replaced middleware with proxy, and this repo already had proxy.ts — so adding middleware.ts alongside it failed the build outright: "Both middleware fi...

kamo·2w ago
Fixkamo-analytics

The signed-in session becomes per-tab

analytics.auth lived in localStorage, which every tab of this origin shares. Analytics is reached by an OTK handoff from a workspace and each handoff mints a to...

Kamo·2w ago
Fixkamo-meet

A member's identity and their org stop leaking between tabs

meet.<platform> is shared by every organization without a host of its own, and localStorage is per ORIGIN. The signed-in member's name, email and avatar were wr...

Kamo·2w ago
Fixkamo-login

Theme assets come from a host that resolves

The sign-in screen paints an organization's branding from theme.<its own domain>. That domain may not resolve: an org can exist and be signed into before its DN...

Kamo·2w ago
Fixkamo-internal

One tab, one tenant — stop resolving the org from the shared cookie

Open KamoCRM in one tab and another organization in a second, refresh the first, and it rendered as the second. Close that tab, refresh again, and it came back....

kamo·2w ago
FixSecurityService

Serve a tenant's assets from a host that resolves, and stop deleting its backgrounds

Two faults found while working out why a new org opened with no logo and no colours. THEME DELIVERY. Assets were requested from theme.<the org's own domain>. A...

Kamo·2w ago
Fixkamo-internal

Stop standing workload from flashing the browser tab forever

TabAttention fed navGrandTotal into a 1100ms title flasher. Four of its eight addends are queue depth that never reaches zero when a member reads something: sup...

kamo·2w ago
Fixkamo-internal

Wire markSmsRead/markAiRead/social mark-read to their windows

Final review found markSmsRead and markAiRead had zero callers, and SocialChatWindow never called markAsRead/beginViewing at all — three of five conversation su...

kamo·2w ago
FixVOIPService

Gate the voicemail nav count on VIEW_VOICEMAIL

**************** handed any authenticated member holding a MemberVoipConfig row the instance-wide unread-voicemail count with no rights check at all, even thoug...

Kamo·2w ago

Je, unaona nini kuhusu usafiri?

Kila moja ya hizi updates ardhi katika nafasi yako ya kazi moja kwa moja. Kuanza bure na kuangalia kukua wiki baada ya wiki.

Kuwa Huru MileleMtazamo wa bei