Saltar al contenido
KAMOUniverse

Changelog

Qué hay de nuevo.

Cada mejora de la plataforma, a medida que se envía.

  1. · kamo-internal

    Real work orders and subscriptions per market — dispatch, customer accounts, live subscriptions, cancel at period end

    Service (work orders): - the grid reads its own market's jobs (plus older jobs with no market), shows the customer, the technician (member chip, never an id), the next visit, and status / priority words from the dictionary; rows keep ?back= - the work order page shows its market, files the job under an account or none (swap beside Customer), dispatches a technician (Choose Technician, arrival and finish, visit notes; a new job becomes Assigned), adds return visits, edits summary / description / trade / priority / address, labels status buttons by what they do (Start Work, Put On Hold, Mark Complete, Mark Invoiced, Cancel Work Order), shows each note's author with photo, and goes Back to its market's tab - no screen shows a job's uid: new jobs are numbered, older ones show a short ref Subscription: - the Agreements sub-tab was fifteen generated agreements whose buttons changed nothing; it now lists the market's live subscriptions (customer with photo, plan, status, seats, MRR, next billing, balance due, overdue, ending) and opens each on its order page - Signups reads the market's orders, names customers by account and member chip (was Member #<id>), offers only the market's plans in the order wizard - the subscription page shows the customer with photo and Open Account, the market, loads its subscription by id (no org-wide account or subscription scan), and cancels a live subscription with a reason, now or at the end of the billing period (Cancel only marked the order before, leaving the subscription billing); cancelling an order asks first - /commerce/agreements/new opens the order wizard for the market instead of a Coming Soon page - Back on agreement and signup pages no longer points at a tab id that never existed Removed the unreachable mortgage mock PipelineCommitmentsTab and /commerce/commitments/[id] (generated data; nothing linked to either). Help: How to Manage a Work Order and How to Manage a Subscription, linked from the grids, the visit window and the cancel window.

  2. · SecurityService

    Market-scoped work orders and subscriptions; dispatch and customer endpoints

    - GET **************** lists one market's work orders (plus those with no market) - PUT /service-jobs/{uid}/customer files a job under an account or takes it off - POST /service-jobs/{uid}/visits adds a visit; PUT .../visits/{visitUid} schedules it and assigns a technician (409 on a finished visit) - GET /pos/subscription-orders and /pos/subscriptions take ?marketId= - GET **************** takes the market UUID (it was a Long, so every market-scoped request was a 400) and returns only the caller's plans - ServiceJobRightsGateTest covers the three new handlers

  3. · kamo-shared-library

    Market on the engagement, job numbers, dispatch, customer accounts, market-scoped lists

    Service work orders: - createJob stores the chosen market on Engagement.market (it only picked the engagement type before) and the customer account on Engagement.account - every new job gets a person-readable number (WO-00001…), so no screen falls back to the uid - JobView carries marketId / marketTitle; customerName reads Company (Contact) - listJobs(org, status, marketId): one fetched read (engagement, market, customer, visits) instead of up to four lazy loads per row; a market tab also shows jobs that carry no market - setCustomer: file a job under an account or take it off one (engagement follows) - addVisit / updateVisit: schedule a visit, assign a technician (org-checked in SQL), mark en route / no access / cancelled; assigning someone to a CREATED job moves it to ASSIGNED Subscriptions: - createOrder stores the plan's market and the customer member's account on the engagement (a quote's engagement keeps what it has) - SubscriptionOrderDTO and SubscriptionRecordDTO carry marketId, marketTitle, customerAccountUid and customerAccountName - getOrders / getSubscriptions take a marketId (engagement market, else plan market; none stays in) and read the rows with one fetched query - getPlansForMarket: the market filter on plans took a Long and could never parse a market UUID; it is also limited to the caller's org now

  4. · kamo-internal

    Every rental has a renter; cancel, re-date, check out, check in and end; booked dates beside the date picker

    - New Rental Request: the Renter (customer account) is required and pre-filled from ?accountId; ?marketId is sent so the rental is filed under the market. Once an asset is chosen, Already Booked lists its booked dates, names a clash, and Create waits for free dates. No assets: a way to the market's Rental Assets. - Rental request: Change Dates (with Charge By and booked dates), Cancel Request (cancel or decoder, with a reason kept on the request), Confirm Booking asks for a renter first; market and the booking's stage shown. - Booking: Check Out, Check In (late fee suggested from the daily rate when it is overdue, damage fee, condition notes, new total), End Rental (nothing handed over), Change Dates (end only once out), Cancel Booking, Open Request; price breakdown, checked out / returned times, overdue warning. - The renter can be changed, never removed; account saves use the record the server answers instead of reloading. - Pipeline lists ask the server for the market's rentals (by the rental's market); Market column when no market is chosen; bookings listed by stage (Reserved, Checked Out, Returned, Cancelled). - Market Rental Assets: Offered switch (switch an asset off instead of deleting it), translated copy, theme tokens, the server's sentence when an asset in use can't be deleted. The unused PipelineRentalAssetsTab (hard-coded English) is removed. - Help: Rentals and Bookings article (commerce/orders) linked from each rental page.

  5. · kamo-internal

    Market-filtered lists, line items, approve/reject/withdraw, send/receive/close/cancel, and a real Vendors list

    - Procurement tab: Purchase Requests / Vendor Orders / Vendors; lists ask the server for the selected market (plus rows with none), show a Market column, and filter/count in plain words (Waiting for Approval, Rejected, Partly Received…); the "every market shows the same list" caption is gone - New / Change Purchase Request: vendor picker (active, this market's first) with New Vendor on the spot, market, lines with live total (or an estimated amount), notes, optional customer account - Record page: who asked and who decided (with photos), status banner, line table with arrived / still to come, history; Approve, Reject (reason shown to the requester), Change, Withdraw; Mark as Sent, Record Delivery (per line or everything), Close Order, Cancel Order — each confirmed - Vendors: contact person, email and phone through EmailAddress/PhoneNumber, website, notes, market; Active / Inactive with counts; deactivate instead of delete; ids stay strings - Help: "Buying from Your Vendors" help center article, linked from the form and the record page

  6. · SecurityService

    ProcurementController — market-filtered lists, change/reject/withdraw a request, send/receive/close/cancel a vendor order, records returned from every change

    - purchase requests and vendor orders move out of POSController into ProcurementController (MANAGE_PROCUREMENT to buy and run orders, APPROVE_PURCHASE_REQUESTS to approve or reject) - PUT …/account and …/market answer with the updated record - ProcurementNotifier: a new request tells everyone who can approve it; a decision tells the requester - vendor create/edit/deactivate opens to MANAGE_PROCUREMENT (MANAGE_SUBSCRIPTION_SETTINGS kept)

  7. · kamo-shared-library

    Market, lines, approval decisions, and the vendor order lifecycle (send, receive, close, cancel)

    ProcurementService owns purchase requests and vendor orders: - the engagement carries the market (chosen Procurement market, else the vendor's); lists filter by market plus rows with none; marketId/marketTitle on both DTOs; PUT market/account return the record - lines (description, quantity, unit cost, received) in the record payload; the total is their sum - reject (outcome REJECTED + reason) and withdraw (CANCELLED) a waiting request; requester and decider recorded; the request is SUBMITTED on create - vendor order: mark sent, receive in parts or whole, close (FULFILLED), cancel before anything arrived (VOIDED); derived stage on the DTO, never stored - EngagementLifecycle: all commitments voided -> CANCELLED, all ended -> FULFILLED - one-query lists (fetch-joined engagement/account/market, vendors and orders batched) - vendors: contact name, email, phone, website, notes, market, active flag (deactivate, never delete) - indexes on org_id / intent_id / commitment_id of the intent and commitment tables (applied by hand)

  8. · KBService

    Turn Antivirus scanning on in kbservice

    KamoAntivirus is Ready (StatefulSet kamowsantivirus 2/2, /readyz ready, release 2026.11.08.0101); a direct scan from the cluster returns MALICIOUS/TEST_FILE for the standard test string and CLEAN for plain text with this service's internal-auth secret.

  9. · DocsService

    Turn Antivirus scanning on in docsservice

    KamoAntivirus is Ready (StatefulSet kamowsantivirus 2/2, /readyz ready, release 2026.11.08.0101); a direct scan from the cluster returns MALICIOUS/TEST_FILE for the standard test string and CLEAN for plain text with this service's internal-auth secret.

  10. · MediaService

    Turn Antivirus scanning on in mediaservice

    KamoAntivirus is Ready (StatefulSet kamowsantivirus 2/2, /readyz ready, release 2026.11.08.0101); a direct scan from the cluster returns MALICIOUS/TEST_FILE for the standard test string and CLEAN for plain text with this service's internal-auth secret.

  11. · ConversionService

    Turn Antivirus scanning on in conversionservice

    KamoAntivirus is Ready (StatefulSet kamowsantivirus 2/2, /readyz ready, release 2026.11.08.0101); a direct scan from the cluster returns MALICIOUS/TEST_FILE for the standard test string and CLEAN for plain text with this service's internal-auth secret.

  12. · DocsService

    Assignment rows say what the member still owes

    Adds signableOutstandingCount (signable documents not yet signed) and uploadsOwedCount (required requests with no live file) to each assignment row, so the member's list can label its button by what is actually owed instead of "Continue Signing" on a Quick Request with nothing to sign. Three grouped queries per page; LegalAssignmentCountsParseTest parses them against the real mapping.

  13. · KBService

    KBService checks knowledge-base resources and looks up the verdict before signing

    - Resource upload writes the raw kb bucket, so it goes through AntivirusUploadGuard (KB) before anything touches storage: 422 ANTIVIRUS_BLOCKED (nothing stored) / 503 ANTIVIRUS_UNAVAILABLE, answered in that shape by the controller. - The content hashes ride on the object as user metadata (kamo-blake3 / kamo-sha3), so every presign site (single URL, batch, library tiles, platform help) looks up the content's global verdict first: a locked or still-checking resource is never signed (423 on the single URL, no URL for a tile). Resources stored before this carry no hashes and are not judged here. - ConfigMap kamo.antivirus.* (enabled: false until KamoAntivirus is Ready); ANTIVIRUS_INTERNAL_AUTH_SECRET from mlos-internal-auth.

  14. · DaemonService

    Marque el Informe de Protección semanal (por hora, lunes local de la organización a las 08:00) y la vigilancia del brote (15 min)

  15. · SecurityService

    La API Antivirus, los controles de plataforma y los endpoints programados; las rutas de archivo propias de gate SecurityService

    /api/antivirus/** (y el gemelo /api/security/antivirus que el proxy de consola intenta primero): descripción general, detecciones, Configuración de seguridad (ANTIVIRUS_POLICY_CHANGE auditado), falsas alarmas, búsqueda de veredicto. Plataforma (MANAGE_PLATFORM_ANTIVIRUS): estado, renovación/devolución de firma, revisión de falsa alarma (ALLOWLIST desbloquea en todas partes + le dice a la gente), allowlist, Interno: Informe de protección semanal y comprobación de brotes para DaemonService. Las cargas en bruto (avatares, incluidos SVG, fondos, logotipos, importaciones de clientes potenciales, divulgaciones, hojas de tarifas) se examinan antes de Las rutas de ImageService mantienen su puerta lib y ahora responden 422/423/503 en lugar de 500; vault, Las lecturas de préstamo, paciente y marco de imagen aplican la puerta de lectura. kamo.antivirus.enabled permanece falso hasta que el kamowsantivirus StatefulSet está listo.

  16. · APIService

    Route /api/antivirus/** to SecurityService and seal its internal subtree

  17. · KlusterServices

    KamoAntivirus filtro de correo primero en smtpd entrante (puerto 25), tempfail cuando no se puede llegar

    smtpd_milters = { **************** default_action=tempfail }, entonces rspamd permanecerá sin cambios Se sustituye por una pequeña parte de marcador de posición y el mensaje sigue siendo entregado; si el Si no se puede llegar al filtro, el remitente recibe un 4xx y lo vuelve a intentar submission (587) mantener solo rspamd; postfix-bulk sin tocar. Milter verificado en vivo antes de este envío (cliente de protocolo milter en clúster: test (archivo reemplazado con el marcador de posición, CSV limpio conservado, marcador forjado eliminado).

  18. · EmailService

    Antivirus para correo: puerta de lectura en todos los buzones, marcadores de posición más suaves, detección de envío, detecciones

    - Leer: cada adjunto/parte en línea de cualquier buzón (Kamo Mail, proveedores IMAP, Graph; personal y Las rutas compartidas) están codificadas en memoria (archivo temporal de más de 8 MiB, eliminado al cerrar), su veredicto global El archivo se abre y, cuando es desconocido, se comprueba por KamoAntivirus (origin MAIL_READ, bytes_stored=false) ANTIVIRUS_BLOCKED, no verificable = 423 ANTIVIRUS_CHECKING; razón/familia también como X-Kamo-Antivirus-* Las herramientas de correo de SI leen a través de estas rutas, por lo que también están bloqueadas. Listing nunca escanea: AttachmentInfo lleva **************** solo para las partes ya hash. - Marcadores de posición Milter (X-Kamo-Antivirus-Removed) lista bajo el nombre ORIGINAL, removed=true, bloqueado; nunca X-Kamo-El encabezado del mensaje Antivirus se expone como EmailMessage.antivirus para el banner. - Enviar/borrador (decisión 11): las cargas de dispositivos e imágenes pegadas pasan por AntivirusGate.scanUpload (almacenadas en 422 ANTIVIRUS_BLOCKED con los veredictos reutilizados, nunca se vuelven a escanear); las partes de un forward reciben la comprobación de lectura Nombre del archivo, 503 ANTIVIRUS_UNAVAILABLE. - NATS antivirus.detection.mail (grupo de cola antivirus-mail-detections): destinatarios resueltos a miembros a través de Titulares de buzones, alias personales, lectores de buzones compartidos y dominios de alias; registrados por miembro (MAIL_INBOUND, contraparte = remitente) por lo que FILE_BLOCKED / THREAT_ALERT salen por configuración de la organización. - Notificaciones: ANTIVIRUS_THREAT_ALERT -> VIEW_ANTIVIRUS (aplicación principal, no se necesita fila de características); FILE_BLOCKED/UNLOCKED no pertenecen a ninguna aplicación; orden de catálogo. Vista previa de muestras para las 4 plantillas de antivirus. - configmap kamo.antivirus.* (habilitado: kamowsantivirus está listo). Necesita kamo-shared-library b6c41d34 (HashUtils BLAKE3 en bcprov 1.70).

  19. · SecurityService

    Pasos de alquiler, listas filtradas por mercado y un inquilino que puede moverse pero nunca ser despejado

    - GET /rental-requests y /bookings toman ?marketId (el propio mercado del llamador) y Filtrar por el mercado del compromiso. - POST /solicitudes-de-alquiler/{id}/cancel, PUT /solicitudes-de-alquiler/{id}/datos, POST /reservas/{id}/salida | devolución | cancelar, PUT /reservas/{id}/fechas (MANAGE_RENTALS), cada uno respondiendo al registro actualizado; un rechazo es un 400 con un Sentencia. - GET /rental-assets/{id}/bookings: las fechas para las que un activo ya está reservado. - PUT /rental-requests/{id}/account y /bookings/{id}/account rechazan una cuenta en blanco y responder el registro actualizado en lugar de un mensaje desnudo. - DELETE /rental-assets/{id} responde 409 con una oración cuando el activo tiene alquileres.

  20. · kamo-internal

    Filtros de pestaña de pedidos por los propios mercados de la organización

    Las fichas y las etiquetas de fila eran por línea de negocio, nombradas después de su primera Así, dos mercados minoristas colapsaron en uno solo. Cada fila ahora muestra su propio mercado (desde el servidor); un registro más antiguo sin mercado va al único mercado de su línea cuando hay uno, otro a un Grupo "<Línea> — Sin mercado". Un filtro recordado cuyo mercado ha desaparecido Cae de nuevo a Todos.

  21. · DocsService

    DocsService rechaza los documentos bloqueados en todas partes y comprueba los guardados del editor

    - WOPI PutFile escribe raw MinIO, por lo que el guardado pasa primero por AntivirusUploadGuard: a harmful save no escribe nada, conserva el último contenido válido del documento y responde al editor 422 ANTIVIRUS_BLOCKED (503 ANTIVIRUS_UNAVAILABLE para que vuelva a intentarlo); se marca un salvado limpio GetFile rechaza el contenido bloqueado/de comprobación con 423. - Imagen /download, /stream, el PDF convertido y las miniaturas de la página llaman a la puerta de lectura antes 423 ANTIVIRUS_BLOCKED / ANTIVIRUS_CHECKING. PRECAUCIÓN el contenido pasa, por lo que su PDF La exportación masiva elimina los documentos bloqueados, al igual que las demás exclusiones. - La descarga de la versión/pdf/thumbnail juzga el propio contenido de la versión. - Los currículos de carreras se comprueban como CARRERAS con el solicitante y la solicitud; las carreras Los controladores responden a los rechazos del antivirus en forma de plataforma en lugar de un 500. - Legal: carga de mapas, rechazos a sus propios 422/503, una carga detenida pide volver a intentarlo (su PDF (la representación se haría a partir de bytes no comprobados), los paquetes ejecutados y las muestras de Los álbumes de fotos de Binder dejan fuera las fotos bloqueadas. - Las filas de la lista de documentos/metadatos llevan scanStatus / scanFamily / scanOutcome. - ConfigMap kamo.antivirus.* (habilitado: false hasta que KamoAntivirus esté listo); ANTIVIRUS_INTERNAL_AUTH_SECRET de mlos-internal-auth.

  22. · SecurityService

    Cada fila de Pedidos nombra su propio mercado

    Las filas llevan marketId / marketTitle de su compromiso (una consulta por engagement uid), por lo que una organización con dos mercados minoristas ve cuál Uno de los cuales un pedido vino en lugar de ambos bajo el nombre del primer mercado. Los registros realizados antes de que los mercados fueran rastreados permanecen nulos.

  23. · KlusterServices

    Alertas de antivirus (escáner inactivo, firmas obsoletas, puerta de espejo que falla, p95, pico de detección, lista de espera)

    Aplicado a mano (monitoreo/no es un objetivo de IC).

  24. · kamo-shared-library

    Un alquiler necesita un inquilino; comercializar el compromiso; cancelar, cambiar la fecha, hacer el check-out, devolver y cancelar una reserva

    - createRentalRequest rechaza una cuenta de cliente faltante o extranjera, registra el Mercado (el del activo, si no el elegido) en el compromiso, y valida las fechas Confirmar rechaza una solicitud que no tiene cuenta.Confirm denies a request with no account. - setRentalRequestAccount / setBookingAccount mueve al inquilino a otra cuenta y Nunca lo borre; ambos responden el registro actualizado. - Solicitudes: cancelar/decodificar (IntentStatus.CANCELLED, razón guardada) y nuevas fechas (con Reservas: check out (el día de salida de la reserva) IN_PROGRESS), regresar o terminar (COMPLETED; CommitmentStatus.FULFILLED; tarde y daños cargos adicionales se agregan al total; notas de condición), cancelar (ANULADO, antes de que acabe), y Nuevas fechas (solo el final mientras está fuera), cada uno comprobando las otras reservas del activo bajo Un bloqueo de fila en el activo para que dos confirmaciones no puedan hacer una doble entrada. - EngagementLifecycle: un compromiso VOIDED no compromete nada; todo anulado y sin orden Este evento está CANCELADO. - Una reserva devuelta ya no tiene sus fechas. Las fechas del activo son legibles (findRentalAssetBookings) para los selectores de fechas. - DTOs: marketId/marketTitle en solicitudes, reservas y activos; reserva -> rentalRequestUid, rateType, checkedOutAt, returnedAt, tarifas, notas, motivo de cancelación; Las listas se filtran por mercado y cargan los activos, Reservas y entregas en una consulta cada uno en lugar de por fila. - Activos de alquiler: columna de descripción; mercado validado como el mercado de alquiler de la organización y móviles en la actualización; tasas negativas rechazadas; códigos duplicados rechazados en la actualización; Un recurso con alquileres registrados no se puede eliminar (desactívelo en su lugar). - Índices: **************** por compromiso, compromisos por alquiler Activo, cumplimientos por compromiso, activos de alquiler por organización y mercado (aplicado a mano).

  25. · kamo-internal

    Mercados — los mercados propios de la organización, por sus propios nombres

    Un mercado es lo que los miembros definen (título + nombre + nombre de la empresa) Descripción); su línea de negocio es solo de su tipo. - La opción de navegación es Mercados. Con un mercado es ese mercado, por su título (como antes); con dos o más se abre un menú con una fila por market — su título, su descripción debajo, un icono para su línea de negocios — cada uno abriendo la pestaña de ese mercado. Una lista en caché Ambas naves, el launchpad y la etiqueta, actualizadas en los cambios del mercado. - Las filas del menú de navegación tienen una descripción opcional (popover, riel, barra superior). - La casilla de tipo del formulario de mercado es "Línea de Negocio"; cada opción dice lo que le da al mercado, y uno bloqueado nombra la aplicación que necesita Los ayudantes de nombre y descripción explican qué es lo que se está haciendo Para los miembros, ver en el menú Mercados. - ACCESS_COMMERCE dice "Mercados de acceso"; la página de préstamos apunta a Configuración → Líneas de Negocio.

  26. · MediaService

    MediaService comprueba los archivos adjuntos con Antivirus y rechaza los archivos bloqueados en cada lectura

    - Adjuntos de chat (membresía CHAT, visitante web-chat PUBLIC), archivos de errores del sistema, imágenes de Growth Hub Se comprueban dentro de storeContentAddressed con su contexto (miembro, conversación); Canva Un rechazo llega al cliente cuando la forma de la plataforma (422 ANTIVIRUS_BLOCKED {family} / 503 ANTIVIRUS_UNAVAILABLE) en lugar de ser envuelto en un 500. - Los fondos de reunión (raw MinIO, depósito público) pasan primero por AntivirusUploadGuard. - /attachments/link (dedup by hash) rechaza el contenido Antivirus bloqueado (422); un archivo retenido puede ser Se enlaza y permanece ilegible hasta que se marca. - Los archivos adjuntos llevan escaneo {estado, familia, resultado} en la respuesta de carga, el mensaje en vivo marco e historial; PENDIENTE mientras se mantiene. - ImagingProxyController (original y vista previa), la descarga del visitante, los archivos de error del sistema, Las imágenes, los materiales y las lecturas de Canva de Growth Hub llaman a la puerta de lectura: 423 ANTIVIRUS_BLOCKED / ANTIVIRUS_CHECKING, se comprueba antes del contenido faltante 410, por lo que se retiene El proxy ahora comprueba la pertenencia antes del estado del contenido. - ConfigMap kamo.antivirus.* (habilitado: false hasta que KamoAntivirus esté listo); ANTIVIRUS_INTERNAL_AUTH_SECRET de mlos-internal-auth.

  27. · ConversionService

    ConversionService comprueba las cargas con Antivirus, completa los archivos retenidos, vuelve a comprobar las nuevas firmas

    Reemplaza al cliente clamd en servicio (malware/paquete, UploadScanGuard, QuarantineStore, Retro-scan) con la biblioteca compartida Antivirus: - /upload, /replace, /templates/upload están marcados dentro de ImageService antes de cualquier fila o Se escribe el objeto (HOLD permitido); los rechazos usan las formas de la plataforma: 422 ANTIVIRUS_BLOCKED {family}, 503 ANTIVIRUS_UNAVAILABLE, 503 HASH_MISMATCH. MALWARE_DETECTED ha desaparecido y no se puede encontrar Las respuestas llevan el escaneo {estado, familia, resultado}; un nombre de firma es siempre devuelto El archivo está PENDING y se convierte una vez almacenado. La canalización emite una etapa de 'escaneo'. - /register-existing (dedup por referencia) rechaza el contenido Antivirus bloqueado (422). - Efectos de sonido (raw MinIO) pasan por AntivirusUploadGuard (sin espera, 503 cuando está abajo). - QuarantineStore ya no existe, por lo que no se escribe nada en el depósito de cuarentena; nada En ella se toca. - antivirus.hold.verdict (cola antivirus-hold-completer) -> AntivirusHoldCompleter, luego el Conversión ordinaria para los documentos liberados; un fallo de almacenamiento naks para la re-entrega. - antivirus.signatures.promoted (cola antivirus-recheck) -> AntivirusRecheckService: cada hash marcado cuyos bytes se almacenan (desbloqueo + notificación + informes AUTO_CLEARED) y CLEAN contenido visto por primera vez en los últimos 14 días (LOCKED_LATER + alertas), transmitido desde MinIO, Los suscriptores vuelven a intentarlo hasta que existe el flujo ANTIVIRUS. - ConfigMap: kamo.antivirus.* (habilitado: false hasta que KamoAntivirus esté listo); ANTIVIRUS_INTERNAL_AUTH_SECRET de mlos-internal-auth.

  28. · kamo-shared-library

    Un compromiso pertenece a un mercado definido por el miembro

    commerce_engagements.market_id (aplicado a mano, FK a commerce_markets, Ordenes de venta al por menor, trabajos de servicio, alquiler y adquisición Los registros no tienen una columna de mercado propia; lo leen de sus de la misma manera que leen su cuenta de cliente.

  29. · kamo-internal

    La interfaz de usuario del antivirus: la protección se sella en todas partes donde aparece un archivo, el Centro antivirus, la pestaña de la plataforma, las alertas y la ayuda

    Kit de diseño (aplicación/componentes/antivirus): ProtectionSeal con cinco caras animadas (Verificación, Protegido, Precaución, Bloqueado, No se pudo comprobar; marca + --av-* tokens, movimiento reducido honrado), BlockedFileCard / LockedAttachment / LockedOverlay, PrecautionBanner con Abrir una copia segura, MessageAntivirusBanner, ShieldClip, FalseAlarmDialog ("Creo que esto es un error"), AntivirusNotReady. Lógica de @kamo/antivirus-core 0.1.0 (estado de sellado, razón del analizador aceptando En el cuadro de diálogo Antivirus, haga clic en Antivirus_BLOCKED / MALWARE_DETECTED / ANTIVIRUS_CHECKING / ANTIVIRUS_UNAVAILABLE / SCAN_UNAVAILABLE. Superficies: panel de lectura de correo (sellos, partes removidas bloqueadas bajo sus nombres originales, mensaje banner, imágenes en línea retenidas, descargar todas las imágenes, clip de escudo de fila de lista, caché de cuerpo v2), Bandejas de compositor/chat/SMS/SI (verificación + estados bloqueados), burbujas de chat para destinatarios, documentos (Etapa de comprobación, sellos, acciones bloqueadas, puerta de precaución), y el brindis de rechazo en cada carga (KB, avatar, carreras, errores del sistema, sonidos, documentos de cuenta/paciente/aplicación, logotipos). Antivirus Center en **************** (VIEW_ANTIVIRUS; las necesidades de la política MANAGE_ANTIVIRUS_POLICY): orbe de protección, KPI de conteo, gráficos de tendencia/origen/familia, en vivo Cronología de amenazas, conmutadores de políticas con ayuda, falsas alarmas. Pestaña Plataforma (MANAGE_PLATFORM_ANTIVIRUS): estado del escáner, versiones con actualización/reverso, cola de revisión, Tres tipos de notificaciones, el recorrido guiado del antivirus, la lista de permisos, los brotes, el simulacro de seguridad /api/antivirus BFF, réplicas para ServiceType ANTIVIRUS(41), derechos 698-700 y MANAGE_PLATFORM_ANTIVIRUS (shared-lib 332f7275) y siete artículos del centro de ayuda. El componente de widget de inicio de protección está construido pero no registrado: el launchpad necesita un ANTIVIRUS_WIDGET bloque derecho que la biblioteca compartida no tiene todavía.

  30. · KlusterServices

    Svc_antivirus login + ANTIVIRUS stream; conversión/email puede consumir antivirus.>

    - svc_antivirus: STREAM.INFO/CREATE ANTIVIRUS, publicar antivirus.> y rt.org.>, Suscribirse antivirus.> y _INBOX.> (Secreto kamo/nats-usuario-antivirus, SECRETS.md). - svc_conversion: API de consumo ANTIVIRUS (mantener veredictos, volver a comprobar la promoción), publicar/suscribir antivirus.>, publicar rt.org.> (los veredictos grabados actualizan la interfaz de usuario). - svc_email: API de consumidor ANTIVIRUS (detección de filtros de correo), antivirus.>. - stream-bootstrap Provisiones de trabajo ANTIVIRUS (R1, 14d) para que los consumidores puedan vincularse primero. Validado con nats-server -t contra el servidor en vivo.

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