Update orders page account uid type from number to string
AccountSummary.uid is now a string (Long precision fix). Also remove parseInt comparison and type="number" from the manual account ID field.
Use CommerceMarket.getId() instead of getUid() in provisionCompSubscription
CommerceMarket uses @Id UUID id (not uid), so Lombok generates getId().
CustomerMemberId is member ID string, resolve accounts by primaryMemberId
- posApi: AccountSummary uid string, add primaryMemberId; **************** customerMemberId string; **************** customerId string - SubscriptionOrderWizard...
Serialize customerMemberId as string to preserve Long precision
- AccountSummaryDTO: annotate uid with **************** and add primaryMemberId string field populated from primary_member_id - CreateSubscriptionOrderRequest: ...
Complete next-intl for System Diagnostics
Wire remaining MySQL, Redis, statistics, request, and accordion UI copy to components.settings.diagnostics keys; use locale-aware time and translated heap badge...
Legacy getCurrentSubscription stub must throw, not return null
Returning null made FeaturesManager treat every org as having no subscription (billingLoaded=true, hasSubscription=false), locking all feature toggles behind an...
Ambient json modules for gitignored messages/*.json imports
`tsc` and the IDE resolve `messages/` JSON after merge without requiring committed files under messages/. Extend include for types/**/*.d.ts.
Move account settings help panels to message keys
Replace all hardcoded help copy on the organization account page with scoped useTranslations keys. Extend i18n-audit to report files missing translation hooks f...
Wire organization account hero and tabs to i18n keys
Use **************** strings for SettingsView title, subtitle, and tab labels so the UI shows translated copy instead of raw placeholders left in dictionary ove...
Add navtop availability labels and softphone voicemail strings
Add components.navtop status* keys across locales so the header presence dropdown shows translated labels. Add **************** in English. Remove an unused tra...
Resolve STATUS_CONFIG scope errors on POS detail pages
Validate agreement status against STATUS_TRANSITIONS and derive commitment status keys from STATUS_TRANSITIONS so module-level helpers do not reference STATUS_C...
Load org logos from MinIO theme public path like dashboard
Use getThemePublicBaseForDomain so logo URLs match getThemePath()/img/logo.svg instead of legacy /domain/.../kamosite paths that 404 and fell back to initials.
Add missing nav-top strings and scope translations
English messages listed components.navtop.* keys for Mail/Docs/Voip buttons but never defined hi/welcome, branches, account, credits, calendar, chat, etc., so n...
Resolve nav-pri labels showing raw i18n keys
Use namespaced next-intl translators for nav and components.nav.navPri so lookups resolve against the merged message trees; add panel aria strings under navPri;...
Add MessageBrowser i18n strings and restore load error copy
next-intl threw MISSING_MESSAGE for components.messages.browser.* keys missing from en.json, breaking /messages render. Add English strings, use loadMessagesFai...
Build recording MinIO object key like imaging stream
Omit the extension when FILE_EXT is null/empty so the object name matches RecordingImagingService and ImagingController. Java string concat with null produced {...
Cancel dial if hangup called before sdk.invite resolves
Race condition: hangup() during connecting had no session to terminate yet (sdk.invite is awaited before wireSession), so the call connected anyway. Added cance...
Auto-enter new org after creation so member lands with their own role and rights
After org creation the session remained in the parent context (no admin rights), leaving the new org owner unable to see settings. Now the create wizard fetches...
Allow end call during connecting, disable AI assistant, remove queue tab
- End call button is now active and red during the connecting state so calls can be cancelled before they connect - Disabled the AI Assistant nav button (greyed...
Resolve call history extension from member_voip_config, not phone_extension
**************** was NULL for some extensions even when member_voip_config correctly mapped the member to their extension. Using member_voip_config (same source...
Full touch support for softphone popup on tablets
- Add touch-action: manipulation + WebkitTapHighlightColor to iconBtnStyle so window control buttons (minimize/maximize/close) respond instantly on touch - Ad...
Add go-sql-driver/mysql v1.7.1 checksum to go.sum
go mod tidy without source files is a no-op, so the mysql checksum was never added. Generated the correct h1 hashes via a throwaway golang:1.22-alpine container...
Handle legacy ordinal strings for CountryType via AttributeConverter
DB rows had country stored as ordinal integers (e.g. "186" for UNITED_STATES) instead of enum names, causing IllegalArgumentException on findAll(). CountryTypeC...
Cancel translate jobs instantly by running tsx in background
When Forgejo cancels a workflow, bash waits for any foreground child to finish before processing the signal — so a running tsx locale job would block cancellati...
Move ASTERISK_CDR_DSN to local config.json, not CI/CD secrets
CDR credentials are local to each FreePBX server and have no business in the CI/CD pipeline. Operators add ASTERISK_CDR_DSN directly to their config.json alongs...
Allow elevated access on getDomainById and verify-dns endpoints
Top-level org owners and system members were getting 403 on getDomainById and verify-dns because those endpoints checked isUserMemberOfOrg directly. Adds hasEle...
Show existing org domain instead of entry form when no custom domain
Fall back to the org's platform subdomain as the display domain so DnsProgressView renders rather than DomainEntryForm when no custom external domain exists. Al...
Surface imaging fallback when provider has no call history
KamoPBXProvider.getCallHistory now returns null instead of throwing **************** so the 501 response no longer bypasses the imaging fallback. The provider c...
Correct account list member/teamMember fallback labels and trigger redeploy
Restore NavPri panel labels and LeadHistory column headers
NavPri: salvage-keys grabbed href URLs as label values and swapped label/description pairs for Accounts, KB, and Notes nav panels. LeadHistoryPanel: MUI bgcolo...
Show platform domain context when no custom domain is set
Surface the active *.kamocrm.com hostname in the domain entry form so users can see their current platform domain instead of a blank entry screen. Also fixes ve...
Checkpoint translations per chunk and per locale on main
Persist locale JSON after each API chunk so cancellation loses at most one batch. CI translates one locale per process and commits/pushes after each so finished...
Checkpoint translations per chunk and per locale on main
Persist locale JSON after each API chunk so cancellation loses at most one batch. CI translates one locale per process and commits/pushes after each so finished...
Disable Docker BuildKit cache so every pipeline run does a full rebuild
Sets no-cache on both image build steps so npm ci and npm run build always run, even when the source tree is unchanged.
Bust Docker BuildKit cache per commit so npm run build runs every push
Identical checkout trees (e.g. empty commits) reused cached layers and skipped a real Next build. Pass GIT_COMMIT from the workflow and label the image revision...
Allow top-level org owners and system members to manage any org's domains
Sync members.email when primary mailbox is assigned, changed, or removed
When a mailbox was assigned to a member in a KAMO_MAIL org, members.email was never updated, causing EmailCredentialService to fail to resolve IMAP credentials ...
Prevent duplicate root domains and fix primary domain display
ONE_DOMAIN_PER_ORG check incorrectly excluded .kamocrm.com web-alias domains, allowing an org to accumulate multiple root domains (and 10 aliases each) by retry...
Serialize member-security and members PUT calls to avoid CockroachDB conflict
Two concurrent writes to the same `members` row caused a serializable isolation conflict — member-security read the row while the members endpoint wrote to it (...
Reduce org creation latency and fix translation cascade failures
- OrganizationController: replace ensureTeamMembersForAllOrgs (full org table scan) with ensureTeamMemberForOrg (single org) — eliminates the ~400ms×N DB ro...
Widen commit_log_translations.title to TEXT to match DB column
The column was VARCHAR(512) in both the annotation and the DB, causing translation inserts to fail for long translated titles. The DB column is now STRING (appl...
Like what you see shipping?
All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.
