- Shipped
- November 14, 2026 at 8:48 PM UTC
- Author
- Kamo
- Commit
- 0a0e070
- Resolution: every reader uses the org's ONE active mortgage market's profile; the config API takes an optional ?marketId= (another org's → 404, a non-active market → 409 NOT_ACTIVE_MORTGAGE_MARKET) and provisions a missing profile on the spot. MortgageMarketGuard: one active mortgage market on create, re-type and reactivate (409 ONE_MORTGAGE_MARKET), profile provisioned in the same transaction. Self-heal delegates to MlosProfileProvisioner (SI auto-execute default OFF). - Versioned publish: demotions flushed before the insert, same-day republish keeps a [F,F] window, scheduled versions withdrawn when overtaken, start date in the org's time zone, never in the past; GET answers {active (in force today), scheduled, history (with status), today}; basedOnVersion → 409. - One @RestControllerAdvice (MlosConfigExceptionAdvice): field errors with codes (VALIDATION), rule violations with codes (RULES), 409 STALE naming who changed it and when, 409 CONFLICT, 503 BUSY on 40001, 500 with a reference. - Writes validate only the domains they touch; /lender-profile/validation lists stored problems as Needs You. - @Version rowVersion on every config row; PUT bodies carry rowVersion. - MlosBusinessTypeService + PUT/preview/options /business-type: atomic primary + companions + authority + servicing + capital markets, with a "what changes" dry-run. - GET /relevance: SHOWN / NARROW / NOT_USED per card + EDIT / READ / NONE access with the missing right. - Audit everything: guide (incl. SMS consent text), Arive + MeridianLink connections (token never logged), automation switches (now bump profileVersion), investors deleted WITH their terms. /changes (paged, by card / tab / member, names + pictures, before/after lines), /changes/{id}, /changes/{id}/restore (undo through the same save path, refusing secrets / non-newest with a reason). - Rights: automation right reads the Automation tab; loan-money rights open the page; owner is an implicit holder; 403s name the missing right; isOperator needs an OPEN god-mode window. - POST /automation-actions/all-off (+ GET preview): every switch + SI auto-execute OFF as one undoable change. - Two-person approval (off by default): /approvals, /approvals/setting, approve / decoder / cancel; credit authority, SI posture, provider credentials and authority-changing business types wait for a second admin. - N+1: stage-override map resolved in memory; automation save reads all switches once.
