Nenda kwenye maudhui
KAMOUniverse

Mabadiliko

Nini kipya.

Kila kuboresha jukwaa, kama ni meli.

  1. · kamolos

    Ceremony stage + registry (8 placeholders) + /journey/ceremonies/[id] route

  2. · kamolos

    Waypoint sheet primitive + /journey/waypoints/[id] placeholder route

  3. · kamolos

    Mobile crest — 28% top-strip scene + viewport-based desktop/crest switch

  4. · kamolos

    Underwriter character (placeholder owl SVG; real art commissioned)

  5. · kamolos

    TypeScript types for borrower-journey concepts (Persona, LoanProgramCode, ProgramScore, Connection, VerifiedFact, MicroActionKind, CeremonyId)

  6. · kamolos

    Add 9 stub adapters with factories (id-verify, income, assets, property-data, pricing, aus, appraisal, title, hazard)

  7. · kamolos

    Add factories for credit/esign/address (default to existing stubs)

  8. · kamo-shared-library

    Add LoanFile entity

  9. · kamo-shared-library

    Add Property entity

  10. · kamo-shared-library

    Add Borrower entity

  11. · kamo-shared-library

    Add LoanApplication aggregate root entity

  12. · kamo-shared-library

    Add LOS enum types (status, role, persona, program, lender model)

  13. · KlusterServices

    Document myloan alias for KamoLOS

    Adds `myloan` to the SUBDOMAINS recognition list and rewrites the comment to make the list's purpose explicit (it's documentary; the dynamic Traefik log scan is what actually provisions certs). KamoLOS publishes its IngressRoute as HostRegexp(`^myloan[.].+$`), so any myloan.<org-domain> request that hits Traefik will be picked up by extract_domains() and a per-FQDN ECDSA P-256 cert will be issued via cert-manager + Let's Encrypt the same way `internal.*`, `login.*`, and the other Kamo subdomain aliases work today. No behavioural change — just makes the alias visible alongside the others and gives anyone reading the script a one-line map of prefix → service.

  14. · kamolos

    Dockerfile + k8s manifests ****************

  15. · kamolos

    Wire api errors into tracking sink

  16. · kamolos

    Tracking shim with swappable sink

  17. · kamolos

    Credit-pull adapter + tests across all three stubs

  18. · SecurityService

    Expose Prometheus metrics endpoint

    Adds micrometer-registry-prometheus and configures management.endpoints to expose /actuator/prometheus alongside health/info. Required so the counters/timer added in shared-lib are scrapable.

  19. · kamo-shared-library

    Micrometer counters/timer for transitions, conditions, webhooks

    LoanPipelineService increments los_transitions_total{from,to} per successful transition. LoanConditionService increments **************** for cleared/waived. WebhookDeliveryWorker increments webhook_deliveries_total {ok,status_class} and records webhook_delivery_duration_ms (Timer with p50/p90 /p99 percentiles) per delivery attempt. MeterRegistry is @Autowired(required=false) so services that don't pull Actuator (most non-LOS services in the monorepo) keep working — only those with the registry on the classpath emit metrics. Shared-lib pom gains micrometer-core for API compile access; consumers wire the actual registry (Prometheus, simple, etc.) via their own actuator setup.

  20. · kamo-internal

    Surface previousMilestoneSha256 in pipeline timeline

    The hash-chain link is rendered as a small monospaced 'prev <hash>' chip next to the existing snapshot hash, with the full value in the title tooltip. No new translations — uses the existing layout.

  21. · kamo-shared-library

    Hash-chain LoanPipelineMilestone rows for tamper detection

    LoanPipelineMilestone gains PREVIOUS_MILESTONE_SHA256. On every transition, LoanPipelineService computes the SHA-256 of the previous milestone's canonical form **************** and stores it on the new row. Mutating any earlier row in the DB changes its hash → breaks the chain from that point forward. DTO surfaces the new field so the timeline UI can show the link.

  22. · kamo-internal

    Surface HMDA LAR validation issues in the UI

    HmdaLarRecordDTO now carries an issues array; HmdaLarClient renders: - an amber banner above the table summarising rows-with-issues (Σ errors / Σ warnings) when any row fails validation, - a 🚩 cell per row that opens a popover listing each issue's severity, field, and message. API client adds listHmdaLarIssues() against the new /hmda/lar/issues endpoint for callers that just want the count (used by the banner today, useful for badges elsewhere later).

  23. · SecurityService

    GET /mortgage-apps/hmda/lar/issues count summary

    Aggregates validation issues across the LAR for the given year and returns {errors, warns, rowsWithIssues} so the UI can render a one-line banner before the operator downloads the CSV.

  24. · kamo-shared-library

    HMDA LAR pre-export validation

    New HmdaLarValidationIssue DTO (ERROR/WARN severity, field name, message). HmdaLarService now annotates each row in buildLar() with a list of issues covering the most common CFPB rejection causes: - originated/denied (actionTaken in {1,3}) require applicantEthnicity/race/sex - any action requires loanAmount and propertyState - applicantAge required for actionTaken in {1,3,4,5} Issues live on HmdaLarRecordDTO so the existing /hmda/lar endpoint surfaces them per row; the CSV export still emits the same columns unchanged. A grouped count helper for the new /hmda/lar/issues endpoint follows in SecurityService.

  25. · kamo-internal

    Surface preTransitionLint warnings in TransitionDialog

    Both TransitionDialog implementations (detail Pipeline section + kanban board) now fire the lint endpoint when the user picks a target status and render an amber advisory block above Confirm. Confirm is still enabled — the LO decides whether to proceed. Strings in mortgageApps.pipeline.lint*.

  26. · SecurityService

    Expose GET ****************

    Surfaces **************** as an advisory pre-flight check the TransitionDialog fires when the user picks a target status.

  27. · kamo-shared-library

    PreTransitionLint advisory for APPLICATION_TAKEN

    New @Transactional(readOnly) method on LoanPipelineService returning a list of human-readable warnings for the APPLICATION_TAKEN target: missing SSN (last 4), DOB, citizenship status, current address, the occupy-primary declaration on each primary borrower; missing loan type/purpose/amount; missing subject property address. Other target statuses return an empty list. Advisory, not blocking — controllers surface this so LOs can decide.

  28. · kamo-internal

    Global toast queue with provider + useToast hook

    New ToastProvider at the layout level renders a Framer Motion stack of context-managed toasts and exposes a typed useToast() API (success/error/info/warn). Pipeline transitions, condition clear/waive, and webhook secret rotation now fire toasts instead of inline banners; the CONCURRENT_MODIFICATION recovery from #1 surfaces an amber "refreshing" toast in both the detail Pipeline section and the kanban board. Strings live under toasts.pipeline.* and toasts.webhooks.* in en.json.

  29. · kamo-shared-library

    Durable JetStream consumer, executor isolation, timestamped signatures

    Three changes bundled because they all live in WebhookDeliveryWorker and make sense together: 1. Switch from core NATS dispatcher to a JetStream durable push consumer ("los-pipeline-webhook-worker", AckPolicy.Explicit). Restarts replay unacked events; attempt count comes from msg.metaData().deliveredCount() so the WebhookDelivery audit log reflects redelivery rather than an in-process loop. maxDeliver caps redelivery. 2. Dispatch each message to a small ScheduledExecutorService so a slow (10s-timeout) subscriber cannot back up the NATS dispatcher thread. 3. Sign 't.body' (Stripe/GitHub style) and emit headers X-Kamo-Timestamp + X-Kamo-Signature: t=<ts>,v1=<hex> so an eavesdropped request cannot be replayed indefinitely. deliverForOrg is no longer @Transactional: a failed HTTP attempt re-throws so JetStream redelivers, and we want the audit row to persist in its own short transaction rather than rolling back with the outer scope.

  30. · kamo-internal

    Recover gracefully from CONCURRENT_MODIFICATION on transitions

    Promotes API error handling to a MortgageApiError class that preserves the backend error code; transition handlers in PipelineSection and the pipeline kanban detect CONCURRENT_MODIFICATION, close the dialog, refresh, and surface an amber translated notice instead of the raw 409.

Ulimwengu wako unasubiri.

Kuanza bure katika dakika. Ongeza bidhaa wakati wowote wewe ni tayari - hakuna uhamiaji, hakuna logins mpya.

Bure milele - hakuna kadi ya mkopo inahitajika