- Ya
- 8 Agosti 2026, 22:31 UTC
- Mwandishi
- Kamo
- Ahadi ya
- 5fb2e86
The LOS_* -> MLOS_* rename was applied to the enum declaration and nowhere else. Because the freed names were immediately re-declared as the personal-loan rights (190-195), all 106 mortgage call sites kept compiling while silently binding to the wrong product — the compiler cannot see a name that still resolves. Rights are stored by id, so a session minted after the deploy writes "MLOS_VIEW_PIPELINE", which then fails a .contains(LOS_VIEW_PIPELINE) test: 403 across the whole mortgage surface — pipeline, intake, disclosures, HMDA LAR, credit orders, QC, closing — appearing gradually as sessions rolled over. The personal-loan rights are now PLOS_*, ids unchanged. A retired constant name is never re-used, so a stale reference is a build failure instead of a change of meaning. That paid for itself immediately: the compiler caught a 107th reference in test sources that a src/main grep had missed. All 107 now point at MLOS_*; grep for RoleRightType.LOS_ returns nothing anywhere. KToken.parse no longer discards an entire token when one right name fails to resolve. Every live mortgage token carries a now-retired name, and the HMAC still verifies, so the token is genuine — rejecting it would sign out every mortgage user at deploy. An unknown right is simply dropped, which can only remove authority, never grant it. Mirrors RoleRightTypeIdConverter, which maps an unknown id to null rather than throwing. 1127 tests pass.