Журнал изменений
Что нового.
Каждое усовершенствование платформы, как только она появится.
· SecurityService
Эффективно датированные политики профиля — ценообразование / капитал / обслуживание
Новый MlosPolicyWriteService (изолированный; его собственные репозитории, так что конфигурация-коллекция записывается) Сервис не тронут: одноактивная демо-версия затем вставляется на тот же аудит позвоночник. Контроллер /ценовая политика, /капитальная политика, /сервисная политика GET (текущий +) История) / PUT (опубликовать новую версию). Инварианты SCRA/FDCPA остаются верными.
· kamo-shared-library
Интерфейс VersionedProfilePolicy для политик с эффективными датами
Ценообразование/Столица/Служебная политика реализует его таким образом, что одна публикация рутины приводит к тому, что Одноактивная демотивированная версия.
· kamo-internal
Доставка инвесторов + правила обязательств
Расширенный ряд инвесторов получает прибыль Доставка (поведение финансирования / путь исполнения / Денежные переводы) и Обязательства (тип / мин вытягивание % / спаривание) редакторы рядом делегирование + наложения; configTypes/configApi Types + звонки.
· SecurityService
Доставка InvestorConfig + правила обязательств CRUD
**************************** (+обновление/удаление) на конфигурационном позвоночнике D31 (org fail-closed via родительский инвестор, WORM change-log per row); контроллер /investors/{id}/delivery-rules +/commitment-rules GET/POST/PUT. Завершает последний Сбор средств InvestorConfig отложен [04].
· kamo-internal
Инвестор кредитный ящик наложение суб-редактор
Расширенный ряд инвесторов MortgageInvestorsTab получил OverlayEditor (FICO/LTV/DTI/) Затягивание резервов/док/гео + компаратор + необязательная программа + эффективное окно рядом с редактором делегации; configTypes/configApi overlay types + calls.
· SecurityService
InvestorConfig Кредитный ящик наложение подколлекции CRUD
**************** на конфигурационном позвоночнике D31 (или закрытом по умолчанию) родительский инвестор, WORM changelog per row, configVersion defaults 1; контроллер /investors/{id}/overlays GET/POST/PUT (удалить через Active:false). Завершает Отсрочка отсрочки от InvestorOverlay [04].
· kamo-internal
Правоприкрепленный полноразмерный суб-нав + высококонтрастный текст
- Переместить секцию sub-nav слева на правую прикрепленную панель полной высоты который прокручивается независимо; заголовок + содержание формы занимают оставшуюся ширину слева и прокрутите самостоятельно (две независимые области прокрутки на md+); Стек с навигатором сверху для узких экранов. - Доступность: затемнить весь вторичный/маркированный текст (серый-400 -> серый-600), Серый-500 -> серый-700) на странице деталей + общая карта поля / раздела / Примитивы EmptyState, поэтому ярлыки соответствуют контрасту WCAG AA для пользователей с низким зрением.
· kamo-internal
Кредитный трубопровод как ипотечный субтаб + светлая тема
- Добавить ApplicationsPipelineConsole: передовая сеть данных AG-Grid заявки на ипотеку на уровне кредита (закладки фильтра состояния, строка фильтра, быстрый поиск, экспорт CSV, пагинация, строка -> детали. Прослушивается как последний субтаб консоли ипотечного управляющего (?sub=pipeline). - Re-theme/applications/[uid] Detail + shared Field/SectionCard/Modal/ Примитивы пустого государства + все 14 разделов от темной тематики военно-морского флота светлая камо-внутренняя идиома; заменить кровоточащего героя притоком панель заголовка (fixes header/content overlap). - Re-theme/applications/pipeline (kanban) и /applications/hmda-lar to light. Удалить устаревший автономный /приложения темный список; повторно указать QuickActionsBar «Новое приложение» к суб-табу ипотечного рынка.
· kamo-internal
Панель калибровки платформы AI-Governor (D4 §5.C)
**************************** Расширенная вкладка получает панель губернатора: редактировать платформу калибровочное положение по умолчанию (затвор губернатора/сила-стюард-до калиброванных/мин образцов, Каждый Inherit |Enabled |Disabled с помощью нового интерфейса Governor-config API. Пер-орг перекрывает слой сверху.
· SecurityService
ScenarioDiscoveryService — канонический генезис профиля при создании/обновлении кредитного приложения (D1)
MortgageAppController (re) выпускает канонический BorrowerScenarioProfile через новый СценарийОткрытиеСлужба после **************** (лучшее усилие, собственный tx. Добавляет mlos.intake в @EnableJpaRepositories.
· kamo-shared-library
LOAN Doc-Type Guard (D2), адаптер стандарта (D3), конфигурация губернатора (D4)
- ImageService: требуется docType для загрузки ImageAssocType.LOAN ACCOUNT/SERVICE * без изменений. - SignedAdjustmentAdapter: the rule-7 adapter/compat border (каноническая настройка) [5] подписанное значение) для инкрементальной миграции в соответствии со знаком. AutonomyGovernorConfig + repo + GovernorConfigResolver (org → платформенный дефолт) Наслоение ConfigMap; DbAutonomyGovernor теперь разрешает калибровку/включение per-org.
· kamo-internal
AUS Connections Tab (D37) + Блок 2-го ипотечного рынка (D38)
- MortgageAusConnectionsTab: конфигурация учетных данных DU/LP/GUS (по одному на вид); Секрет - это поле пароля только для записи, строка показывает только, установлен ли учетный данные. - Страница нового рынка: отключите опцию MORTGAGE + проверьте, когда у организации она есть.
· SecurityService
Поверхность записи конфигураций AUS-соединения (D37) + единый ипотечный рынок в расчете на одну организацию (D38)
- MlosConfigWriteService **************** org-scoped (resolveProfile), Уникальность one-per-AusKind, секрет, сохраненный на чистых секретных правках, хребет аудита WORM. - MlosConfigController /aus-connections GET/POST/PUT - секрет только для записи (зашифрован через PlatformSecretCipher внутри мутации; вид обнажает hasCredential, а не шифротекст. ********************** Отклонить 2-й рынок MORTGAGE за орг (409).
· kamo-internal
Подредактор делегации инвесторов — орган по каждой программе (D39)
Бросьте делегированный коммутатор / колонну; каждый ряд инвесторов расширяется до одной программы редактор делегации (программа UUID, blank = дефолт по всем инвесторам; DELEGATED/) NON DELEGATED, поддерживаемый новым API /investors/{id}/delegations.
· SecurityService
Делегация инвесторов пишет поверхностно — по программе CRUD (D39)
Drop delegatedAuthority from the InvestorConfig write/view Подсбор делегаций инвесторов по /investors/{id}/delegations (GET/POST/) PUT, удалить через Active:false) на D31 конфигурационно-записывающий позвоночник — илиg fail-closed через материнского инвестора, WORM change-log + profileVersion bump per row.
· kamo-shared-library
Делегирование инвестора по программе (D39) — новый ребенок
Делегирование является гранулярным (инвестор, программа), а не грубым InvestorConfig. Булин. Добавляет DelegationAuthority {DELEGATED, NON DELEGATED} Предприятие делегирования инвесторов (mlos investor delegation, факультативная программа Id; нуль = дефолт по всем инвесторам) + РЕПО и падение ****************
· kamo-shared-library
[AUS] AusConnectionConfig entity — per-org per-market соединения DU/LP/GUS
Директива владельца No 6: каждая организация настраивает свои собственные API-интерфейсы поставщика AUS (Fannie DU / Freddie) LP / USDA GUS) на ипотечный рынок, в настройках → коммерция. Базовая модель данных: AusConnectionConfig (mlos.config, новый стол mlos aus connection config) — один ряд на (профиль кредитора, AusKind); поскольку профиль кредитора является одно-на-рынок, КредиторProfileId делает их на рынке. Повторное использование существующего списка AusKind (DU/LP/GUS) Словарь VendorCategory.AUS вместо того, чтобы изобретать новые. Секрет в покое: секрет API хранится ТОЛЬКО как секретный шифр AES-256-GCM (зашифровано PlatformSecretCipher на письме, отражая SocialConnection/) PlatformOAuthClient) и никогда не находится в DTO, — говорится в сообщении. ClientId/endpointUrl/configJson не являются секретными. Уникальный (профиль, aus kind). Запись/контроллер *************+Камо-внутренний AUS-подключения вкладка + i18n + KI (новая таблица) построить на этом следующем; на рынке против Org-scoped resolve - это решение, вынесенное владельцу.
· kamo-shared-library
[ImageAssocType] append LOAN — изображения прикрепляются к кредиту, тип документа требуется
Директива о владельце: изображения могут быть прикреплены непосредственно к ипотечному кредиту, всегда Релевантный тип Doc. Добавить кредит в ImageAssocType (id 11, bucket imaging-loans), Флаги сбора документов ACCOUNT: isAllowDocType=true + isAllowDocTypeOpt = ложный, поэтому требуется тип документа о займе и НЕ орг- необязательно. Добавить requireDocType() (isAllowDocType & & !isAllowDocTypeOpt) Пути обеспечивают «всегда тип документа». Безопасное для устойчивости изменение KI/схемы: Img.assocId не имеет @Enumerated (по умолчанию) И нет никакого ограничения CHECK, поэтому добавление в END сохраняет все. Ординал существующего ряда (тестовая защита LOAN-is-last). 3 теста зеленый. Скоординированное последующее наблюдение (флагированный): (1) предоставление ковша MinIO для получения изображений через KlusterServices перед первой загрузкой кредита-дока; (2) перестроить ImageAssocType Потребители (DocsService делает значения()[id] — должны знать кредит до того, как появится кредитный идентификатор: **************************** поднять его на их следующее построение CI; (3) обеспечение соблюдения требований DocType() на пути сохранения загрузки ссуды-дока.
· kamo-shared-library
[знак-конвенция] валидаторы денежного знака + Модель корректировки
По каноническим правилам владельца. Деньги основного домена никогда не кодируют значение в знаке: ********************** / requirePositive — активы, дебиторская задолженность, обязательства, кредиторская задолженность, сборы, расходы, кредиты являются положительными величинами сами по себе поля (правила 1-3); отрицательное значение быстро теряется. - Направление корректировки {INCREASE, DECREASE, CREDIT, DEBIT, PREMIUM, DISCOUNT} - ставка/ корректировки цен (LLPAs, SRPs, корректировки цен, концессии, скидки) Явное направление, никогда не подписанное число (правило 5). ********************** + самопроверяемая запись корректировки - отклонить величину, знак которой противоречит заявленному направлению (правило 6); Подписанная корректировка не может быть построена. Правила 4 (учет +/- живет только в GL-слое) и 7 (подписывается только в адаптере) слой) являются архитектурными границами, которые охрана устанавливает, живя в CORE и Отказ от подписанного кодирования — конверсия для инвестора / склада / Материалы бухгалтерского учета / MISMO остаются вне домена путем строительства. 4 теста зеленый.
· kamo-shared-library
[§5.A] Канонический ЗаемщикСценарийПрофиль + ПродуктОткрытиеГейт
В соответствии с §5 собственника. Директива: Сценарий Поддержка Политика должна потреблять канонический Профиль сценария заемщика, созданный из нормализованных данных URLA, никогда не из необработанных форм / пользовательского интерфейса, и будущие источники (AUS/OCR/AI/manual) обновляют эту каноническую запись, а не Обойди его. - BorrowerScenarioProfile (mlos.intake, новая таблица ****************) единый источник истины для каждого кредита — 5 типизированный продукт URLA тускнеет + расширяемый Расчетные факты JSONB + LastSource + версия. Мутабельная (accretes truth), проверенная Источник + Версия. - BorrowerScenarioProfileService: produceFromUrla (loanFile, orgId) - генезис (Читает нормализованный кредит / недвижимость сразу после нормализации URLA); Это единственный шов, который используют более поздние источники (проваливается громко, если нет профиля - генезис есть). Только URLA обеспечивает выполнение обновления без обхода; ToSupportProfile проецирует 5 димов. - ProductDiscoveryGate: §5.A юридическая стена консультировалась до получения права / цены - Решает ScenarioSupportPolicy (переопределяется арендатором + по умолчанию код) над каноническим Профиль и при отказе записывает WORM AiDecision, направляемый стюарду. (NO ELIGIBLE PRODUCT, legalRequiresHuman; DEFERRED HARD STOP=HIGH, STEWARD ONLY=) МЕДИУМ) с помощью факультативного DecisionSpine. Поддержанный ничего не пишет. 10 тестов зеленый. Build-and-flag: требуется запуск KI (новый стол) + проводка служебного потока (позвоните в FromUrla по адресу URLA-normalization hook + gate.evaluate at product-) Открытие входа) в собственный сервис.
· kamo-shared-library
[12] §5.A СценарийПоддержкаПолитика отсрочка-блокировка разрешения (D36)
doc 12 Line 235 P0 — «самое дешевое дополнение жизненного цикла с самым высоким уровнем левериджа». Правовая стена Открытие продукта, которое сохраняет ************************* Бесшумно бежит как передовые первопроходцы (неправильные раскрытия). СценарийПоддержкаРезолвер (чистый @Component) отображает ScenarioSupportProfile (LoanType x Purpose x Lien x) Amortization x Construction, существующий donotmodify URLA enums {Поддержка | Стэвард Только | Отчаяние Хард Стоп}. Матрица по умолчанию (D36): SUPPORTED = форвардное агентство / не-QM FIRST-lien buy / refi стандартная амортизация (что покрывают детерминированные двигатели); STEWARD ONLY = признанный-но-вне-v1 человек может возникнуть (подчинение/HELOC, строительство/дом-- улучшение, GPM или любой другой тусклый — обратный / коммерческий улов, поскольку жилой URLA не имеет для них значения; DEFERRED HARD STOP Закрытая при критическом Тусклый - нуль. Таким образом, ИИ никогда автоматически не продвигает продукт, не являющийся v1. Арендатор ScenarioSupportPolicy override rows layer on top (самые специфические победы в матчах, новейшие) версия разрывает галстуки; nul dim = wildcard, чтобы открыть продукт для поддержки или затвердеть его DEFERRED HARD STOP. 13 тестов зеленый. Build-and-flag: resolver + entity ship now; product-discovery WIRING (консультация) перед правом + издать решение об отказе) и KI для mlos scenario support policy Они являются продолжением (необходимым KI-пробегом — хозяином).
· SecurityService
[08] ReconciledFactPublisher — los.pipeline.fact Издательство шов (D34)
doc 08 §3.3: заблокированный **************** не должен получать НАТС Издатель (редактирует donotmodify). Добавить неблокированную обертку ReconciledFactPublisher что примиряется, то при ненулевом изменении счет испускает los.pipeline.fact. <orgId> на Существующий поток LOS PIPELINE (los.pipeline.> уже связывает его — никакого нового потока/ стол), так что петля готовности может выстрелить. Назовите единственного звонящего (MortgageConnectController's reconcile endpoint) в обертке; заблокированный сервис нетронутым. Размещение (D34): совместное размещение в Службе безопасности со своим единственным текущим абонентом, а не в MLOSCapitalMarketsService как §3.3 предварительно предложено (что предполагает RCE-сторону) Звонок, которого пока нет. Мандатный инвариант — никогда не публикуйте изнутри Закрытый сервис — держится в любом случае. Лучшее усилие, как LosPipelinePublisher: отсутствует NATS или отказ публикации регистрируется + проглатывается, счет все равно возвращается. 4 Испытания Зеленый.
· kamo-shared-library
[12] §5.C Автономный управляющий — kill-switch + force-steward-until-calibrated (D32)
DecisionGate уже имеет статический статичный стюард @Value, но §5.C Требуется две вещи, которые он не может дать: переключатель убийства, переворачиваемый без передислокации. DB-backed) at GLOBAL/TENANT/TASK TYPE granularity, and force-stward-until-N- калибровочные образцы для каждого типа задач (дешевый P0 калибровочный механизм) вырождается при запуске — док 12 Тема С/§6.1. AutonomyGovernor (управление pkg) - это OPTIONAL Docstor (поставщик объектов). синхронно консультируется с помощью DecisionSpine.record() — такой же формы, как и у стюард-ассигнера. Это СДВГ, точно так же, как и правовая стена: Он может только превратить потенциального AUTO EXECUTE в ROUTE TO HUMAN, никогда не поднимая маршрут. Таким образом, чистый/безгосударственный DecisionGate нетронут. Два условия силы: a) a) Активное сопоставление AutonomyKillSwitch (orgId, aiFunction) — самый широкий охват выигрывает причина; изменчивая/подвижная организация, НЕ РАБОТАЯ, проверенная через engagedBy/at; (b) калибровочный бутстрап — общеплатформенный неиспытательный счет StewardFeedback для aiFunction ниже min-samples (по умолчанию 50), подсчитанный новым запросом присоединения. Когда Губернатор является причиной маршрутизации, его причина прилагается к WORM AiDecision. Поэтому решение, которое было принято человеком, никогда не бывает необъяснимым. Новая таблица Autonomous kill switch (дополнительный DDL — KI run). 30 тестов зеленый (7 губернатор) Логика + 3 спина интеграция + 6 позвоночник + 14 врат; все четыре DecisionSpine ctors (существующие абоненты без изменений).
· kamo-internal
[04] вкладка перегрузки рисков — уровни кредитного ящика/гео/экспозиции (D31)
Новая вкладка конфигурирования рынка MORTGAGE для наложения рисков на одного арендатора: категория (кредитный ящик) / геоконцентрация / тип собственности / сумма кредита / мошенничество / лимит воздействия действие (отрицание/ссылка/контрпредложение/флаг) + необязательный продукт-вариантный охват + эффективное окно + необязательное выражение правила JSON (подтверждено для разборчивости) Клиентская сторона, зеркальное отображение сервера 400. Добавить / удалить строки; удаление - это жесткое удаление. Делается после инвесторов, до вкладки «всегда на соглашениях». ConfigTypes/configApi Отражать шаблон коллекции D31; i18n через камо-перевод-словарь репо.
· SecurityService
[04] slice E2 RiskOverlay collection CRUD (D31)
Накладки рисков (кредит-бокс/геоконцентрация/ограничение экспозиции слоев) Базовая кредитная ячейка) как набор конфигураций на позвоночнике D31: создайте дефолты configVersion=1 + идентификатор профиля штампов + бампы профильVersion + validate-or- rollback + добавляет WORM MlosConfigChangeLog; обновление/удаление отключено 404 в строке другого профиля; удаление - это жесткое удаление, проверенное как {"удален":true}. Правило Экспрессия представляет собой колонку JSONB — контроллер проверяет ее как JSON. Перед записью такой плохой ввод - чистый 400, а не 500-й средний индекс. Тусклый / Blank допускается (словарь правил представляет собой отложенный слой, унесенный на данный момент). 20 тестов «зеленых» (4 накладных + 4 инвестора + 6 лицензий + 6 этапов).
· kamo-internal
Закладка для инвесторов MORTGAGE (list/add/remove) — [04] срез E2 (D31)
7-я вкладка конфигурации MORTGAGE: per-investor **************** строки полномочий с чипом подтверждения статуса. Добавить через строку (код + статус +) необязательный **************************** Удалить через мусор (hard delete) на стороне сервера. configTypes InvestorView/InvestorRequest + 3 набора чисел + метка Помощники;figApi **************** зарегистрированы как вкладки «инвесторы» после получения лицензии, до заключения договоров. Английский через словарь-репо. ЦСК чист.
· kamo-internal
Единая социальная временная шкала UI в /marketing / social
Живой, анимированный кросс-поставщик кормов, использующий стиль клубного питания: виртуализированный временные рамки, чипы фильтра провайдера, SocialPostCard (ответ/реакция/удаление с указанием возможностей), Multi-provider SocialComposer (подсказки о возможностях для каждого поставщика + чипы результатов вентиляции), Facebook-стиль NewPostsPill (без автоскролла), использовать SocialFeedWebSocket /topic/social/feed/{orgId} и прокси-маршруты /api/media/social/*. Пишите действия Закрытые на MANAGE SOCIAL MEDIA; функции, управляемые возможностями, скрываются повсюду.
· MediaService
Унифицированный таймлайн бэкэнд (постоянство корма, адаптеры, живое реле)
SocialFeedService сохраняет посты/комментарии к схеме MediaSession/MediaObj (использование модели чата); SocialFeedMapper строит проводные DTO; SocialTimelineController обслуживает объединенную ленту + возможности и мульти-провайдер составляет вентилятор, отвечает, реагирует, Удалить. Кормовые мероприятия публикуются social.feed.{orgId} -> /topic/social/feed/{orgId} Защитник с перекрестным арендатором. Фанаты SocialInboundConsumer выходят кормить предметы; опрос Наполнители. Все 5 адаптеров **************** SocialFeedAdapter по максимуму каждого API, с учетом возможностей.
· kamo-shared-library
Унифицированная временная шкала SPI + объекты по медиа-схеме
Повторное использование MediaSession/MediaObj для размещения социальных сообщений и ответов (post=MediaObj, Комментарий=child MediaObj via MediaObjMsg.parent MediaObjSocialRef. Добавляет подинтерфейс SocialFeedAdapter (оптимизация кормов отключена) DM SocialProviderAdapter Path), MediaSessionSocialFeed (пер-подключение) Кормовая сессия, колонки MediaObjSocialRef, SocialObjKind и Расширенная матрица ProviderCapabilities, которая удерживает пользовательский интерфейс на одного поставщика.
· SecurityService
[04] Срез E2 InvestorConfig коллекция CRUD (D31)
Второй конфигурационный домен коллекции (doc-04 §3.2 InvestorConfig) — per-investor утверждение/доставка/авторитет, обеспечивающий исполнение на рынках капитала. Повторное использование блока H Форма сбора точно: **************** по аудиту позвоночник (profileVersion bump + §4b.1 validate-or-rollback + WORM change-log; hard) удалить проверенную {"удален":true,row}; NoSuchRowException->404 зарубежный профильный ряд). GET/investors + POST + PUT/{id}(+active:false-remove); ИнвесторКод + утверждениеСтатус требуется ******************* делегированный полномочия факультативно; enum + неотрицательный поворот валидации. Конфигурация инвестора +3-дети (поставки/поставки/обязательства) подсборы остаются в процессе. 4 Испытания (+существующие сайты ctor, обновленные для arg +InvestorConfigRepository; 16 написание конфигураций) Тесты зеленые.

Ваша вселенная ждет.
Начните бесплатно через несколько минут. Добавляйте продукты, когда будете готовы — без миграции, без новых логинов.
Бесплатно навсегда — не требуется кредитная карта