- Shipped
- July 30, 2026 at 4:50 PM UTC
- Author
- Kamo
- Commit
- 338e97b
Phase L2 of the MeridianLink loan-officer mapping design (kamo-internal **************** §3.3-3.6), built on the L1 shared-lib schema/resolver (MarketLosUserCredential, **************** All SOAP mocked (vendor onboarding still pending). - **************** now creates the loan AS the lead's assigned loan officer via resolveForMember instead of the connection's shared service identity (locked decision B: block, don't fall back). No assigned LO -> 422; an assigned LO with no linked MeridianLink user -> 422 with an actionable message. The already-linked 409 check now runs before the connection/LO checks, per a prior review, so a duplicate-create attempt can't regress to 403/422 ahead of 409. - New **************** **************** (GET/PUT/{marketId}/ DELETE/{marketId}/POST /{marketId}/test), gated like MemberStateLicensingController (STATE_LICENSING_VIEW/EDIT _OWN/_ALL, god bypass). Encrypt-on-write via PlatformSecretCipher, blank secret keeps the stored ciphertext, hasCredential-only view, soft-delete, never-throws Test action. - LeadController market-config gains losLoName/losLoLinked so the lead-view button can pre-warn before hitting the 422. - Adds BaseLosController#unprocessable (422 helper). TDD: 54 tests across LeadLosControllerTest (extended), **************** (new), and LeadControllerMarketConfigTest (extended) — all green. L3 (kamo-internal UI + proxy) is separate follow-up work.