Map the metadata array columns as Java arrays, not List
Both entities declared their array columns as List<T> under an explicit @JdbcTypeCode(SqlTypes.ARRAY). On Hibernate 6.2.13 that combination resolves the array's...
Drop the inset around the Resources document manager
DocManager brings its own toolbar and grid chrome, so the 32px wrapper padding was only shrinking the grid inside an already-bounded pane. The wrapper stays as ...
Bound the bulk folder index and stop it on structural failure
Uncommitted work from a concurrent session, swept in so the tree is clean. The bulk index walked pages with totalPages set to Integer.MAX_VALUE and no ceiling,...
Show the full section-index rail instead of a nested scrollbar
The left nav rail was capped at calc(100vh - 128px) with overflowY: auto, so an org with most features enabled (up to 18 sections across 4 groups, ~710px) grew ...
Stop the passdb from splitting a mailbox across two maildirs
password_query returned `email as user`, which overwrote the %Lu-lowercased login name with the row's stored casing. user_query then interpolated %n from the re...
Portal the break-glass dialog to the body
Clicking break glass opened the dialog inside the nav rail instead of over the page. The overlay is a bare fixed-position motion.div, not a MUI Dialog, so it ha...
Mirror Maven Central and retry, so a corrupt transfer stops killing the build
The session security-level fix failed to deploy because bcprov-jdk18on:1.72 arrived corrupted — 'Tag mismatch' is a TLS auth-tag failure mid-transfer, not a mis...
Name the full logo correctly and resolve an org's domain deterministically
Three defects in how an organization's branding location is derived. my-networks named the full logo "logo-full." + logoFullExt, defaulting to "svg" when the c...
Record the uploader on a deduplicated document
registerExistingDocument built its Img without .createdByMember(member), which the normal upload path sets. Every document registered through dedup therefore la...
Proxy foreign org logos so the tenant img-src policy can't block them
/network is the one page that renders another tenant's branding: it lists every organization in the network and loads each logo from that org's own theme.<domai...
Read the member security level the column actually stores
wanachama.security level ni VARCHAR inayoshikilia ImageAccessLevelType NAME - Picha zote na Wizara ya Mambo ya Ndani ya Nchi. .....................................
Merge a caller's query with the browser's instead of concatenating
forwardToApi appended the browser's query string to whatever it was given, so a caller passing its own query produced a URL with two '?'. Everything after the f...
Use targeted conversion updates instead of saving a detached ImgDat
convertAndGenerateThumbnails runs on a virtual thread with a detached ImgDat, so imgDatRepository.save() merged a stale orphan-removal collection and threw befo...
Targeted conversion updates, so a detached ImgDat save cannot abort conversion
Conversion runs on a virtual thread against a DETACHED ImgDat. save() therefore merges an instance whose LAZY `images` collection is no longer the managed one, ...
Keep upload Folder/Doc Type labels shrunk over native selects
The per-file Folder and Doc Type selects start with an empty value, so MUI left their labels at rest position while the native <select> still painted its first ...
Put unowned intake leads into the auto-assignment pool
Every lead-creation path funnels through LeadService.createLead — CSV import, the lead-intake endpoints and their scheduled DaemonService job, the public webina...
Let a tab fill the content area, so the document manager gets full height
The content wrapper was a plain block, so a page's `flex: 1` had no flex parent to resolve against and the wrapper sized to its contents. DocManager's root is `...
Merge same-named vendors and products in the filter bar
An org routinely holds one lead supplier under several vendor records, so on the "All Markets" tab the Vendor dropdown listed the same name once per record — id...
Remove the filter button from datagrid column headers
AG Grid 32 defaults to the "new" column menu. On Community (no enterprise module) that means no header menu button ever renders — the only header-cell affordanc...
Never match a lead against the company's own addresses
A lead whose e-mail was set to noreply@kamocrm.com matched every message that address had ever sent — one lead record surfaced the company's entire outbound mai...
Weka mstari wa maelezo juu ya Meneja wa Hati ya Rasilimali
It described a tab that now shows its own contents, so it was only taking space. descriptionKey goes optional rather than staying as an unrendered string: a tab...
Mirror Maven Central na retry, hivyo uhamisho rushwa kuacha kuua kujenga
The HR_RESOURCE rebuild failed on hibernate-core:6.5.3.Final with 'Tag mismatch' — a transfer corrupted in flight, not a missing artifact. The shared-lib stage ...
Stop double-appending the query string on the communications route
All / Calls / Texts / Emails failed with "We couldn't load this lead's communications". The backend was fine — direct calls returned 200 with real entries. The ...
Timeline a11y, timezone-correct day headings, and a summary card that isn't zero
Three defects, each invisible until it bites. The row expander wrapped the whole header in a <button>, and DateTimeDisplay renders its own interactive tooltip ...
Real chat direction, and stop the timeline mapper writing or fanning out
Chat entries claimed no direction and attributed every message to its row's author. Social conversations record BOTH sides against a Kamo Member — the visitor's...
Kutenga wito inges kwa kila mstari na kiungo tu baada ya kutenda
Two faults with one root: ingest participated in the sweep's transaction. A throw inside a participating transaction marks the SHARED transaction rollback-only...
Make communication source ids natural keys, not row ids
A source id derived from the source row's generated UUID is only stable if that row commits. The VOIP ingest paths write inside the sync transaction while LeadC...
Skip soft-deleted extensions in the call-history sweep
syncExtensions soft-deletes by flipping status to UNKNOWN rather than removing the row, so the list accumulates every extension an instance has ever had. Each o...
Page the lead sweep until the window is covered
A single fixed page silently lost mail whenever a mailbox took more than pageSize messages between ticks — a newsletter burst, a busy shared inbox, or just the ...
Submit the lead at step 1 instead of only on booking
handleFormSubmit iliangalia *** na kuendeleza hatua - haikufanya mtandao Piga simu wakati wote, kwa hivyo maelezo ya mawasiliano ya mgeni aliyeorodheshwa yalien...
Withhold the reply box from senders that cannot receive one
Sending a quick reply to a KamoCRM notification put the literal text `{"error":"Invalid Addresses"}` in the reply box. The mail server had rejected NoReply@Kamo...
Address replies at Reply-To, and stop leaking SMTP exceptions to the UI
A quick reply to a KamoCRM notification failed with `{"error":"Invalid Addresses"}` rendered verbatim in the reply box. That string is Jakarta Mail's own wordin...
Outbound Teams call party, live audio devices, provider-aware prompt
Three confirmed findings from the review of 08cecc6d. Outbound Teams calls showed the wrong remote party. TeamsAcsSession derived remoteNumber/remoteName from ...
Close a cross-mailbox hole and six more Teams defects
Adversarial review of 6df0008 confirmed 24 findings. The important ones: CRITICAL — any member could delete a colleague's mail. Teams voicemail ids were compos...
Fit the trail in one pane — no wrapped intro, no double scrollbar
Three things made the tab feel cramped: The intro was capped at 900px, which broke a 170-character sentence onto a second line for no reason; it now uses the w...
PHI access audit tab layout + its missing menu entry
The tab rendered its content flush against the card border: SettingsView's tab panel supplies no padding of its own, and this tab was the one manager that never...
Browsers kept serving a stale app bundle after every deploy
index.html shipped a hardcoded `libs/app.bundle.min.js?v=139` that no build ever changed, the bundle filenames are stable, and nginx sent no Cache-Control at al...
The avatar fallback URL could never resolve
Both avatar-lookup catch blocks built **************** Avatars moved to the fixed, domain-independent `platform/` prefix (SecurityService AvatarObjectPaths) whe...
Colibri-ws proxying always 502'd — nginx had no resolver
The /colibri-ws/<jvb-id>/ location builds its upstream from a capture group. nginx resolves such names at request time and only when a resolver is configured, s...
Fall back through every number the agent holds
Ugani usio na mstari wa org wa kuitundika hauwezi kuepukika, kwa hivyo msuluhishi huanguka nyuma Kwa baadhi ya watu, kwa kweli, ni badala ya kuchapisha chochote...
Publish the agent's cell when it is the only number they have
An agent's number can live in any of three columns and commonly sits in only one: e_phone_number on the team member, m_phone_number and m_cell_number on the mem...
Cleaner invite mark in the chat message
The chat invite led with the video-camera emoji, which the message renderer scales to 1.4em — so it landed as an oversized colour sticker rather than an icon. R...
A dead avatar URL rendered a permanent broken image instead of initials
A participant whose photo is missing from storage showed a broken-image icon to everyone else in the call, forever — it never degraded to initials. Upstream ca...
STUN answered on the wrong node, so kamocrm.com:3478 was dead
coturn is hostNetwork with no nodeSelector, so it was scheduled on k3m1 (public 47.181.8.87). Its own --external-ip, and every client's `stun:kamocrm.com:3478`,...
Stop classifying a multipart/related HTML root as an attachment
Every transactional email we send with an inlined org logo arrived in our own /messages viewer with a correct subject and a completely empty body. isAttachment...
Bridge advertised only private ICE candidates — no meet had media for 35 days
The bridge never completed a single ICE connection in the 35 days this pod has been up (0 successes, 18 terminations). Every conference joined over XMPP fine an...
Send the company line as text, not markup
Pairs with the template fix in kamo-shared-library. Per-org template rows are insert-only, so the rows seeded before the markup change still wrap this variable ...
The opportunity templates own their own markup again
The company line was changed to arrive as a complete <p> element from the sender, so an absent company would not leave an empty paragraph. That was the wrong tr...
An approver who files a request still gets the approver email
The actor was stripped from every audience, so an approver who raised a request was cut from their own notification about it — and in an organization with a sin...
Liveness probe could never pass — cause of 920 restarts in 35 days
Root cause: the liveness probe was `tcpSocket: port 10000`, but Scylla's REST API binds to api_address 127.0.0.1 (its default) while a tcpSocket probe dials the...
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.