Changelog
Qué hay de nuevo.
Cada mejora de la plataforma, a medida que se envía.
· kamo-shared-library
Añada VENDOR.CALLBACK-RESOLVED tecla tipo event-type (0.6a ingress)
· kamo-shared-library
Sustrato de registro de destento de préstamo de 42 ids mecanografiados (piedra de clavo 0,5, rebanada 1)
Nuevo pkg com.kamo.z.shared.mlos.identity (la clave de encaminamiento de envolvente de envolvente): LoanIdentifierType (42 ids typeded de primera clase, cada uno con Cardinality .Emsideship; STRING enumerado; singleActiveTypes () derivado de metadatos) ************* .organización desconcertadoId, desacoplado de lacerrada LoanFile; write-once Guard throws value/type/customSubtype change, only status flip permitido; PrePersist normaliza el emisor/subtype. Verificado localmente: mvn install BUILD SUCCESS, 49 MLOS test pass (incl. prueba de guardia de deriva de un solo activo afirmando que el conjunto enum coincide con el índice parcial KamoInitializer DDL). KamoInitializer DDL: escaneo de 3 índices parciales de 1o de clase. RESOLVER - webhook ingress = el primer nuevo microservicio de servicios de MLOSIdentifierService (diferido).
· kamo-shared-library
StewardFeedback volante . capturar cada veredicto de mayordomos (piedra clave 0.11)
Nuevo pkg ************* a agredido StewardFeedback tierra-th row (FK ai-decision.uid; verdict CONFIRM/OVERRIDE/MODIFY; Reg-B-allineeded the Huelb; correctedValue jsonb; isTestLoan estampe en tiempo de escritura per doc12 .4; .Prepdate WORM guardia) .Apocalipsa de WORMRepository de Ste-wardFeedbackRecorder que compota TODO TRES teclas Fase-0 en un tx (juicio de espina dorsal de una decisión . enqueuess mlos.steward.feedback.regrabado a través de la caja de salida de la columna de prueba de caso-backbone. Recorder bated mlos.governance.enabled (por defecto - radio de explosión cero). KamoInitializer DDL: escaneo de los índices de mayordomo.feedback FK a ai-decision.
· kamo-shared-library
Immutable AiDecision WORM ledger - de dos paredes DecisionGate (keystone 0.3, rebanada 1)
Nuevo pkg com.kamo.z.shared.mlos.decision (greesión de decisión de Greenenfield, nunca edita donotmodify): inmutable Ai-only AiDecision (WORM via .PreUpdateguard; loanFileId is a Long FK to LoanFile.uid per docc01/gotchas, NOT UUID; supersession via supersedesDecisionId on the NEW row to stay WORM-consistent with the DB trigger) ************* enAiDecisionRepository (enconadores de préstamos-scoped). DecisionGate = biblioteca de dos paredes en proceso (murall legal ABSOLUTE/no-tunable; confianza parúnil de pared; suelo de seguridad de la plataforma no atuneble debajo) - sólo config--Component, sin repo dep, finca segura. DEFERRED a las rebanadas de dependencia: DecisionInput (FKs the Phase-2 catalog, StewardTask/OrchestrationState, registro legal, HMDA-firewall CHECK, ModelVersion FK. KamoInitializer DDL añadido (índice de decisión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
· kamo-shared-library
Puerta de aislamiento de inquilino para el evento backbone (Resgalo 3)
Hoja de ruta 0.10: ************* (la costura de suscripción al consumidor per-tenant) - perteneceToTenant (sujeto,orgId) ajuste simulado simulado que refleja el filtrado NATS; forEvent ahora rechaza orgd no positivo (sin eventos sin inquilino). MlosTenantIsolationTest es la puerta de inquilino cruzado ejecutable (incl.-boundary: org 12 nunca coincide org 123). MlosDeadLetterRepository gana un mayordomo de mayordomo org-scoped (repo-layer org-scope guard) junto al inquilino cruzado del operador. El alcance por inquilino en el lúmtedo X-Internal-Auth es de ancho de la finca y se aplazó a la piedra angular de la tecla austro; una prueba de aislamiento de corredor en vivo sigue con el primer consumidor de hormigón.
· kamo-shared-library
idempotencia del lado del consumidor, DLQ reproducción de administrador (Resal 2)
Añade el núcleo de confiabilidad que cualquier consumidor MLOS conecta a: ProcesadoEvent dedup ledger (unique consumer.name.event.id) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . demposttentEventProcesador (INSERT-or-skip dedup en el tx del manejador para que el manipulador del manipulador locurador revuelo; matantratan a pasar por tastasmas, en lugar de de deDeadLetterReplayer (re-encuentra una carta DEAD a través de la caja de salida como un evento NUEVOId con el linaje causaltionId --no msg.id-unique/dedup-window, marca REPLAYED). MlosEventEnvelope gana "Jacksonized para la deserialización de ida y vuelta. Los nuevoscomponentes comparten el mlos.outbox.enabled opt-in; los repos están en el paquete ya escaneado. Live AbstractMlosDurableConsumerer (NATS) aplazó a su primer consumidor de hormigón.
· kamolos
Adopte MLOS transactional outbox (vía del producto)
Permite el evento Phase-0 backbone in KamoLOS: añade com.kamo.z.shared.mlos.event al escaneo de "EnableJpaRepositories", mlos.* config (mlos.outbox.enabled=true, MLOS-EVENTS stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Id. El esquema (mlos-outbox.event-event-índices) se aplica por separado por el usuario KamoInitializer.
· kamo-shared-library
Espina jaque de evento outbox transaccional (Phase-0 keystone B)
Patía del productor de dinero/cumplimiento en NUEVO hermana pkg ************* (nunca las ediciones donotmodify): MlosEventEnvelope DTO - MlosOutboxEvent outbox entity/repo . OutboxWriter (single-tx enqueue) . OutboxRelay (AFTER-COMMIT hot-path-path . . . . . . . . . . . . . . .Nuevos Arroyos MLOS-EVENTS con la ventana de desactivación de la que carece NatsConfig). Reutiliza los granos de NATS Connection/JetStream bloqueados. Opt-in vía mlos.outbox.enabled (por defecto) por lo que los servicios no aptos no se ven afectados. Efecto exacto de una sola vez = outbox transaccional - JetStream Nats-Msg-Id dedup. Desdup/DLQ del consumidor -aislamiento-inquilino de la CI son Slice 2/3.
· kamo-internal
Mostrar capas de datos por etapa incl. Máscara oceánica EDT4 - Marcados TRF2
Las cartas encendidas del salpicadero del mundo listan las capas de datos cada baldosa horneada, acentuando los recién añadidos: la máscara oceánica EDT4 (conectividad marina) bajo hidro, y marcas de carril TRF2 - terreno de tiempo de ejecución en el transporte. Formato/datos puros etiquetas (STAGE-LAYERS in types.ts) no hay nuevas cadenas de i18n. Los recuentos de equíde/regéneros ya la superficie automáticamente una vez que la procedencia bachee EDT3-EDT4 / TRF1-TRF2.
· kamo-internal
Esciseo de baldosas de superficie . . . . . . . . . . . . . . .
La instantánea del agente ahora lleva la estanqueidad por receta (actualización / ranciada / falta); plo a través de la API SSE a la página: - La pestaña Servicios muestra una línea de frescura por servicio de baldosas y el botón Inicio se convierte en "Regenerar N" (= ranle desaparecido) cuando hay trabajo dirigido, o "Hacia la fecha". - Resumen de la insinuación de la ficha de terminación muestra cuántas baldosas necesitan actualización. El inicio ya está impulsado por la procedencia en el host, por lo que el botón activa un objetivo regen de exactamente las células ranas/falsidas.
· kamo-internal
Universo página de administración de generación mundial
Añade /configuraciones/plataforma/universidad bajo Administración de Plataformas . su propia plataforma tarjeta - tres sub-tabs (Overview, Servicios, Acciones) para iniciar y supervisar el El oleoducto de datos mundiales KamoUniverse en directo. Backend (Siguiente API, plataforma-admin cerrada a través de la sesión de ***, la misma regla que el Guardia de clientes): - app/lib/worldgenNats.ts: una conexión NATS de larga duración, un suscriptor de estado que acecha el último estado por etapa de la instantánea (en memoria y Redis) y re-emits en un autobús en proceso para SSE. Las entradas empiezan a mandar. - app/api/universo/servicios GET estado actual de cada etapa (estatuto . . . . cuenta . lockHeld). - **************** POST un comando de inicio al agente k3m1. - app/api/universe/stream SSE stream de eventos de estado en vivo/snhot. Frontend (MUI - next-intl, refleja la página de configuración): - useWorldgen: un stream compartido de SSE (auto-reconexión) y start() para todas las pestañas. - Vista general: agente/batch/completion/tile stat til tiles - un tren de tuberías vivas. - Servicios: una rica tarjeta por script rol - rol - lo que logra, estado vivo placa, ha/total barra de progreso, último evento, y un botón de inicio (desactivado mientras cualquier lote tiene la cerradura global). - Acciones: ejecuten la tubería completa o una etapa individual (con confirmación), Además de una actualización de instantánea. Cableado: NATS-URL añadido al configmap; Añadida la dependencia del cliente de los "nats". El k3m1 agente de telemetría de scripts en vivo en datos de tierra del universo; cuerdas en la traducción diccionario. tsc limpio en todos los archivos nuevos.
· kamo-shared-library
Agregar el hallacamiento insensible casoPor correo electrónicoEmailIgnoreCase
Los correos electrónicos se almacenan en caso inconsistente (e.g. Sage-KamoCRM.com) y CockroachDB encadenando igualdad es sensible a los casos, así que findByEmailEmail echa de menos solo en el caso. Necesitado para la búsqueda de correo electrónico de recuperación de contraseñas.
· EmailService
Cuentas de correo autocuracada de la aplicación DB (recuperación de deriva)
La aplicación DB es la fuente de la verdad para la que deberían existir buzones; KamoMail cuentas en vivo en los usuarios virtuales del servidor de correo. Si el correo DB pierde datos, Los buzones desaparecen en el proveedor mientras se mantienen los registros de la aplicación. - MailboxSelfHealService: en el inicio de la página diaria, re-aprovisionar cualquier aplicación KAMO-MAIL buzón que falta de usuarios virtuales (contraseña de gestión de aplicación fresca aleatorio). - sincronizarMailboxes (la configuración "Sync" acción) ahora también empuja a app-provider para cualquier buzón que que falte, no solo importación de provider-aapp.
· kamo-internal
Compong/enviar en nombre de buzón de miembro conmutado
- Miembro del propietario del buzón de hiloId del conmutador a través de activeMailbox en el contexto de composición (evento de URL param). - Nuevo Mensaje / respuesta / reenviar el componer abierto para el buzón de correo de miembro seleccionado: De las listas desplegadas que los buzones de los miembros - alias, firma personalizada a ellos, y enviar/borrador autenticar como su buzón (mailboxId). - Se componer sin cambios cuando ningún buzón de miembros esté activo.
· kamo-internal
Lleva *** en sesión de per-tabStorage en lugar de una cookie compartida
El identificador de sesión vivió en una cookie del navegador compartida en todas las pestañas de un origen, por lo que una segunda ficha (implantación) no pudo celebrar su propia sesión. Movir el transportista a la sesiónStorage (per-tab): - sessionClient: ayudantes simbarios - un wrapper de traz global que une el id as X-***-Token en las llamadas de un mismo origen /api, además de una sola vez la sesión de cookie-ostoMercución de almacenamiento. Instalado a través de SessionBootstrap en el diseño. - ************* cabecero-primero (cookie fallback) usado por generar-otk, sesión/info, sesión/exte, logout, meet/invite-email. - generarOTK . getKsemIdFromRequest prefer X-***-Token sobre la galleta. - /api/validate ya no establece una galleta ***; devuelve el id y el /validate página lo almacena en sesión de esta pestañaStorage. - useUserInfo , todos los ganchos WebSocket lean el id de sessionStorage. - logout captura el símbolo antes de limpiar el almacenamiento para la sesión de Redis sigue invalidado. La imitación ahora acaba de abrir /validate?otk=... en una nueva pestaña (misma vía como inicio de sesión: Sesión de Redis creó el lado del servidor, OTK entregó a /validado; el La nueva pestaña recibe su propia sesión y la pestaña de administración está intacta. Elimina el obsoleta keepPrev/ImpersonationBanner volver a la maquinaria de al administrador. Las orejes permanecen separadas por el dominio.
· kamo-internal
God-mode Impersonate botón en la encabezado de configuración de los miembros
Añade una acción de "hecho' de la derecha superior en /settings/member/[id], visible sólo cuando la sesión firmada lleva el modo dios (getIsGod) y el objetivo no es nuevo. Llamadas la nueva /api/security/impersonate, luego intercambia el Cookie *** a través de la ruta OTK (/validate?otk=...&keepPrev=1) en una nueva pestaña. keepPrev conserva la propia sesión del administrador en Redis; un global ImpersonationBanner acecha al administrador y ofrece un solo clic 'Return a mi cuenta' (las mismas cookies de origen no pueden celebrar dos sesiones en vivo a la vez). AjustesView gana una cabecera opcionalAcción ranura.
· SecurityService
endpoint de imitación miembro de Dios-modo
Mensaje /api/seguridad/personates a las adormece una nueva ***.OTK para un arbitrario miembro de la orga actual del llamante, asediado en la sesión de llamadas portando modo dios (GD). Registra el miembro del administrador de Dios id como SUDO.MEMBER-ID para Auditoría. La misma sesión en forma de inicio de sesión se construye como EnterAsController, pero mismo-org y dios-gated en lugar de cross-org.
· SecurityService
Devolución orgName . idioma en /usuario-info
Resuelve el nombre de visualización del org y el idioma seleccionado del miembro (ISO-639-1 código) de la DB para que el kamo-universo pueda mostrar la bandera de org de cada jugador. en su nombre. Resuelto en directo (no del período de sesiones) así que los períodos de sesiones existentes Reúnelo inmediatamente.
· kamo-internal
Tarjeta de lanzamiento KamoUniverse - ícono de nav (gated ACCESS-KAMOWORLD, OTK redir en redirigen a jugar.*)
· kamo-shared-library
Añada ACCESS-KAMOWORLD derecha (145, GAMES) para el acceso KamoUniverse
· KlusterServices
Registro de imagen K1m1 sustituyendo a k0m1:5000 (mismas credenciales)
· KlusterServices
Kamo-universe namespace.quota-valkey, CockroachDB backups, observación
- universo/: namespace . ResourceQuota, valkey-universe (AOF, hostPath k1m1), La noche CockroachDB backup CronJob, guión de bootstrap operador - monitorización/: valores de timón clavado **************** instalar script, grafana.* ruta, salpicadero del universo . reglas de alerta - IC: aplicar el nombre del universospace-valkey en la fase k1m1 (Paquete de AGTS caído: 43030d6 ya re-homed k3m1 con aislamiento de cuenta)
· KlusterServices
Añadir nodo k3m1 . migrar peering a LAN IPs
- estadorio: publicitar/unir más de 192.168.4.x (k1m1=22, k3m1=.36); WireGuard cayó (k3m1 wg0 10.8.0.1 colisionado con la publicidad IP de k0m1.). - init-job - CI kubeconfig endpoints movidos a IPs LAN. - CI: añadir K3M1 CockroachDB sección de despliegue (negue secreto K3M1-KUBECONFIG-B64).
· kamo-login
Ruta padeba las insiciadas para la compra después de login
Después de un éxito auth (manual o auto-login), consumir el ápice-domain la galleta sp.checkout-plan dejada por kamo-register y redirmire al comprador a la marca /subscribe?plan= página (Stripe checkout) en lugar de la aplicación predeterminada destino. Un tiro: galleta despejada en lectura.
· kamo-register
Carry pago ?plan de la inscripción en la compra
Cuando un miembro se inscribe en un CTA de precios pagados (plan=pro-business), soltar una galleta de sex-domain sp.checkout-plan al terminar. kamo-login consume después de que el usuario autentica y las ruta a / suscribirse -. Stripe, sobrevivir al registro -verifique - lúbete de login.
· kamo-shared-library
Plantillas de señalización de signo de signo electrónico canónico (verificación - invite)
Agrega dos plantillas de correo electrónico canónico de toda la plataforma semilla perezosa per org: - esign.signer.verificación (intromisión de la OTP: .code, . . . . . . . . . . . . . . . . . . . . . . . . . . . - esign.signer.invite (invite: "name", "sender", "message", enlaza.) Alquilos en la lista clave de CanonicalTemplateLoader, así que EmailService.seedForOrg los recoge en el primer envío. Permite OTP en vivo/invitar entrega para el flujo de firma electrónica (fue el mejor esfuerzo sin las plantillas).
· BillingService
Comaja de uso de la señal electrónica . Compra de autoservida de consumo
4 metros: - EsignMeterSubmissionService (Ejed daily): agrega API-orgin EsignUsageRecords per org-periodo; primero 40/período incluido, el resto presentado como Stripe MeterEvens. Idempotente a través de reportadoToStripe - el registro de uso UID como el identificador MeterEvent (Stripe-side dedupe). Resuelve el nombre del evento del medidor del precio real de la Franja del add **************** por lo que coincide con cualquier medidor que el precio está obligado a (fija el desajuste de nombres). 5 compra de consumo: - ConsumerCheckoutService: Stripe Checkout Session (mode=subscripción) contra el precio del plan de producto root (línea de sobreabado medido para Negocio); registra el Conteo de suscripción (fuente PAID) - Subscripción Miembro de CuentaLicense sobre la realización e invalida los derechos. - ConsumerSessionResolver: autentica al comprador por su propia cookie *** a través de Redis (nunca una cabecera de org de cliente). - ConsumerCheckoutController POST ************* - StripeWebhookService ahora maneja la compra.session.completado. Aditivo/iner hasta que un consumidor se suscribe; el cargo en vivo necesita una tarjeta real.
· kamo-internal
Expong alcance de la clave API-SIGNATURE (E-Signature API)
Añadir el alcance de la API de la firma electrónica al gerente de org API-key para que el personal pueda conceder Negocios orgs acceso e-sign acceso al signo electrónico. Usage más allá de la mensual incluida La asignación se mide por firma.
· APIService
Puerta de API de firma electrónica programática pública (Ámbio API-SIGNATURE)
Añadir /api/public/esign/** a PublicApiController: valida la tecla API org, requiere el alcance de API-SIGNATURE, los límites de tarifas y los reenvíses a ESigService's API de sobres internos (/api/esig/internal/**) con X-Internal-Auth y X-Org-Id. Espejos el precedente de la puerta de entrada de suscripción-catalog.
· ESigService
API de sobre programático interno (origin=API) para negocios
- EsignInternalController (/api/esig/internal/**): X-Internal-Auth . X-Org-Id Authed, llamado por APIService después de validar la tecla API-SIGNATURE-scoped; reutiliza EsignEnvelopeService, etiquetas sobres EsignUsageOrigin.API - ******************* gana una sobrecarga de origen (por defecto de la MNO) - sendero de señalización ahora metros por el origen del sobre (API - sobreedad, MANUAL nunca) - OTKAuthFilter bypasses /api/esig/internal (interestable-secreto, no OTK)

Tu universo está esperando.
Comience gratis en minutos y agregue productos cuando esté listo, sin migración ni nuevos inicios de sesión.
Gratis para siempre: no se requiere tarjeta de crédito