Aller au contenu
KAMOUniverse

Changelog

Ce qui est nouveau.

Chaque amélioration apportée à la plateforme, à mesure qu'elle est livrée.

  1. · kamo-internal

    Reconstruire la glissière en une seule surface continue

    Les rangées de membres forment maintenant directement l'organe de département - pas d'imbrication de cartes sur carte - et les départements sont exécutés en saignées pleines de bandes adhésives, récupérant 30px de largeur de rangée et couper le chrome avant le premier élément de 228px à -170px. Préparer les dispositions - Supprimer la pile de cartes en carton: les rangées sont plates, séparées par la ligne de cheveu, pleine largeur. - Bande de département collante (encre sur une teinte primaire de 8%, jamais blanche sur la prime) portant le chevron divisant, un mètre de présence en direct, un chevron en ligne/total fraction et une bascule Select. Dope l'icône du groupe per-département identique. - Un fond au lieu de trois gradients empilés; un point de bord de défilement. - Le statut n'est porté par un point sur l'avatar plus un mot seulement lorsqu'il ajoute une information, remplaçant cinq codages par ligne de la même valeur. Comportement - Le clic de ligne ouvre le chat 1:1. Il n'a rien fait auparavant: MemberList never passé surClick, donc une ligne cliponsable de tous les styles était inerte. - Rétablir le filtre All/Online/Offline, qui n'existait qu'à l'intérieur de MemberList's en-tête - une branche que le panneau vivant n'a jamais rendu (showHeader-false), partant statusFiltre épinglé à "tout". Levé dans NavTopPanel à côté du champ de recherche. - Multi-select gains réels affordances: a Select toggle per band, ctrl/cmd-click, et toucher long-press; une barre de sélection s'élève à partir de la première sélection. - Un MeetingDialog hissé au lieu d'un monte par rangée, et son propre enfilé au lieu de chaque ligne d'entrée /api/user-info. Motion - MotionConfig reducedMotion-"user", plus les gardes à mouvement réduit sur le Les images clés CSS ne peuvent pas atteindre. - Entrée de section étagée, écailles de cadre avec un chevron rotatif, Reflux de la rangée de ressorts, nombres d'odomètres, pop non lu, glissières d'onglet directionnelles. Accessibilité - Sémantique de divulgation réelle, rangées ul/li, un bouton de rangée étiré avec ser Voilàs (non imbriqués) action, piège de mise au point avec restauration de la mise au point, navigation à clé fléchée, une région vivante polie pour la sélection, et des objectifs de 24px. - Les ouvre-paniers de NavTop étaient des boîtes non focalisables; ce sont des boutons maintenant. - Les lignes de conversation étaient des divs uniquement en cliquant n'ayant pas de chemin de clavier; il s'agissait d'éléments de liste avec des boutons réels et des noms accessibles. Theming - Nouveau jeton - sur le mot de fin d'année, donc le texte blanc sur un locataire léger primaire est fixable. - La palette de disponibilité partagée met fin à la dérive de la teinte NavTop/MemberItem, et les chevreuilles cessent de se référer --color-primaire-rgb, une variable jamais définie. - Les horodatages relatifs passent par Intl sur l'emplacement de l'application au lieu d'émettre L'anglais codé en caractères d'anglais, et les étiquettes de dernière activité cochent à nouveau via une horloge partagée de 30s.

  2. · SecurityService

    Détection et alerte sur la piste d'audit d'accès aux dossiers

    phi-access-log a accumulé des preuves que personne ne regarde. Cela satisfait «164.312(b) - la piste existe - et ne satisfait à rien de ce qui concerne 164.308 a) 1) ii) D), qui demande un réexamen, ou 164 400 414 dollars, dont l'horloge ne peut pas commencer jusqu'à ce que quelqu'un remarque. C'est ce qui remarque. Cinq détecteurs à l'heure fermée, par acteur: BULK-EXPORT 250 enregistrements distincts exportés/téléchargés/diffusés MASS-READ 200 enregistrements distincts lire 10 tentatives refusées (manifestations de refus - nom de refus) OFF-HOURS-ACCESS 20 enregistrements distincts en dehors de la semaine du TENANT PLATFORM-STAFF-ACCESS 1 - une entité couverte est informée indépendamment de la justification Les comptes sont des enregistrements DISTINCT, pas des événements: PhiAccessAuditor émet une ligne LIST par rangée de grille, donc un membre rechargeant la même page quarante fois est 2 000 événements et 50 personnes et "comment nombreuses personnes" est le nombre d'une violation une évaluation est faite. La raison d'être de chaque défaut est sur PhiDetectionSettings; Tous sont tous irrésistibles, parce qu'un détecteur qui s'enflamme constamment se suintent et un détecteur étouffé se lit toujours comme couverture. Les heures de congé sont jugées dans la zone du locataire par l'intermédiaire de son rapport OFF-HOURS-ACCESS règle (heures normales, l'écran de sécurité collecte déjà) retombant à Organisation.qu'un UTC-AFAC-Af. a Sydney locataire tous les matins ouvrés et ne piez jamais un New York. La livraison réutilise ce qui existe: EmailTemplateServiceClient /api/email/templates/envoyer avec la nouvelle clé canonique de PHI-ACCESS-ALERT, à la adresse l'orge déjà enregistrée dans les règles de l'org-suspicious-detection-rules .notification-émail. Un locataire qui n'a pas été configuré obtenez le journal de révision et Rien d'autre - envoyer une adresse devinée révélerait qu'un nom Un membre de la main-d'œuvre est soupçonné. Chaque découverte est enregistrée dans un cadre dédié Enregistreur PHI-DETECTION; seule la notification est étranglée (6 h par détecteur/locataire/ l'acteur, dans le Redis les règles d'anomalie de connexion déjà utilisées). Porte des alertes identifiants et comptages, jamais un enregistrement. Deux choix structurels délibérés: - Les agrégats passent par l'intermédiaire d'un EntityManager, et non de Spring Data. Printemps Les données valident une requête déclarée en la créant au référentiel bootstrap, donc a Erreur là-bas échoue dans le contexte de la start-up - et un service de sécurité qui ne le sera pas débute prend chaque connexion avec elle, comme le 2026-08-03. Ici, le pire cas est un balayer ce bûcher et récupérer l'heure suivante. Il supprime également ce colis de la EnableJpaRepositories remet entièrement question: pas de fève de dépôt, rien à Oublier. PhiDetectionQueryTest vérifie chaque cheminement de propriété de manière réfléchie depuis aucun test dans ce service ne peut démarrer un contexte. - Chaque requête est limitée par l'organisation id d'abord. phi-access-log's seul index utile est (ORGANISATION-ID, OCCURRED-AT); filtrant sur le temps seul respire un tableau unique qui ne grandit jamais. Schémature: cette tâche s'associeScheduler (4 threads, sched-), qui sept balaye Partage déjà. Il ne touche PAS la traduction Traficuur et le 3-Foncle/500-queu «Le pool d'Async a été observé saturé et ne se soumet à aucun exécuteur. Heureuse, cinq agrégats groupés par lot de locataires, pas d'entrées-sorties de réseau à l'intérieur de l'analyse, et une serrure de rappel si un lente saute la coche suivante plutôt que d'empiler derrière elle et affamant le pool qu'il partage. Aucune entité ou colonne n'a été ajoutée ou modifiée.

  3. · EmailService

    Variables de prévisualisation de PHI-ACCESS-ALERT

    Sans échantillonVariables armure l'admin Email Templates prévisualise tous les modèles à l'écart, de sorte que quiconque est invité à approuver le libellé d'une sûreté alerte voit une table vide. Les modèles d'échantillons d'identifiants et de comptages la même forme que l'alerte réelle porte, parce que l'alerte réelle ne porte jamais un enregistrement.

  4. · kamo-shared-library

    Modèle canonique PHI-ACCESS-ALERT

    Examen horaire par SecurityService des besoins de phi-access-log quelque part à envoyer ce qu'il trouve. Plutôt que d'inventer un canal, il utilise l'existant rail de courrier transactionnel, c'est-à-dire une clé canonique: absent de Un modèle ne peut jamais être ensemencé, jamais autocirassable, et tous les envoyer retourne un permanent 404 - un contrôle d'alerte qui ressemble à une couverture et n'apporte rien. Le modèle porte des identificateurs, des comptes et une fenêtre temporelle uniquement. Une détection artefact qui reproduit ce qu'il a détecté a déplacé le PHI dans une boîte de réception sans politique de rétention, il n'y a donc délibérément pas d'espace réservé pour un enregistrement. PhiAccessAtilerTemplatePortis d'élément d'essai et épingle les deux pannes silencieuses modes: un espace réservé que rien ne fournit rend comme une ficelle vide avec seulement un WARN, et le moteur de rendu ne s'échappe pas HTML, donc n'importe quoi atteignant le corps utilise le jumeau échappé. EmailService doit se redéployer avec ce partage-lib avant le début du service de sécurité l'envoi; jusqu'alors, l'envoi est attrapé et la découverte ne reste que review-log.

  5. · kamo-internal

    Rétroviseur du masque minimum nécessaire sur le client (164.502 b))

    SecurityService retient désormais les réponses de la forme personnalisée d'un appelant qui n'est pas le cessionnaire du plomb (et, dans un locataire de manutention, même d'un titulaire de droit 161). Ce masque est l'application, ce n'est pas le cas. Deux chemins le contournent encore: - LeadRealtimePublisher met un LeadDTO complet et non masqué sur security.leads.rt.orgId, une charge utile a été fournie à chaque abonné org, sans projection par destinataire possible. Jusqu'à ce que cet événement porte Identifiants uniquement et le client réfuse, app/lib/lead/leadFieldMask.ts est la seule chose entre les réponses d'un collègue et toutes les lacunes ouvertes dans le locataire. LeadViewClient gère désormais des charges utiles en temps réel qui y parviennent avant que l'un d'entre eux n'atteigne l'état. - Rendre : une forme non retenue et une arrivée jamais remplie identique, de sorte que la décision doit être recalculée, et non déduite. La forme personnalisée Le volet laisse tomber son émission d'édition lorsque les réponses sont restreintes - en économisant un blanc Forme PUT - sur les réponses réelles, que le serveur maintenant 403s de toute façon. Organization.handlesPhi est délivré dans la colonne existante. chemin (l'entité d'org l'entérille déjà; le schéma du zona et Organization.fromJSON allow-list étaient les chaînons manquants), et non une deuxième chaîne. Pas de nouvelle copie visible par l'utilisateur: l'étiquette explicative "restreinte" nécessite une clé dans le le dépôt de la traduction-dictionnaire et est délibérément laissé pour ce changement.

  6. · SecurityService

    Masquage minimal des réponses sur les formes de frappe tête (164.502 b))

    Le seul masque de champ de la plate-forme a été appliqué. par LeadController.getLeadById à un appelant qui n'est ni dieu ni cessionnaire et manque de VEW-LEAD-CONTACT-INFO-OTHERS (161). Il couvre le courrier électronique, les téléphones, la date de la naissance et les parties de la rue des adresses postales/propriété - et rien d'autre. customFormData a traversé directement, qui est le seul endroit sur la plate-forme a Le locataire de soins de santé posera en fait des questions de prise et de symptômes. LeadFieldMask est désormais propriétaire de la décision et de la projection: - n'importe quelle g: les réponses sur mesure roulent avec le masque de contact. Si vous ne voyez pas le courrier électronique principal, vous ne verrez peut-être pas ce qu'il a répondu. - S'occupe des locataires: les réponses sont refusées à quiconque n'est pas attribué à même avec droit 161. Ce droit est prévu, par son propre nom, de contacter information; une réponse aux symptômes n'est pas une information de contact. Le titre du formulaire s'en va Le «diabetes Intake Questionnaire» divulgue la condition en soi. L'entrée de formulaire survit à un masquage portant uniquement son id, de sorte que l'UI peut dire "restreinte" plutôt que de tirer un questionnaire vierge. Une gisure qui ne chargera pas traité comme une méthode de manipulation de PHI, correspondant à la posture de PhiTenantStatus à la tête des castes de PhiTenantStatus. PUT /leads/'id' gagne la porte d'écriture symétrique. L'éditeur de formulaire PUT dans son ensemble champ Carte des valeurs, donc sans elle un membre a montré un questionnaire blanc qui a pressé Save aurait remplacé les vraies réponses par le masque lu aurait devenir une suppression silencieuse. Principale utilité, pas de stéréotype et pas de dépôt: la décision est pure et l'appelant détient déjà l'orge.

  7. · kamo-internal

    Examen de l'audit de l'Institut de l'Institut de vérification des comptes de l'Institut de vérification des comptes de l'ex-examen et de la comptabilité par dossier

    La piste était en train d'être écrite et rien ne pouvait le lire. Voici la moitié de l'écran: un examen de l'accès à l'échelle de l'ordre dans le cadre de Settings and Security, et d'un "qui a eu accès à cette question" Enregistrement" dialogue ouvert à partir de la sonde elle-même, qui est la forme a 164,528 euros la demande de comptabilité arrive effectivement dans - une personne qui pose des questions sur son dossier, pas quelqu'un avec le temps de filtrer un journal global. Trois choses ici ne sont pas cosmétiques. Les Timestamps sont absolus et nomment toujours la zone dans laquelle ils ont été rendus, avec un Passage en un clic à l'UTC. Cette preuve est lue des mois plus tard par quelqu'un qui était non présent; une horloge murale nue lue d'une autre zone silencieusement égare un l'accès par heure, qui est la différence entre "pendant le déplacement" et "à 3 heures du matin". Les temps relatifs sont exclus, elles dérivent chaque fois que la page est ouverte. Les tentatives refusées et l'accès au personnel de la plate-forme sont indiqués sur la ligne (tint, règle de gauche, l'icône de tête) plutôt que de laisser dans une colonne l'oeil saute, parce qu'une conformité L'agent scanne des centaines de rangées pour celle qui ne devrait pas être là. Élément ordinaire Les lectures sont délibérément simples: décorer tout est la même chose que décorer Rien. Refusé de surclasser le personnel de la plate-forme lorsqu'une rangée est à la fois - le personnel de Kamo refusé est la ligne la plus intéressante que l'écran puisse montrer. L'exportation est fermée sur les aires de contrôle et les exportations de produits de la vue, et 503 de l'amont est placé sous la forme duquel "rien n'a été divulgué" plutôt que lissé en erreur générique. EXPORTEMENT est un type d'audit fermé en panne: le refus signifie la divulgation n'a pas pu être enregistrée, ce qui est un résultat correct dont l'agent a besoin à voir. Création de requêtes, formatage timestamp et classement en ligne en direct dans l'application/le dib ainsi vitest peut les atteindre; les composants sont assemblages. Un 403 ne tombe jamais à une grille vide - "personne n'a jamais touché ce record" est la mal que la situation la plus dangereuse répondre à cet écran peut donner.

  8. · kamo-internal

    Reconserver la page du membre sur Profil, raccourcir les étiquettes des onglets, ajouter des icônes d'onglet

    L'en-tête de la page des paramètres du membre devient "My 'memberLabel' Profile" (ou "Calendrier de l'étiquette de membre" pour un autre membre) et le lien nav-top devient Mon profil. Étiquettes de l'onglet raccourcissent - Boîte(s) masquait(s), téléphone, audio et vidéo, Autorisations, activité - tandis que le téléphone et les rôles aident les conseils à garder intitulés descriptifs via les nouveaux clés. Chaque onglet porte maintenant une icône dans la barre d'onglets; tabinter-derm ids sont inchangés, de liens aussi profonds.

  9. · kamo-internal

    Tonalité glacé - blanchi à la couleur à noirci

    Un fond par membreTone ui-préférence (0 blanc / 50 couleurs entières / 100 noir) rendu en tant que lavage au-dessus de la grille de lisibilité dans les deux consoles La couche de diaporama et l'étape WYSIWYG de l'éditeur. Slider vit dans la scène chrome avec prévisualisation en direct, clou de centre et maintien en cours de libération.

  10. · kamo-internal

    Les cartes de lanceur et le héros utilisent la couleur de la marque de l'orge au lieu des accents par module

    Les cartes d'option du pavé-toi, la goudron de dragage, et le héros du premier or maintenant prendre leur accent de var(--color-primaire) (l'ensemble dynamique de l'orge la couleur du thème) plutôt que la carte de la famille multicolore fixe.

  11. · kamo-internal

    Mode god de rupture - mode de raison prompte, compte à rebours, indicateur de position debout

    Le mode Dieu n'avait pas d'UI du tout en kimo-interne: un localStorage booléen qu'un mont effet reflété dans -, réaffirmé sur chaque nouvel onglet pour toujours. Cela a fait de la le navigateur de l'autorité sur la question de savoir si le personnel de la plate-forme était élevé et a procédé à une élévation quelque chose dans lequel vous pourriez être sans jamais décider d'être. - GodModeJustificationDialog prompte pour la raison AVANT l'élévation. Une raison collecté par la suite est une raison écrite pour s'adapter à ce qui a déjà été fait. Le exemplaire indique clairement ce que l'opérateur est sur le point de voir et que son nom est croît. - GodModeIndicator est une barre inférieure pleine largeur plus un cadre rouge autour de l'ensemble Procès-garde, avec un compte à rebours en direct et "Fin maintenant". Quelqu'un qui oublie qu'il est dans le mode dieu est le scénario exact que le contrôle existe pour prévenir, donc ce n'est pas un badge subtil - mais c'est des événements de pointage: aucun à l'extérieur du bar et s'assied à l'extérieur le flux de mise en page, de sorte qu'il n'intercepte jamais un clic ou reflue un écran. - Les deux sont montés une fois dans la mise en page des racines, à côté d'AutomaticLogoff, donc le un indicateur est présent partout où l'opérateur finit plutôt que sur les écrans Quelqu'un s'est souvenu. Ne rend rien à moins que la séance ne soit dieu-ÉliGIBLE. - Le serveur est propriétaire de l'état. app/lib/godMode contient un seul magasin coalescé; Le client ne lit jamais que l'empiler SecurityService estampillé et ne peut jamais s'étendre setIsGodMode est parti - élever prend une justification, donc il ne peut pas être un setter. - Le scrutin de statut est le point clair durable: GET/session/moule-dieux est le lieu où SecurityService écrit une élévation écoulée à partir de Redis pour les services qui lire la session directement. usePlatformAdminGuard attend maintenant le statut de dieu pour les sessions éligibles à Dieu. Accès utilisé pour être lisible de manière synchrone à partir de localStorage; sans attendre un l'opérateur avec une fenêtre ouverte serait rebondi sur/des réglages dans l'intervalle. Les chaînes sont en z (poussées en premier, selon l'ordre cloné de la construction). npx vitest run: 329 passes (32 fichiers), 17 d'entre eux neufs. npx tsc --noEmit: propre.

  12. · SecurityService

    Lire la piste d'accès de l'Institut de contrôle des services de l'accès à l'Institut d'assurance maladie et de l'examen de la comptabilité et des activités

    La piste a été écrite pendant un certain temps et rien ne pouvait le lire, qui a laissé deux obligations non garanties: comptabilisation des informations comptables d'un casier judiciaire (164.528) et examen périodique des activités du système d'information (164.308 a) 1) ii) D)). Les deux sont des questions. Cela ajoute la surface de requête. L'autorisation est la caractéristique, pas la grille. L'organisation est tirée de la session et de nulle part ailleurs - il n'y a délibérément pas de paramètre orgId sur aucun paramètre PhiAuditQueryService est un point d'étranglement unique qui ajoute le locataire prédicat avant même consultation du filtre. Quatre méthodes d'interrogation de ses frères et sœurs : ont été quatre chances de l'oublier. Le cadrage est une clause du fait que d'une clause plutôt que d'une post-filtre, parce que le filtrage d'une page retournée laisserait totalElements le comptage des lignes que l'appelant peut ne pas voir. Le côté lecture obtient sa propre interface de dépôt. Le PhiAccessLogRepository partagé les chercheurs sont délibérément des tenants contre-internés - corrects pour un outil de plate-forme, une divulgation si c'est remis à un écran client, de sorte que l'écran obtient une interface dont seule l'entrée point prend une Spécification. Il vit sous la direction de com.kamo.SecurityService, qui L'entrée de l'entrée JpaRepositories existante couvre déjà, de sorte qu'aucun changement de balayage n'est nécessaire. Et rien ne peut être oublié. Les droits sont VEW-ACCESS-LOGS (29) et EXPORT-ACCESS-LOGS (32) et la paire qui Porte déjà le journal d'authentification, donc quiconque administre la sécurité aujourd'hui peut l'utiliser au premier jour. Un nouveau droit id aurait expédié l'écran mort: il a besoin d'un KamoInitializer et d'une subvention avant qu'un membre n'en détienne une. La lecture de la piste est elle-même enregistrée, sous la forme d'un rapport/recherche pour une lecture et RAPPORT/EXPORTATION pour une copie, y compris les tentatives refusées. Les critères de recherche sont les suivants: non enregistré - un filtre transporte un membre et enregistre des ids, et une traînée qui stocke Ce qui a été recherché accumule les identifiants qu'il existe à protéger. Tout est borné: pinces de page à 200, un bouchon d'exportation à 10 000 rangées. Un palpeur de six ans est de millions de rangées et la couche de capture écrit une ligne par rangée de grille par charge, de sorte qu'une taille non aclastifiée est un OOM joidrable plutôt qu'un théorique. Les Timestamps partent en tant qu'instants explicites de l'UTC. La colonne est une horloge murale sans zone, Et cette preuve est lue des mois plus tard par quelqu'un qui n'était pas là.

  13. · kamo-internal

    Écran d'inscription MFA et contrôle de limite PHI en mode dieu

    Deux surfaces de réglages pour les backends qui n'en avaient pas. Inscription du MFA (paramètres - mon profil - Sécurité de l'information, soi-même seulement). Les critères d'évaluation/api/sécurité/mfa de SecurityService ont été complets et entièrement. Inaccessibilité, il existait donc un AMF et personne sur la plate-forme ne pouvait l'exonérer. Le l'onglet est auto-auto-unique parce que ces points d'extrémité résolvent l'utilisateur à partir du propre de l'appelant la session et ne prendre aucun paramètre utilisateur - un administrateur ouvrant le profil de quelqu'un d'autre seraient en train d'inscrire leur propre authentificateur sur cet écran. Le code QR utilise qrcode.react, déjà une dépendance; aucun paquet n'a été ajouté. Le secret est montré à côté d'elle, en raison d'une application d'authentification sur la même dispositif car le navigateur ne peut pas scanner l'écran qu'il recouvre. Deux chemins de défaillance obtiennent une manipulation de première classe plutôt qu'une erreur générique. A 409 signifie qu'un facteur confirmé existe déjà et dit qu'il existe, avec le remède (un administrateur reset) - en disant à l'utilisateur de réessayer de le renvoyer dans le une action qui ne peut réussir. Un code de confirmation incorrecte maintient l'attente inscription: le secret est affiché une fois, donc le rejeter signifierait supprimer l'entrée et la rescanisation de l'authentificateur, et l'inscription en attente du serveur serait toujours là, donc l'essai reviendrait 409 et les mettrait en place. Les codes de récupération sont indiqués une fois et ne peuvent pas être réédités. Le dialogue ne peut pas être rejetés par évasion, toile de fond ou par un bouton fermé; les codes ont été copiés ou téléchargés ET l'avertissement a été reconnu. Les deux sont les deux requis: une case à cocher seule est cliquée de manière réflexive, et un presse-papiers seul est écrasé par l'exemplaire suivant - et rien ne semble pas correct jusqu'au jour où l'utilisateur Perd leur téléphone. Limites de l'Institut PHI (réglages, sécurité et données de santé, ne s'applique qu'à la divinité). L'onglet est visibles par les opérateurs éligibles à la divinité et la commande à l'intérieur nécessite un mode dieu en fait, ce que SecurityService vérifie à nouveau; l'éligibilité seule n'est pas activation. Il ne bascule jamais sans la première liste des modules qui cessent de fonctionner - cette liste provient du serveur, dérivée de PhiModule par PhiTenantGuard, donc il ne peut pas dériver de ce qui est imposé. A 503 est représenté sous la forme d'un revêtement. "la modification n'a pas été appliquée parce qu'elle n'a pas pu être enregistrée", car il s'agit d'une Ce qui s'est passé. La logique de décision vit dans l'application/le dib/la sécurité afin que la plus forte puisse l'atteindre; les composants tenir le rendu uniquement. Vérifié: npx vitest run 329 tests, 32 fichiers, tous passants (43 d'entre eux neufs). npx tsc --noEmit ne signale que trois erreurs dans un fichier non suivi d'une autre session dans cet arbre, dans aucun des fichiers ici.

  14. · SecurityService

    Point d'entrée pour lire et déplacer la frontière HIPAA d'une organisation

    Organization.handlesPhi a existé comme une colonne sans aucun moyen de la fixer. PhiTenantGuard a imposé un drapeau que personne ne pouvait s'allumer. C'est le la moitié manquante: GET/PUT /api/sécurité/phi/locataire. L'autorité est l'éligibilité de Dieu et un dieu actifModeActive bascule, jamais un. L'éligibilité seule est ce qui a laissé les portes de la plate-forme mort jusqu'en 2026-07-22; Ici, il permettrait à tout opérateur éligible à l'abandon des modules d'un locataire vivant avec un clic non remarquable. L'objectif est toujours l'ordre de session de l'appelant Il n'y a pas de paramètre d'organisationId, de sorte qu'aucune demande élaborée ne peut parvenir à une demande locataire l'appelant n'est pas déjà à l'intérieur. phiEffectiveDate est estampillé en première intention et jamais réécrit, y compris sur un désactive/réactive par la suite. Il donne l'application des guichets d'évaluation et de rétention des cas, L'avancement de l'avancement diminuerait silencieusement la période considérée, et un audit la date à laquelle la demande peut avancer n'est pas une preuve. La ligne d'audit est écrite AVANT les mouvements du drapeau, et CONFIGURE échoue, donc a une trace qui ne peut être écrite refuse le changement et retourne 503 plutôt que en laissant une frontière qui se déplaçait sans enregistrement de quand. Les tentatives rejetées sont enregistrés également. Chaque ligne porte des identifiants et la transition seulement, jamais contenu. les modules bloqués sont dérivés de PhiModule par PhiTenantGuard plutôt que listé, de sorte que l'avertissement montre que l'interface utilisateur ne peut pas dériver de ce que le garde applique. Pas de nouveau paquet de référentiel: OrganizationRepository est déjà dans ce service «EnableJpaRepositories liste, donc il n'y a rien à ajouter à côté de cette fève. Vérifié: 298 essais, 1 erreur EntityManager NPE, qui est préexistant (base à 7968a21: 281 tests, identique 1 erreur). RepositoryScanCoverageTest et et les deux Passs.

  15. · kamo-internal

    Reconstruire le formulaire de guidage sous forme de flux guidé, ajouter un aperçu de sortie

    L'onglet détaillé était une pile plate de boîtes esquissées qui donnait à chaque champ le même Le poids, donc rien n'a signalé quels intrants changent réellement ce que le client voit. C'est Maintenant, les quatre décisions sont faites une citation - à quoi sert, ce qui est en train d'être vendu, comment il est ajusté, ce que le client lit - chacun avec une ligne pour une ligne qu'il Les choses sont importantes, et le total en cours se trouve dans un rail collant plutôt que d'être enterré au fond. Le mouvement porte un sens plutôt que la décoration: les sections arrivent en séquence, a le champ conditionnel s'élargit à partir du contrôle qui l'a révélé, la zone de tarification croisées fontes lorsque sa forme change, et un total compte à sa nouvelle valeur, donc un mal trompé Le prix à l'unité est remarqué au lieu d'être absorbé silencieusement. Tout cela respecte préfère les mouvements réduits. La nouvelle action de prévisualisation rend le document fini - l'en-tête, les options ou le tableau, totalise, termes - et l'imprime seul. Il projette l'État de l'éditeur URRENANT, et non le Sauvegarder l'enregistrement, parce que le moment où vous avez besoin de voir la citation finie est en décidant s'il l'envoie. La marque vient de la résolution du serveur, donc l'en-tête est celui que le client obtient, et l'option arithmétique est importée du éditeur plutôt que réimplémenté.

  16. · kamo-shared-library

    Vocabulaire de l'audit pour une modification du périmètre de mise en conformité lui-même

    Ajoute PhiResourceType.ORGANISATION et PhiAccessKind.CONFIGURE pour que le tour Organisation.handlesPhi on or off peut être enregistrée comme suit. Chaque type de ressource existant nomme le dossier d'une personne. Dépôt d'un changement de la La posture de conformité du locataire sous l'un d'entre eux mettrait un mensonge dans le numéro 164.528 la comptabilisation des informations, et "lorsquand ce locataire est-il devenu une entité couverte" l'associé d'entreprise" est la question à laquelle le reste de la piste est classée il a besoin de sa propre forme de rangée, pas d'emprunt. CONFIGURE échoue pour une raison différente de celle des espèces en vrac: rien n'est , le refus de l'opérateur coûte à nouveau, tandis qu'une frontière qui a bougé sans enregistrement de quand l'état est une évaluation de 164 802 dollars ne peut pas être reconstruite. Pas d'implication de schéma. phi-access-log.RESOURCE-TYPE et ACCESS-KIND sont simples VARCHARs créés par PhiAccessLogTableMigration sans liste blanche d'enum CHECK, donc ni l'un ni l'autre des besoins constants d'un KamoInitializer avant qu'il puisse être inséré, et non entité ou «colonne est touchée. Vérifié sans changement exhaustif sur l'un ou l'autre enum existe dans n'importe quel service.

  17. · SecurityService

    Servir l'avis du client au personnel pour l'aperçu

    GET /-uid-/preview retourne le même PublicQuoteView le lien de partage, à partir du la même résolution de citation, de sorte qu'un en-tête en avant en prévisualisé ne peut pas différer d'un envoi l'un. Il ne frappe pas délibérément un jeton, ne compte pas une vue ou enregistrer un événement - regarde à votre propre projet n'est pas l'engagement du client, et le laisser dans la piste d'activité rendrait la vue contre-in utilisable comme signal.

  18. · ConversionService

    Scanner les téléchargements pour les logiciels malveillants à l'adresse ingest (A164.308(a)(5)(ii)(B))

    Le coffre-fort de document a accepté des téléchargements arbitraires sans scanner de logiciels malveillants n'importe où sur la plate-forme, et c'est multi-locataire - un fichier un org télécharges est ouvert par les utilisateurs d'une autre organisation par l'intermédiaire du téléspectateur, de l'éditeur WOPI et de l'éditeur liant. ClamAV sur INSTREAM, parlé directement à la palourde (pas de bibliothèque cliente; protocol est un socket et un préfixe de longueur). La porte s'enfuit ImagingUploadContrôleur sur/upload et /templates/upload, avant le membre recherche et avant qu'aucun octet n'atteigne MinIO et balayage après le stockage quitte le objet récupérable pour la largeur de la course. Le comportement non joignable par scanner est FAIL OPEN par défaut, et il s'agit d'une décision plutôt qu'un accident. la paline n'est pas encore déployée: c'est l'application la moitié, et le déploiement est un acte opérationnel distinct (KlusterServices) auto-applice en push et n'est pas ce changement de toucher). Expédition clôturée en panne prendrait le document à la téléchargement pour chaque locataire dès que l'image roule, sans mise en scène dans laquelle cela aurait été pris. Ne pas ouvrir ici n'est pas "pas de protection", c'est le statu quo des dernières années, maintenant enregistré à ERROR chaque fois que ça arrive. Chaque bouton - y compris la fermeture en panne - vit dans kamowsconversion-config, donc le serrage une fois la palpée est stable est un sac à découvert éditer et redémarrer, pas une version. Un disjoncteur fixe le coût d'un scanner absent: après 3 consécutifs dés les défaillances du garde-vie stope la numérotation pour 60, de sorte que les téléchargements ne paient pas chacun un connecter la temporisation pour un contrôle qui est effectivement éteint. Sur la détection: 422 nommant la signature (et non un réessayer 5xx n'aidera pas), les octets sont conservés dans un seau de quarantaine dédié plutôt que largués, et le rejet est enregistré par PhiAccessRecorder. La ligne d'audit porte identifiants uniquement; le nom du fichier téléchargé reste hors de celui-ci parce que les noms de fichier ici contiennent régulièrement des noms d'emprunteurs. PhiAccessKind n'a pas de membre UPLOAD et ajoute l'un modifierait une contrainte de la colonne « énumérée » (STRING) dans la colonne partagée. bibliothèque, donc DOWNLOAD - permit-false est utilisé et la raison en est documentée à le site d'appel. Le PHI Trail de ce service est également passant à l'auteur durable de phi-access-log. L'entrée correspondante com.kamo.z.shared.phi.audit est dans le même engagement EnableJpaRepositories list, et PhiAuditRepositoryScanTest échoue dans la construction si les deux dérives toujours - cet appariement est ce qui a pris chaque connexion sur 2026-08-03. Retro-scan (POST et documents de balayage déjà dans la voûte, plateau-lâtre et paged. Il signale et préserve, ne bloque jamais ou supprime: la réalisation d'un objet stocké nécessite une quarantaine persistante drapeau, c'est-à-dire une colonne de bibliothèque partagée appliquée par un initialiseur à manche tandis que L'infrastructure de services est construite contre les principaux, et la suppression d'un faux positif détruirait un registre du locataire sans recouvrement. Essais: 36 nouveaux. Préexistant au-delà de 1080 échoue toujours sur un arbre propre; intact. Non couvert, délibérément: RecordingIngestController (Astérisque intérieur-auth push) et WOPI PutFile de DocsService sont les deuxièmes chemins d'ingestation qui veulent la même chose gate, mais le scanner vit dans ce service et WOPI n'a pas de jeton à attribuer une ligne d'audit à. Tous deux sont des suivis et non des oublis.

  19. · SecurityService

    Mode dieu en verre de rupture et justification - boîte de temps de 30 minutes

    Le mode Dieu s'est activé silencieusement et a duré aussi longtemps que la session. C'est le l'examen de la sécurité d'une entité couverte est le plus fort, car "votre le personnel peut lire nos données pour les patients" est toujours demandé et une situation injustifiée, non liée l'élévation n'a pas de réponse. - POST/api/sûreté/session/mode de Dieu doit désormais être dactylographié pour étape UP. Passage de DOWN n'est jamais le cas - un contrôle qui porte la sécurité d'action est un un contrôle qui maintient les opérateurs élevés. - Les deux bords sont enregistrés par PhiAccessRecorder avec justification et PlateformeStaff(vrai). Identifiants uniquement; la justification est le propre de l'opérateur des mots sur pourquoi, jamais rien qu'ils ont continué à lire. - La fenêtre dure 30 minutes et la NON-SLIDING. L'expiration est un instant absolu en l'organe de session, et non un TTL, de sorte que le rafraîchissement de la session glissante ne peut pas l'étendre, et en restituant à partir d'un deuxième onglet renvoie l'expiration initiale plutôt que Acheter une autre fenêtre. - KSessionService.getSession masque un drapeau écoulé, donc tous les 10 dollars existants Les portes honorent la boîte à temps sans changer. GET /session/god-mode écrit le clair à Redis (le faire à l'intérieur getSession réapparaîtrait) et c'est ce que l'UI interroge pour le compte à rebours. Décrochent délibérément OUVERT sur l'écriture de l'audit: le mode dieu est la manière dont les corrections de soutien la production, et le refus d'une élévation parce que phi-access-log clignote est pire que la rangée l'enregistreur s'est déjà connecté haut et fort. Aucune entité ou «colonnier n'a changé. PhiResourceType ne prend pas de constante non plus - c'est «Donnée (STRING) avec une liste blanche de la valeur CREATE TABLE que ddl-auto:update ne s'élargit jamais, de sorte qu'une nouvelle constante échouerait à chaque encart jusqu'à KamoInitializer était géré à la main. L'élévation est enregistrée par rapport à l'exploitant lui-même. enregistrer avec un préfixe en dollars à la place.

  20. · kamo-internal

    Recommander les onglets de l'intendance; plier les identificateurs dans un pipeline

    L'ordre des onglets est maintenant pipeline, documents, souscription, prix, capital et risque, Gouvernance, Ingestion, Catalogue et Pipeline deviennent l'écran d'atterrissage par défaut. L'onglet identificateurs autonomes a disparu; sa recherche vit dans le Pipeline barre d'outils en tant que popover de recherche de prêts: recherche par prêt UID (par défaut) ou résoudre tout identificateur externe (MERS MIN, case de l'agence, enveloppe de la signature électronique, etc.) à son prêt, avec une carte de résultat riche, le grand livre d'identification du prêt, l'historique du cycle de vie, et un clic ouvert / show-in-pipeline.

  21. · kamo-signer-monorepo

    Comparer les options sur la page de citations publiques

    Les options sont considérées comme des cartes sélectionnables plutôt que des lignes, car ce sont des choix. et non d'ajouts. Le total de la période est le titre; l'équivalent mensuel est à côté de lui comme le chiffre qui rend différents termes de facturation comparable, Et un badge d'épargne n'apparaît que lorsque la différence vaut la peine d'être renommée. Le tableau plat et le bloc total combiné sont tous deux supprimés lorsque les options sont présents - un total général par l'ensemble des alternatives mutuellement exclusives est un nombre Personne ne peut payer. Les règles d'impression maintiennent les cartes côte à côte, de sorte qu'un devis imprimé est toujours comparable.

  22. · kamo-internal

    Citations multi-options de l'auteur de l'éditeur

    Une citation est soit une feuille de prix forfaitaire, soit un ensemble d'alternatives, de sorte que l'éditeur offre un mode basculement plutôt que de laisser les deux exister à la fois - envoyer les deux montrerait au client un prix qu'il ne peut pas acheter. Passage aux options les lignes existantes dans la première option au lieu de rejeter le travail de type. Chaque option comprend ses propres rubriques, la durée de facturation, la durée de l'engagement, la réduction et les frais d'établissement, avec un aperçu en direct du total de la période, équivalent mensuel, la valeur des contrats et les économies réalisées par rapport au niveau de référence. Les miroirs de prévisualisation QuoteOptionTotals; le serveur recalcule sur sauvegarde et ses chiffres gagnent. Le siège compte sur la vie sur la citation, donc 40 à 60 récupères chaque option à la fois.

  23. · SecurityService

    Accepter une option sur le critère de citation public

    Les cotations multi-options ne peuvent pas être acceptées à l'aveugle - la demande porte maintenant l'option choisie et le service refuse l'acceptation sans une.

  24. · kamo-shared-library

    Cotations multi-options avec totaux de comparaison par option

    Une citation peut maintenant présenter plusieurs moyens mutuellement exclusifs d'acheter - tous les mois, anneau, trois ans - au lieu de forcer trois documents distincts qui dérivent à l'écart du moment où le nombre de sièges change. - QuoteOption possède ses propres rubriques et ses totaux; les frères et sœurs ne sont jamais additionnés. - QuoteOptionTotals normalise chaque option à un équivalent mensuel, qui est la seule base sur laquelle des termes de facturation différents peuvent être comparés, plus une contracter le total et les économies par rapport à la ligne de base marquée. - Durée de facturation et durée de l'engagement de séjour : payer annuellement n'est pas le même engagement qu'un mandat de trois ans facturé chaque année. - Quote.quantity est un conducteur partagé; une ligne qui opte avec les utilisationsQuoteQuantity reprices dans toutes les options à la fois. CitationTotals l'honore à l'identique sur des feuilles plates, de sorte qu'une ligne ne peut pas payer différemment à l'intérieur et à l'extérieur d'une option. - L'acceptation d'un devis multi-options nécessite de nommer l'option; les frères et sœurs sont fermés comme NON SÉLÉTÉ et acceptéOptionUid consigne le choix. QuoteTotalsTest 15, QuoteOptionTotalsTest 11, QuoteShareTokenTest 9 et tous les laissez-passer.

  25. · kamo-internal

    Couverture des livraisons, affichage des tarifs, panneaux de dépôt volumineux

    Remplace les jetons à venir finals (Hedge et couverture, authentification de la tarification, Grand dépôt) avec des panneaux vivants câblés aux nouveaux proxateurs de l'intendance.

  26. · SecurityService

    Faux indirects pour la couverture, l'approbation des prix, le dépôt à gros dépôt

    Véhicule opérateur-sampilléoptère, rayé de session, propriété fermée à défaut (pas d'orge croisée) l'oracle de l'existence). Nouveaux critères d'évaluation à l'inclusion dans le cliquet à point d'extrémité non authentifié.

  27. · kamo-shared-library

    WORM Agence de mise en relation des tarifs (mlos-pricing-signoff)

    APPROUVRE/REJET de jugement sur un résultat à payer pour les prix gelés. «PreUpdate lancer (une inversion est une nouvelle ligne). Tableau 4 index (org, run, résultat, prêt) appliqué à prod CockroachDB via KamoInitializer.

  28. · kamo-internal

    Console d'intendance ronde 2 - files d'exception, gouvernance, MERS recon

    - Capital et sous-écriture : StewardExceptionQueue (panneau partagé) câblé au réel terminal des tâches d'intendance - exceptions de verrouillage - et exceptions à la directive - états vides de sens honnêtes. - Gouvernance : Étalon de fiabilité (prévisé par segment) et PullThroughFunnelPanel (distribution de stade réel, étiqueté un instantané pas une cohorte conversion). a remplacé les deux puces à venir. - Documents : Comité de rapprochement du MERS sur la réalité interne, c'est-à-dire la refonte du "commissaire intérieur". Critères d'évaluation réels tout au long de l'échelle; copie en clair (coeur i18n); tsc -noEmit propre.

  29. · SecurityService

    Relais de passerelle pour les tâches d'intendance, étalonnage/amant, rapprochement MERS

    Relais GET estampillés par un serveur org, éligibles à Dieu: MlosDocOrchestration (filtre en orgorge fermé en échec, paquet non détenu lignes - re-ré-dermérisation du recalage). Les quatre lignes de base dans le cliquet à extrémité non gardée (porte() déléguée, comme leurs frères et sœurs).

  30. · kamo-internal

    Construire les fonctionnalités de la console de steward hypothécaire à venir

    Remplacement des stubs par des panneaux adossés à des points d'extrémité réels et fixe un bug d'écriture morte: - Souscription : Comité de calcul du revenu (qualification : DTI/PITIA/réserves/LTV) - Pilule AUS) et Fraud/4506-C panel (fermeture-orière: place/list/vendance/événements pour FRAUD - TAX-TRANSCRIPT). - Prix : Scénario comparer (passer côte à côte) et Best-Execution expliqueur (base-ajustements-final walk-runs-up/in serviable costamente-rémunérations-financières-rénalités-réacteurs-finaux-remorquage-fina-plans-courriers-courriers-courriers/ a supprimé la puce retournée Reverse-LLPA (déjà dans le tiroir de réglage). - Documents : Raccordement de l'éliminabilité en direct (les facteurs d'escroc à l'escoraticence des prêts pipelines, agrégats déliés/blocage/wavois; suppressions de la triche de travail puce (déjà expédiée). - Capital : FIX les marchés de capitaux Prochaine ligne - sa liste d'autorisations POST détenue uniquement Un chemin, donc le Loan Sale Desk / lock-lifecycle écrit 404'd. Remplacé l'ensemble de cordes exactes avec des motifs de RegExp ancrés énurant le 9 réel routes (vérifiées 1:1 vs le contrôleur), toujours fermés sur n'importe quoi d'autre. - Bulletin : une carte "Promotir en tant que bulletin" de révision (docType-BULLETIN) avec produit/mode/paramètres/paramètres éditables, affichage sur le nouveau relais. La nouvelle copie de l'UI est des chaînes simples (chaleur de suivi i18n); tsc --noEmit propre.

Votre univers vous attend.

Commencez gratuitement en quelques minutes. Ajoutez des produits quand vous êtes prêt. Pas de migration, pas de nouvelles connexions.

Gratuit pour toujours — aucune carte de crédit requise