Aller au contenu
KAMOUniverse

Changelog

Ce qui est nouveau.

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

  1. · SecurityService

    Démarrer une session de codeur dans le cloud, et dire quels terminaux sont

    dépôt comme cwd) et répond `cloud: true`; la machine construit le une session cloud peut commencer à partir de. La liste du terminal porte les `cloud` marque à travers, pour le nuage sur l'icône de la fenêtre.

  2. · KlusterServices

    Démarrer une session de codeur dans le cloud à partir d'une caisse locale

    dépôt. Le paquet est forcé parce que nos télécommandes sont Forgejo, pas GitHub, et le point est la caisse sur ce disque. Non --mode de permission (le CLI laisse tomber le contournementPermissions pour une session en nuage) et non --session-id ou de réception (le cloud nomme la session et ne conserve aucune transcription ici). La session tmux est marquée @kamo cloud donc le terminal listing des rapports `cloud: true` et la console peut placer un nuage sur l'icône de la fenêtre après ~/Kamo/Projects, dernièrement travaillé en premier, pour le menu à choisir.

  3. · kamo-internal

    Les pièces jointes sont au-dessus du corps, comme les fichiers eux-mêmes

    Un courriel dont le seul contenu était un PDF n'avait aucun moyen d'ouvrir ou de télécharger le fichier: le trombone montré sur la ligne de liste, et le panneau de lecture montré Rien. EmailService avait marqué le PDF en ligne parce que l'application Gmail a donné c'est un Content-ID (fixé là dans 0de0823); le panneau a baissé chaque ligne partie sans demander si le corps effectivement peint. La règle vit maintenant en un seul endroit, listéAttachments: une partie reste hors de la liste seulement lorsque le corps HTML fait référence à sa cid:. Le panneau de lecture, le calendrier de tête et la transmission de tous l'utiliser, donc un message transmis non plus silencieusement dépose ce fichier non plus. Il ne fait pas confiance au serveur drapeau, quels corps mis en cache dans le navigateur portent encore avant la correction. Le désinfectant résout cid: références avec la même normalisation, donc Tout ce qui reste hors de la liste est toujours quelque chose que le corps montre. L'étagère de fixation, première chose sous l'en-tête: - chaque fichier est une carte montrant le fichier lui-même : page un d'un PDF (avec sa page compte), la photo, ou le glyphe du type sur papier blanc - un clic prévisualise dans un visionneur plein écran: PDF via pdf.js avec zoom et un compteur de page, images adaptées à l'écran avec clic-à-zoom, vidéo et les lecteurs audio, texte, et CSV/TSV comme une table; les touches fléchées et un déplacement de films entre les fichiers - les téléchargements passent par fetch, portant l'en-tête de session par tab un nu <a download> n'a jamais pu, avec un anneau de progression et une tique dessinée - "Téléchargez tout" remet chaque fichier comme un .zip écrit dans le navigateur - clavier-premier, mouvement réduit honoré, hache propre; deux cartes par rangée dans une vitre étroite

  4. · kamo-shared-library

    Arive comme un second LOS externe, et une couture fournisseur qui est réel

    Arive n'est accessible qu'à travers son application Zapier, donc la connexion est Zapier dans les deux directions: Kamo poste commandes (créer prêt, mettre à jour prêt étape, mettre à jour le plomb, convertir le plomb) à par-marché Crochets, et Arive les déclencheurs postent vers un jeton d'arrivée par connexion. L'adaptateur, champ carter (trois noms d'Arive, lu à partir de l'application live), plan de scène, chiffré les secrets et le journal d'activité vivent dans les intégrations. arive / integrations.los. LeadService n'exécute plus le code MeridianLink pour chaque lien. Poussières aller à le lien propre LosProviderAdapter; un fournisseur sans un est sauté et enregistré au lieu de recevoir une enveloppe SOAP. Pour les applications entrantes, fournisseur neutre LosLeadPatch (contact, adresse postale, faits hypothécaires, statut) et l'historique des attributs au fournisseur. Le résolveur recherche le membre des références par le fournisseur de la connexion, et une économie de marché avec un inconnu La valeur MLOS est un 400 au lieu d'un NO MLOS silencieux. Les colonnes de cette carte existent déjà dans Yugabyte (LosAriveSchemaMigration les déclarations ont été appliquées avant cette poussée).

  5. · kamo-internal

    Un écran de lancement conçu, dans la marque de l'organisation

    Ouverture d'un ordinateur a montré une ligne de texte simple sur une page blanche, écrit directement dans l'onglet avec `document.body.textContenu`. Pendant jusqu'à 90 secondes — un CV lit toute l'image de la mémoire de l'invité Retirez un volume reproduit — cette phrase était l'expérience entière, et il se lit comme un navigateur erreur plutôt que comme le propre logiciel du membre. Une page qui semble cassée est une personne proche à quarante secondes, qui n'annule rien. C'est un écran maintenant, construit au canon de cette application plutôt que inventé: le lavage primaire/secondaire radial sur blanc, une carte blanche au rayon 14 avec --elev-hover, le gradient de héros 90deg comme sa règle, --maison de secours, mode lumière. Le logo de l'organisation et sa vie **************** l'anneau comptant jusqu'à l'estimation que le SERVER a donné plutôt qu'une estimation, et les lavages ambiants que préfère-réduit-motion s'éteint entièrement. Un échec a maintenant une issue. Il montre la phrase propre du serveur — "aucun noeud n'a actuellement 8 GiB free" vaut la peine d'être lu — et un essai de nouveau qui lance le lancement dans le même onglet. LE TAB PERSONNE L'ICON DE L'ORGANISATION, qui est l'autre moitié de celui-ci. Navigation vers la passerelle remet tout le document à Guacamole, dont le propre `<lien rel="icon" href="images/logo-64.png">` alors possède l'onglet : un membre ouvrant l'ordinateur de leur entreprise l'a regardé se transformer en logo de Guacamole. Les session est encadrée dans cette page à la place, de sorte que l'icône et le titre restent l'org's et la remise est un fade plutôt qu'un flash blanc. Guacamole n'envoie ni X-Frame-Options ni frame-ancestors politique — cochée, non supposée — et si le cadre ne peut pas être créé, l'onglet navigue comme toujours a fait, parce qu'un onglet plus beau ne vaut pas qu'un membre n'atteigne pas son ordinateur. Les icônes ne sont pas reconstruites à partir d'un chemin: elles sont les éléments `<link>` DynamicMetaLoader a déjà résolu pour cette organisation, cloné. Re-deriving quel des deux répertoires de favicon un org utilise serait une deuxième réponse qui peut dériver de la première. Chaque chaîne est une clé, poussée au dictionnaire d'abord. La copie est injectée plutôt que regardée. la page est écrite dans une autre fenêtre par une fonction simple, où "useTranslations" ne peut pas fonctionner — et il n'y a délibérément pas de défaut en anglais, donc un appelant qui oublie ne compile pas au lieu de l'expédition de l'anglais à chaque local. Treize tests, y compris qu'un message serveur est échappé plutôt que écrit comme balisage.

  6. · kamo-login

    Pointer un membre qui a tapé son courriel de travail sur son courriel personnel

    Les réinitialisations de mots de passe oubliés vont à l'adresse du compte utilisateur, généralement un personnel, mais les membres tapent l'adresse de travail leur a donné. SecurityService reconnaît maintenant une adresse de travail et des réponses 409 WORK EMAIL avec personalEmailHint, l'adresse de compte masquée. Rien n'est envoyé. L'assistant montre qu'au lieu de "cochez votre boîte de réception" : l'adresse qu'ils ont tapée, l'indice masqué sur une ligne propre, et le champ dégagé, réétiqueté "Adresse email personnelle", focalisée, avec l'indice comme support. Les *** reste résolu, puisque le membre est aidé plutôt que refusé. L'entrée de l'adresse personnelle se poursuit à l'étape du code comme auparavant. /recover's email step affiche la même réponse qu'un message info au lieu de "N'a pas envoyé d'email de récupération".

  7. · SecurityService

    Une adresse de travail sur le mot de passe oublié demande le compte propre, montré masqué

    Les membres ouvrent leur compte avec une adresse personnelle (gmail, yahoo) et sont plus tard une adresse de travail de leur organisation, qui est celle dont ils se souviennent et tapez sur le mot de passe oublié. Ce n'est que sur l'hôte de connexion de leur org, puis la lettre est allée à la boîte de réception. Pour 20 des membres de KamoCRM KamoMail boîte aux lettres, qui est lue à l'intérieur du produit, ils viennent d'être verrouillés Dehors. Sur tout autre hôte, l'adresse ne correspondait à personne, et la page a dit "si cela e-mail est enregistré, un lien a été envoyé" n'ayant rien envoyé. /api/recover/email/initiative répond maintenant à l'e-mail du compte exactement comme avant. Pour toute autre adresse il cherche une adresse de travail de membre: d'abord dans l'org dont la page de connexion est ( boîte aux lettres principale, puis membres.email), puis dans n'importe quel live org. Lorsque cela nomme un compte avec une adresse propre, rien n'est envoyé. Les réponse est un 409 avec raison WORK EMAIL et personnelEmailHint, l'adresse de compte avec chaque caractère du nom entre le premier et le dernier étoilé, et le domaine en entier. Il s'agit d'un 409 dans le but : une page de connexion qui prédate le l'indice indique `message` pour un non-2xx, et `message` dit la même chose en mots. Un compte sans adresse lui-même reçoit toujours la lettre dans la boîte de réception de travail sur l'hôte de son org, car c'est la seule boîte de réception enregistrée. L'indice dit qu'une adresse appartient à quelqu'un, que la réponse générique jamais a fait, donc chacun est compté par CodeAttempLimiter: cinq l'heure par adresse dactylographié, plus la limite d'adresse de l'appelant partagée avec les vérifications de code. Après ça la demande obtient un 429.

  8. · EmailService

    Déplacer le courrier système et le propre domaine d'envoi de la plateforme org vers kamouniverse.com

    platform.mail.domain par défaut sur kamouniverse.com (valeur de configuration, non) changement de code par défaut) et portes chaque domaine non vérifié org retour transactionnel de, comme avant. La plate-forme org (kamocrm) utilisée pour contourner cette propriété et envoyer comme son propre OrgDomain vérifié à la place - maintenant PlatformOrgResolver la force à travers le même recul, donc les deux suivre une propriété au lieu de courir deux lignes différentes. - Oui. obtient la pièce correspondante pour membres: la boîte aux lettres primaire de l'org de plate-forme obtient un synthétique kamouniverse.com entrée prépended (même boîte aux lettres, klusterservices mail/ alias le retour au vrai kamocrm.com maildir) comme nouveau compositeur par défaut, tandis que l'adresse originale kamocrm.com reste entièrement envoyable - Additif, pas de remplacement. Chaque autre org n'est pas affecté de toute façon. Bulk/campaign mail (bulk-email.platform-relay.*, hello.kamocrm.com) est un chemin de code séparé et intact.

  9. · KlusterServices

    Ajouter kamouniverse.com comme deuxième domaine de messagerie régulière

    Ajoute kamouniverse.com aux domaines virtuels alias de postfix avec un local-part-serving regexp ainsi toute adresse sur elle atterrit dans le boîte aux lettres kamocrm.com identiques (pas de configuration par utilisateur, fonctionne pour les boîtes aux lettres créé plus tard aussi), et de relayer sender domaines pour que les membres/services puissent envoyer comme kamouniverse.com à travers ce relais. rspamd obtient son propre DKIM keypair et le bloc de signature pour le domaine (sélécteur mail, publié sous - Oui. hello.kamocrm.com / postfix-bulk sont Je n'ai rien fait.

  10. · KlusterServices

    Pourward kamouniverse.com à kamocrm.com

    Le DNS pour le sommet et le site www pointe maintenant sur la propriété intellectuelle publique de k1m1. Ajouter un redirectRedirectRegex route sur les deux points d'entrée (301, chemin/requête conservée, La trajectoire de défi ACME exclue sur :80) et les deux hôtes ensemencent STATIC-DOM de l'auto-cert est donc qu'ils obtiennent des certs bien qu'ils ne soient pas un un domaine d'ordre enregistré, identique à sign.pink.

  11. · kamo-internal

    Select-all/deselect-all pour le filtre principal des états, par défaut à tous

    La dimension des états du panel du public de campagne et du déclencheur goutte-à-goutte filtre de plomb n'a rien montré par défaut, même si un éteint liste déjà: "à tout état" sur le fil - la même "pas de restriction" Convention marché/fournisseur/produit fournisseur déjà utilisé. Cela a fait de la C'est comme s'il était filtrant à zéro lead plutôt qu'à tout le monde, et n'a pas donné un moyen rapide de partir de "tout état" ou "aucun" avant de sélectionner quelques-uns. leadAudienceFilter.ts gagne efficacement États() (qu'est-ce qu'il faut montrer vérifié: stocké, ou chaque état lorsqu'il n'est pas réglé) et avec States() (qu'est-ce que stocker en arrière: l'ensemble s'effondre à un effondrement non défini plutôt qu'un élément explicite Liste de cinquante codes, donc un lead avec un état blanc sur le fichier correspond toujours "chaque état" de la manière dont une absence réelle d'un filtre est explicite La liste IN ne le ferait pas). Les deux panneaux obtiennent un "Select all" / "Deselect all" paire à côté du cueilleur des états seulement; les trois autres dimensions sont inchangé, étant donné que leur encadrement vide par défaut était déjà correct.

  12. · kamo-internal

    Étapes DKIM et DMARC, nous envoyons donc un email pour un org est entièrement authentifié

    Deux nouvelles étapes après la première SPF, écrite pour un propriétaire non technique de la même façon que SpfCard est déjà — un langage clair, une boîte "pourquoi cela compte", et ne jamais demander un changement, nous n'avons pas vraiment besoin: - DkimCard: SecurityService génère une clé de signature pour le domaine la première temps ce chargement, puis lit si l'enregistrement TXT est publié. Seulement deux états réels (rien n'a encore été publié, ou quelque chose qui n'a pas été publié match) car un disque DKIM ne peut jamais entrer en collision avec quoi que ce soit du client Il n'y a pas de distinction à faire entre « ajouter et modifier ». - En lecture seule. Parce que le courrier de Kamo utilise toujours le domaine de l'org comme à la fois expéditeur d'enveloppe et visible De, le contrôle d'alignement de DMARC est déjà Le Parlement européen a adopté une résolution sur la politique de l'Union européenne en matière de droits de l'homme. seulement montre ce qui est publié (ou suggère un point de départ), ne demande jamais un changement. Les deux nouveaux **************** proxies suivent spf/route.ts existant exactement — pas de catch-all ici, donc un chemin sans son propre fichier de route 404s avant d'atteindre SecurityService. DnsSetupStudio affiche maintenant 6 étapes au lieu de 4; numérotation étape tout au long mise à jour pour les cas de jeton de propriété et de jeton de propriété. Dépend du kamo-traduction-dictionnaire 2f143f94 (le setup.dns.studio.dkim.* et setup.dns.studio.dmarc.* copie) et les paramètres de conseil du service de sécurité.

  13. · EmailService

    DKIM-sign courrier transactionnel envoyé comme propre domaine d'un org

    Une fois que SecurityService confirme l'enregistrement DKIM d'un domaine est publié (org domaines.dkim verified), réinitialisation du mot de passe, invitations et autres Les lettres transactionnelles envoyées sous le nom de domaine NoReply@{org} portent désormais un DKIM signature à côté de l'autorisation existante du FPS — réutilisation de la même Le courrier de campagne de DkimSigner est déjà signé, non modifié. EmailSmtpService reçoit une nouvelle(...) surcharge en prenant un MessageSigner, miroir du chemin signé sendVia: saveChanges() une fois, signe, puis un transport manuel, depuis le transport statique.send() utilisé par tous les autres appels send() saveChanges() à nouveau en interne et mint a nouveau message-ID après que la signature a été calculée sur l'ancien. Les 6-arg existantes envoyer(...) maintenant délégués à elle avec un signeur nul, donc chaque l'autre appelant est inchangé. **************** **** portes sur dkimVérifié spécifiquement (pas seulement une clé existante) et ne s'applique que lorsque nous sommes déjà l'envoi comme propre domaine de l'org — jamais sous le domaine de la plate-forme, et jamais sur la plate-forme-adresse réessayer quand le propre envoi de l'org échoue. Dépend de la bibliothèque kamo partagée 5de57705 et du DKIM du service de sécurité le paramètre consultatif, qui génère et vérifie la clé de lecture.

  14. · SecurityService

    DKIM et DMARC : critères d'évaluation pour /setup/dns

    Ajoute deux paramètres aux côtés du SPF existant, donc un org transactionnel Le courrier (restauration du mot de passe, invitations, notifications) peut porter une signature DKIM et le propriétaire peut voir leur posture DMARC: - GET /api/security/domains/{id}/dkim — génère la clé DKIM d'un domaine la première fois qu'il est demandé (jamais régénéré après, depuis clé briserait la vérification de tout ce qui a déjà signé avec l'ancien), vérifie si le dossier TXT est publié, et stocke le verdict sur **************** la même forme à l'état vérifié spf verified utilise déjà. - Allez vous faire voir. Chaque message envoyé par Kamo comme NoReply@{domaine} utilise ce domaine à la fois comme expéditeur d'enveloppe et visible Ainsi, la vérification d'alignement du DMARC est déjà satisfaite une fois que SPF est fait, quelle que soit la politique choisie par le client. Ceci ne rapporte que ce qui est publié (ou suggère un disque de départ quand rien n'est) — il ne demande jamais pour un changement, puisqu'il n'y a jamais un besoin de Kamo. - Oui. miroir SpfAdvisoryForme du service (un pur inspect(), une couture createLookup() pour les tests) et DkimAutorisation Services miroirs SpfAuthorizationService (persiste le verdict, laisse seul sur un La recherche a échoué). DkimDomainRepository est un JpaRepository de la même manière SpfDomainRepository est, pour la même raison: il expédie avec un redéployement plutôt qu'une version de bibliothèque partagée. Dépend de la bibliothèque kamo-shared-library 5de57705 (les nouveaux champs dkim * d'OrgDomain).

  15. · kamo-shared-library

    Champs clés DKIM pour le courrier transactionnel d'un domaine org

    Ajoute **************** dans org domaines, en miroir de la paire spf verified/spf checked at déjà là — donc un domaine peut contenir une paire de clés DKIM générée et si son enregistrement TXT a a été confirmé, la même forme à vérifier SPF utilise déjà.

  16. · EmailService

    Affiner le public et les déclencheurs d'une campagne par marché, fournisseur, produit et état

    La boîte "All Leads" de l'éditeur de campagne et le filtre de plomb du déclencheur de goutte d'eau pourraient ne correspondent qu'à chaque piste que l'expéditeur peut voir, sans moyen de cibler un marché, fournisseur, produit ou état - la grille /leads a eu les quatre depuis des semaines. - Nouvelle enquête - Oui. filetés par CampagneAudienceInput -> PublicDéfinition -> AudienceQueries.shape() Cas LEADS, miroir LeadGridSpecifications' predices (le marché possède des pistes directement ou par l'intermédiaire d'un produit de vendeur; l'état est la propriété de prêt hypothécaire ou le courrier, changement de portée. /estimation et /course prendre les mêmes quatre filtres que Params de requête séparés par des virgules, de sorte que le compte en direct de l'éditeur reflète un non enregistré filtre aussi. - TriggerConfig gagne un champ d'Etats aux côtés du marché existantIds/vendorIds/ produitIds; DripTriggerMatcher.leadFilter() le vérifie. Le parcours événement-payant jamais porté fournisseur ou état, donc l'état est résolu en direct par lead (DripContacts. StateOfLead), comme le vendeur était déjà du produit du vendeur. Chaque site d'appel existant 3/6/8-arg continue de compiler inchangé via ajouté les surcharges et les constructeurs secondaires; seulement PublicGatherer, qui toujours threads un filtre de définition à travers, a besoin de ses sites d'appels mis à jour.

  17. · kamo-internal

    Filtres sur les fils de campagne et les déclencheurs de goutte-à-goutte

    La source d'audience "All lead lead" du rédacteur en chef n'avait aucun moyen de se rétrécir qui l'a atteint au-delà de la visibilité. Ajoute un panneau de filtre (marché Possibilité de création de fournisseur, plus une dimension d'État indépendante) qui rétrécit le nombre en direct, le aperçu de la navigation et le public sauvegardé, par le biais de l'estimation/appels de navigation de campagneAudienceApi. Le filtre à plomb du déclencheur de goutte avait déjà le Market/Vendor/Product cascade; ajoute la même dimension d'État, à côté de l'actuelle Trois, non en cascade.

  18. · KlusterServices

    Un hôte d'ordinateur d'un org obtient un certificat et un itinéraire

    les ordinateurs sont maintenant un alias standard — chaque org blanc est dit de pointer un à Kamo sur /setup/dns, la façon dont il indique se rencontrer et signer — ainsi deux choses ont dû le suivre ou la record serait résolu et ne ferait rien. Un certificat. ordinateurs rejoint SUBDOMAINS, qui est la liste parorg ce service problèmes de. Sans elle un hôte d'org a DNS et pas de TLS, qui est un avertissement de navigateur sur leur marque plutôt qu'un bureau de travail. Une VOIE. La passerelle correspondait à Host(`computers.kamocrm.com`) et rien d'autre, donc un org pourrait ajouter le disque, regarder le studio de configuration devenir vert et toujours atterrir quelque part que n'est pas cette passerelle. Les nouvelles routes utilisent HostRegexp(`^computers[.].+$`), la même forme **************** et le ruisseau./grafana. les itinéraires sont déjà utilisés. SEPARATE IngressRoutes plutôt que d'élargir les règles existantes, et la raison en est TLS. Les routes de la plate-forme portent un nom secret explicite, qui est le seul certificat qui peut être nommé à l'avance; un locataire arrive quand son domaine va vivre. Élargir ceux des règles auraient fait une réponse secrète pour chaque domaine locataire — un certificat avertissement sur la marque de quelqu'un d'autre, ce qui est pire qu'aucune route du tout parce qu'il semble Kamo s'est trompé de domaine. Les routes locataires quittent TLS pour le magasin de Traefik et SNI, comme se rencontrent, et s'assied à la priorité inférieure ainsi les ordinateurs. kamocrm.com garde ses propres. Servir chaque org d'un seul régex ne donne rien : la connexion est choisie par le signed token, jamais par le nom d'hôte, et un jeton menthe un ordinateur pour un membre pour une séance.

  19. · kamo-internal

    Les ordinateurs enregistrent sur le studio DNS

    Une carte de plus sur /setup/dns, donc un org configurant son domaine est raconté sur l'hôte ses ordinateurs hébergés s'ouvrent. Sans elle, un org pourrait suivre la page de la lettre, terminer avec chaque carte verte, et toujours avoir un ordinateur qui produit un onglet de navigateur qui s'ouvre et se ferme — le lien est construit à partir d'ordinateurs.<domaine>, et un lien vers un hôte sans enregistrement échoue avant qu'une requête ne quitte la machine. Requis comme toutes les autres étiquettes plutôt que seulement pour les orgs tenant l'application. Le dossier est ce qui fait que l'application fonctionne le jour où elle est allumée, et un org renvoyé à son registrar mois plus tard pour un enregistrement est un org dont le premier ordinateur ne s'ouvre pas. Le label doit correspondre à ConnuAliases en service de sécurité exactement — DomainAliasContractTest les épingles, parce qu'une étiquette que le studio exige mais vérifier-dns n'émet jamais un statut pour ne se déclare pas manquante : la recherche passe par « en attente » et la carte est assise à "attendre le DNS" pour toujours, peu importe la zone du client.

  20. · SecurityService

    Les ordinateurs sont un alias standard, et le lien utilise les propres

    Chaque marque blanche pointe un ensemble fixe d'étiquettes à Kamo et les ordinateurs n'étaient pas un d'eux, de sorte qu'un org pourrait suivre /setup/dns à la lettre et avoir encore un hôte Un ordinateur que personne ne pouvait ouvrir. Le lien est construit à partir de cet hôte; un lien vers un hôte sans enregistrement est un onglet de navigateur qui s'ouvre et se ferme avant toute demande quitte la machine, avec rien enregistré n'importe où dans Kamo et l'ordinateur lui-même sain et éveillé Tout au long. Quatre listes vont ensemble ou pas du tout. Domaine AliasContractTest affirme exact égalité entre Connu Aliases, SSL PROBE LABELS et son propre miroir du studio catalogue, parce que l'échec qu'ils gardent contre est silencieux: un label que le studio exige mais vérifier-dns n'émet jamais un statut pour les chutes à "en attente", donc la carte est assis à "attendre le DNS" pour toujours, quelle que soit la zone du client. C'est ça. est arrivé aux médias pendant quatre mois en 2026. Requis comme toutes les autres étiquettes plutôt que seulement pour les orgs tenant l'application. Le dossier est ce qui rend les ordinateurs hébergés fonctionnent le jour où il est activé, et un org renvoyé à son registraire mois plus tard, pour un enregistrement, est un org dont le premier ordinateur ne ouvert. LE LIEN UTILISE L'HÔTE DE L'ORGE buildLink prend l'organisation et construit https://computers.<ses domaines en direct>, via OrgLinkHosts.liveRootDomain — le même assistant que le portail de l'emprunteur utilise, et pour le même raison : un domaine configuré mais non encore vérifié enverrait un membre à un hôte qui ne résout pas. Contrairement au portail de l'emprunteur, revenir à la plateforme hôte est CORRECT ici plutôt qu'un lien brisé. Une porte dessert chaque locataire et la machine est choisie par le signed token, jamais par le nom d'hôte, donc un org sans domaine live obtient toujours un travail ordinateur — il s'ouvre simplement sur les ordinateurs. kamocrm.com jusqu'à ce que son propre domaine soit en direct.

  21. · SecurityService

    N'énumérez que les étapes de démarrage d'une organisation

    Une organisation dont le modèle de sécurité fixe chaque réponse produit un membre peut changer, une gamme d'âge pour chaque type de membre) était encore compte sur neuf pas. Il a dû "sauver" une neuvième étape vide avant sorcier verrouillé comme terminé (rapporté 2026-09-21, Gnosia). OrgSetupStepL'applicabilité décide quelles étapes s'appliquent, à partir du modèle appliqué. Aujourd'hui, seule la conformité peut abandonner. Étapes du résumé totalSteps, le terminéÀ loquet et lastStep tous passer sur cette liste. A étape enregistrée avant l'arrêt de l'application reste stockée mais n'est pas comptée, donc il revient coché si le modèle offre un choix là encore. Si la modèle ne peut pas être lu, l'étape est montrée: une étape montrée peut être sautée, une On ne peut pas y arriver. La règle reflète kamo-interne's getComplianceStepUi (ce que l'étape dessine); les deux sont appuyés par la même table de cas. AppliedModelController lit maintenant politiques de produit et gammes d'âge à travers les mêmes aides, donc le point final et la règle ne peut pas dériver.

  22. · kamo-internal

    Une étape que l'on ne demande pas à l'organisation n'est pas indiquée ou comptée

    Une organisation dont le modèle de sécurité fixe chaque réponse produit un membre peut changer, une gamme d'âge pour chaque type de membre) était encore a montré une neuvième étape disant qu'il n'y avait rien à configurer. Il a dû "sauver" cette étape avant que l'assistant ne compte comme terminé (rapporté 2026-09-21). SecurityService n'énumère maintenant que les étapes à suivre pour une organisation, page suit cette liste: le rail, le compte "x de y", où l'assistant reprend, que vient après la dernière étape, et un `?step=` nommant une étape que n'est pas listé. Une charge utile sans liste utilisable se lit toujours comme chaque étape, donc un réponse malformée ne laisse jamais un magicien vide. conformitéStepApplies.test.ts pins getComplianceStepUi dans le même cas tableau comme le test d'application OrgSetupStep de SecurityService. Le serveur décide si l'étape est listée, et cette fonction décide ce qu'elle dessine, donc la deux doivent être d'accord.

  23. · KlusterServices

    Délivrance et miroir du certificat pour computers.kamocrm.com

    L'ouverture d'un ordinateur hébergé a produit un onglet de navigateur qui est apparu et a disparu. Le Le lien de lancement est correct, de même que le jeton: SecurityService construit - de KAMO-HC-GUAC-BASE-URL, dont default est cet hôte. L'hôte n'a pas de certificat et pas d'enregistrement A, de sorte que l'onglet meurt Avant que n'importe quoi à Kamo n'entende à son sujet - aucune demande n'est accessible Traefik, rien n'est Logé, et l'ordinateur reste AWAKE et en bonne santé tout le temps. La route d'ouverture de hc-https fait déjà référence par son nom à tls-ordinateurs-kamocrm-com; secret n'a tout simplement jamais été frappé, parce que ce service se pose pour une liste explicite et computers.kamocrm.com n'était pas sur lui. Desktop.kamocrm.com est listé pour exactement le La même raison - rien ne frappe ni l'un ni l'autre hôte jusqu'à ce que quelqu'un se donne un lien, donc pas plus que jamais découvert à partir des journaux de Traefik la façon dont un domaine de locataires est. Également en miroir dans les "ordinateurs hébergés", parce que la Route d'Ingress est en train d'y vivre et fait référence au secret nommément dans son propre espace de noms. Cette Monnaie RIEN jusqu'à l'enregistrement A existe. La boucle saute un hôte dont le DNS n'est pas la résolution, parce qu'un défi HTTP-01 contre elle ne peut pas être résolue: Skipping media.b11capital.com (DNS ne se résout pas; HTTP-01 échouera) computers.kamocrm.com a besoin du même enregistrement A que kamocrm.com et desktop.kamocrm.com, 47.181.8.84. Cette partie est au fournisseur de DNS, pas ici. Une fois qu'il résout cela, cela dans une boucle et reflète le secret sans autre action.

  24. · kamo-internal

    La liste du message nomme un lead ou un contact, et non son adresse

    Une ligne était dirigée par le nom d'affichage de l'expéditeur, ou la partie de l'adresse. avant le - quand il n'y en avait pas, donc un chef qui a écrit en lecture comme "jlrivera1984" au-dessus de "jlrivera1984-mail.example". La puce d'en-tête J'ai déjà préféré le nom de notre propre record, mais la liste n'a jamais demandé. VirtualMessageList résout désormais les correspondants de chaque page chargée à côté de ses avatars (demande groupée, mise en cache par adresse pour la session) et est en tête de la rangée avec le nom enregistré: un collègue, un contact sauvegardé, ou - nouveau avec EmailService d'Emails d3d6e03 - une avance. Le monogramme orthoquest le même nom. La carte correspondante affiche une « plomb » en tête et propose la "View lead".

  25. · kamo-internal

    La liste du message nomme un lead ou un contact, et non son adresse

    Une ligne était dirigée par le nom d'affichage de l'expéditeur, ou la partie de l'adresse. avant le - quand il n'y en avait pas, donc un chef qui a écrit en lecture comme "rodarisdolgovanton" ci-dessus "rodarisdolgovanton.gmail.com". La puce d'en-tête J'ai déjà préféré le nom de notre propre record, mais la liste n'a jamais demandé. VirtualMessageList résout désormais les correspondants de chaque page chargée à côté de ses avatars (une demande groupée, mise en cache par adresse pour la session) et dirige la ligne avec le nom enregistré: un collègue, un contact sauvegardé, ou - nouveau avec EmailService d'Emails d3d6e03 - un chef de file. Le monogramme orme le même nom. La carte correspondante affiche un lead "Lead" et propose "View lead".

  26. · EmailService

    Un chef d'auteur qui écrit est nommé par le résolveur correspondant

    La liste des boîtes aux lettres était en tête du message d'un chef de file avec la partie de son adresse. avant le « Jlrivera1984 ») lorsque leur client de courrier n'a envoyé aucun affichage name, bien que l'organisation les considère comme une tête ("Jordan Rivera"). Le résolveur Connaissait des collègues et ne sauvait que des contacts. CorrespondentResolver gagne un quatrième niveau, LEAD (après CONTACT), avec le nom de l'avance, société et leadId (une chaîne: uids pass MAX-SAFE-INTEGER). LeadCorrespondents ne répond que ce que la grille de fils montrera au lecteur: VISEW-LEADS requis, un plomb non affecté a besoin de VUE-UNASSIGNE-LEADS (échecs) fermés sur des produits gratuits, aucun téléphone (les informations de contact sont mises à la terre par droits cette carte ne vérifie pas), et chaque lead nommé est écrit à phi-access-log en tant que LIST lire dans une mine de PHI, via AudiencePhiAudit. les pistes n'avaient pas d'index sur l'adresse: la recherche a parcouru les 790 000 dollars de la leads de l'organisation du journaliste dans 9,8 s. ix-leads-org-email-lower sur (org-id HASH, inférieur (trim(email))) est en db/leads-email-lookup-index.sql et a été APPLIED PAR LA MAIN en tant que propriétaire avant ce déploiement; le plan générique maintenant prend 3,4 ms.

  27. · EmailService

    Un chef d'auteur qui écrit est nommé par le résolveur correspondant

    La liste des boîtes aux lettres était en tête d'un message contenant la partie de leur adresse. avant le "rodarisdolgovanton") lorsque leur client de courrier n'a envoyé aucun affichage Nom, bien que l'organisation les considère comme une piste ("Anton Dolgov"). Le résolveur Connais des collègues et n'a enregistré des contacts que s'accrochaient. CorrespondentResolver obtient un quatrième niveau, LEAD (après CONTACT), avec le nom du plomb, de la société et de la sous-région (une chaîne: uids pass MAX-SAFE-INTEGER). LeadCorrespondents ne répond que ce que la grille de fils montrerait au lecteur : VISÉALISATION ÉCHÉANTILLONNE VISANT À L'AIDE, un chef de file non affecté fermés sur des produits gratuits, aucun téléphone (contact info est mis à la terre par droits cette carte ne vérifie pas), et chaque titre de lead nommé est écrit à phi-access-log en tant que LIST lire dans une mine de PHI, via AudiencePhiAudit. les sondes n'avaient pas d'index sur l'adresse: la recherche a parcouru tous les 790 000 dollars de la les pistes de l'organisation du journaliste dans 9,8 s. ix-leads-org-email-lower sur (org-id HASH, inférieur (poste (courrier électronique)) est en db/leads-email-lookup-index.sql et a été APPLIED PAR LA MAIN en tant que propriétaire avant ce déploiement; le plan générique maintenant prend 3,4 ms.

  28. · kamo-internal

    Le membre qui a provoqué une notification ouvre sa carte à partir de celle-ci

    "Dana Reyes vous a distribué", "Semaine synchronisée - Dana Reyes", une carte de chat non lu dont le corps est le expéditeur: EmailService (29cb21e) envoie désormais l'acteurMemberId (sous forme de texte) et l'acteurName, le nom exactement comme le titre ou le corps le pare, et la cloche tire ce texte comme le nom du membre. - NotificationT extrait le nom du titre (dans l'intérêt du corps) une fois, à sa première apparition; Tout le reste est exactement comme avant. Utilisé par le toast, la ligne d'historique (clickToggles-faux): la ligne ouvre la notification) et le dialogue de détail. - Une carte de toast s'ouvre au niveau du jeu. memberHoverCard/MemberName prenez zIndex, et le toast passe NOTIFICATION-DECK (1500, maintenant une constante avec le harnais propre). Au 1305 de la carte, il ouvert sous le pont d'où il provient; au même niveau, il peint dessus (il est annexé à «body» plus tard) et toujours sous ses propres outils (conspiré plus tard encore). - UnreadChatNotifier envoie l'émetteur en tant qu'acteur, jamais pour Exec2Exec. Le serveur tient également un l'acteur/eux uniquement de l'organisation de l'appelant. - Spécifications "Appartenaires" : le paragraphe des notifications. Vérifié: tsc; eslint (rien sur les lignes modifiées); les 19 gardes du repo; viteste (notifications, membres, lib, paramètres, chat; les quelques-uns qui ont tempéré sous la charge machine passent seuls); et a Sonde chrome selon laquelle le nom reste en ligne dans le titre de deux lignes du toast et de la ligne de l'histoire l'ellipose est toujours en vigueur.

  29. · kamo-shared-library

    L'application Notes est "Notes et listes de contrôle"

    L'application Notes contient également des listes de contrôle depuis 2026-09-23 (les étapes décalées comme ils sont faits, une étape qui attend les étapes avant qu'il ne s'agisse terminé, une liste de contrôle prévue sur le calendrier), et elle est appelée "Notes et listes de contrôle" partout où il est nommé. ServiceType.NOTES transporte le un nouveau nom d'affichage et une description qui couvre les deux, et c'est ce que les applications Caractéristiques, types de succursales et l'org-create wagizard show une fois SecurityService est reconstruite. Copie uniquement: le nom constant et l'identifiant sont inchangés, donc aucune octroi stocké ou déplacer la ligne de caractéristiques. ServiceTypeCustomerCopyTest brosse le nom et le description mentionne les listes de contrôle.

  30. · MediaService

    L'invitation Hold'em et le rappel de la réunion disent de qui ils viennent

    MemberNotificationClient.raise gagne une surcharge porteuse de l'acteurMemberId/actorName (l'id envoyé sous texte; l'ancienne signature est inchangée et n'envoie ni l'autre). HoldemInviteMessenger passe le concessionnaire ("Dana Reyes vous a traité dans"); MeetingReminderSweep passe le créateur de la réunion lorsque le titre les nomme ("Weekly sync - Dana Reyes"), lire le créateur une fois plutôt qu'à l'intérieur du titre(). EmailService conserve le couple et kamo-internal tire ce nom comme la carte du membre. Un EmailService plus ancien que les champs les ignore. Essais: HoldemInviteMessengerTest (no 1; ses vérifications de soulevées prennent la nouvelle surcharge), MeetingReminderActorTest (2), (2). Suite complète: 1060 run, 0 échec.

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