첫 번째 시도가 사망 한 웹훅 이벤트를 다시 실행하고 SDK를 거부 할 수 없습니다
처리되지 않은 행에 대한 잃어버린 주장은 항상 500 응답, 그래서 이벤트 그의 첫 번째 시도가 실패했습니다 (독립적 인 상황의 인종 내부 invoice.created/finalized/paid trio, transient DB 오류, 실패 커밋) 다시 실행할 수 없었다 : 모든 red...
실패한 책임은 다행히 시작하고, 줄무늬는 기절 행위의 앞에 동의해야 합니다
invoice.finalized는 status=각각에 따른 금액으로 엽니다. 충전 전 자동 충전 송장은 시도하고 송장 핸들러는 delinquency 시계를 시작하고, 지불을 보냈습니다 모든 송장 이벤트 유형에 대한 그 상태에 대한 편지. 지금 시계 청구서만 시작하세요. 결제하기 Str...
동결 재건 감시는 결코 불을 수 없었다, 그리고 digest check failed open
배포에 대한 보호는 아무것도 inert, 그래서 파이프라인 파드가 이전의 다이제스트에 머물면서 두 녹색 일자리를보고했습니다. 그것은 방법 billingservice ran 에 일 에 kamo-shared-library 너무 늙은 에 이름 ServiceType 35, 모든 시그널이 말한 ...
이 빌드가 해결되지 않는 앱의 카탈로그 행은 판매되지 않습니다
ServiceTypeConverter는 알 수없는 앱 ID를 던지고 해결하기 시작했습니다. null로, 어떤 서비스가 해야 하는지 - 각 항아리 내부의 enum ships 카탈로그는 공유, 그래서 새로운 응용 프로그램은 항상 데이터베이스에서 마지막 독자가 재건되어 2026-09-08에서...
가격 줄무늬는 결코 들리지 않는 결함, 침묵
카탈로그에 대한 mapped 가격을 비교하고 일찍 돌려 아무것도 전혀 매핑되지 않았습니다. 그래서 카탈로그는 얻었다 가격은 처음 만든 것은 아무것도에 의해보고되었다, 영원히. KamoCRM에 모든 TRIENNIAL 가격 : 계획은 3 년 동안 $ 49 및 $ 99에서 가격이 책정됩니다....
스크린이 말하는 것을 책임지고, pretend 보다는 오히려
살아있는 줄무늬 열쇠에 대하여 계획 & 빌링 콘솔의 감사는 솔기를 발견했습니다 한 번에 모든 방향으로 깨진 화면과 줄무늬 사이, 그리고 침묵 모든 것. 조직이 유료 구독을 완료하지 않았다, 그래서 모든 이 중 하나는 첫 번째 실제 고객에 불을 것이다. 고객이 위탁하는 것 광고된 제안...
에 의해 배포 digest, 태그에 의해
Preceding commit stops `set image` 침묵의 no-op. 이 주장 outcome : 롤아웃 후, 태그는 레지스트리에서 소화로 해결됩니다. 실행된 파드는 그것에 대하여 검사됩니다. 팟이 실행되지 않은 경우 생성, 빌드는 성공보고 대신 실패. 태그는 그 질문에 대...
동일한 커밋의 재건은 아무것도 배포하고 성공을보고
이미지는 커밋 SHA로 태그되어 있으므로 동일한 커밋 생성을 재구성합니다. 동일한 이미지 참조. `kubectl set image` 그런 다음 아무것도 변경, 배포는 결코 터치되지 않습니다, `rollout status`는 즉시 성공 OLD pods, 그리고이 파이프라인은 아무것도 배포...
롤아웃은 오래된 파드가 행해지는 것
Deploys는 요청을 잡기 위해 아무것도와 함께 각 서비스의 유일한 파드를 대체 비행. 함대에 적용된 3개의 조정: - 프로세스가 SIGTERM을 참조하기 전에 10s를 잠그십시오. 쿠버네티스는 팟을 제거한다. EndpointSlice와 같은 순간에 신호, 그리고 Traefik는 제...
Stop offering the internal platform-owner plan for sale
listPlansForMarket filtered on isActive alone, and active is not the same as on the menu. OWNER_UNLIMITED ("Platform Owner — Internal") is active, carries no pr...
플랫폼 org는 자체 카탈로그에 의해 문을 열지 않습니다
플랫폼 org는 "KamoPBX Hosting add-on"라고 말했습니다. 전화 서버 화면, 추가에 대한 게시. 그것은 계획 카탈로그, add-on 카탈로그 및 줄무늬 제품을 다른 소유합니다 조직은 판매되고 아무도 송장하지 않습니다 - 그래서 그 빈 active addon codes...
공유형 이메일 스캔. 청구 저장소 패키지
@EnableJpaRepositories 목록은 명시적으로, 그래서 MailboxBillingDayRepository 보이지 않는 서비스로 인해 outright를 시작하지 못했습니다. 어떤 단위 시험에 의하여 아닙니다.
Webhook idempotency gap BL0의 최종 리뷰 닫기
Finding 1 (Critical): 적색한 줄무늬 사건에 잃는 주장 행을 증명, 사전 시도가 완료되지 않습니다. 견적 요청 일시적인 실패 (Yugabyte 40001, Hikari timeout, 독특한-constraint 경주)는 정품과 동일 중복, 그래서 redelivery 대답...
키 ephemeral per-attempt Stripe 생성
라운드 2 리뷰 (Ruling 17) 발견 "이 생성?" 필요한하지만 아니. 문제의 질문: 이 주제를 할 수 있습니다 열쇠 24h 창 안쪽에 한 번 이상 합법적으로 창조됩니다, 네트워크 재량 이외의 이유? 두는 대답을 창조합니다 예와 1 라운드에서 잘못 키워 : - SetupInten...
Keys는 Stripe에 속합니다만, mutations에 아닙니다
라운드 1 리뷰 (Ruling 15) 긴요한 발견 : 안정적인 idempotency update/cancel/attach/detach에 열쇠는 safeguard가 아닙니다, 그것은 버그입니다. 그들은 이미 명시된 대상 상태를 설정, 그래서 그들은 어떤 열쇠 없이 효력에서 idempote...
모든 줄무늬 쓰기 idempotent, 그리고 키없이 새로운 일에 빌드 실패
Stripe의 소켓 타임아웃은 실제로 성공한 것 indistinguishable, 우리의 측에서, 하지 않았다; 없이 idempotency 열쇠는 retry 두번째 구독, 체크 아웃을 창조합니다 세션, 또는 가격과 테넌트는 두 번 청구됩니다. StripeIdempotency.forKe...
돈 쓰기로 처리 된 플래그를 시작, 그 앞에
markProcessed was REQUIRES NEW, 그래서 그것은 처리 된 = true 동안 핸들러의 돈 쓰기는 여전히 중단 된 외부에 손상되지 않았습니다. 거래. Jpa번역 Manager는 중단 된 persistence를 플러시하지 않습니다. context, 그래서 내부 커밋은 ...
이미 선택한 플랜을 판매 중지
카탈로그는 항상 계획 번들을 추가하는 것을 기록했습니다. ****** *************************************************************************************************************************...
자신의 JVM 힙 천장 위의 포드 크기 [skip ci]
이미지는 -XX를 가진 JVM를 시작합니다: MaxRAMPercentage=70 -XX:+ 항상PreTouch, 그래서 heap 혼자 걸릴 수 있습니다 70% 컨테이너 제한 및 사전 터치 모든 최선을 다하고 자주 묻는 질문 Non-heap - uncapped 메타 스페이스, 코드 캐시,...
취소 중지 미래 청구 및 다른 아무것도
더 이상 "immediate" 플래그를 제거하고 고객 기반 경로가 묻지 않습니다. 한국어 진정한 구독을 종료하는 동시에 Stripe 요청 금지를 위해, 그래서 조직은 그 기간의 나머지를 잃었다 이미 지불하고 환불되지 않았습니다. 하루에 두 번 취소하는 Somebody 달은 그 달을 샀습...
Config default로 공유된 자격 발송
플랫폼의 공유 암호는 DB PASSWORD에 대한 fallback으로 구워졌습니다. MINIO ROOT PASSWORD, 그래서 그것은이 저장소에 살았고 내장 된 이미지뿐만 아니라 클러스터에서. 생산은 DB 기본값을 사용하지 않는 — *** 공급 envFrom를 통해 DB PASSWO...
다른 곳에서 추가할 때 회원 청구 접근을 중단
add() 다른 모든 계정에 회원의 행을 삭제하여 글로벌 고유를 만족시킵니다. 더 이상 존재하지 않는다. 누군가를 두 번째 청구 계정에 추가 지금 떠나 처음 혼자; 같은 하나에 두 번 추가 여전히 합성에 의해 거부, 실제 규칙을 표현하는 독특한.
Sub-org는 그것을 지불하는 계정에 도달
AccountSubscription deliberately는 조직의 급여를 분리합니다. 회원은 좌석을 소모하고, 자동 감독 계정은 최상위 수준에 앉아 KamoCRM org는 sub-org를 대상으로 합니다. interceptor none없는 요구 account.organization =...
카탈로그가 말한 것을, 한 번, 적당한 양을 위해
모든 사람이 진짜 돈을 이동 한 다섯 가지 결함, 그리고 그 아래에 하위 자원 IDOR. 빌링 사이클. ANNUAL 가격은 저장한 달 비율에 줄무늬로 보내졌습니다 년 간격, 그래서 계획은 "$28/mo 연례"로 계산 된 $28 1 년 — a 12x 충전. QUARTERLY 및 SEMI...
데이터베이스에 대한 신 모드를 검증, 위조 된 헤더
AccountOrgScopeInterceptor는 모든 org 및 회원 확인을 단락 X-God-Mode-Active 헤더 및 kamo-internal's billing 프록시 복사 header는 inbound 브라우저 요청을 즉시 차단합니다. 로그인 회원은 따라서 조직의 지불 방법, 청...
CockroachDB-only SQL 그 PostgreSQL 거부
CockroachDB는 텍스트 유형 STRING을 spells; PostgreSQL 및 YugabyteDB 사용 TEXT. 네이티브 쿼리에 걸쳐 25 캐스터는 여전히 CAST (x AS STRING)을 방출하고 ::STRING, '타입 문자열이 존재하지 않는다. 그것은 무슨 일이 일어나...
각 조직의 실제 거래 경계
StorageSnapshotSweep.catchUp은 @Transactional (REQUIRES NEW)를 수행했으며 호출되었습니다. 같은 콩에 스윕 ()에서. 봄은 @Transactional을 통해 프록시를 적용하므로 자체 통화는 완전히 우회합니다. annotation는 경계를 설명...
계정에서 자기 소유자를 강화, 단지 org 경계
Cross-org gate에 따라, 이제 규칙이 결정된다 : 조직 내에서 당신은 관리 할 수 있습니다 자신의 청구 계정 및 조직 소유자는 그 조직에서 사람을 관리 할 수 있습니다. 이름 * 다른 수 있습니다. 즉, 계획과 빌링 탭이 이미 보여줍니다 - 그것은 위에 렌더링 "isSelf...
다른 조직 청구에 도달 한 조직을 중지
/api/billing/accounts는 X-Org-Id 헤더에 의해 리스트를 지정하지만, 아래 모든 경로 /{accountUid}는 경로에서 id를 똑똑하게 가져왔고, 그 소유를 결코 검사하지 않았습니다. - 24 핸들러 계획 변경, 좌석 수, 취소, 지불 방법 및 가입 회원. 이름 ...
답변 "이 Sellable" 앱 카탈로그에서 enum이 아닌
Availability는 runtime에 통신수가, 그래서 ServiceType.getStage () 평균에서 그것을 deriving 앱에서 MLOS를 게시하고 기능은 계획과 빌링 탭에 보이지 않고 인출 앱은 판매에 남아 있습니다. 같은 편집 61755c8 에 적용 POSControll...
유효한 추가 코드 전에 그들은 응용 프로그램을 부여 할 수
active addon codes는 요청 몸에서 직선으로 작성되었습니다. 그것은 아무것도 읽지 않은 동안 무해했다 열, 그러나 그것은 이제 권한화 입력입니다 : 앱의 ServiceType 보조금에 바인딩, 그리고 기업 협상적인 원고 모듈을 위해, 그들은이기 때문에, ONLY 보조 경로입...
Plans & Billing 카탈로그에서 공개되지 않은 앱 숨기기
**************** 고객이 구독하는 것을 선택하는 탭을 다시, 그래서 그것은 아직 사용할 수없는 목록에서 제품을 제공하지 않아야합니다. 동일한 규칙은 공개 가격 카탈로그는 다음과 같습니다. App-bound 계획 기능 및 서비스 유형이 COMPLETED에 도달하지 않은 추가 ...
PlatformAccountSummary의 철사 이름에 is-prefix를 너무 지키십시오
PlatformOrgRow와 같은 Lombok/Jackson 위험: isTopLevel()은 `is`를 잃습니다. 일련화, 그래서 DTO는 철사에 `topLevel`/`platformProduct`를 두고 frontend의 선언 된 PlatformAccountSummary 유형은 Top...
IsTopLevel/isPlatformProduct를 위한 철사에 is-prefix를 지킵니다
Lombok 생성 isTopLevel() 의 `boolean isTopLevel` 필드와 잭슨 `is` prefix를 구부리고, 라이브 엔드포인트는 `topLevel`을 일관화하고 `platformProduct` 클라이언트가 읽는 동안 ****** *********************...
Declare security matchers 명시적으로 그래서 서비스는 시작할 수 있습니다
이 서비스는 2026-07-03 이후 배포되지 않았습니다. 모든 팟은 추락되었습니다. 해결하기 전에: 이 방법은 이러한 패턴이 봄 MVC 패턴 또는인지 결정할 수 없습니다. not ... servlet context에 1 개 이상의 mappable servlet이 있습니다. {Disp...
Flaky egress에 대한 kubectl 다운로드를 Harden [skip ci]
dl.k8s.io 런너의 egress 간에 실수로 중간 전송을 삭제: 컬: (56) OpenSSL SSL read: 해독 실패 또는 나쁜 기록 맥 그렇지 않으면 녹색 빌드에 배포되지 않습니다. 반복적으로 관찰 kamo-signer-monorepo 및 카모 번역 사전. 추가 --retr...
긴 ids를 문자열로 직렬화하여 org-id 정밀도 손실을 중지합니다
Org ids는 CockroachDB unique rowid() 값입니다. MAX SAFE INTEGER의 장점 BillingService는 JSON으로 직렬화되었습니다. 숫자, 그래서 kamo-internal의 JSON.parse 조용히 둥근 e.g. 118875662457526682...
미터 제출 콩에 대한 esign 저장소 등록
EsignMeterSubmissionService는 EsignUsageRecordRepository를 필요로 합니다. @EnableJpaRepositories는 com.kamo.z.shared.esign.repos를 검사하지 않았으므로 컨텍스트 시작하기 패키지 추가 (이제는 @Entit...
Back metered add-on 가격과 빌링 미터
Stripe (>= 2025-03-31.basil)는 레거시 use type+scalee usage를 거부합니다. 미터로 재는 모형 (미터 가격은 미터에 의해 역행되어야 합니다), 그래서 USAGE BASED add-on 가격 생성 실패 — 사용 기반 청구를 끊기 (예 : sign.pi...
Boolean DTO 필드에 @JsonProperty 추가
Lombok 생성 isXxx() isXxx라는 boolean 필드에 대한 getters입니다. Jackson strips 주요한 'is' 부터 is-getters 과 serializes 그들 as 'xxx' 오히려 'isXxx', 그래서 isAccountManager가 'accountM...
Org 목록에서 구독 추적 계정 포함
listForOrg 이제는 구독 대상이 되는 계정을 반환합니다. 요청된 org — 계정이 직접 소유하지 않습니다. 멀티-org에서 지불 계정은 KamoCRM 최고 수준의 org에 살고 있습니다. 구독 대상 하위 파일; 이 KamoClub org 소유자없이 0 계정을보고 "지불 계정"메시...
사용 *********** primitive 겟터
isOrganizationOwner는 TeamMember에 원시 불린이므로 Lombok- 생성된 accessor isOrganizationOwner() getIsOrganizationOwner()입니다. BillingGroupMemberService 및 LicenseService에서 컴...
GET /subscriptions/current에서 상업 구독 노출
Stripe 미러 행이 존재하지 않을 때, org active commerce를 해결 SubscriptionRecord (예를들면 COMP 보조금)은 PaymentMethod 및 계획 기능. 무료 계획을위한 앱 설정 수정.