AttributeConverter를 통해 CountryType의 레거시 ordinal 문자열 처리
DB 행은 종단 정수로 저장된 국가 (예 : UNITED STATES의 "186") enum 이름 대신, findAll()에 IllegalArgumentException 발생. CountryTypeConverter는 valueOf가 실패할 때 ordinal lookup로 돌아갑니다, 항...
Tsx를 배경으로 즉시 번역 작업을 취소
Forgejo가 워크플로우를 취소할 때, bash는 전방 아이를 기다립니다. 신호를 처리하기 전에 완료하기 위해 - 그래서 tsx locale 일을 실행 런너 슬롯을 들고 분 동안 취소를 차단합니다. 수정: tsx를 실행하고 $CHILD PID를 기다립니다. bash 종료 대기() 즉...
ASTERISK CDR DSN을 로컬 config.json로 이동하여 CI/CD 비밀이 아닙니다
CDR credentials는 각 FreePBX 서버에 로컬이며 비즈니스가 없습니다. CI/CD 파이프라인에. 연산자 추가 ASTERISK CDR DSN 직접 자신의 API KEY와 PHONE SERVER ID와 함께 구성.json. config.go 필드 그리고 모든 런타임 동작은 변...
GetDomainById 및 검증된 엔드포인트에 대한 높은 액세스 허용
최고 수준의 org 소유자 및 시스템 구성원은 getDomainBy에 403을 얻고있다 ₢ 킹 and valid-dns because 그 endpoints check isUserMemberOf Org 직접. hasElevatedCrossOrgAccess 헬퍼를 추가하고 회원 확인과 함께...
기존의 org 도메인 대신 입력 양식의 경우 사용자 지정 도메인
디스플레이 도메인으로 org의 플랫폼 하위 도메인으로 돌아갑니다. DnsProgressView DomainEntryForm보다는 사용자 정의 외부 도메인이 존재하지 않을 때 렌더링합니다. 또한 DomainEntryForm의 "platform domain" 배너를 제거합니다.
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...
Sync member.email when primary mailbox는 할당, 변경, 또는 제거
Mailbox가 KAMO MAIL org의 회원으로 할당되었을 때, member.email 이메일CredentialService가 IMAP을 해결하지 못하는 경우 결코 업데이트되지 않았습니다. 그 회원의 자격.
중복 루트 도메인을 방지하고 기본 도메인 표시를 수정
ONE DOMAIN PER ORG 체크인 잘못된 제외 .kamocrm.com 웹 별 org는 여러 루트 도메인을 축적 할 수 있도록 (그리고 10 aliases 각각) 다른 별명으로 재출시. 이제 모든 것을 계산 최상위 도메인(parent IS NULL) suffix에 관계없이. 네트...
CockroachDB 분쟁을 방지하기 위해 회원 보안 및 회원 PUT 통화를 직렬화
2개의 동시는 동일한 `members` 행에 serializable 씁니다 isolation 분쟁 - 구성원은 회원이 읽는 동안 행을 읽습니다. endpoint는 (DateUpdated를 통해 통로), 한 트랜잭션을 aborting 오류 40001. 순차적인 호출은 overlap를 삭제...
Org 생성 지연 및 수정 번역 캐스케이드 실패 감소
- OrganizationController: makeTeamMembersForAllOrgs (전체 org makeTeamMemberForOrg (single org)로 테이블 검사 ~400ms×N DB 라운드 스트립 /network/create 제출이 붙어있는 - Organizatio...
Widen commit log translations.title 에 TEXT 에 일치 DB 열
열은 비문과 DB 모두에서 VARCHAR(512)였다. 긴 번역 제목에 실패하는 번역 삽입. DB 칼럼은 이제 STRING (직접적으로 승인); 이 표기는 엔티티티를 유지합니다. 제품정보.
백엔드 응답 envelope에서 Unwrap 카탈로그 및 계산
getSubscriptionCatalog는 { 카탈로그를 반환합니다 : {...} } 그러나 직접 던지기 으로 SubscriptionCatalog, 카탈로그를 떠나.예정과 계획 선택 단계 공백. countSubscription에 대한 동일한 문제 가격 그의 { 계산: {...} } 래퍼...
Boolean DTO 필드에 @JsonProperty 추가
Lombok 생성 isXxx() isXxx라는 boolean 필드에 대한 getters입니다. Jackson strips 주요한 'is' 부터 is-getters 과 serializes 그들 as 'xxx' 오히려 'isXxx', 그래서 isAccountManager가 'accountM...
Fuser 대신에 ss를 사용하여 stale port-forward를 죽이십시오 (k0m1)에 fuser
fuser와 lsof는 주자 주인에 설치되지 않습니다. 사용 ss -tlnp 와 PID 보유 포트 18080을 추출하고 직접 죽일 수 있습니다. 기타 SIGKILL (-KILL)에 pkill를 전환하므로 stale 공정에 의존하지 않습니다. 우아한 신호를 수여합니다.
청소 stale 포트-forward 그래서 취소 번역 작업은 다음 실행을 차단하지 않습니다
Bash는 배경 처리에 신호를 전달하지 않습니다, 그래서 kubectl port-forward outlived 취소 작업 흐름 실행 및 개최 포트 18080, 모든 후속 번역 and rebuild 작업 차단. 수정: 바인딩하기 전에 18080에 기존 포트 포워드를 죽이십시오 (pkil...
페이지의 모든 깨진 위주 값 복원
Salvage-keys 스크립트는 CSS classNames, 인라인 스타일 및 JS를 잡아 114 메시지에 대한 원래 영어 텍스트 대신 템플릿 리터럴 열쇠 spanning 주, kb, 상거래, 계정, 보고, 지도, 조정, 그리고 대시보드 페이지.
Restore 리드 페이지 영웅 제목 및 제목 git 역사
heroTitle was 'Hero Title' (주), heroSubtitle was 'flex gap-2' (salvage-keys 실수로 인접한 CSS 클래스 이름을 잡아). 정확한 값은 커밋 10f4e4b에서 회복됩니다.
Polling widget.getState()에 의한 Enable Finish 버튼과 auto=onload로 전환
Statechange 이벤트 청취자는 끝 버튼을 안정적으로 활성화하지 않았습니다. *** 확인 후. 두 루트 원인: 1. 배수 논리 읽기 위젯Any. 위젯에 존재하지 않는 상태 — 위젯은 getState()가 아닌 .state 속성을 노출하므로 배수는 항상 확인 후 리스너가 부착되면 ...
Org 목록에서 구독 추적 계정 포함
listForOrg 이제는 구독 대상이 되는 계정을 반환합니다. 요청된 org — 계정이 직접 소유하지 않습니다. 멀티-org에서 지불 계정은 KamoCRM 최고 수준의 org에 살고 있습니다. 구독 대상 하위 파일; 이 KamoClub org 소유자없이 0 계정을보고 "지불 계정"메시...
StatusWindow 레이블 네임스페이스를 추가하고 모든 설정을 수정합니다
- 추가 *********** (50 키) 그래서 설정 nav sidebar는 키 경로 대신 실제 텍스트를 보여줍니다 - 분기별 타입Label ICU 형식 수정: \${branchLabel} → {branch} - 고침 tr() fallback 가드: next-intl는 키 경로 문자열...
다른 공구 창의 크기 + 색깔 계획 일치
- defaultSize 및 minSize 지금 320x650, 재시동할 수 있는: false (매체 소프트폰, 채팅, 계산기, SMS, AI 채팅) - SoftphonePanel에 의해 사용되는 표준 가벼운 기온 (#fafbfc -> #f5f7fa)에 어두운 슬레이트 기온변화도에서 전...
Forward Range header so audio playback can scrub
Without this the VOIPService recording-streaming endpoint always returns the full file (Range header is dropped by buildForwardHeaders), which works for play-fr...
Rewrite /etc/odbc.ini to point at $MARIADB_HOST on every boot
The escomputers/freepbx:17 image bakes /etc/odbc.ini with Server=db (the docker-compose link target). On this Kubernetes deployment MariaDB lives at \$MARIADB_H...
Resolve member→extension before VM/CDR provider lookup
CallController was passing memberId where FreePBX (and other PBX-style providers) expect an extension number — voicemail listing returned empty because no PBX e...
Auto-assign first seat, 바닥으로 무료, 더 넓은 org 무효
BillingSetupService는 이제 제작자를위한 첫 번째 오픈 라이센스 슬롯을 활성화합니다. sub-org 구독을 무시할 때 (그리고 홍보-to-billing-owner와 동일) — 그렇지 않으면 신선한 sub-org 소유자는 무료 기본을 볼 수 있습니다. 묘목 계획에 라이센스....
Top-level org 회원은 플랫폼 소유자 계획을 얻을, 청구 게이트 우회
KamoCRM (최고 수준의) org 회원은 청구 시스템에 적용되지 않습니다 - 그들은 OWNER UNLIMITED 플랜의 기능 매트릭스가 (무료로 소유자 계획이 누락되면 떨어졌다), plus has-active-license and has-Kamo-CRM-access true 그래서 ...
Top-level org bypass + 하위없이 orgs에 대한 무료 기본 낙하
Org-level 제목 체크 **************** org를 타겟팅하는 구독. 새로운 Target org 모델과 함께, orgs는 accountSubscription은 모든 비핵 앱이 거부되지 않았습니다. 2개의 고침: - 최고 수준의 KamoCRM org는 완전히 청구를 우회...
역사 패널에서 중복 필드 역사 제목 제거
탭 라벨은 이미 컨텍스트를 전달한다 — 제목과 자막은 화면 공간을 낭비했다. 다시로드 버튼은 도구 모음으로 인라인으로 이동.
이메일 body bouncing을 일으키는 layout prop 제거
외부 모션. div's `layout` prop fought 와 내부 AnimatePresence height: 'auto' 애니메이션, 이메일에 FLIP 피드백 루프를 생성 불쾌한 높이 (images, table)는 무한하게.
Account.notes 제거 및 CurrencyType 변환에 대한 RetailService 및 공급자 어댑터 업데이트
항상 doc manager 페이지에 문서 버튼 만들기
GetMemberId() 제거 > 0 버튼을 숨겨져 있는 가드 useUserInfo 로딩 창. 페이지는 이미 뒤에 auth 그래서 아니 고객 측 회원 확인이 필요합니다.
Restore 조직은 실수로 제거
organization.id는 handleCreateDocument 요청에 여전히 필요합니다. 몸; isDocsEditor 상태만 제거되어야 합니다.