மாற்று பதிவேடு
என்ன புதிது.
அது கப்பல்கள் போல், தளத்தில் ஒவ்வொரு மேம்பாடு.
· kamo-internal
Policies tab — effective-dated pricing/capital/servicing config
New MortgagePoliciesTab: current active version + publish-new-version form + version history for each of the three effective-dated policies; configTypes/configApi + tab registration.
· SecurityService
Effective-dated profile policies — pricing/capital/servicing publish
New MlosPolicyWriteService (isolated; its own repos so the config-collection write- service is untouched): single-active demote-then-insert versioning on the same audit spine. Controller /pricing-policy, /capital-policy, /servicing-policy GET (current+ history) / PUT (publish new version). ServicingPolicy SCRA/FDCPA invariants stay true.
· kamo-shared-library
VersionedProfilePolicy interface for effective-dated policies
Pricing/Capital/ServicingPolicy implement it so one publish routine drives the single-active demote-then-insert versioning.
· kamo-internal
Investor delivery + commitment rule sub-editors
The expanded investor row gains Delivery (funding behavior / execution path / remittance) and Commitment (type / min pull-through % / pair-off) editors alongside delegation + overlays; configTypes/configApi types + calls.
· SecurityService
InvestorConfig delivery + commitment rule sub-collections CRUD
**************** (+update/delete) on the D31 config spine (org fail-closed via the parent investor, WORM change-log per row); controller /investors/{id}/delivery-rules + /commitment-rules GET/POST/PUT. Completes the last InvestorConfig sub-collections deferred from [04].
· kamo-internal
Investor credit-box overlay sub-editor
MortgageInvestorsTab's expanded investor row gains an OverlayEditor (FICO/LTV/DTI/ reserves/doc/geo tightening + comparator + optional program + effective window) alongside the delegation editor; configTypes/configApi overlay types + calls.
· SecurityService
InvestorConfig credit-box overlay sub-collection CRUD
**************** on the D31 config spine (org fail-closed via the parent investor, WORM change-log per row, configVersion defaults 1); controller /investors/{id}/overlays GET/POST/PUT (delete via active:false). Completes the InvestorOverlay slice deferred from [04].
· kamo-internal
Right-attached full-height sub-nav + higher-contrast text
- Move the section sub-nav from the left to a right-attached, full-height panel that scrolls independently; the header + form content take the remaining width on the left and scroll on their own (two independent scroll regions on md+; stacks with nav on top for narrow screens). - Accessibility: darken all secondary/label text (gray-400 -> gray-600, gray-500 -> gray-700) across the detail page + shared Field/SectionCard/ EmptyState primitives so labels meet WCAG AA contrast for low-vision users.
· kamo-internal
Loan pipeline as Mortgage sub-tab + light theme
- Add ApplicationsPipelineConsole: a /leads-style advanced AG-Grid datagrid of mortgage applications at a loan level (status filter tabs, filter row, quick search, CSV export, pagination, row -> detail). Wired as the last sub-tab of the Mortgage steward console (?sub=pipeline). - Re-theme /applications/[uid] detail + shared Field/SectionCard/Modal/ EmptyState primitives + all 14 sections from the dark navy theme to the light kamo-internal idiom; replace the full-bleed hero with an in-flow header bar (fixes header/content overlap). - Re-theme /applications/pipeline (kanban) and /applications/hmda-lar to light. - Remove the deprecated standalone /applications dark list; repoint QuickActionsBar 'New Application' to the Mortgage market pipeline sub-tab.
· kamo-internal
Platform AI-Governor calibration config panel (D4 §5.C)
**************** Advanced tab gains a governor panel: edit the platform- default calibration posture (governor gate / force-steward-until-calibrated / min samples, each Inherit|Enabled|Disabled) via the new governor-config API. Per-org overrides layer on top.
· SecurityService
ScenarioDiscoveryService — canonical profile genesis at loan-app create/update (D1)
MortgageAppController (re)produces the canonical BorrowerScenarioProfile via the new ScenarioDiscoveryService after **************** (best-effort, its own tx). Adds mlos.intake to @EnableJpaRepositories.
· kamo-shared-library
LOAN doc-type guard (D2), sign-convention adapter (D3), per-org governor config (D4)
- ImageService: require a docType for ImageAssocType.LOAN uploads (LOAN-scoped; ACCOUNT/SERVICE_* unchanged). - SignedAdjustmentAdapter: the rule-7 adapter/compat boundary (canonical Adjustment ↔ signed value) for incremental sign-convention migration. - AutonomyGovernorConfig + repo + GovernorConfigResolver (org → platform-default → ConfigMap layering); DbAutonomyGovernor now resolves calibration/enablement per-org.
· kamo-internal
AUS connections tab (D37) + block 2nd mortgage market (D38)
- MortgageAusConnectionsTab: org-scoped DU/LP/GUS credential config (one per kind); secret is a write-only password field, row shows only whether a credential is set. - New-market page: disable the MORTGAGE option + validate once the org has one.
· SecurityService
AUS-connection config write surface (D37) + single mortgage market per org (D38)
- MlosConfigWriteService **************** org-scoped (resolveProfile), one-per-AusKind uniqueness, secret preserved on blank-secret edits, WORM audit spine. - MlosConfigController /aus-connections GET/POST/PUT — secret is write-only (encrypted via PlatformSecretCipher inside the mutation); the view exposes hasCredential, never the ciphertext. - **************** reject a 2nd MORTGAGE market per org (409).
· kamo-internal
Investor delegation sub-editor — per-program authority (D39)
Drop the delegated Switch/column; each investor row expands to a per-program delegation editor (program UUID, blank = investor-wide default; DELEGATED/ NON_DELEGATED) backed by the new /investors/{id}/delegations API.
· SecurityService
Investor delegation write surface — per-program CRUD (D39)
Drop delegatedAuthority from the InvestorConfig write/view; add the InvestorDelegation sub-collection under /investors/{id}/delegations (GET/POST/ PUT, delete via active:false) on the D31 config-write spine — org fail-closed via the parent investor, WORM change-log + profileVersion bump per row.
· kamo-shared-library
Per-program investor delegation (D39) — new InvestorDelegation child
Delegation is granular per (investor, program), not a coarse InvestorConfig boolean. Adds DelegationAuthority {DELEGATED, NON_DELEGATED}, the InvestorDelegation entity (mlos_investor_delegation, optional programId; null = investor-wide default) + repo, and drops ****************
· kamo-shared-library
[AUS] AusConnectionConfig entity — per-org per-market DU/LP/GUS connections
Owner directive #6: each org configures its own AUS vendor APIs (Fannie DU / Freddie LP / USDA GUS) per mortgage market, in settings→commerce. Foundational data model: AusConnectionConfig (mlos.config, new table mlos_aus_connection_config) — one row per (lender profile, AusKind); since a LenderProfile is one-per-market, keying by lenderProfileId makes these per-market. Reuses the existing AusKind enum (DU/LP/GUS) and VendorCategory.AUS vocabulary rather than inventing new ones. Secret at rest: the API secret is stored ONLY as an AES-256-GCM secretCiphertext (encrypted by PlatformSecretCipher on write, mirroring SocialConnection/ PlatformOAuthClient) and is never in a DTO — reads expose hasCredential instead. clientId/endpointUrl/configJson are non-secret. Unique (profile, aus_kind). Backend write/controller **************** + the kamo-internal AUS-connections tab + i18n + KI (new table) build on this next; the per-market vs org-scoped resolve is a config-spine decision surfaced to the owner.
· kamo-shared-library
[ImageAssocType] append LOAN — images attach to a loan, doc type required
Owner directive: images can be attached directly to a mortgage loan, always with a relevant doc type. Append LOAN to ImageAssocType (id 11, bucket imaging-loans), mirroring the ACCOUNT document-collection flags: isAllowDocType=true + isAllowDocTypeOpt=false, so a loan document's doc type is required and NOT org- optional. Add requiresDocType() (isAllowDocType && !isAllowDocTypeOpt) so upload paths enforce 'always a doc type'. Persistence-safe with NO KI/schema change: Img.assocId has no @Enumerated (defaults to ORDINAL) and there is no CHECK constraint, so appending at the END preserves every existing row's ordinal (a test guards LOAN-is-last). 3 tests green. Coordinated follow-up (flagged): (1) provision the imaging-loans MinIO bucket via KlusterServices before the first loan-doc upload; (2) rebuild the ImageAssocType consumers (DocsService does values()[id] — must know LOAN before a LOAN id arrives: **************** pick it up on their next CI build); (3) enforce requiresDocType() at the loan-doc upload save path.
· kamo-shared-library
[sign-convention] money sign-convention validators + Adjustment model
Per the owner's canonical rules. Core domain money never encodes meaning in a sign: - **************** / requirePositive — assets, receivables, liabilities, payables, fees, costs, credits are POSITIVE magnitudes in their own fields (rules 1-3); a negative value fails fast. - AdjustmentDirection {INCREASE, DECREASE, CREDIT, DEBIT, PREMIUM, DISCOUNT} — rate/ price adjustments (LLPAs, SRPs, pricing adjustments, concessions, rebates) expose an explicit direction, never a signed number (rule 5). - **************** + the self-validating Adjustment record — reject a magnitude whose sign conflicts with the declared direction (rule 6); a signed Adjustment cannot be constructed. Rules 4 (accounting +/- lives only in the GL layer) and 7 (signing only in the adapter layer) are architectural boundaries the guard enforces by living in the CORE and rejecting signed encoding — the sign-bearing conversion for investor/warehouse/ accounting/MISMO feeds stays out of the domain by construction. 4 tests green.
· kamo-shared-library
[§5.A] canonical BorrowerScenarioProfile + ProductDiscoveryGate
Per the owner's §5.A directive: ScenarioSupportPolicy must consume a canonical Borrower Scenario Profile generated from normalized URLA data, never raw forms/UI, and future sources (AUS/OCR/AI/manual) UPDATE that canonical record rather than bypass it. - BorrowerScenarioProfile (mlos.intake, new table **************** the single per-loan source of truth — the 5 typed URLA product dims + an extensible calculated-facts JSONB + lastSource + version. Mutable (accretes truth), audited by source+version. - BorrowerScenarioProfileService: produceFromUrla(loanFile, orgId) is the genesis (reads normalized Loan/Property immediately after URLA normalization); applyUpdate is the ONLY seam later sources use (fails loudly if no profile exists — genesis is URLA's alone, enforcing update-don't-bypass); toSupportProfile projects the 5 dims. - ProductDiscoveryGate: the §5.A legal wall consulted BEFORE eligibility/pricing — resolves ScenarioSupportPolicy (tenant overrides + code default) over the canonical profile and, on a refusal, records a WORM AiDecision routed to a steward (NO_ELIGIBLE_PRODUCT, legallyRequiresHuman; DEFERRED_HARD_STOP=HIGH, STEWARD_ONLY= MEDIUM) via an optional DecisionSpine. SUPPORTED writes nothing. 10 tests green. Build-and-flag: needs a KI run (new table) + the service-flow wiring (call produceFromUrla at the URLA-normalization hook + gate.evaluate at product- discovery entry) in the owning service.
· kamo-shared-library
[12] §5.A ScenarioSupportPolicy deferral-interlock resolver (D36)
doc 12 line 235 P0 — 'the cheapest highest-leverage lifecycle addition'. A legal-wall at product-discovery that keeps **************** from silently running as forward first-liens (wrong disclosures). ScenarioSupportResolver (pure @Component) maps a ScenarioSupportProfile (LoanType x Purpose x Lien x Amortization x Construction, the existing donotmodify URLA enums) to {SUPPORTED | STEWARD_ONLY | DEFERRED_HARD_STOP}. Default matrix (D36): SUPPORTED = forward agency/non-QM FIRST-lien purchase/refi with a standard amortization (what the deterministic engines cover); STEWARD_ONLY = recognized-but-outside-v1 a human can originate (subordinate/HELOC, construction/home- improvement, GPM, or any OTHER dim — the reverse/commercial catch, since the residential URLA enums have no value for them); DEFERRED_HARD_STOP = fail-closed when a critical dim is null. The AI thus never auto-progresses a non-v1 product. Per-tenant ScenarioSupportPolicy override rows layer on top (most-specific match wins, newest version breaks ties; null dim = wildcard) to open a product to SUPPORTED or harden it to DEFERRED_HARD_STOP. 13 tests green. Build-and-flag: the resolver + entity ship now; the product-discovery WIRING (consult before eligibility + emit an AiDecision on refusal) and KI for mlos_scenario_support_policy are the follow-up (needs a KI run — owner-gated).
· SecurityService
[08] ReconciledFactPublisher — los.pipeline.fact publish seam (D34)
doc 08 §3.3: the locked **************** must not gain a NATS publisher (that edits donotmodify). Add a non-locked ReconciledFactPublisher wrapper that reconciles, then on a non-zero change count emits los.pipeline.fact.<orgId> on the existing LOS_PIPELINE stream (los.pipeline.> already binds it — no new stream/ table), so the readiness loop can fire. Repoint the sole caller (MortgageConnectController's reconcile endpoint) at the wrapper; the locked service is untouched. Placement (D34): co-located in SecurityService with its only current caller, not in MLOSCapitalMarketsService as §3.3 tentatively suggested (that assumed an RCE-side caller that does not exist yet). The mandated invariant — never publish from inside the locked service — holds either way. Best-effort like LosPipelinePublisher: absent NATS or a publish failure is logged + swallowed, the count is still returned. 4 tests green.
· kamo-shared-library
[12] §5.C AutonomyGovernor — kill-switch + force-steward-until-calibrated (D32)
The DecisionGate already carries a GLOBAL static force-steward @Value, but §5.C needs two things it cannot give: a kill switch flippable WITHOUT redeploy (so DB-backed) at GLOBAL/TENANT/TASK_TYPE granularity, and force-steward-until-N- calibration-samples per task-type (the cheap P0 the calibration machinery degenerates to at launch — doc 12 Theme C / §6.1). AutonomyGovernor (governance pkg) is an OPTIONAL Docstor (ObjectProvider, gated on mlos.governor.enabled) consulted synchronously by DecisionSpine.record() — the same shape as StewardAssigner. It is ADD-ONLY, exactly like the legal wall: it can only turn a would-be AUTO_EXECUTE into ROUTE_TO_HUMAN, never lift a routing, so the pure/stateless DecisionGate is untouched. Two force conditions: (a) an active AutonomyKillSwitch matching (orgId, aiFunction) — broadest scope wins the reason; a mutable/flippable entity, NOT WORM, audited via engagedBy/at; (b) calibration bootstrap — platform-wide non-test StewardFeedback count for the aiFunction below min-samples (default 50), counted by a new join query. When the governor is the cause of routing, its reason is appended to the WORM AiDecision so a high-confidence decision that went to a human is never inexplicable. New table autonomy_kill_switch (additive DDL — KI run). 30 tests green (7 governor logic + 3 spine add-only integration + 6 spine + 14 gate); all four DecisionSpine ctors preserved (existing callers unchanged).
· kamo-internal
[04] risk-overlay tab — credit-box/geo/exposure layers (D31)
New MORTGAGE market config tab for per-tenant risk overlays: category (credit box / geo concentration / property type / loan amount / fraud / exposure limit) + action (deny / refer / counteroffer / flag) + optional product-variant scope + effective window + an optional JSON rule expression (validated for parseability client-side, mirroring the server 400). Add/remove rows; removal is a hard delete. Renders after Investors, before the always-on agreements tab. configTypes/configApi mirror the D31 collection pattern; i18n via the kamo-translation-dictionary repo.
· SecurityService
[04] slice E2 RiskOverlay collection CRUD (D31)
Risk overlays (credit-box / geo-concentration / exposure-limit layers on the base credit box) as a config collection on the D31 spine: create defaults configVersion=1 + stamps profile identity + bumps profileVersion + validate-or- rollback + appends a WORM MlosConfigChangeLog; update/delete are fail-closed 404 on another profile's row; delete is a hard remove audited as {"deleted":true}. The ruleExpression is a JSONB column — the controller parse-validates it as JSON before the write so bad input is a clean 400, not a 500 mid-INSERT. Null/blank is allowed (the rule vocabulary is a deferred layer, carried off-band for now). 20 write-spine tests green (4 overlay + 4 investor + 6 licensing + 6 stage-override).
· kamo-internal
MORTGAGE investors tab (list/add/remove) — [04] slice E2 (D31)
The 7th MORTGAGE config tab: per-investor **************** authority rows with an approval-status chip. Add via an inline row (code + status + optional **************** remove via trash (hard delete server-side). configTypes InvestorView/InvestorRequest + the 3 enum arrays + label helpers; configApi **************** registered as tab 'investors' after licensing, before agreements. English via the translation-dictionary repo. tsc clean.
· kamo-internal
Unified social timeline UI at /marketing/social
Live, animated cross-provider feed reusing the clubhouse feed style: virtualized timeline, provider filter chips, SocialPostCard (capability-gated reply/react/delete), multi-provider SocialComposer (per-provider capability hints + fan-out result chips), Facebook-style NewPostsPill (no autoscroll), useSocialFeedWebSocket live via /topic/social/feed/{orgId}, and the /api/media/social/* proxy routes. Write actions gated on MANAGE_SOCIAL_MEDIA; capability-driven feature-hiding throughout.
· MediaService
Unified timeline backend (feed persistence, adapters, live relay)
SocialFeedService persists posts/comments onto the MediaSession/MediaObj schema (reusing the chat model); SocialFeedMapper builds the wire DTOs; SocialTimelineController serves the merged feed + capabilities and multi-provider compose fan-out, reply, react, delete. Feed events publish social.feed.{orgId} -> /topic/social/feed/{orgId} (relay + cross-tenant SUBSCRIBE guard). SocialInboundConsumer fans out to feed items; polling sweep backfills. All 5 provider adapters **************** implement SocialFeedAdapter to the max of each API, capability-gated.
· kamo-shared-library
Unified timeline SPI + entities on the media schema
Reuse MediaSession/MediaObj to hold social posts & replies (post=MediaObj, comment=child MediaObj via MediaObjMsg.parent, provider linkage on MediaObjSocialRef). Adds SocialFeedAdapter sub-interface (feed ops kept off the DM SocialProviderAdapter path), MediaSessionSocialFeed (per-connection feed session), MediaObjSocialRef feed columns, SocialObjKind, and the expanded ProviderCapabilities matrix that drives per-provider UI feature-hiding.

உங்கள் உலகம் காத்திருக்கிறது.
நிமிடங்களில் இலவசமாகத் தொடங்கவும். நீங்கள் தயாராக இருக்கும் போது பொருட்களை சேர்க்கவும் - எந்த மாற்றமும் இல்லை, புதிய உள்நுழைவுகள் இல்லை.
எப்பொழுதும் இலவசம் — கடன் அட்டை தேவையில்லை