Grandfather orgs already running a gated commerce market
Gating MORTGAGE behind MLOS made the gate unsatisfiable for tenants: MLOS is still PLANNING, and FeatureController.enable refuses a non-COMPLETED app for a chil...
Seed app entitlement for every root, and stop inventing plan tiers
Two defects found by checking prod before flipping kamo.entitlement.fail-open. Sign Pink is a second entitlement root (isPlatformProduct, with its own FREE/BUS...
Backfill app entitlement rows into the platform plan catalog
Entitlement now resolves on a typed service_type column, but no catalog row carried one, so every plan still resolved to 'everything included' via the fail-open...
Mailbox pointers for departments and orgs, and backfill the departments
DEPTS.MAILBOX_ID and ORGS.CONTACT_MAILBOX_ID, both plain UUID with no FK to email_provider.mailboxes: mailboxes sync from external providers and can be removed ...
Give a team member a manager
Adds MANAGER_ID to member_team_member, a nullable self-reference for the reporting line. Nothing is backfilled: no manager is a complete answer, both at the top...
Add DEPTS.PARENT_DEPT_ID for nested departments
Nullable with no backfill -- null means top level, which is what every existing department was and most will stay. Declared plain UUID with an explicit DROP DE...
Migration for the commission ledger and Stripe payout tables
Mirrors com.kamo.z.shared.commission. ddl-auto would create these from the annotations anyway; the explicit DDL is the house convention and is what makes the sh...
Fail the run when a required UNIQUE index cannot be created
ensure() caught Exception and logged, so a failed CREATE UNIQUE INDEX reported success and the service booted with no uniqueness guarantee at all — the one outc...
Land the legal package schema
Adds com.kamo.z.shared.hr.legal to the repository scan list and ensures the uniqueness and lookup indexes the entity mapping cannot express safely.
Scope empty binders to (MY_DOCS, '') not the owner's member id
The My Docs DocManager never passes an assocObjectId prop, so it always resolves and queries (3, ''). BACKFILL_EMPTY_SQL was scoping empty binders to (3, member...
Correct javadoc on Hibernate ddl-auto behavior for NOT NULL columns
CockroachDB rejects ADD COLUMN ... NOT NULL without a DEFAULT on a populated table, so Hibernate's ddl-auto attempt fails (logged, non-fatal) rather than no-opp...
Backfill the collection each existing binder belongs to
Derives the scope from the first DOC item's Img; empty binders fall back to the owner's My Docs. Applies NOT NULL only after the backfill.
Create the email search_vector column and its inverted index
**************** never existed. EmailService's own V1__email_metadata_schema.sql declares it, but that migration never ran -- the table came from this service's...
Purge lead e-mail links whose lead-side address is the company's
Clears what the old company-address rule wrote before it read org_domains. Live production was purged by hand at the time (126 rows, 6 leads, one org); this exi...
Schema and contact-point seed for lead communications
Hibernate creates the three new tables from the shared-lib entities; this adds what it cannot express — the partial unique index that keeps at most one open con...
Schema for the multi-provider meeting layer
Creates **************** and org_meeting_oauth_tokens, adds the provider-identity columns to MEETING_RECORDS and MEETING_RECORDINGS and the Zoom/Teams-capable s...
Reassignable primary agent on a reserved opportunity
PRIMARY_AGENT_MEMBER_ID is who holds the opportunity now; REQUESTED_BY_MEMBER_ID is left untouched forever. Nullable with no backfill on purpose — null means "n...
Commission columns for reserved opportunities and market defaults
Six nullable columns: the overall commission agreed on a reserved opportunity, and the market default that pre-fills it at approval. NUMERIC(19,4) to match the ...
Drop the quote recipient columns
The lead holds the client's name, address and phone; snapshotting them on the quote duplicated a record edited elsewhere. The columns existed only briefly and c...
Tables for lead opportunity reservations
Mirrors LeadOpportunityReservation, LeadOpportunityCommissionSplit and **************** in kamo-shared-library. ddl-auto:update would create them from the entit...
Repair the quote-option FK defaults ddl-auto cannot reach
The existing dynamic sweep only covers nullable FK columns that already carry a FOREIGN KEY constraint. commerce_quote_options.quote_id is NOT NULL, so it is ex...
Create phi_access_log — the durable §164.312(b) audit trail
Until now PHI access was recorded only to a log stream with 14-day retention against a six-year obligation, and with no query surface. An accounting of disclosu...
Create the second-factor tables
Backs UserMfaEnrollment and MfaRecoveryCode in kamo-shared-library — §164.312(d) Person or Entity Authentication, the gap the compliance assessment called disqu...
Create HANDLES_PHI and PHI_EFFECTIVE_DATE on orgs
Mirrors the two new Organization fields, following the OrgBrandingFieldsMigration convention, so the columns are reproducible on any environment rather than onl...
Revert "feat(phi): create HANDLES_PHI and PHI_EFFECTIVE_DATE on orgs"
This reverts commit ****************
Create HANDLES_PHI and PHI_EFFECTIVE_DATE on orgs
Mirrors the two new fields on the Organization entity in kamo-shared-library, following the OrgBrandingFieldsMigration convention. HANDLES_PHI is NOT NULL DEFAU...
Starter maxSeats 5, Business maxSeats 25
Keeps the KamoCRM pricing seed in step with the live catalog after repositioning the published seat caps.
Register **************** repositories
LeadService now eagerly wires MarketLosConnectionResolver, which requires the integrations.los repositories **************** KI's explicit @EnableJpaRepositorie...
Originator/transaction-first columns (@Order 90)
Additive nullable columns + org-unique transaction-number index for the MLOS originator/transaction refactor: mlos_loan_transaction (transaction_number + assign...
Add INVESTOR_PRICE column to rate_locks + loan_pricing_snapshots
@Order(80) idempotent ADD COLUMN IF NOT EXISTS (DECIMAL(9,4), matching the price-to-100 grids) so the MLOS RCE can record the true non-par investor execution pr...
Partial-unique index enforcing one active closing package per loan (eClose double-close backstop)
CREATE UNIQUE INDEX uk_mlos_closing_pkg_active_loan ON mlos_closing_package (loan_file_uid) WHERE status <> 'CANCELLED'. Durable backstop behind the assembler's...
Create mlos_doc_req_borrower_idx for the vault cross-loan reuse query
Mlos requirement single-live index keyed per-human (borrower_uid)
Drop the party-only **************** (it would reject a legitimate 2nd co-borrower requirement); create **************** on **************** Already applied to ...
Seed the 17 real program rulesets (doc03 §9 Phase 1)
Migrates the authoritative ProgramRuleset data from the KamoMLOS client ruleset files into **************** (17 codes, extracted faithfully) and replaces Progra...
Platform-singleton partial-unique index for mlos_governor_config (D4)
mlos_governor_config auto-creates via ddl-auto; add the partial expression unique index confining the platform-default (organization_id IS NULL) to a single row...
Scan mlos.intake repos (§5.A) + drop orphan mlos_aus_connection_config (D40)
- Add com.kamo.z.shared.mlos.intake to @EnableJpaRepositories — the §5.A **************** was component-scanned but not a JPA repo, aborting KI startup befo...
Drop **************** column (D39)
The coarse boolean is replaced by the per-program mlos_investor_delegation child; drop the removed NOT-NULL column so Hibernate INSERTs are not rejected.
Codify §4.2 requirement-writer single-live partial-unique backstop
At most ONE LIVE requirement per (loan_file_uid, img_doc_type_id, party) obligation cell. **************** app-layer idempotency read cannot catch a concurrent ...
Scope mock lead vendors to a market; drop removed createMarket arg
NULLs-safe unique index for ClosingWorkflowTemplate versions (doc 05 §6.3)
One version per (organization_id, scope_level, scope_ref_id) grain. CRDB is NULLs-distinct, so split for the nullable scope_ref_id (mirrors mlos_aiptp_*): mlos_...
Null-safe split of the AiPullThroughPolicy single-active index (doc 09 §8)
CRDB is NULLs-distinct, so the single (lender_profile_id, market_id) WHERE status='ACTIVE' index did NOT backstop the org-wide (market_id IS NULL) grain — two c...
(loan_file_uid,type) native single-active partial-unique index (doc 11 §5.3/§6.2)
Closes a pre-existing double-active hole in the MLOS loan-identifier registry: index (a) **************** only constrains (org, type, VALUE) for the 10 REGISTRY...
Anti-double-lock partial-unique index for RCE lock records (doc 08 §7.3)
SchemaCleanupRunner adds **************** — a partial UNIQUE index on mlos_lock_record (organization_id, loan_scenario_id) WHERE status IN **************** At m...
§2.4 anti-AUS-shopping partial-unique index on mlos_aus_run
One ACTIVE (non-superseded, non-frozen) AusRun per (loan_file_uid, source_label) — "duplicates look like AUS-shopping" (doc 10 §2.4/§2.5). Safe to land now that...
Register pkg + RCE/pull-through DDL (docs 08/09)
@EnableJpaRepositories += **************** SchemaCleanupRunner: **************** (partial-unique) + rce_commit_ai_decision_fk + rce_commit_lock_record_fk + rce_...
Register com.kamo.z.shared.mlos.eclose in @EnableJpaRepositories (doc 05)
Like what you see shipping?
All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.
