Skip to content
KAMOUniverse

Changelog

What's new.

Every improvement to the platform, as it ships.

  1. · KlusterServices

    Live sales floor events reach open screens

    svc_voip and svc_daemon may publish rt.org.>, so a call the phone system reports and a lead a job creates reach the board at once. New svc_automation login, core NATS only, for the stream engine's events.

  2. · SecurityService

    Read every deal role, loan officer included, from the one store

    Backfilled and counted per org first. MortgageLoanOwnership and DealRoleService now read only mlos_deal_role_assignment. The column stays a mirror for the originator, chat routing and reports.

  3. · kamo-shared-library

    Reports' own-loans scope reads the one role store

    The loan officer is backfilled, so every role is a row and the deal's column is a mirror.

  4. · kamo-shared-library

    A lead source can count its own consent field as text consent, and zones follow NANPA

    Off by default, per source. When on, a lead source's chosen consent field writes the SMS consent OutreachCheck already reads, with the proof in LeadConsentValue. No value stays blocked, a value that says no isn't consent, an opt-out stands, and a consent a person took back stays taken back. The area-code table is checked against NANPA's NPA database, file date 2026-11-01: ten codes newly in service, and 219, 423, 574, 915 and 775 cross a zone line. Nevada now crosses one too, for West Wendover. An unknown zone also waits for Alaska and Hawaii.

  5. · InitializerService

    Fill the loan officer into the role store on a rebuild

    Idempotent, and a row already there wins. KI ships nothing on its own and was not run on production, which was backfilled by hand.

  6. · SecurityService

    Every loan officer write goes to the role store and its mirror together

    **************** is the one writer, in the caller's transaction. The lead's assignee on a new deal, a person's or SI's assignment, a creator's claim, an adopted loan and a split all come through it. Reads don't change yet: this ships first so no assignment is missed by the backfill.

  7. · kamo-internal

    Who works a deal, on the pipeline card and in the stream canvas

    The loan officer's assign flow now serves every deal role: one picker, one call, one set of rules. Each deal shows who works it, a person or an SI, and a role the server adds appears by itself. A loan milestone stream can assign a role on the deal. The Automation tab gains the new switches.

  8. · SecurityService

    An adopted loan joins a lead only when the lender says so

  9. · kamo-shared-library

    A switch for an adopted loan joining a lead

  10. · MCPGatewayService

    The assign tool names any deal role

    mlos_assign_loan_officer keeps its name, so the charter and audit stay readable, and takes an optional role from the one catalog. Closing Scheduled leaves mlos_transition: closing is a person's.

  11. · SecurityService

    Every deal role works like the loan officer, and the MLOS's own walls hold SI moves

    DealRoleService is the one door for who works a deal: a member or SI per role, with who assigned it and when, on the deal's timeline. The loan officer stays on the deal and its writer, so the originator and every report are unchanged, and MortgageLoanOwnership answers for any role. PUT and DELETE **************** with the loan officer's existing door kept. MlosSiActGuard.moveHold puts an SI's moves behind StageWallRegistry, kill switches and the stage's autonomy posture, so closing, funding and denial are a person's whatever rights the session holds. An SI's stage move stops at the lead. MlosSiInitiativeInterceptor also holds an SI's unasked role change (LOAN_ROLE_CHANGES) and its work on a linked loan (LOS_LINKED_LOAN_WORK). Streams need LOAN_STREAM_MOVES to move a loan, never reach closing, funding or denial, and ask /work-check before acting. Existing document and checklist automations skip linked loans unless the lender allows them.

  12. · kamo-shared-library

    Ask the linked-loan rule by loan file too

  13. · kamo-shared-library

    One model for who works a deal, and one list of walls

    Deal roles: LoanPartyRole is the catalog, DealRoleAssignment holds a member or SI per role with who assigned it and when. The loan officer stays on the deal, so its data and every report are untouched. Reports' own-loans scope follows any role. SI loan access now includes MLOS_PROCESS_LOAN and runs through the SI guardrails, so it stops at the supervisor. LoanMoveWalls reads StageWallRegistry: closing, funding and adverse outcomes are a person's. New switches, all off: LOAN_ROLE_CHANGES, LOAN_STREAM_MOVES, STREAM_LEAD_CHANGES, TEAM_STREAM_ALERTS, LOS_LINKED_LOAN_WORK. MlosAutomation.isEnabledForLoan and MlosWorkRules apply the linked-loan rule to non-outreach work.

  14. · kamo-internal

    Lead tasks and a lead picker on the briefing, and nav entries for the SI's floor work

    A person's own to-do is a task on the lead, so the briefing's own store of them is gone, and so is its stale setting: it uses the cockpit's. Nav gains the briefing, capture inbox, email triage and send queue for members with the rights.

  15. · EmailService

    A sent reply closes the message's triage item

  16. · SecurityService

    A capture's lead note, and a floor duty changes only from its own settings

  17. · kamo-internal

    Pick saved templates on stream steps, record text consent, set email hours

    A text step starts from a saved text. An email step can be a saved email, previewed inside the org's template. The lead's contact card records consent to automated texts, which stream texts and the SI now need. Contact rules gain email hours. The canvas and the drip builder both warn when a stream and a drip start on the same trigger.

  18. · AIService

    The agent gate also asks OutreachCheck about a lead

    Stop all outreach, lead status, the lender's switches, do-not-contact, the organization's hours and text limits now hold for an SI's outreach as they do for a stream. Consent for a lead is read the same way by both gates. The gate's fallback hours and touch budget come from OrgContactSettings. A failed check refuses.

  19. · EmailService

    A stream's email wears the org's email template, and can be a saved template

    The same compose wrap a drip's email gets. A saved template's HTML goes as it stands, with the compliance lines a written email gets.

  20. · SecurityService

    Record text consent on a lead, keep email hours, and give OutreachCheck the consent records

  21. · kamo-shared-library

    One decision: consent records in OutreachCheck, named email hours

    An automated text now needs SMS consent on record, read from the contact state the SI's gate reads, on the lead or on a number it holds, and an opt-out there refuses. An SI call stops at a revoked AI voice consent. Lead-source proof is never asked. Automated email keeps a named email hours setting instead of silently reusing the text hours, and the SI's touch budget default moves beside the other defaults.

  22. · kamo-internal

    Lead status replaces call outcomes on the Contact card, calling and goals

    The Contact card is facts only: last attempt, last conversation, Stop all outreach and consent. Contact rules loses its outcomes section. In calling, the one-click buttons are the lead's statuses that carry a meaning, and scoreboard tiles and goals count those meanings. Adds the Contacted status.

  23. · kamo-shared-library

    Lead status is the one control for what came of a call

    Each LeadStatusType carries an optional fixed contact meaning, and a neutral Contacted (107) covers a conversation with no other status. LeadStatusLabel words them, so org-named call outcomes are retired: CallOutcomes, OrgCallOutcome and CallListOutcome are gone. The dial ledger freezes status id, label and meaning, and tallies and goals count meanings. LeadService.updateLead is now the one place a status change reaches what depends on it, after commit and on every path: a person's status with a meaning updates last contact with evidence PERSON, Do Not Contact sets Stop all outreach, and a LeadStatusFollower keeps the pipeline stage. A stage move marks its own write so a stage and a status can't chase each other. OutreachCheck blocks on a status that means no contact, and on a bad-number status for calls and texts.

  24. · SecurityService

    A press on a call sets the lead's real status, and every path keeps the stage

    The stage follow moves out of LeadController into a LeadStatusFollower that LeadService calls after commit, so autosave, automation, the public application and every other path keep a board right. The internal status action takes a member and a call, for a press in the calling workspace. Org call outcomes are gone from the Contact card's API and Contact rules, and goals count contact meanings.

  25. · kamo-internal

    Show due callbacks on the call list, and drop the Follow-ups pane

    Follow-ups Due repeated Leads Needing Action, so it goes. A member's stored choice and place for it now read as Leads Needing Action.

  26. · SecurityService

    A call on the floor resolves the lead's due callbacks

    My Call List shows those callbacks too.

  27. · kamo-shared-library

    Read a due callback as a call to make

  28. · kamo-internal

    Show and filter occupancy from the lead on a mortgage board

    Board cards, the filter bar and the calling order read LeadClaimMortgage occupancy, using the lead page's words and one shared option list.

  29. · SecurityService

    Take the occupancy filter from the query string

  30. · kamo-shared-library

    The grid row and filter read a lead's own occupancy

    Adds propertyOccupancyId to the list row and the grid query, from LeadClaimMortgage, so the board needs no second field.

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