Skip to content
KAMOUniverse

Changelog

What's new.

Every improvement to the platform, as it ships.

  1. · kamo-shared-library

    Pull-Through — AiPullThroughPolicy + PipelineFundingProjection (doc 09)

    The doc-09 pull-through entity foundation (same mlos.capitalmarkets pkg). AiPullThroughPolicy (RENAMED from doc-09's 'LenderProfile' to avoid the shipped config-root collision; the tunable P(fund)->lock/warehouse/hedge knobs; version-bearing partial-WORM, MlosLockPolicyVersion idiom — terms frozen, status ACTIVE->SUPERSEDED + supersededAt write-once; new DeliveryCommitmentType **************** [NOT the shipped **************** — different axis] + HedgeAggressiveness; degradedFloor floored by the platform min). PipelineFundingProjection (the MUTABLE latest-live P(fund) surface, explicitly NOT WORM; rewritten each recompute; history is in AiDecision). **Fallout is NEVER stored** (DERIVED 1-pull-through, doc 01 §7) — enforced by a no-fallout- column test across all 3 capitalmarkets entities. 3 enums, 2 repos, 5 tests. Faithful version-spine + mutable-read-model mirrors. Deferred: **************** (needs a sibling extension — LoanConditionTemplate is locked) + all model-serving (MLOSGovernanceService).

  2. · kamo-shared-library

    RceCommitmentDecision — the RCE lock-decision detail (doc 08 §10.1)

    Opens **************** the net-new RCE persistence gap (lock lifecycle + config + decision-spine were all already shipped). Closes the audit chain RateLock <-> MlosLockRecord <-> RceCommitmentDecision <-> AiDecision. Total-block WORM (AiDecision idiom; correction = NEW row via supersedesDecisionId). Records best-ex/lock-vs-wait rationale + the snapshotted strategy/autonomy/ **************** at lock + the §10.3 fingerprint version pins. LO compensation is NEVER an input (marginSrpBasisBps comp-invariant, §7.1); no fallout column (DERIVED, doc 01 §7). Reuses shipped AutonomyLevel + MlosLockRecord/MlosLockEvent (does NOT re-model the lock lifecycle). 2 enums **************** repo, 4 tests. Research workflow design gate + faithful WORM mirror.

  3. · InitializerService

    Register com.kamo.z.shared.mlos.eclose in @EnableJpaRepositories (doc 05)

  4. · kamo-shared-library

    ClosingWorkflowTemplate + MersRegistration (doc 05 §6.2/§6.3) — COMPLETES the §6.3 eClose inventory

    ClosingWorkflowTemplate (the eClose graph as DATA — version-bearing total-block WORM, stepsJson JSONB, effective-dated; scopeLevel most-restrictive). MersRegistration (the MERS-is-ONE-system per-loan operation ledger — append-only partial-WORM, min/operation frozen, status advances; MIN global-uniqueness owned by the LoanIdentifier MERS_MIN registry, referenced not overwritten §6.3). 3 enums, 2 repos, 4 tests. Faithful mirror (version-spine + partial-WORM). Completes doc-05 §6.3.

  5. · kamo-shared-library

    EClose core — ClosingPackage + ClosingArtifact (doc 05 §6.3)

    Opens com.kamo.z.shared.mlos.eclose: the eClose workflow-graph substrate. ClosingPackage (aggregate root, one per closing; partial-WORM — identity frozen, status walks) + ClosingArtifact (one node per **************** step; append-only partial-WORM — identity/provenance frozen [providerName/externalRef OPAQUE, no provider- specific columns], result advances; a re-run is a NEW row §6.3). Soft-FK-by-id + denormalized org (the mlos.* pattern, no @ManyToOne); externalRef = inbound-webhook resolution anchor §6.4. EsignEnvelope/DisclosureSet code-verified UUID; the e-sign bridge is a SERVICE (writes the locked stub), not a new entity. 3 enums, 2 repos, 8 tests. Research workflow design gate + faithful-mirror partial-WORM. Deferred: ClosingWorkflowTemplate + MersRegistration.

  6. · kamo-shared-library

    InternalRulesDecision — the §6.5 non-AUS rules-engine store (doc 10) — COMPLETES the aus_* inventory

    The internal non-QM/DSCR/ITIN/Jumbo deterministic rules-engine result store: explicitly NOT an AUS (not AusFinding/AusKind, never disclosed as a GSE AUS, doc 01 §7). FKs LoanFile DIRECTLY (the ONE documented §6.6 exception — it is not an AUS run). Legal wall: sourceLabel hard-forced to the fixed INTERNAL_RULES marker on persist (never a GSE label); outcome uses the distinct **************** vocab (no Approve/Accept/ Refer/Caution). Total-block WORM (AiDecision idiom). Faithful mirror + the legal-wall guard; 3 tests.

  7. · kamo-shared-library

    AUS finding children — aus_condition + aus_waiver + aus_validation (doc 10 §6.2)

    Completes the doc-10 aus_* finding-children inventory (the InternalRulesDecision non-AUS sibling is a separate slice). AusCondition (parsed agency-feedback line; partial-WORM — content frozen, loan_condition_id write-once null->value when the LoanCondition obligation is instantiated §5.3; agencyStatus a free String). AusWaiver (ACE/value-acceptance §5.2; validatedSnapshotJson for §3.4 drift) + AusValidation (D1C/AIM per-component relief §5.4) = total-block append-only WORM (every state/REVOKED is a NEW row §3.3). All soft-FK-by-id to locked AusFinding + denormalized org/loan (the AusRun pattern); reuse AusSourceLabel; 4 new enums; 3 repos; 6 tests. Faithful mirror of the reviewed AusRun pattern — no review workflow.

  8. · InitializerService

    Register com.kamo.z.shared.mlos.aus in @EnableJpaRepositories (doc 10)

    New aus_* repo package (AusRun + children). mlos_aus_run created + verified.

  9. · kamo-shared-library

    AusRun keystone — the AUS submission-of-record (doc 10 §6.2)

    Opens com.kamo.z.shared.mlos.aus: AusRun (child of locked AusFinding) carrying per- submission run state — phase, dual-AUS freeze/soft-lock, cost+credit-reissue tracking, AiDecision rationale link. v1 AGENCY only (DU/LP/GUS; TOTAL = a DU/LP sub-result §6.4). DELIBERATE doc-10 deviations (dictated by doc 01 + the session hard rule, review-confirmed SHIP_AS_IS): soft FK by id (aus_finding_id UUID, NO @ManyToOne — overrides §6.2's @ManyToOne) + DENORMALIZED organizationId+loanFileUid (a soft FK can't be JPQL-traversed for org-scoping — the universal mlos.* pattern, MlosLoanScenario precedent) + new mlos.aus package. Partial- mutability WORM (MlosGuidelineVersion idiom): content frozen, only frozen/superseded write-once false->true (§2.4/§2.5 soft-lock) + caseFileId write-once null->value (§2.4 persist-and-reuse). source_label NOT-NULL agency-only (no INTERNAL_RULES — that wall lives on the sibling store). Research + 2-agent review (SHIP_AS_IS); 10 tests. Deferred SchemaCleanupRunner anti-AUS-shopping partial-unique index noted in javadoc (no writer yet).

  10. · kamo-shared-library

    Doc-03 §2.8 compliance entities — ComplianceFinding + RBPN + FCRA-AA + ChangedCircumstance

    The §2.8 record-of-determination + the three INDEPENDENT notice/CC regimes, joining the shipped AdverseActionTimer/RegXTimer in mlos.compliance. All total-block WORM (AiDecision idiom — examiner evidence; a correction is a NEW row). ComplianceFinding (source/findingType/ **************** tridTimerId UUID FK->locked TridTimer; loanFileId Long; NO cure-amount column — §2.8-faithful, cure-math is a deferred service output). RiskBasedPricingNotice + FcraAdverseActionNotice (thin disclosure records, shared NoticeStatus). ChangedCircumstance (TRID tolerance-reset; anti-click-through guard: non-blank documentedReason + attributable approvedByMemberId). 7 enums, 4 repos, 9 tests. Research workflow code-verified FKs (LoanFile.uid=Long, TridTimer.id=UUID).

  11. · InitializerService

    EventProjectionPolicy platform-default partial unique index (doc 07 §6.7)

    **************** **************** WHERE organization_id IS NULL — pins the platform-default singleton (CRDB NULLs-distinct leaves null-org rows unconstrained otherwise; the GLBA duplicate-platform hazard). Applied + verified.

  12. · kamo-shared-library

    Projection/mediastream substrate — EventProjectionPolicy + LoanStreamBinding (doc 07 §6.7/§7.2)

    EventProjectionPolicy = the GLBA data-minimization allowlist ((eventKind x partyClass/role) -> allowed field-groups + channels); platform-default(null org)+org-override two-row pattern. LoanStreamBinding = **************** (String(36)) get-or-create. Both BaseUuidEntity mutable (no WORM); reuse **************** new StreamAudienceClass(10). 7 tests. 2-agent review FIX_THEN_SHIP (applied): documented the FAIL-CLOSED GLBA contract (no-match/ inactive => deny-all), override-NARROWS-never-widens (platform ∩ override), allowedChannels is a CEILING (∩ TCPA consent, never bypasses), honest NULLs-distinct + null-aware seeder finder + the platform-singleton partial unique index (KI), the '*' wildcard finder, the StreamAudienceClass exhaustive-fallback note, policyVersion intent. (R1/R2 rejected per triage.)

  13. · kamo-shared-library

    Dispatch substrate — NotificationOutbox + NotificationRateWindow (doc 07 §6.4/§10.3)

    The crash-safe per-recipient send queue + durable frequency-cap counter (co-transactional per §10.3). NotificationOutbox (partial-WORM, CommunicationArchive idiom MINUS @PreRemove — a prunable operational queue, not legal evidence): frozen identity/content + freeze-at- enqueue (messageKey + renderedBody) + forward-only OutboxStatus {PENDING,SENT,SUPPRESSED, FAILED} + write-once sentAt; messageKey UNIQUE dedup anchor. NotificationRateWindow (mutable durable counter, no WORM — §6.4 increments in-txn) + composite UNIQUE (org,party,eventKind, windowStart). DISTINCT from the mlos.event MlosOutboxEvent (event backbone). Faithful mirror of the reviewed CommunicationArchive partial-WORM — no review workflow. 12 tests.

  14. · InitializerService

    RuleVersionPin entry->pin hard FK (doc 06 §4.6)

    mlos_rvpe_pin_idx + mlos_rvpe_pin_fk **************** -> mlos_rule_version_pin.uid), mirroring the satisfier->requirement FK. Applied + verified.

  15. · kamo-shared-library

    RuleVersionPin + RuleVersionPinEntry (doc 06 §4.6 per-loan freeze)

    Completes the doc-06 rule-entity inventory: the per-loan point-in-time snapshot of the active rule/policy version set (determinism — an in-flight loan never silently gains/ drops requirements when a tenant edits rules). RuleVersionPin (header: loanFileUid/org/ stageKey) + RuleVersionPinEntry (normalized frozen version refs, entryKind RULE/RULE_SET/ FRESHNESS_POLICY + versionId). Both total-block WORM (DecisionInput idiom). DocumentRequirement. ruleVersionPinId (shipped Slice 1) now has its target. Faithful mirror — no review workflow.

  16. · InitializerService

    Rule-layer DB CHECKs (doc 06 §4.2/§9.2)

    3 platform-owned biconditional CHECKs (mlos_requirement_rule / _rule_set / mlos_freshness_policy: platform_owned = (organization_id IS NULL)) + the legal-wall backstop ck_requirement_rule_legal_wall (NOTE/CD/DEEDTRUST must carry legal_wall=true). All '='/'!='-form, survive the enum-whitelist sweep. Applied to prod CRDB + verified.

  17. · kamo-shared-library

    Versioned requirement-rule definition layer (doc 06 §4.2/§4.6)

    The rule-engine half (part 1) of the Document System: MortgageDocType (52-of-~200 §3.3 taxonomy + non-tunable legalWall source-of-truth) + RequirementDriverType + FreshnessAnchorEvent enums; RequirementRule (partial-mutability WORM, effective window, legal-wall mirror invariant, platform-owned) + RequirementRuleSet + FreshnessPolicy (total-block WORM, version-bearing); RequirementRulePriorityResolver (data-driven priority, ties=most-restrictive); 3 repos. Reuses mlos.config.Channel. marketId/programId=UUID (CommerceMarket/Program code-verified). 37 JUnit5 tests. Multiple open rules per cell is intentional (distinct driverMatchJson predicates, resolved by priority + the deferred evaluator) — no single-open uniqueness, unlike the catalog spines. legalWall lookup is lenient (the enum is an excerpt; a custom code is not blocked). Platform-owned + legal-wall DB CHECKs added in KamoInitializer.

  18. · InitializerService

    Schema for the 1-obligation/N-satisfier condition model (doc 06)

    Register com.kamo.z.shared.mlos.docs in @EnableJpaRepositories (new repo pkg) + SchemaCleanupRunner backstop for mlos_requirement_satisfier (the append-only WORM acceptance record): mlos_req_sat_one_source_chk num_nonnulls(img_id, verified_fact_id, aus_finding_id)=1, mlos_req_sat_type_column_chk (satisfier_type ↔ its source column), mlos_req_sat_requirement_idx, and mlos_req_sat_requirement_fk → mlos_document_requirement(uid). Mirrors the decision_input one-source/kind-column precedent. Applied to prod CRDB + verified.

  19. · kamo-shared-library

    Greenfield 1-obligation/N-satisfier condition model (doc 06 §4.2/§4.3)

    The Document System foundation slice: DocumentRequirement (N satisfiers of an obligation) + RequirementSatisfier (append-only WORM acceptance record) + the two pure resolvers (WaitingOnResolver §6.1 derivation, ConditionClearability ref-counted clear §4.3) + 6 enums, in new pkg com.kamo.z.shared.mlos.docs. The obligation is the LOCKED LoanCondition REUSED by id (loanConditionId soft UUID FK) — never forked/column-extended (doc 01 §1.1). Only the satisfier sub-model is greenfield. FK-by-id discipline: imgId=Long (Img.id code-verified Long), **************** loanFileUid/borrowerUid=Long @JsonSerialize. Satisfier names exactly one typed source (@PrePersist + DB num_nonnulls/type-column CHECKs in KamoInitializer). waitingOn is derived (never authored) on every write. 34 JUnit5 no-DB tests.

  20. · kamo-shared-library

    NotificationPreference + CommunicationArchive (doc 07 §6.2/§9.2)

    Completes the doc-07 §6 entity model — the mutable convenience ledger + the immutable record-of-business. Same pkg (no @EnableJpaRepositories change). - NotificationPreference (mutable): per-(party,event_key,channel) toggle; **************** eventKey String (dual eventKind|category granularity); cadence/batchWindow; party-level locale/quiet-hours stay on LoanParty. - CommunicationArchive (PARTIAL-WORM, MlosLockRecord idiom + @PreRemove): the system-of-record per rendered message; messageKey UNIQUE (idempotency). Freezes **************** whitelists the delivery lifecycle — deliveryStatus (8-state transition table; SENT->OPENED allowed for provider out-of-order opens), sentAt (write-once RESPA/TILA proof), statusUpdatedAt (monotonic, no null-clear), provider/bounce/failure. DUAL consent snapshot (pointer + denormalized resolved state — the WORM ledger's effective state is point-in-time-resolved). assertConsentEvidence(): a transmitted SMS must carry granted TCPA_SMS consent (§6.5). - 12 tests green. 3 net-new enums (DeliveryStatus mirrors locked status naming). Grounded by a research Workflow + adversarial 2-agent review (SHIP-AS-IS; applied assertConsentEvidence + statusUpdatedAt null-clear + SENT->OPENED).

  21. · InitializerService

    Notification party+consent ledger schema (doc 07 §6)

    - KamoInitializerApp: @EnableJpaRepositories += **************** (new repo pkg for **************** - SchemaCleanupRunner: mlos_consent_one_identity_chk = num_nonnulls(party_uid, raw_number) = 1 — a consent event identifies exactly one consenter (party XOR raw inbound number); the WORM-vault analogue of decision_input_one_source_chk. WORM is the entity @PreUpdate/@PreRemove guards (no DB trigger — CRDB can't finalize). 3 tables auto-create via ddl-auto.

  22. · kamo-shared-library

    Party graph + TCPA/E-SIGN consent ledger (doc 07 §6)

    New pkg **************** — the recipient/consent entity foundation. Consumer-agnostic (FKs only locked donotmodify; the dispatcher is a future MLOSxxxService, NOT the personal-loans KamoLOS — doc 07's KamoLOS assignment is stale). - LoanParty (mutable): typed recipient graph; FK locked LoanFile/Member by Long id; contactJurisdiction = the party's OWN residence (quiet-hours); (org,loan,member,role) UNIQUE (per-loan-per-role; nulls-distinct keeps co-borrowers + third parties distinct). - ConsentRecord (WORM, AiDecision idiom + @PreRemove): TCPA/E-SIGN legal evidence; partyUid XOR rawNumber (E.164, for inbound STOP before a party exists) — assertIdentified() + a DB num_nonnulls=1 CHECK; consented_at app-set (legally-accurate capture time); snapshots disclosure_body_sha256. - DisclosureText (WORM + @PreRemove): the EXACT versioned consent text BODY retained (a pointer alone is insufficient TCPA evidence); bodySha256 non-null. - 6 net-new enums (personal-loans enums off-limits + lack IN_PORTAL/MEDIASTREAM/ MAIL). 8 tests green. Grounded by a research Workflow (code-verified EsignConsent-is-a-pattern, KamoLOS staleness) + adversarial 2-agent review (FIX-THEN-SHIP: added the consent-identity CHECK, the LoanParty unique index, sha snapshot, @PreRemove).

  23. · InitializerService

    DecisionInput provenance-integrity DDL (decision-spine 2c)

    decision_input auto-creates via ddl-auto; SchemaCleanupRunner adds the invariants Hibernate can't emit: - decision_input_one_source_chk: num_nonnulls(11 FK cols) = 1 (exactly one immutable source pinned per row). - decision_input_kind_column_chk: the non-null column matches the input_kind discriminator (type-coherence in a WORM legal ledger; pure-SQL, survives the enum-whitelist sweep). - decision_input_decision_idx (ai_decision_uid, date_created) + the hard FK decision_input_decision_fk -> ai_decision(uid) (mirrors steward_feedback). - NO HMDA-firewall DDL: code-verified the doc's CHECK is impossible (VerifiedFact has no factClass column; demographics in a separate table; CRDB CHECK can't subquery; no triggers). The firewall is structural + app-layer, deferred.

  24. · kamo-shared-library

    DecisionInput — FK-pinned input provenance (decision-spine 2c)

    The immutable child of AiDecision that makes every decision deterministically replayable (doc 03 §2.1). Unblocked by the now-complete catalog/scenario/pricing inventory — DecisionInput FK-pins the immutable rule/fact/version PKs. - Total-block WORM (AiDecision idiom: @PreUpdate throws, no @PostLoad, no DB trigger). 11 exactly-one-non-null soft-UUID FK columns (the InputKind discriminator selects which); only ai_decision_uid is a hard FK. - InputKind(11)/InputRole(3) enums. scoreContribution numeric(8,4); testLoan (CORE, mirrors StewardFeedback — WORM can't retrofit the flag). - HMDA firewall (doc 03 §3.3) — CODE-VERIFIED the doc's CHECK is architecturally impossible: locked VerifiedFact has no factClass/HMDA_DEMOGRAPHIC column, demographics live in a SEPARATE BORROWER_HMDA table, CRDB CHECK can't subquery, no triggers. Firewall is STRUCTURAL (table segregation; this entity has no fact-read path) + deferred app-layer rules. NO HMDA DDL ships (a non-working CHECK would mislead an examiner). - The single-non-null + kind↔column coherence CHECKs are KamoInitializer DDL. - 4 tests green; decision repo pkg already in @EnableJpaRepositories. Grounded by a research Workflow (code-verified VerifiedFact/HMDA) + adversarial 2-agent review (SHIP-AS-IS; shipped the kind↔column coherence CHECK).

  25. · kamo-shared-library

    Lock record + lock event (Phase-2 Slice 12c)

    The FINAL scenario/pricing sub-slice (doc 02 §6.3/§8.1) — completes the §6.3 scenario/pricing entity inventory. A rate lock taken on a priced result + its append-only event log. - MlosLockRecord = PARTIAL-mutability WORM (MlosBulletin idiom): @PostLoad snapshots the frozen locked terms **************** anchors/rate_lock_uid), @PreUpdate throws if any change but WHITELISTS status (validated by the RateLockStatus lifecycle table) + lock_expiration (monotonic-forward — never shortens the committed window). - MlosLockStatus mirrors locked RateLockStatus EXACTLY (NO FLOATING/CANCELLED); rate_lock_uid = UUID soft FK -> locked RateLock.id (mixed-PK trap), DB-UNIQUE (1:1 lock<->record; WORM legal ledger, no supersedes_id). - rate_sheet + lock_policy version FK non-null, guideline nullable. - MlosLockEvent = append-only total-block WORM; event_type incl CANCEL (borrower withdrawal, distinct from lender BREAK); price_delta(9,4). - NEVER add columns to the locked RateLock; RCE writes it via LoanPricingService.createLock stamping lockedByMemberId from the actor. - 14 tests green. All indexes entity-declared (no KamoInitializer DDL). Grounded by code-verified locked facts (RateLock.id=UUID, RateLockStatus constants) + adversarial 2-agent review (SHIP-AS-IS; applied all 5 should-consider: monotonic expiration, unique rate_lock_uid, CANCEL event, frozen-price doc, test coverage).

  26. · kamo-shared-library

    Pricing run + result + applied-adjustment (Phase-2 Slice 12b)

    The immutable priced-quote record (doc 02 §6.3/§7.2/§8.1): MlosPricingRun -> MlosPricedProductResult -> MlosAppliedAdjustment, written in one tx by the PPE. - All 3 IMMUTABLE-BY-CREATION (total-block WORM, AiDecision idiom: @PreUpdate throws, no @PostLoad). - Frozen version FK set **************** on the RESULT, not the run (per-product resolution; doc §6.3 line 293/294). - Pricing numbers raw BigDecimal matching the shipped grids: base/final price (9,4); **************** (9,6). total_adjustments = ADDITIVE-only; multiplicative on applied-adjustment rows. - price_adjustment_id = mandatory soft FK -> MlosPriceAdjustment (the §6.5 never-deleting audit chain). created_by_member_id nullable=false. - eligibility_status REUSES EligibilityOutcome; ineligible_reason_code = new MlosAdverseActionReasonCode enum (doc's FK target absent in code). - Review fix: guideline/lock-policy version FKs + priced terms are NULLABLE so KEPT CANNOT_PRICE/NO_COVERAGE rows persist (no sentinel UUID); a @PrePersist invariant restores integrity (ELIGIBLE => priced + no reason; non-ELIGIBLE => reason code present). - 19 tests green. All indexes entity-declared (no KamoInitializer DDL). Grounded by a research Workflow + adversarial 2-agent review (FIX-THEN-SHIP: applied the guideline-version-nullable must-fix + the coherent broadening).

  27. · kamo-shared-library

    Scenario identity — MlosLoanScenario + MlosScenarioBorrower (Phase-2 Slice 12a)

    Opens the doc-02 §6.3/§7 scenario/pricing layer (first of 3 sub-slices). The priceable-scenario aggregate root the PPE hangs off + its borrowers. - FK-don't-recopy (§6.4): scenario stores ONLY derived-for-reproducibility values **************** + an aus_recommendation cache); raw URLA attrs read THROUGH loan_file_uid, never stored. An allowlist reflection test locks this in structurally. - FK locked core BY ID: loan_file_uid + borrower_uid are plain Long columns (code-verified LoanFile.uid/Borrower.uid = Long unique_rowid; doc's UUID wrong) **************** NO @ManyToOne. loan_scenario_id = internal UUID FK. - (loan_scenario_id, borrower_uid) DB-unique natural key (one borrower per scenario; entity-declared, no raw DDL). - Derived ratios/scores DECIMAL(18,6) matching **************** county dollar limit DECIMAL(18,2). Both MUTABLE (no WORM — reproducibility is frozen later on the immutable PricingRun/Result). - All indexes entity-declared (no KamoInitializer SchemaCleanupRunner DDL). - 4 tests green (Long-id String serialization + FK-don't-recopy allowlist). Grounded by a research Workflow (code-verified locked FK types) + adversarial 2-agent review (SHIP-AS-IS; applied the allowlist-test + docstring fixes).

  28. · kamo-shared-library

    Ingestion entities — MlosExtractionTemplate + MlosDocumentSegment (Phase-2 Slice 11)

    Opens the doc-02 §6.3 ingestion side: the per-investor format map the parser reads + one classified, reviewable region of a source document. Four grounded enums **************** ground them in real rate-sheet structure (290-file RateStack corpus survey). - Both entities MUTABLE (not the WORM version-spine guard): registry/review lifecycle, absent from the §6.5 immutable inventory. - MlosExtractionTemplate: forward superseded_by self-FK + active flag; assertSupersessionConsistent() self-enforced via @PrePersist/@PreUpdate (active=true => superseded_by null). header_synonyms = the one §6.7 JSONB. - MlosDocumentSegment: (source_document_id, segment_locator) DB-unique idempotency anchor; classification_confidence DECIMAL(4,3) matching AiDecision.confidence; targetEntity defaults NONE, detectedType has UNKNOWN fail-safe; **************** app-set on review. - All indexes entity-declared (no KamoInitializer SchemaCleanupRunner DDL). - 11 tests green (invariant + enum column-fit guard). Grounded by a research Workflow + adversarial 2-agent review (SHIP-AS-IS; applied the consistency/idempotency SHOULD-CONSIDER items).

  29. · kamo-shared-library

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

    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.

  30. · kamo-shared-library

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

    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).

Your universe is waiting.

Start free in minutes. Add products whenever you are ready — no migration, no new logins.

Free forever — no credit card required