Org-scoped loan roster query for the closed-loan trainer
**************** gives the trainer every LOS-linked loan for an org+provider, each carrying the externalLoanName it reads status + documents for.
Closed-loan auto-trainer foundation (MeridianLink ground truth)
Foundation for training document extraction against funded loans (the answer key): - ClosedLoanTrainingRun entity+repo — per-org run control + live counters - E...
Plain-language borrower messages for document rejections
RejectionReasonType was a bare enum (the borrower literally saw "ILLEGIBLE"). Each value now carries a borrowerMessage() remediation string + a messageFor() map...
Platform-wide QC review (cross-tenant labeling for the shared model)
A document is a document — extraction and the model are platform-level, not per lender. Adds a cross-tenant NEEDS_REVIEW queue + QcReviewService.platformReview ...
Platform Document-AI config on SystemConfiguration + cross-org corpus
Adds **************** (default 0.85) + EXTRACTION_MODEL_ID to the platform SystemConfiguration singleton — the platform-wide levers for the QC gate and the regi...
Org-wide QC queue (employee review portal)
Adds an org-scoped NEEDS_REVIEW query + QcReviewService.orgQueue so employees can work every loan's low-confidence extractions from one portal, not one loan at ...
Confidence-gated QC box + labeled training data + gift/self-employment reconcile
QC engine (Phase 4 core): - VerifiedFact gains first-class EXTRACTION_CONFIDENCE, DOC_TYPE_CODE, QC_STATE columns (QcState: **************** Reconciliation ...
Reconcile otherIncome.* facts into OtherIncome rows
Extends fact reconciliation with an otherIncome.* branch: award/benefit documents (Social Security, pension/retirement, child support) land a real OtherIncome r...
Capture + encrypt full SSN on the borrower application
The application posture needs the borrower's REAL Social, not a last-4 (a lender can't do anything with 4 digits). Borrower.ssnEncrypted existed but was never w...
Drop message-body preview paragraph from missed-message email templates
Security: notification emails no longer render any message content; the member signs in to read messages. Sender + count + CTA only.
Missed-message email notification ledger + canonical templates
MessageEmailNotice entity (MESSAGE_EMAIL_NOTICES, unique recipient+sourceKey+channel) with PENDING/SENT suppression states, repository incl. sudo-safe markRead/...
GraphMessageIdMap entity for Microsoft 365 Graph mail id mapping
Maps opaque Microsoft Graph message ids to stable synthetic numeric UIDs per mailbox, so Graph mailboxes flow through the existing numeric-uid mail contract (co...
CitySceneProfile entity + GeoLite city-lookup indexes for city-based portal scenes
- CitySceneProfile (city_scene_profile): per-city environmental scene factors (terrain/relief/silhouette, climate/koppen, hydrology, RESOLVE ecoregion + flo...
The servlet guard must define the SERVLET bean — Boot conditions on the type, not the registration
f8bcc82's ServletRegistrationBean alone name-collided with the auto-config **************** WebServicesAutoConfiguration's bean is **************** Define the s...
Disabled MessageDispatcherServlet registration — kills the multi-servlet landmine for real
Removing the web-services STARTER (55eae0a) was not enough: spring-ws-core itself carries MessageDispatcherServlet, and Boot's WebServicesAutoConfiguration cond...
Spring-ws CLIENT-ONLY — the server starter made every consuming service multi-servlet
**************** auto-registers a MessageDispatcherServlet in EVERY service that depends on shared-lib; with Spring Security 6 that breaks any string requestMat...
LOAN_STATUS_UPDATE canonical template — borrower notified at every loan-file stage change
UpdateLoanFile PATCH must not null absent fields — status-only patch wiped loanNumber/dates
Any partial loan-file patch (the portal's submit sends only {statusId:2}) unconditionally overwrote loanNumber, channelId, and every lifecycle date with null. G...
RESUME_PORTAL_LINK canonical template — borrower magic-link to continue on any device
Bound IP block lookup to a single indexed row
findByIpInRange's two-sided range predicate forced CockroachDB to scan every block with networkStart <= ip whenever the IP fell in a gap (private/bogon/ spoofed...
MortgageProviderResolver deps → ObjectProvider — was crash-looping MediaService
The @Service is component-scanned by every com.kamo service, but mlos.config repositories only exist where @EnableJpaRepositories registers them. Hard construct...
MEET_YOUR_LO canonical template — borrower intro when an LO accepts their lead
CreateFromLead saved Declarations against a transient Borrower — save the app graph first
Same latent TransientPropertyValueException the blank create() fixed at its first caller; createFromLead's first real caller is the portal promote seam (caught ...
AccountGuid insert always violated FIRST_SEEN_AT NOT NULL — ZERO portal leads ever created
Hibernate includes every mapped column in INSERT (no @DynamicInsert), so the unset timestamp went out as explicit NULL and the DB default never applied. Every v...
The doc-04 vendor RUNTIME — MortgageProviderResolver + VendorTypeBridge
The integrations tab wrote MortgageProviderConfig rows nothing consumed at runtime. Resolver: (org, VendorCategory) → activation-gated, profile-scoped, first-en...
Real verified-fact reconciliation — evidence facts now populate the URLA
Replaces the M3a log-only stub: asset.* facts (grouped per source document) become Asset rows and employment.* facts become Employment rows via BorrowerSectionS...
NmlsId is patchable — the company NMLS finally has a write path
Organization.nmlsId (SAFE Act identifier feeding the originator projection's originatorOrgNmlsId and the borrower portal's verified-license pill) was readable e...
Add sellerCredits field + @JsonIgnoreProperties tolerance on lead request DTOs
Mirrors renovationCost: entity column, 3 DTOs (CreateLeadRequest/ UpdateLeadRequest/LeadDTO MortgageFieldsDTO + LeadDTO builder), LeadService create/update pass...
ClosingHorizon — shared §5 close-date heuristic (stage → business days)
One source for the closing horizon so the capital-markets forecast and the doc-freshness sweep project the SAME close date. A calibrated CDF replaces the table ...
Carry mortgage figures in LeadListDTO for the /leads grid
The /leads Residential-Mortgage columns (Loan Amount, Loan Purpose) and the client-side LTV/DTI need mortgage data the lean list projection didn't ship. Widen L...
Sync renovationCost + currentLoanType through MeridianLink mapper (ids TODO-flagged)
Extends the isVeteran LO-XML wiring (1f583db) to the two new renovation/ streamline-refi fields added in 4A (5132026). - LoXmlFieldMapper: FIELD_RENOVATION_COS...
Add renovationCost + currentLoanType mortgage fields
Mirrors the isVeteran field (3f0cea1): entity column, 3 DTOs **************** MortgageFieldsDTO + LeadDTO builder), LeadService create/update passthrough, and L...
Backward-compatible 6-arg LeadFieldPatch constructor (isVeteran defaults null)
Keeps existing 6-arg consumers (e.g. SecurityService LOS-apply tests) compiling on the shared-lib bump without a lockstep change.
Sync isVeteran through MeridianLink LoXmlFieldMapper (id TODO-flagged)
Wires LeadClaimMortgage.isVeteran into the LO-XML round trip using the convention field id aBIsVeteran (matches the aB... borrower-attribute prefix of aBFirstNm...
Org-scope inbound LOS loan lookup + after-commit outbound push + inbound history audit
ApplyLosPatch owns lastPulledAt (stamp on no-op too); single link writer
Active-filtered MarketLosConnection finder
Adds **************** so consumers can treat a soft-deleted (isActive=false) LOS connection as absent, mirroring SocialConnectionController's active-filtered re...
PlatformOAuthProviderType append-order guard
Regression-locks the Phase 5 pull-forward: MERIDIANLINK(8,"meridianlink", "MeridianLink Mortgage") must stay the LAST constant so no existing provider's persist...
Fail closed on blank MeridianLink Save status + OKWithWarning test
LO-XML field mapper
LoXmlFieldMapper translates Lead/LeadClaimMortgage <-> confirmed MeridianLink LO-XML ids (sLAmtCalc, sPurchPrice, sApprVal, sLPurposeT, aBFirstNm, aBLastNm) wit...
MeridianLink modified-loans + deep-link
Adds ListModifiedLoansByAppCode (parse ArrayOfString -> loan names), **************** and AppView.GetPmlLoanUrl (prefix the partial URL with the origination hos...
MeridianLink SOAP client create/save/load
MeridianLinkSoapClient wraps the Loan.asmx ops over a Spring-WS WebServiceTemplate (namespace **************** per-op SOAPAction): Loan.Create -> loan name; Loa...
MeridianLink auth ticket cache
MeridianLinkAuthService mints and caches the sTicket per (instanceBaseUrl + sha256(clientSecret)) with an injected Supplier<Instant> clock and a configurable TT...
MeridianLink creds resolver
Adds the Phase 2 SOAP-adapter package **************** with MeridianLinkCreds (secret-redacting record) + MarketLosConnectionResolver, which decrypts the per-ma...
LeadLosLink entity + repository
Tracks a lead's link into an external LOS loan file, one row per (lead, provider). Carries the sync bookkeeping (contentHash, lastPushedAt, lastPulledAt) that P...
Like what you see shipping?
All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.
