Lock-policy version (WORM) + period options + extension fees (Phase-2 Slice 9)

Featurekamo-shared-library
Shipped
June 26, 2026 at 8:55 PM UTC
Author
Kamo
Commit
7f1aa3d

The investor lock-policy layer — third effective-dated WORM version spine (after rate-sheet + guideline), keyed per investor; feeds the future RateLock/RateCommitmentEngine. - MlosLockPolicyVersion (mlos_lock_policy_version, WORM): investorId FK, productId(null=all), effective_from/until, sequence_no, supersedes_id self-FK, status, source_document_id FK, + worst_case_window_days, relock_allowed, relock_worst_case, floatdown_allowed, floatdown_fee_price, floatdown_min_improvement_bps, cutoff_time. Same @PostLoad/@PreUpdate partial-mutability WORM. - MlosLockPeriodOption (mlos_lock_period_option): lock_period_days, default_flag (one default per policy via partial-unique). MlosLockExtensionFee (mlos_lock_extension_fee): extension_days, fee_price (raw BigDecimal), increment_type (FeeIncrementType), max_cumulative_days. Value-children. - LockPolicyVersionStatus + FeeIncrementType enums. 3 repos. LockPolicyVersionResolver (gated mlos.catalog.enabled): point-in-time window, never latest-row, throws on overlap (mirrors EffectiveVersionResolver). 17 tests green (6 resolver + 11 WORM). KamoInitializer adds ux_lock_policy_version_active (one open ACTIVE per org+investor) + ux_lock_period_default (one default lock period per policy). No review workflow (faithful mirror of the already-reviewed Slice-1/7 WORM+resolver spine).

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