Jurnal de schimbări
Ce e nou.
Fiecare îmbunătățire a platformei, pe măsură ce se livrează.
· SecurityService
Începe o sesiune de coder în cloud, și spune care terminale sunt
depozitul ca cwd) şi răspunsurile: adevărata o sesiune de cloud poate începe de la. Listarea terminalului poartă a agentului Pentru norul de pe icoana ferestrei.
· KlusterServices
Începe o sesiune de coder în cloud de la un checkout local
depozit. Pachetul este forţat pentru că telecomenzile noastre sunt Forgejo, nu GitHub, și punctul este checkout pe acest disc. Nu - modul de permisiune (CLI scade bypassPermisii pentru o sesiune de cloud) și nu - sesiune-id sau chitanță (cloud names the session and keep no transcript here). Sesiunea tmux este marcată @kamo cloud astfel încât rapoartele de listare terminal Cluud: adevărat și consola poate pune un nor pe pictograma ferestrei după ~/Kamo / Proiecte, cel mai recent lucrat în primul rând, pentru meniu pentru a alege de la.
· kamo-internal
Atașamente stau deasupra corpului, ca fișierele în sine
Un e-mail al cărui singur conținut a fost un PDF nu a avut nici o modalitate de a deschide sau descărca fișier: agrafa de hârtie afișată pe rândul listă, și panoul de lectură afișat Nimic. EmailService a marcat linia PDF deoarece aplicația Gmail a dat un conținut-ID (fixat acolo în 0de0823); geamul a scăzut fiecare linie parte fără a întreba dacă corpul de fapt pictat. Regula locuiește acum într-un singur loc, enumerateAtacuri: o parte rămâne din lista numai atunci când organismul HTML face referire la codul său: Panou de citire, cronologia de plumb și transmiterea toate-l utilizați, astfel încât un mesaj transmis nu Mai mult silenţios scapă fişierul. Nu are încredere în server. steagul, care corpurile cached în browser încă transporta de la înainte de fix. Sanitivul rezolvă problema: referinţe cu aceeaşi normalizare, deci Orice lucru lăsat în afara listei este întotdeauna ceva ce arată corpul. Raftul de atașament, primul lucru sub antet: - fiecare fişier este o carte care arată fişierul în sine: pagina unu a unui PDF (cu numărul paginii), fotografia, sau gliful tipului pe hârtie albă - un click preview-uri într-un ecran complet: PDF prin pdf.js cu zoom și un contor de pagini, imagini potrivite pentru ecran cu clic-la-zoom, video și jucători audio, text, și CSV/TSV ca o masă; tastele săgeată și un mutare film strip între fișiere - descărcările trec prin aducere, care transportă antetul sesiunii per-tab un gol <o descărcare> nu ar putea niciodată, cu un inel de progres și o căpușă tras - "Descarcă toate" mâinile fiecare fișier peste ca un .zip scris în browser - tastatură-primul, mișcare redusă onorat, topor curat; două cărți pe rând într-un geam îngust
· kamo-shared-library
Arive ca un al doilea LOS extern, și un cusătură furnizor, care este real
Arive este accesibil numai prin aplicația sa Zapier, astfel încât conexiunea este Zapier în ambele direcţii: Kamo posturi comenzi (creare împrumut, actualizare împrumut etapa, actualizarea plumb, converti plumb) la Prinde Hooks pe piață, și Arive Declanseaza posta inapoi la un jeton de conectare. Adaptorul, câmpul mapper (trei nume Arive, citite din aplicația live), harta scenei, criptate Secretele și jurnalul de activitate trăiesc în integrări. Arive / Integrations.los. LeadService nu mai ruleaza cod MeridianLink pentru fiecare link. Împinge merge la propriul LosProviderAdapter; un furnizor fără unul este sărit și înregistrat în loc de a primi un plic SOAP. Aplicaţia de intrare furnizor-neutral LosLeadPatch (contact, adresa de mail, fapte ipotecare; stare) și atribuie istoricul furnizorului. Rezolvatorul se uită în sus membru acreditări de către furnizorul conexiunii, și o piață salva cu un necunoscut Valoarea MLOS este de 400 în loc de un silențios NO MLOS. Coloanele aceste hărți există deja în Yugabyte (LosAriveSchemaMigration's) au fost aplicate declaraţii înainte de această împingere).
· kamo-internal
Un ecran de lansare proiectat, în marca proprie a organizației
Deschiderea unui calculator a arătat o linie de text simplu pe o pagină albă, scris direct în fila cu Pentru până la 90 de secunde un CV citește întreaga imagine de memorie oaspete înapoi de pe un volum replicat eroare mai degrabă decât ca software-ul propriu al membrului. O pagină care pare ruptă este un om aproape la 40 secunde, care nu anulează nimic. Este un ecran acum, construit pe canon această aplicație mai degrabă decât inventat: radial primar / secundar spălare pe alb, o carte albă pe raza 14 cu --elev-hover, gradient erou 90deg ca regula sa, --use-house, modul de lumina. Logo-ul organizaţiei şi live-ul ei. Inel de numărare în jos la estimarea SERVER a dat mai degrabă decât o presupunere, și spălătorii ambientale că Preferă să se oprească complet. Un eșec are acum o cale de ieșire din ea. Acesta arată propria propoziție a serverului "no nod are în prezent 8 GiB gratuit" este în valoare de lectură TAB păstrează pictograma organizaţiei, care este cealaltă jumătate a acesteia. Navigarea la poarta de acces înmânează întregul document lui Guacamole, al cărui cont propriu Deţine fila: un membru care deschide calculatorul companiei sale a privit cum se transformă în logo-ul lui Guacamole. ă sesiunea este încadrată în această pagină în schimb, astfel încât pictograma și titlul rămâne orga și predarea este o paloare mai degrabă decât un fulger alb. Guacamole nu trimite nici X-Frame-Options, nici un cadru-ansectors politica verificata, nu asumata si in cazul in care cadrul nu poate fi creat fila naviga modul in care aceasta intotdeauna a făcut, pentru că o filă mai frumoasă nu este în valoare de un membru nu ajunge la calculatorul lor. Pictogramele nu sunt reconstruite pe o cale: ele sunt elementele DynamicMetaLoader are deja hotărât pentru această organizaţie, clonat. Re-de conducere care dintre cele două directoare favicon o org folosește ar fi un al doilea răspuns care ar putea devia de la primul. Fiecare şir este o cheie, împins în dicţionar mai întâi. Copia este injectat mai degrabă decât sa uitat în sus pagina este scris într-o altă fereastră de o funcție simplă, în cazul în care nu există în mod deliberat nici o implicit limba engleză, astfel încât un apelant care uită nu se compilează în loc de transporta engleza la fiecare local. Treisprezece teste, inclusiv că un mesaj de server este scăpat, mai degrabă decât scris ca marcă în sus.
· kamo-login
Punct un membru care tastat e-mail lor de lucru la unul personal
Resetarea parolelor uitate merge la adresa din contul de utilizator, de obicei a unul personal, dar membrii tasta adresa de lucru pe care le-a dat organizația lor. Serviciul de Securitate recunoaște acum o adresă de lucru și răspunsuri cu PersonalEmailHint, adresa contului mascat. Nimic nu este trimis. Vrăjitorul arată că în loc de "verificați inbox-ul": adresa au tastat, indiciu mascat pe o linie proprie, și câmpul șters, reetichetat "Address e-mail personal," concentrat, cu indiciu ca deţinătorul său. ă *** rămâne rezolvată, deoarece membrul este ajutat de-a lungul mai degrabă decât Refuzat. Introducerea adresei personale se efectuează la etapa de cod ca înainte. Pasul de e-mail /recoper arată același răspuns ca un mesaj info în loc de "Nu a reuşit să trimită e-mail de recuperare.".
· SecurityService
O adresă de lucru pe parola uitat cere propria cont, afișat mascat
Membrii deschid contul lor cu o adresă personală (gmail, yahoo) și sunt mai târziu dat o adresă de lucru de organizația lor, care este cel pe care îl amintesc și tastaţi pe parola uitată. Care doar vreodată rezolvat pe gazda lor de conectare org lui, Şi apoi scrisoarea s-a dus la inbox. Pentru 20 dintre membrii KamoCRM, care este o KamoMail cutie poștală, care este citit în interiorul produsului au fost doar blocat Din. Pe orice altă gazdă adresa nu se potrivea cu nimeni, iar pagina spunea "dacă asta" e-mailul este înregistrat, un link a fost trimis" nu a trimis nimic. /api/recover/email/inițiază acum răspunsul contului e-mail exact ca înainte. Pentru orice altă adresă pe care o caută pentru o adresă de lucru a membrilor: primul în org a cărui pagină de autentificare este aceasta (Primary Mailbox, apoi membri.email), apoi în orice live org. Atunci când numele unui cont cu o adresă proprie, nimic nu este trimis. ă Răspunsul este 409 cu motiv Work EMAIL și personalEmailHint, adresa contului cu fiecare caracter al numelui între primul și ultimul starred, şi domeniul în întregime. Este un 409 pe scop: o pagină de conectare care precede Indicii arată că "message" pentru un non-2xx, iar "message" spune același lucru în cuvinte. Un cont cu nici o adresă proprie încă mai primește scrisoarea la inbox-ul de lucru pe gazda orga lui, deoarece aceasta este singura inbox pe înregistrare. Indiciu spune că o adresă aparține cuiva, care răspunsul generic niciodată a făcut, astfel încât fiecare dintre ele este numărat de CodeAttempLimiter: cinci pe oră pe adresă tastat, plus limita de adresa apelantului partajat cu controalele de cod. Trecut că cererea devine un 429.
· EmailService
Mutați mail-ul sistemului și propriul domeniu de trimitere al platformei org la kamo universe.com
platforma.mail.domain acum implicit pentru kamounivers.com (valoare config, no code default change) și porți ale fiecărui domeniu neverificat Retragere tranzacţională, ca înainte. Platforma org (kamocrm) utilizată pentru a ocoli acea proprietate și trimite ca propriul OrgDomain verificat în schimb - Acum PlatformOrgRezolvator o forțează prin aceeași retragere, astfel încât ambele urmați o proprietate în loc de curse două rânduri diferite. Nu-ţi face griji. devine piesa de potrivire pentru membri: prima cutie poştală a platformei org devine un sintetic kamo universe.com entry prepended (aceeași cutie poștală, klusterservices mail/ aliass it back to the real kamocrm.com maildir) as the story's new implicit, în timp ce adresa originală kamocrm.com rămâne complet expeditor - aditiv, nu un înlocuitor. Orice altă org nu este afectată. Bulk/campaign mail (bulk-email.platform-relay.*, hello.kamocrm.com) is o cale de cod separată şi neatinsă.
· KlusterServices
Adaugă kamo universe.com ca al doilea domeniu de mesaje regulate
Adaugă kamo universe.com la virtualul postfixului alias domains cu a locale-parte-conservare regex astfel încât orice adresă pe ea aterizează în cutie poştală identică kamocrm.com (fără configurare per utilizator, lucrări pentru cutiile poştale creat mai târziu), și pentru a releu sender domenii astfel încât membrii/serviciile pot Trimite ca kamo universe.com prin acest releu. RSPAMD are propriul DKIM cheiepair și bloc de semnare pentru domeniu (selector mail, publicat ca - Nu. hello.kamocrm.com / postfix-bulk are Neatins.
· KlusterServices
Înainte kamo universe.com la kamocrm.com
DNS pentru apex și www indică acum la IP publică k1m1. Adaugă o redirecționarea rutei Regex pe ambele puncte de intrare (301, cale/query conservate; Calea de provocare ACME exclusă la :80) și semințele ambele gazde în STATIC DOMAINS auto-cert astfel încât acestea să obțină certificate, deși nu este o domeniu org înregistrat, la fel ca semn.pink.
· kamo-internal
Select-all/deselect-toate pentru filtrul de plumb de stat, implicit tuturor
Dimensiunea de stat a panoului de audienţă al campaniei şi declanşatorul de picurare filtru de plumb nu a arătat nimic verificat implicit, chiar dacă un unset lista înseamnă deja "fiecare stat" pe sârmă Regulamentul (UE) nr. Care a făcut Culegător arata ca a fost filtrarea la zero conduce mai degrabă decât să toată lumea, și a dat nici o modalitate rapidă de a începe de la "fiecare stat" sau "nici unul" înainte de a alege câteva. leadAudienceFilter.ts câștigă state eficiente() (ceea ce trebuie să arate verificate: lista stocată, sau fiecare stat atunci când este nesetat) și cu state() (ce să depozit înapoi: setul complet se prăbușește la nedefinit mai degrabă decât un explicit 50 de coduri, deci o pistă cu un stat gol la dosar încă se potriveşte. "fiecare stat" modul în care o absenţă reală a unui filtru nu Lista IN nu ar fi). Ambele panouri primesc un "Selectaţi toate" / "Deselectaţi toate" perechea lângă culegatorul de state; celelalte trei dimensiuni sunt neschimbate, deoarece structura lor gol-cu-default era deja corectă.
· kamo-internal
DKIM și DMARC pași, așa că e-mail am trimite pentru o org este complet autentificat
Doi pași noi după SPF unul existent, scris pentru un proprietar non-tehnic În acelaşi mod în care SpfCard este deja o limbă simplă, o cutie "de ce contează" şi să nu cerem niciodată o schimbare de care nu avem nevoie: - DkimCard: SecurityService genereaza o cheie de semnare pentru domeniu primul timpul acesta se încarcă, apoi se citește dacă înregistrarea TXT este publicată. Doar doi. stări reale (nimic publicat încă, sau ceva publicat care nu meci) deoarece o înregistrare DKIM nu se poate ciocni cu nimic clientul deja are - Doar pentru citire. Pentru că poşta lui Kamo foloseşte mereu domeniul orgului ca atât expeditor plic și vizibile Din, verificarea alinierii DMARC este deja Satisfăcuți după ce se face SPF, indiferent de politica pe care a ales-o org-ul arată doar ceea ce este publicat (sau sugerează un punct de plecare), nu cere niciodată o schimbare. Amândouă sunt noi. Proxies urmează Spf/rute.ts existente exact route file 404s înainte de a ajunge la Serviciul de Securitate. DnsSetupStudio arată acum 6 pași în loc de 4; numerotare pas pe tot parcursul actualizate atât pentru cazurile de proprietate, cât și pentru cazurile de neproprietate. Depinde de kamo-translation-dictionary 2f14if94 (setup.dns.studio.dkim.* și setup.dns.studio.dmarc.* copie) și obiectivele consultative ale serviciului de securitate.
· EmailService
Poşta tranzacţională din DKIM trimisă ca domeniu propriu al unei org
Odată ce Serviciul de Securitate confirmă înregistrarea unui domeniu DKIM este publicat (org domains.dkim verified), resetări parole, invitații și altele scrisori tranzacţionale trimise ca domeniu NoReply@ {org} acum transporta un DKIM Semnătura alături de autorizația SPF existentă Poşta de campanie DkimSigner este deja semnată, nemodificată. EmailSmtpService primește o nouă trimitere (...) supraîncărcare luând un mesajSigner, oglindirea traseului semnat al lui Via: salvează Changes () o dată, semnează, apoi a transport gestionat manual, deoarece transportul static.send () utilizat de fiecare altă trimite () apeluri salvaChanges () din nou intern și ar menta a Mesaj nou-ID după ce semnătura a fost calculată peste cea veche. ă 6-arg trimite acum delegaţi la el cu un semn nul, aşa că fiecare alt apelant este octe-for-byte neschimbat. Porţile de pe DkimVerificat special. (nu doar o cheie existentă) și se aplică doar atunci când suntem deja trimiterea ca domeniu propriu al orgului niciodată sub domeniul platformei și Niciodată pe platforma-adresă retry atunci când propria trimitere org nu reușește. Depinde de kamo-shared-library 5de57705 și DKIM al serviciului de securitate obiectiv consultativ, care generează și verifică cheia citită.
· SecurityService
Criterii de evaluare a DKIM și DMARC pentru/setare/dns
Adaugă două criterii de evaluare alături de cel SPF existent, astfel încât o org tranzacțional e-mail (resetări de parole, invitații, notificări) poate purta o semnătură DKIM şi proprietarul poate vedea poziţia lor DMARC: - GET / api/security/domenii/{id}/dkim prima dată când se cere (niciodată nu s-a regenerat după aceea, de la schimbarea cheia ar rupe verificarea a orice deja semnat cu cel vechi), verifică dacă înregistrarea TXT este publicată și stochează verdictul privind Aceeași formă de stat verificat sf verificate deja utilizări. - GET **********************doar-citeste. Fiecare mesaj Kamo trimite deoarece NoReply@ {domeniu} utilizează acest domeniu atât ca expeditor de plicuri, cât și vizibil De la, astfel încât verificarea de aliniere DMARC este deja satisfăcută odată ce SPF se face, Orice politică a ales clientul. Acest lucru raportează doar ceea ce este publicat (sau sugerează un record de pornire atunci când nimic nu este) pentru o schimbare, din moment ce nu există niciodată un Kamo nevoie. - Nu. formă spfAdvisoryservice (a pur inspect(), a createlookup() cusătură pentru teste) și DkimAuthorization Serviciu Oglinzi SpfAuthorizationService (persistă verdictul, îl lasă singur pe o căutare eșuată). DkimDomainRepository este un simplu JpaRepository la fel SpfDomainRepository is, for the same motiv: it ships with one replay Mai degrabă decât o cucui versiune comun-library. Depinde de kamo-shared-library 5de57705 (OrgDomain's new dkim * fields).
· kamo-shared-library
Câmpuri cheie DKIM pentru un domeniu de tranzacționare
Adds ***************** pentru a org domenii, oglindind Spf verified/spf verified check at pair deja acolo astfel încât un domeniu poate deține o pereche de chei DKIM generată și dacă înregistrarea TXT are au fost confirmate, aceeași formă SPF de stat verificat deja utilizează.
· EmailService
Îngustează audienţa şi picurarea unei campanii de către piaţă, vânzător, produs şi stat
Cutia editorului de campanie "All Leads" şi filtrul de plumb al declanşatorului de picurare ar putea doar se potrivesc fiecare plumb expeditorul poate vedea, fără nici o modalitate de a viza o piață, furnizor, furnizor de produse sau de stat - grila / plumb a avut toate cele patru săptămâni. - New LeadAudienceFilter - Nu. cu filet prin campaniePubliculInput -> PubliculDefiniție -> PubliculQueries.shape()'s Cazul LEADS, oglindirea predicatelor LeadGrid Specifications (proprii de piață conduce în mod direct sau prin intermediul unui produs de vânzare; statul este o proprietate ipotecară conţinută vs. poştă; Schimbă domeniul de aplicare. /estemat și /rowse ia aceleași patru filtre ca Parame de interogare separate de virgulă, deci numărul live al editorului reflectă un nesalvat Şi filtrează. - TriggerConfig câștigă un câmp de state alături de piața existentăIds/vendorIds/ produsIds; DripTriggerMatcher.LeadFilter() verifică. Calea de încărcare a evenimentului nu a purtat niciodată vânzător sau stat, astfel statul este rezolvat live pe plumb (DripContacts. StateOfLead), același mod vânzătorul a fost deja de la produsul furnizor. Fiecare site de apeluri 3/6/8-arg existent păstrează compilarea neschimbată prin adăugarea suprasarcină și constructori secundari; numai Audience Gatherer, care întotdeauna fir o definiție filtru prin intermediul, necesar site-urile sale apel actualizate.
· kamo-internal
*************filtre pe piste de campanie și declanșatoare de picurare
Sursa de audienţă a editorului campaniei "Toate pistele" nu avea cum să se îngusteze. care a ajuns dincolo de raza de vizibilitate. Adaugă un panou de filtrare (Market - > Vânzător -> Cascada produsului Vânzător, plus o dimensiune de stat independentă) care restrânge numărul live, previzualizarea browse și publicul salvat, filetat prin campanie Apelurile de estimare/răsfoire ale publiculuiApi. Filtrul de plumb al declanşatorului de picurare avea deja Piaţa/Vendorul/Produsul cascadă; adaugă aceeași dimensiune de stat acolo, alături de cea existentă Trei, non-cascading.
· KlusterServices
Gazda calculatoarelor proprii ale unei orgi primeşte un certificat şi un traseu
calculatoarele sunt un alias standard acum pe /setup/dns, modul în care punctele se întâlnesc și semnează record ar rezolva și nu face nimic. Un certificat. calculatoarele se alătură SUBDOMAINS, care este lista per-org acest serviciu probleme de la. Fără ea, gazda unei orgi are DNS și nici TLS, care este un avertisment browser pe marca lor mai degrabă decât un birou de lucru. O cale de acces. Poarta de acces a potrivit Host.kamocrm.com) și nimic altceva, astfel încât un org Ar putea adăuga recordul, urmăriți studioul de configurare transforma verde și încă teren undeva că Nu este această poartă. Noile rute folosesc HostRegexp (............................................................... ***************** și fluxul./grafana. rutele deja utilizate. SEPARATE IngressRoutes mai degrabă decât extinderea normelor existente, și motivul este TLS. Rutele platformei au un nume secret explicit, care este singurul certificat care poate să fie numit înainte de timp; vine un chiriaș atunci când domeniul lor merge în direct. Lărgirea celor normele ar fi făcut un răspuns secret pentru fiecare domeniu chiriaș avertisment pe marca altcuiva, care este mai rău decât nici o rută la toate pentru că se pare ca şi cum Kamo şi-ar fi greşit domeniul. Rutele chiriaşilor lasă TLS la magazinul lui Traefik şi SNI, așa cum se întâlnesc, și stai la prioritate mai mică, astfel calculatoare. kamocrm.com se păstrează. Servirea fiecare org de la un regex mâinile nimeni nimic: conexiunea este aleasă de către semnat token, niciodată de numele gazdei, și un token ments un calculator pentru un membru pentru o sesiune.
· kamo-internal
Calculatoarele înregistrează pe studioul DNS
Încă o carte pe /setup/dns, astfel încât un org configurarea domeniului său se spune despre gazdă Computerele sale găzduite sunt deschise. Fără ea, un orga ar putea urma pagina la scrisoare, termina cu fiecare carte verde, și încă mai au un calculator care produce o filă browser care deschide și închide link-ul este construit din computere.<domeniu>, și un link către o gazdă fără înregistrare nu reușește înainte de orice cerere părăsește mașina. Necesar ca orice altă etichetă, mai degrabă decât numai pentru orgile care dețin aplicația. Recordul este ceea ce face ca aplicaţia să funcţioneze în ziua în care este pornită, şi un org trimis înapoi la ea Registrar luni mai târziu pentru o înregistrare este un org al cărui primul computer nu se deschide. Eticheta trebuie să se potrivească cu KnownAliases în serviciul de securitate exact le pins, pentru că o etichetă studioul necesită, dar verifica-dns nu emite un statut pentru nu raportează ca lipsă: domnișoara de căutare cade la "pending" și cardul stă la "Asteptarea DNS" pentru totdeauna, indiferent de zona clientului spune.
· SecurityService
Calculatoare este un alias standard, iar link-ul utilizează propria org
Fiecare org alb indică un set fix de etichete la Kamo și calculatoare nu a fost unul Dintre ei, astfel încât un org ar putea urmări / configurare / dns la scrisoare și încă mai au o gazdă Computer nimeni nu a putut deschide. Link-ul este construit din acea gazdă; un link către o gazdă cu nr. înregistrarea este o filă de browser care se deschide și se închide înainte ca orice cerere să părăsească mașina; cu nimic logat oriunde în Kamo și calculatorul în sine sănătos și treaz Pe tot parcursul. Patru liste se mută împreună sau deloc. DomainAlias ContractTest afirmă exact egalitate între KnownAliases, SSL PROBE LABELS și propria oglindă a studioului catalog, deoarece eșecul pe care îl protejează este tăcut: o etichetă de care studioul are nevoie dar verifica-dns nu emite un statut pentru cade prin "pending," astfel încât cardul stă la "Aşteptând DNS" pentru totdeauna, indiferent ce spune de fapt zona clientului. Asta este ceea ce s-a întâmplat în 2026. Necesar ca orice altă etichetă, mai degrabă decât numai pentru orgile care dețin aplicația. Recordul este ceea ce face ca computerele găzduite să funcţioneze în ziua în care este pornit, şi un org trimis înapoi la registratorul său luni mai târziu, pentru o înregistrare, este un org al cărui primul calculator nu Deschide. Acum liliacul foloseşte propria ospiciu. buildLink preia organizația și construiește https://computers.<its live domain>, via OrgLinkHosts.liveRootDomain același motiv: un domeniu care este configurat, dar încă neverificat ar trimite un membru la un gazda care nu se rezolvă. Spre deosebire de portalul împrumutat, care se încadrează înapoi la gazda platforma este CORECT aici mai degrabă decât o legătură ruptă. O poartă serveşte fiecărui chiriaş şi maşina este aleasă de către Semnat, niciodată de numele gazdei, astfel încât un org cu nici un domeniu live încă devine un lucru computerul se deschide pur și simplu pe calculatoare. kamocrm.com până când domeniul său este live.
· SecurityService
Listați numai pașii de pornire o organizație este întrebată
O organizație al cărei model de securitate stabilește fiecare răspuns de conformitate (nu produs un membru poate schimba, un interval de vârstă pentru fiecare tip de membru) a fost încă Numărată la nouă paşi. A trebuit să "salveze" un al nouălea pas gol înaintea lui vrăjitor închis ca terminat (raportat 2026-09-21, Gnosia). OrgSetupStepApplicability decide ce etape se aplică, din modelul aplicat. Astăzi doar conformarea poate renunţa. Pașii rezumatului, pașii completați și totalSteps, încuietoarea completăAt and lastStep all rula peste această listă. A pas înregistrat înainte de a opri aplicarea sejururilor stocate, dar nu este numărat, așa Se întoarce ticsit dacă modelul oferă vreodată o alegere acolo din nou. Dacă modelul nu poate fi citit, pasul este afișat: un pas afișat poate fi omis, a Una ascunsă nu poate fi atinsă. Regula reflectă obţinerea compatibilităţii kamo-internăStepui (ceea ce atrage pasul); Ambele sunt fixate de aceeași masă de caz. AplicedModelController citește acum politicile de produs și vârsta variază prin aceleași ajutoare, astfel încât obiectivul Iar regula nu poate să se destrame.
· kamo-internal
Un pas pe care organizația nu este solicitată nu este afișat sau numărat
O organizație al cărei model de securitate stabilește fiecare răspuns de conformitate (nu produs un membru poate schimba, un interval de vârstă pentru fiecare tip de membru) a fost încă a arătat un al nouălea pas spunând că nu era nimic de configurat. A trebuit să "salveze" acel pas înainte ca vrăjitorul să fie considerat terminat (raportat la 2026-09-21). SecurityService enumeră acum doar pașii pe care o organizație îi solicită, și pagina urmează această listă: șina, numărul "x de y," unde vrăjitorul CV-uri, ceea ce vine dupa ultimul pas, si un pas? pas= nu este listat. O sarcină utilă fără o listă utilizabilă încă citește ca fiecare pas, așa că o Răspuns malformat nu lasă niciodată un vrăjitor gol. conformareStepApplicies.test.ts pini obțineComplianceStepUi în același caz tabel ca SecurityService OrgSetupStepApplicabilityTest. Serverul decide dacă pasul este listat, iar această funcție decide ce atrage, astfel încât Doi trebuie să fie de acord.
· KlusterServices
Emite și oglindește certificatul pentru calculatoare.kamotrm.com
Deschiderea unui computer găzduit a produs o filă browser care a apărut și a dispărut. ă link-ul de lansare este corect și așa este simbolul: SecurityService builds Ale cui sunt astea? Gazda este implicita. Gazda nu are nici un certificat și nici un dosar A, astfel încât fila moare înainte ca ceva din Kamo să audă despre asta. Nici o cerere nu ajunge la Traefik, nimic nu este. înregistrat, și calculatorul stă AWAKE și sănătos tot timpul. Hc-https IngressRoute face deja trimitere la tls-computers-kamocrm-com după nume; Secretul nu a fost niciodată menţionat, deoarece acest serviciu este o listă explicită şi Computer.kamocrm.com nu era pe el. desktop.kamocrm.com este listat pentru exact Din acelaşi motiv, nimic nu loveşte nici o gazdă până când cuiva nu i se înmânează un link, deci nici nu este descoperit vreodată din jurnalele lui Traefik modul în care un domeniu chiriaș este. De asemenea, oglindit în face referire la secretul după nume în propriul său namespace. Asta nu face nimic până nu există înregistrarea A. Bucla sare peste o gazdă a cărei DNS nu rezolva, deoarece o provocare HTTP-01 împotriva acesteia nu poate fi răspuns: Sarping media.b11capital.com (DNS nu rezolva; HTTP-01 ar eșua) computers.kamocrm.com are nevoie de același record A ca kamocrm.com și desktop.kamocrm.com, 47.181.8.84. Acea parte este la furnizorul DNS, nu aici. Odată ce rezolvă, aceste probleme într-o buclă și reflectă secretul fără alte acțiuni.
· kamo-internal
Lista de mesaje denumește o pistă sau un contact, nu adresa acestora
Un rând a fost condus de numele de afișare expeditorului, sau partea de adresa înainte de @ atunci când nu a fost nici unul, astfel încât un plumb care a scris în citit ca "jlrivera1984" deasupra "jlrivera1984@mail.exemplu." Cipul antet Deja prefera numele propriului nostru record, dar lista nu a cerut. VirtualMessageList rezolvă acum corespondenţii fiecărei pagini încărcate alături de Avatarele sale (o cerere pe loturi, cache pe adresă pentru sesiune) și conduce rândul cu numele înregistrat: un coleg, un contact salvat sau - New with EmailService d3d6e03 - a lead. Monograma scrie acelaşi nume. Cartea de corespondent etichetează un plumb "Lead" și oferă "View Lead.".
· kamo-internal
Lista de mesaje denumește o pistă sau un contact, nu adresa acestora
Un rând a fost condus de numele de afișare expeditorului, sau partea de adresa înainte de @ atunci când nu a fost nici unul, astfel încât un plumb care a scris în citit ca "rodarisdolgovanton" de mai sus "rodarisdolgovanton@gmail.com." Cipul antet Deja prefera numele propriului nostru record, dar lista nu a cerut. VirtualMessageList rezolvă acum corespondenţii fiecărei pagini încărcate alături de Avatarele sale (o cerere pe loturi, cache pe adresă pentru sesiune) și conduce rândul cu numele înregistrat: un coleg, un contact salvat sau - New with EmailService d3d6e03 - a lead. Monograma scrie acelaşi nume. Cartea de corespondent etichetează un plumb "Lead" și oferă "View Lead.".
· EmailService
O pistă care scrie în este numit de către soluţionar corespondent
Lista de căsuţe poştale a condus un mesaj de plumb cu partea din adresa lor înainte de @ (jlrivera1984) atunci când clientul lor de e-mail nu a trimis nici o afișare nume, deși orga le deține ca un plumb ("Jordan Rivera"). Rezolvatorul cunoşteau colegii şi salvau doar contactele. Soluţionarul corespondent câştigă un al patrulea nivel, LEAD (după CONTACT), cu lead's name, company and leadId (a string: uids pass MAX SAFE INTEGER). LeadCorespondents răspunde doar ceea ce grila de plumb ar arăta cititorul: VECHI LEADS necesare, o nevoie de plumb nealocat A vizualiza UNASsignED LEADS (lame) închis pe produse gratuite-pentru-toate), nici un telefon ( info de contact este etajat de drepturi această carte nu verifică), și fiecare plumb numit este scris phi access log ca LISTA citită într-o org PHI, via AudiencePhiAudit. conduce a avut nici un index pe adresa: căutarea mers toate ~790k de org lui reporter conduce în 9,8 s. ix leads org email lower pe (org id HASH, inferior (trim(email)))))) este în db/lides-email-lookup-index.sql și a fost aplicat de mână ca proprietar înainte de această desfășurare; planul generic acum ia 3.4 ms.
· EmailService
O pistă care scrie în este numit de către soluţionar corespondent
Lista de căsuţe poştale a condus un mesaj de plumb cu partea din adresa lor înainte de @ ("rodarisdolgovanton") atunci când clientul lor de e-mail nu a trimis nici o afișare nume, deși org le deține ca un plumb ("Anton Dolgov"). Rezolvatorul cunoşteau colegii şi salvau doar contactele. Soluţionarul corespondent câştigă un al patrulea nivel, LEAD (după CONTACT), cu lead's name, company and leadId (a string: uids pass MAX SAFE INTEGER). LeadCorespondents răspunde doar ceea ce grila de plumb ar arăta cititorul: VECHI LEADS necesare, o nevoie de plumb nealocat A vizualiza UNASsignED LEADS (lame) închis pe produse gratuite-pentru-toate), nici un telefon ( info de contact este etajat de drepturi această carte nu verifică), și fiecare plumb numit este scris phi access log ca LISTA citită într-o org PHI, via AudiencePhiAudit. conduce a avut nici un index pe adresa: căutarea mers toate ~790k de org lui reporter conduce în 9,8 s. ix leads org email lower pe (org id HASH, inferior (trim(email)))))) este în db/lides-email-lookup-index.sql și a fost aplicat de mână ca proprietar înainte de această desfășurare; planul generic acum ia 3.4 ms.
· kamo-internal
Membrul care a cauzat o notificare deschide cardul lor de la ea
"Dana Reyes ţi-a făcut-o," "S-a sincronizat cu Dana Reyes," un card necitit al cărui corp este expeditor: EmailService (29cb21e) trimite acum actorulMemberId (ca text) și actorName, numele exact ca titlul sau corpul îl scrie, iar clopotul desenează acea întindere de text ca numele membrului. - NotificareaText taie numele din titlu (altfel decât organismul) o dată, la prima apariţie; Orice altceva citeşte exact ca înainte. Folosit de toast, rândul istoric (clickToggles={fals}: rândul deschide notificarea) și dialogul de detaliu. - Cardul unui toast se deschide la nivelul punţii. MemberHoverCard/MemberName take zIndex, and the toast trece NOTIFICARE DECK Z (1500, acum o constantă cu puntea proprie). La cardul 1305 deschis sub puntea din care a venit; la acelaşi nivel se pictează peste ea (se anexează la <body> mai târziu) și încă sub propriile sale vârfuri de unelte (apendice mai târziu încă). - NecititChatNotifier trimite expeditorul ca actor, niciodată pentru Exec2Exec. Serverul păstrează de asemenea o Actor pe / sine numai din organizația apelantului propriu. - Spec "Așa cum a fost construit": paragraful notificări. Verificat: tsc; eslint (nimic pe linii modificate); 19 gărzi repo; Vitest (notificări, membrii, lib, setări, chat; puținele care temporizat sub trecerea de sarcină mașină pe cont propriu); și a Sonda Chrome că numele rămâne în linie în titlul cu două linii de pâine prăjită și rândul de istorie Ellipsa încă rezistă.
· kamo-shared-library
Aplicația Notes este "Note și liste de verificare"
Aplicația Notes deține liste de verificare, precum și din 2026-09-23 (pași bifați Aşa cum se face, un pas care aşteaptă paşii înainte de a fi terminat, o listă de verificare programată pe calendar), și se numește "Notes & Checklists" oriunde este numit. Tipul de serviciu.Note poartă nume de afișare nou și o descriere care acoperă ambele, care este ceea ce Aplicații & Caracteristici, Tipuri de ramură și vrăjitorul org-creat arată o dată Serviciul de securitate este reconstruită. Copiați numai: numele constant și id-ul sunt neschimbate, astfel încât nici o grant stocate sau miscari pe rand. ServiceTypeClientCopy Test pins numele și că descrierea menționează listele de verificare.
· MediaService
Hold'em invita și memento întâlnire spune cine sunt de la
MembruNotificareClient.raise câștigă o supraîncărcare care transportă actorulMemberId/actorName (ID-ul trimis ca text; vechea semnătură este neschimbată și nu trimite niciuna). HoldemInviteMessenger trece dealerul ("Dana Reyes te-a tratat în"); MeetReminderSweep trece creatorul întâlnirii atunci când titlul le numește ("Weekly Sync · Dana Reyes"), citind creatorul o dată mai degrabă decât în interiorul titlului(). Serviciul de e-mail păstrează Pereche și kamo-internă desenează acest nume ca carte de membru. Un e-mailservice mai vechi decât câmpurile Îi ignoră. Teste: HoldemInviteMessengerTest (+1; verificările sale de ridicare iau noua suprasarcină); MeetingReminderActorTest (2), *************** (2). Apartament complet: 1060 Run, 0 eșecuri.

Universul tău te așteaptă.
Începeți gratuit în câteva minute.Adăugați produse oricând sunteți pregătit — fără migrare, fără autentificări noi.
Gratuit pentru totdeauna — nu este necesar un card de credit