Bulletins + bulletin-change provenance + effective-basis applicability (Phase-2 Slice 10)

Featurekamo-shared-library
Shipped
June 26, 2026 at 9:47 PM UTC
Author
Kamo
Commit
cd51a4e

Closes the doc-02 §6.3 catalog entity inventory. Bulletins are the investor change announcements that spawn new catalog versions and supersede predecessors (§6.5). - MlosBulletin (mlos_bulletin, WORM): investorId FK, title, issued_at, effective_from (LocalDate), effective_basis (BulletinEffectiveBasis LOCK/NOTE/FUNDING/APPLICATION), pipeline_grandfather, supersedes_id self-FK, source_document_id FK, status (BulletinStatus DRAFT/ACTIVE/SUPERSEDED). Content-frozen WORM guard (no effective_until window; corrections = a new bulletin). - MlosBulletinChange (mlos_bulletin_change): change_type, target_product_id, created_guideline/ **************** (at most one — none for RETIRED/MODIFIED), action — the bulletin->version provenance chain. 4 enums. - BulletinApplicabilityResolver (ungated) + LoanEffectiveDates + tri-state BulletinApplicability: encodes the §6.5 compliance rule (misapplying effective_basis is a compliance error) — applies iff ACTIVE + basis-date >= effective_from + not grandfathered; missing basis date -> INDETERMINATE (defer, never silently "old terms"); grandfather uses an EXPLICIT pipelineEntryDate (commitment milestone), not a hardcoded application date. 14 tests green. Adversarially reviewed (2-agent): fixed MEDIUM (grandfather hardcoded applicationDate + internal contradiction -> explicit pipelineEntryDate), LOW (missing-basis fail-direction -> tri-state INDETERMINATE), + javadoc (at-most-one created_version, supersession caller-contract). NO KamoInitializer code change.

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