Mabadiliko
Nini kipya.
Kila kuboresha jukwaa, kama ni meli.
· kamolos
Ceremony stage + registry (8 placeholders) + /journey/ceremonies/[id] route
· kamolos
Waypoint sheet primitive + /journey/waypoints/[id] placeholder route
· kamolos
Mobile crest — 28% top-strip scene + viewport-based desktop/crest switch
· kamolos
Underwriter character (placeholder owl SVG; real art commissioned)
· kamolos
TypeScript types for borrower-journey concepts (Persona, LoanProgramCode, ProgramScore, Connection, VerifiedFact, MicroActionKind, CeremonyId)
· kamolos
Add 9 stub adapters with factories (id-verify, income, assets, property-data, pricing, aus, appraisal, title, hazard)
· kamolos
Add factories for credit/esign/address (default to existing stubs)
· kamo-shared-library
Add LoanFile entity
· kamo-shared-library
Add Property entity
· kamo-shared-library
Add Borrower entity
· kamo-shared-library
Add LoanApplication aggregate root entity
· kamo-shared-library
Add LOS enum types (status, role, persona, program, lender model)
· 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.
· kamolos
Dockerfile + k8s manifests ****************
· kamolos
Wire api errors into tracking sink
· kamolos
Tracking shim with swappable sink
· kamolos
Credit-pull adapter + tests across all three stubs
· 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.
· 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.
· 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.
· 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.
· 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).
· 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.
· 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.
· 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*.
· SecurityService
Expose GET ****************
Surfaces **************** as an advisory pre-flight check the TransitionDialog fires when the user picks a target status.
· 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.
· 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.
· 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.
· 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