A suspended loan can be resumed, and is no longer offered to itself

Fixkamo-shared-library
Shipped
July 22, 2026 at 6:18 PM UTC
Author
Kamo
Commit
7f80b96

SUSPENDED is deliberately not terminal — LoanFileStatus.isTerminal excludes it, because a loan is suspended for a fixable reason. But it had no forward arrow, so its only exits were WITHDRAWN and DENIED: every suspended file was dead, and the only way to act on one was to kill it. Meanwhile ClosingHorizon still gave it a 40-day close and LoanTransactionStatusDeriver reported it as IN_PROCESS, so the rest of the system believed it was live. It now resumes to IN_UNDERWRITING, gated on LOS_UNDERWRITE_LOAN. Underwriting rather than the stage it came from, because the pre-suspension stage is not recorded anywhere: landing on an underwriter is a human re-entry decision, not a silent restore of a stage whose work may have gone stale. Recording the origin stage would need a schema change and is the better long-term answer. legalNext also stopped offering an off-ramp to the status the loan is already in. The steward UI preselects the first option, so a suspended loan defaulted to SUSPENDED -> SUSPENDED — a submit that could only fail. The UI needs no change: it renders whatever the backend returns, so the resume now becomes its sensible default. Six tests, including a sweep asserting no status is ever offered as a transition to itself.

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