- Shipped
- July 15, 2026 at 6:16 PM UTC
- Author
- Kamo
- Commit
- 2b0d578
Drives ClosedLoanTrainerService across successive passes with the (pre-live) MeridianLink wire and vision read stubbed, locking the behaviour the design hinges on: - re-read until SOLVED: pass 1 misreads a field (CORRECTED label carries the SoR truth, loan stays in rotation), pass 2 matches → retired + docs purged, and the corpus UPSERTS (2 rows throughout, not appended). - EXHAUSTED: a never-matching loan retires at training.max-passes-per-loan and purges, instead of re-reading forever. - concurrency: a lost claim() stands the run down with no side effects.