LO-scoped create (block if unmapped) + member MeridianLink credential API + market-config LO link status

FeatureSecurityService
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.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing