콘텐츠로 건너뛰기
KAMOUniverse

변경 로그

무슨 일이야?

플랫폼에 대한 모든 개선 사항, 그것이 선적.

  1. · kamo-shared-library

    §6.1 RON 법적 벽 곡물 — *********** (Frozen WORM) + CLOSING STEP BLOCKED 이벤트

    속성 상태는 닫힌 패키지에 냉동 정체성입니다 (닫히는 재산 이동하지 않음) 곡물은 §6.1 RON 국가 자격 법률 벽 읽기입니다. CLOSING STEP 블록 튼튼한 신호는 RON가 벽화될 때 닫히는 주위 예외 큐 반응합니다.

  2. · kamo-shared-library

    CLOSING MERS SUBMITTED 이벤트 키 (doc 05 §6.3)

    MERS 신호 : MersRegistration ***********는 대출에 부과되었습니다 (부스 전용, MIN 결코 overwritten). 부가적인 열려있는 끈 열쇠 (DDL 없음).

  3. · SecurityService

    Kamp-apps, VectorService, kamolos, kamo-signer-monorepo를 public changelog에 추가하십시오

  4. · kamo-shared-library

    CLOSING STEP RETRIED 이벤트 키 (doc 05 §6.4)

    스튜어드-recovery 신호 : BLOCKED STEWARD 패키지는 차단되지 않았으며 신선한 PENDING 노드가 재료화되었습니다. 서브시스템을 부가적인 열려있는 끈 열쇠 (DDL 없음).

  5. · kamo-shared-library

    CLOSING STEP FAILED 이벤트 키 (doc 05 §6.4)

    드라이브 루프 오류 신호 : 폐쇄 단계 FAILED / 잠금, 패키지는 BLOCKED STEWARD를 개최; 닫히는 예외 queue 반응. 부가적인 열려있는 끈 열쇠 (DDL 없음).

  6. · kamo-shared-library

    CLOSING STEP COMPLETED + CLOSING PACKAGE COMPLETED 이벤트 키 (doc 05 §6.4)

    드라이브 루프 신호 : closeArtifact는 COMPLETED (다음 어댑터)에 도달했으며 모든 필수 단계가 완료되었습니다. (배우기 납품 / 서비스). 첨가제 오픈 문자열 키 (DATAL 없음).

  7. · InitializerService

    NULLs-safe soleWorkflowTemplate 버전에 대한 독특한 인덱스 (doc 05 §6.3)

    (organization id, range level, range ref id) 곡물 당 하나의 버전. CRDB는 NULLs-distinct이므로 분할 unable range ref id (mirrors mlos aiptp *): mlos closing wft version uniq (scope ref id는 NULL이 아닙니다) + *********** on (org, range level, version) (scope ref id는 NULL입니다). 더 보기 MLOSDocOrchestration 간행물의 읽힌 다음 쓰기 (versionNumber=max+1) 백스톱: 동시 dup-version 출판은 409로 잃습니다 (dup, 벽돌로 덮는 집합에 조립자 결심자 409s를 삽입하십시오).

  8. · kamo-shared-library

    *********** 이벤트 키 (doc 05 §6.3)

    튼튼한 신호는 doc-orchestration 템플렛 발행인은 새로운 closeWorkflowTemplate 버전에 방출합니다. 부가적인 열려있는 끈 열쇠 (DDL 없음).

  9. · kamo-shared-library

    CLOSING PACKAGE ASSEMBLED 이벤트 키 (doc 05 eClose)

    튼튼한 신호 doc-orchestration 모세관은 결산에서 창조될 때 방출합니다 CloseWorkflowTemplate + 첫 번째 artifact 노드. 부가적인 열려있는 끈 열쇠 (DDL 없음).

  10. · kamo-internal

    "Publish to World"단계 제거; 수정 실행 모두

    이제 Generators는 서빙 드라이브에 직접 타일을 작성하므로 worldgen 파이프라인은 더 이상 출판/복사 단계가 없습니다. - worldgenNats.ts + 우주 / types.ts : WorldgenStageId에서 'push'를 드롭, WORLDGEN STAGES 및 STAGE ORDER (파이프 라인 = *********** - Components.tsx : 푸시 STAGE META 엔트리 + 사용하지 않는 CloudUploadIcon을 제거하십시오. - service/[stage]/start: 'all'을 명령 대상으로 받아 "Run All" 작품 (그것은 400ing 대신 대리인에 prep->hydro->flora->transport에 확장합니다).

  11. · kamo-shared-library

    PULL THROUGH POLICY PUBLISHED 이벤트 키 + null-safe AiPTP 백스톱 doc (doc 09 §8)

    Canonical *********** 사건 유형 열쇠를 추가하십시오 (부대를 통해서 튼튼한 신호 엔진은 거버넌스 비행기 AiPullThroughPolicy 출판사에 대한 적극적인 정책을 다시로드합니다. 업데이트 AiPullThroughPolicy WORM javadoc을 문서화하여 단일 활성 백스톱 (per-market + NULLs-distinct-safe org-wide 곡물) 및 작가의 필요한 demote-then-insert 순서.

  12. · kamo-shared-library

    LoanIdentifierEvent append-only 감사 단체 (doc 11 §5.3/§10)

    LoanIdentifierEvent Half of doc 11 §5.3 step-4 / §10 "audit completeness" (모든 mint/supersede는 a를 방출 WORM 이벤트 행). 새로운 *********** LoanIdentifier이벤트 유형, LoanIdentifierEventRepository}: 총 블록 부합형 WORM 엔터티 (A AiDecision/Decision) 입력 idiom — 모든 필드 updatable=false, @PreUpdate throws, resultAt = DB dateCreated) 레코딩 org/loanFileUid/ identifyrId (새로운 ACTIVE 행, 소프트 UUID ref)/supersedesIdentifierId (이전의 superseded, null 최소)/eventType *********** + 쌍을 위한 null이 없는 aiDecisionId WORM-decision Half (deferred - 레지스트리 AiFunction은 아직 존재하지 않습니다). id에 의한 부드러운 정제 ( @ManyToOne), 문자열로 직렬화 된 긴 에이즈. KamoInitializer의 테이블 자동 생성 (Enity-declared indexes on loan file uid + identifyr id; SchemaCleanupRunner 변경 없음. 첨가제 — shared-lib version unchanged (1.5.0).

  13. · InitializerService

    (loan file uid,type) 기본 단일 활성 부분 고유 색인 (doc 11 §5.3/§6.2)

    MLOS 융자 레지스트리: 인덱스(a) *********** 10 REGISTRY-NATIVE를 위한 유일한 constrains (org, 유형, VALUE) 단일 활성 유형, 그래서 두 개의 ACTIVE 네이티브 행 SAME (loan file uid, 유형) 하지만 DIFFERENT 값 수 두 커밋 (예. 다른 값과 registerNative를 경주하는 renumber — 명백한 값 키, 아니 분쟁). 새로운 부분 고유 색인 *********** (loan file uid, 타입) WHERE status='ACTIVE' AND External system reference is NULL and type IN (10가지 기본 유형) 가장 하나의 시행 ACTIVE native id per (loan, type) — OWNED ELSEWHERE 미러의 인덱스 (c) 아날로그. 더 보기 type IN(...) list mirror index (a); ***********와 동기화 유지 (제16조) 감시). Idempotent CREATE ... EXISTS가없는 경우; prod는 중복 활성 네이티브 행 (verified)을 위반하지 않습니다.

  14. · kamo-shared-library

    IDENTIFIER SUPERSEDED 이벤트 유형 키 추가

    레지스트리 renumber/supersession 신호를 위한 첨가제 오픈스트링 이벤트 키 (doc 11 §5.3/§7.3) — COMPLIANCE TIMER BREACHED 전례 (no enum/schema/KI). MLOSIdentifierService.renumber에 의해 요약되었습니다.

  15. · kamo-shared-library

    *********** — auto execute enabled 천장을 벽 문턱 옆에 해결하십시오

    EffectiveAutonomy(orgId, stage, floor) → 효과적인Autonomy{threshold 추가, autoExecuteEnabled}: 1개의 사슬 도보 (profile → config → stage-override) 그것 BOTH를 반환 §6.2 바닥 자신감을 벽 임계 값과 auto execute enabled 마스터 스위치 (단지 오버라이드 인식). 사용 설명서 Threshold 지금 그것을 위임 ( 진실의 단 하나 근원). RCE 잠금 게이트는 회전을 열망 auto-execution off as a auto-act CEILING 에 관계없이 요청의 자율성 한국어 tenant config가 없다면 빈 (caller는 플랫폼 기본값을 사용; 요청 주). 첨가물; 문질 MlosActivationService 콩만 영향을받습니다. 4개의 시험.

  16. · InitializerService

    RCE 잠금 레코드에 대한 Anti-double-lock 부분 고유 색인 (doc 08 §7.3)

    SchemaCleanupRunner 추가 *********** - 부분 mlos lock record (organization id, loan scenario id)에 대한 UNIQUE 인덱스 **************에 있는 상태 대출당 최대 1개의 실시간 환율 잠금 시나리오 : MLOSCapitalMarketsService의 응용 수준에 대한 결정적인 DB 백스톱 반대로 두 배 자물쇠 감시, concurrent-commit TOCTOU 경주를 닫으십시오 (반대로 살아있는 자물쇠는 침묵하는 수락 corruption입니다 — 자물쇠 ledger에는 supersedes id가 없습니다. Idempotent (IF NOT EXISTS); 이미 CRDB에 적용.

  17. · KlusterServices

    부트 스트랩 우주 - 미니 비밀 + ugc 버킷 노트 (§14)

    6단계를 추가하여 bootstrap-universe.sh: 우주의 비밀을 만듭니다. (ACCESS KEY/SECRET KEY from Universe-backup-s3 root creds)와 노트 우주 -ugc MinIO 버킷은 존재해야합니다. Idempotent - 비밀이 있다면 건너뛰기 이미 현재.

  18. · DaemonService

    MLOS 준수 타이머 에스컬레이션 소비자 (BLOCKED→STALE)

    수락 타이머 breach 반복의 소비자 반 (doc 03 §2.8; 이미 절반을 방출). ComplianceTimerBreachConsumer는 ***********에 (Durable JetStream)을 구독합니다. 그리고, breached 대출 당, OrchestrationEscalation을 통해 STALE에 BLOCKED Orchestration 코퍼를 플립 (주) (mutable, idempotent — 이미 STLE/GREEN/COMPLETE untouched). ************** 추가 으로 @EnableJpaRepositories; mlos.outbox 활성화 (그래프의 방출은 크게 + 릴레이) 및 *********** 플래그. 5 단위 테스트.

  19. · InitializerService

    §2.4 anti-AUS-shopping mlos aus run에 부분 고유 색인

    1 ACTIVE (non-superseded, non-frozen) 당 AusRun (loan file uid, source label) — "duplicates 보기 AUS-shopping과 같이 (doc 10 §2.4/§2.5). MLOSUnderwritingService 대행사 작가가 착륙하는 안전 새로운 활성 실행을 삽입하기 전에 superseded false→true 플립을 관리합니다. CRDB에 적용.

  20. · kamo-shared-library

    MlosPricedProductResult + OrchestrationStepStatus.STALE의 패리스

    - MlosPricedProductResult는 par flag (Boolean, default false)를 얻습니다: §8.1-step-5 파 세포의 row's lock-period ladder, 삽입에 냉동 ( 응답 전용 파 플래그의 Run-of-record persistence). - OrchestrationStepStatus는 STALE을 얻습니다. SLA 타이머를 준수하는 BLOCKED 단계 + 에스컬레이션 (대monService Compliance-timer escalation Consumer에 의해 설정; doc 03 §2.8). 두 첨가제; ddl-auto : 업데이트는 열을 추가하고 일반적인 enum-CHECK 청소는 STALE을 인정 다음 KamoInitializer 실행.

  21. · kamo-shared-library

    RateSheetSanityGate - §6.6 하드 프리 게시 산 성 문 (범위 + 모노 스톤)

    @Component (PriceAssemblyEngine pattern) 의 순수 논리 ungated 후보율 / 가격 ladder BEFORE 가격 시트 버전 출판 (doc 02 §6.6) : 컨벤션 - 인식 가격 범위 밴드 [par±20] (par=100 PRICE TO 100 / 0 POINTS FROM PAR - 총 기호 / 변환 오류를 잡아), monotonic-ladder (주의 비율 상승으로 가격 비 감소, (lockPeriodDays,ioFlag) 사다리), 및 구조상 well-formedness (비 면제/긍정 비율/긍정 자물쇠/불투명 비율 없음). 제품정보 모든 위반; 폐쇄 실패. 미래 ingestion 후보 단계에 의해 재사용 (decoupled를 복용) RateSheetLadderCell 레코드, JPA 엔터티). 2 시약 adversarial 검토 → FIX THEN SHIP (1개의 겨냥이 적용된): par-sanity near-par-PRICE를 제거하십시오 체크 — 그것은 거짓 거부 법적 all-premium/all-discount 쿠폰 창 (par-RATE sanity needs rate 레테르를 붙이는, deferred; 밴드는 이미 파의 ±20에 가격을 경계합니다. 또한: sign-convention를 부드럽게 했습니다 javadoc (explicit sign-convention check DEFERRED, Band catches only grosss magnitude errors), 제외 duplicate/monotonic 검사에서 null 비율 세포, 그리고 동일한 비율에 monotonic 비교를 건너십시오. 18 no-DB 테스트 (TDD). KamoInitializer가 없습니다.

  22. · kamo-shared-library

    LockPolicyVersionPublisher - §6.5 슈퍼세션은 척추를 트리아 완료

    ****************의 lock-policy-version 활성화 INVESTOR (ux lock policy version active = (organization id, Investor id) WHERE 당 키 입력 status='ACTIVE' 과 effective until is NULL). 동일한 원자 이전 창 닫기 + saveAndFlush 이전의 가까운 BEFORE 후보 INSERT (하이버네이트 인서트 - 베포 - 업데이 트 인서트 트랩). Deltas vs rate-sheet: 범위 키 투자자Id; 아니 개정Label/issuedAt; intraday effectiveFrom의 일에서 순서 열쇠. 공유lib @Component gated mlos.catalog.enabled + repo 더 많은 정보 11 아니 DB Mockito 테스트 (TDD). 이것으로, §6.5 효과적인 조정 supersession는 모든 3 WORM의 맞은편에 COMPLETE입니다 버전 스핀 (rate-sheet + guideline + lock-policy). 충실한 거울 → CRDB e2e는 문입니다. KamoInitializer가 없습니다.

  23. · kamo-shared-library

    GuidelineVersionPublisher - 가이드 라인 척추에 대한 §6.5 슈퍼세션

    RateSheetVersionPublisher의 가이드 라인 버전 sibling (ux guideline version active = (organization id, product id) WHERE 상태 = 'ACTIVE' 그리고 effective until는 NULL입니다. 동일한 원자 이전 창 닫기: ACTIVE→SUPERSEDED + effective until = successor. effective from, supersedes id 링크, 과 saveAndFlush the 이전의 가까운 BEFORE 후보 INSERT (하이버네이트 인서트-before-update 인서트) 트랩). Deltas vs rate-sheet: 범위 키 productId; validate revLabel + sourceDocumentId (발행되지 않음At); 효과적인 오늘의 순서 열쇠. 공유lib @Component gated mlos.catalog.enabled + 재포 찾기 *********** 12 no-DB Mockito 테스트 (TDD, incl. 플러시 주문 InOrder + WORM 가드 재 실행). 믿음의 거울 의 adversarially-reviewed rate-sheet publisher → 행동의 e2e에 의해 게이트 (guideline supersession 플립 가격 eligibility). KamoInitializer가 없습니다.

  24. · kamo-shared-library

    RateSheetVersionPublisher — doc 02 §6.5 유효성 검사

    Atomic 사전 창은 MLOSCatalogService bootstrap 번들 작성자를 닫습니다. 방어. 기존의 새로운 레이트 시트 버전을 출판 (org, Investor) 범위는 현재 predecessor를 닫습니다 (ACTIVE→SUPERSEDED + effective until = successor. effective from), 다음 intraday의 successor (supersedes id, 링크 sequence no) 그리고 이전에 가까운 BEFORE 후보 INSERT – Hibernate 플러시에서 UPDATEs 전에 INSERTs를 주문하므로 saveAndFlush (prior)가 필요합니다. self-inflicted ux rate sheet version active 부분적인 위반을 방지합니다. 공유lib @Component gated mlos.catalog.enabled (효과적인VersionResolver sibling 패턴); 닫기는 기업의 건설에 의해 WORM-legal @PreUpdate 가드. 15 no-DB 테스트 (Mockito) 포함. 플러시 주문 InOrder + WORM 가드 re-run. 2 시약 adversarial 검토 → FIX THEN SHIP (1개의 꼭지 적용하는: sourceDocumentId는 정면 → 청결한 400의 포스트 측 효력 500 아닙니다. 새로운 엔터티/테이블/레포-interface 없음 → KamoInitializer 실행.

  25. · kamo-shared-library

    PPE 실행 이벤트에 대한 *********** 추가

  26. · kamo-shared-library

    EligibilityCellMatcher 단 하나 차원 이유 부호 attribution (ECOA 특이성)

    PriceAssemblyEngine 검토 표백하다: a EXACTLY에 놓인 셀은 이제 INELIGIBLE이 됩니다. 특정 ECOA 주요 이유 (FICO BELOW MIN / STATE NOT ELIGIBLE / PROPERTY TYPE NOT ELIGIBLE / UNITS NOT ELIGIBLE / ****** ***** 대신 일반 NO COVERAGE에 충돌 - 9 신뢰할 수있는 CELL 코드를 만들기 지원하다 다차원 / 야수 미끼, 숫자 카탈로그 격차 (FICO) 천장 위에 또는 밴드 사이; disjoint 밴드 사이 대출 금액), 제대로 NO COVERAGE를 유지하십시오 ( §6.6 적용 결함으로, 대여 기관이 아닌). 순수한 기판 — 라이브 서비스는 아직 일치를 소비하지 않습니다; schema 변화 없음, KamoInitializer 실행. - EligibilityResult : 주된 MlosAdverseActionReasonCode를 운반합니다. 그것을 소유 — 단지 그것은 차원 맥락을 보유). 이유가없는 2-arg 불가 공장은 REMOVED 그래서 reasonCode는 null iff ELIGIBLE — MlosPricedProductResult입니다 @PrePersist invariant는 어떤 공장 붙박이 결과를 위한 건축에 의해 붙듭니다. - EligibilityCellMatcher: 실패 Dims + relax-one-dimension 속성NoCoverage; 방향 (BELOW/ABOVE/GAP)는 단독으로 그 차원 실패자에 단지 따릅니다 (전체 매트릭스 없음) 그래서 디스펜서에 너무 큰 대출은 결코 잘못되지 않습니다 BELOW MIN 및 FICO 위 천장 / 갭은 false "score too 낮은". 문서화 된 계약 : 하나의 진실한 disqualifier; LOE-Core 소비자 re-attributes up-to-4 NOAA 이유. - PriceAssemblyEngine : 첨가제 이유 또는 (cell, fallback) - 일치자의 선호 소유된 코드; cellReasonCode(matrixType)는 defensive raw-result fallback로 유지됩니다. 2 시약 adversarial 검토 → FIX THEN SHIP; 두 개의 필수품 (loan-amount & 적용 FICO 방향 mislabels, 각 작업 예로 입증) + 이어야한다 (합계 기록 invariant; 기질 계약 + 방향 docs). 19 매직 + 33 엔진 시험 녹색 (89 카탈로그 시험 녹색).

  27. · kamo-shared-library

    ComplianceTimerService는 mlos.compliance.timer.breached를 SLA breach (doc 03 §2.8)에 방출합니다

    발송된 Slice-2c 타이머에 javadoc-named follow-up: "event 배출 Compliance queue는 follow-up입니다. 만료된Breached()는 이제 COMPLIANCE TIMER BREACHED 이벤트 당 ARMED→EXPIRED 타이머, outbox에 기록 SAME TRANSACTION (거래 아웃 박스 보증 : breach는 escalated iff 그것 이다 durably 기록). 다운스트림 소비자는 높은 드라이브 스튜어드 에스컬레이션 + OrchestrationState BLOCKED→STALE 버려진 (뒤 조각). - OutboxWriter는 OPTIONAL 의존성으로 주사했습니다 *********** null disables 방출 그래서 서비스는 여전히 outbox 때 타이머를 만료 기판은 실행 서비스에서 유선되지 않습니다 - 우아한, 백워드 호환 DaemonService의 현재 자동 배선 (3arg 테스트 솔기 보존). - 봉투: domain=compliance, gregeId=loanFileId, 페이로드 운반 *************** - 새로운 열린 문자열 이벤트 유형 상수 *************** ( schema 변경 없음 → KamoInitializer 실행). - 14 ComplianceTimerService 테스트 그린 (12 기존 변경되지 않은 + 2 배출 테스트). 선적된 결정의 믿을 수 있는 거울 소나무/webhook-ingress outbox-producer 패턴 (review-exempt).

  28. · kamo-shared-library

    ConditionTemplateExtension - 포털에 대한 차용차Actionable 플래그 (doc 09 §6.4)

    Net-new data Dependency a renter 포털의 "왼쪽"보기 요구 사항 : Lock LoanCondition은 직원/org 회원 ids 만 운반하므로 포털은 말할 수 없습니다. BORROWER를 여는 조건 doc 09 §6.4는 구독합니다. 대출 기관의 융자Actionable 플래그 - 절대 고정 코어에 열 (doc 01 §1.1). per-condition 플래그는 DERIVED입니다. 이 템플릿 플래그 + 상태 범주에서 서비스 측. - 조건TemplateExtension (com.kamo.z.shared.mlos.docs, mutable config/reference): 소프트 FK 대출ConditionTemplateId → 고정 LoanConditionTemplate.id (UUID), DB-UNIQUE 1:1; denormalized organizationId (Long, String-serialized); 차용차액 boolean @ColumnDefault false (fail-safe: 내부만 curated actionable). -********** (findByLoanConditionTemplateId +를) *************** mlos.docs 이미 @EnableJpaRepositories; UNIQUE 인덱스는 entity-declared ( SchemaCleanupRunner 없음)입니다. - 3개의 no-DB 시험 녹색. DocumentRequirement soft-FK-to-locked의 믿을 수 있는 거울 패턴 (review-exempt).

  29. · kamo-shared-library

    PriceAssemblyEngine — 신중한 §8.1 PPE 핵심 (단계 2 Slice 13)

    첫번째 순수한 논리 mlos 조각: 발송한 카탈로그를 구성하는 캡스톤 수정자에 대한 권한 서버 측 가격 수학 (doc 02 §8.1 단계 2-4). Ungated stateless @Component (조정하기 쉬운) *********** — 0 저장소, 새로운 세대, 스키마 변경 없음. 미래 MLOSPricingService 와이어 재포장 + 지속 + 이벤트. - mergeEligibility(): §8.1 step-2/3 3-conjunct 필터 (셀 및 가이드라인) 그리고 AUS 게이트) → EligibilityVerdict, 단 하나와 가장 심한 차단 주요 MlosAdverseActionReasonCode (cell *********** → 가이드라인 → AUS-When-required → ELIGIBLE - 조립가격(): 최종 가격 = 기본 + Σ ADDITIVE + Σ MULTIPLICATIVE(stack order) + 마진, cap value를 존중. 첨가제 정상화 (→ total adjustments 9,6), 그 후에 multiplicative 요인은 ascending stack order (uid)에 있는 실행 subtotal를 확장합니다 넥타이 브레이크), 그 후 마진은 마지막 / 아웃사이드를 추가; 단일 최종 HALF UP에 (9,4). - 가격(): 오케스트라 모두; 출력은 MlosPricedProductResult를 만족시킵니다. @PrePersist 제안 가능한 일관성 invariant 건설. - cap value = 첨가제 전용 기호 보존 규모 클램프 (cap=0 ⇒ 0 기여, 예정); multiplicative cap value는 확고한 구성 결함입니다 (닫히는, 결코 . .. AUS PASS/NOT APPLICABLE 비 차단 (가격-before-AUS; §8.2 lock-stage hard-stop는 서비스입니다. - 새로운: AusGateOutcome enum + *************** PricedProductComputation 레코드. 33 no-DB JUnit5 테스트 녹색. 연구 Workflow (3-reader + 종합) + 2 시약 조언 (verdict) FIX THEN SHIP, 0개의 콧수; 5개의 콧수염 품목을 적용하십시오: 크 멀티필리핀 캡 가드, 이유 코드-coverage-gap doc, cap=0 + 최저-ruleCode docs 및 6개의 적용 테스트).

  30. · InitializerService

    등록 pkg + RCE/pull-through DDL (docs 08/09)

    @EnableJpaRepositories += *************** SchemaCleanupRunner : *************** (partial-unique) + rce commit ai decision fk + rce commit lock record fk + rce commit pricing snapshot fk ( §7.4 스냅 샷 삭제 가드) + mlos aiptp one active uniq (Lender profile+market 당 1 ACTIVE pull-through 정책). 사이트맵 테이블 + 제약 적용 + 확인.

당신의 우주는 기다리고 있습니다.

몇 분 안에 무료로 시작하세요. 준비가 되면 언제든지 제품을 추가할 수 있습니다.

영원히 무료 - 신용 카드 필요 없음