Mergi la conținut
KAMOUniverse

Jurnal de schimbări

Ce e nou.

Fiecare îmbunătățire a platformei, pe măsură ce se livrează.

  1. · kamo-internal

    Ascunde departamentele goale, mută filtrul de stare în Directory

    - Departamentele fără membri nu mai fac. Obiectivul final al departamentului întoarce fiecare departament din org inclusiv cele goale, astfel încât lista a fost arată secțiuni care nu ar putea conține pe nimeni. Per-departament "nu Locatarul membrilor merge cu ei, fiind inaccesibil acum. - Filtrul All/Online/Offline se mișcă de la antetul la nivelul panoului de dedesubt banda fila, astfel încât să stea în zona proprie Directory cu lista filtre în loc să apară pentru a filtra întregul panou (nu s-a aplicat niciodată Chats sau Mobile Access). - Starea goala sugereaza ajustarea cautarii/filtru numai cand este aplicat efectiv; un org fără membri nu are nimic de ajustat.

  2. · kamo-internal

    Reconstrucți diapozitivul ca o singură suprafață continuă

    Rândurile membre formează acum corpul de departament direct și departamente rula plin de sânge cu benzi lipicioase, revendicare ~30px de lățime rând și tăierea cromului în fața primului membru de la 228px la ~170px. Aranjament - Ștergeți stiva card-in-card: rândurile sunt plate, separate, lățime completă. - Banda de departajare Sticky (cu o nuanta primara de 8%, niciodata alb pe prima) care transportă chevronul de divulgare, un contor de prezență live, un on-line/total fracţiune şi un comutator Select. Picătură pictograma identică per-department Group. - Un fundal în loc de trei gradienti stivuite; un pergament tac. - Starea este purtata de un punct pe avatar plus un cuvânt numai atunci când adaugă informații, înlocuind cinci codări per rând cu aceeași valoare. Comportament - Clic Row deschide chat-ul 1:1. Înainte nu a făcut nimic: MemberList niciodată Pass onClick, astfel încât un rând click complet stil a fost inert. - Restaurarea filtrului All/Online/Offline, care a existat doar în cadrul MemberList antet statusFilter fixat la "toate." Luat în NavTopPanel lângă câmpul de căutare. - Multi-select câştiguri câştiguri reale: un Selectați comuta pe bandă, ctrl/cmd-click, și atingeți lung-presa; o bară de selecție se ridică de la prima selecție. - Un dialog de întâlnire ridicat în loc de unul montat pe rând, și propria membreId este filetat în jos în loc de fiecare rând aducerea /api / utilizator-info. Moţiune - MotionConfig redutedMotion="user," plus prefera-reducere-miscarea gardienilor pe Cheile CSS nu pot fi atinse. - intrare de secţiune blocată, ramer inaltime-colaps cu un chevron rotativ, recurgerea rândului de primăvară, numărătoare de kilometraj, pop necitit, diapozitive cu file direcţionale. Accesibilitate - Semantica dezvăluirii reale, rânduri ul/li, un buton rând întins cu frate Acţiuni, focalizare capcană cu focalizare restaurată, navigaţie cu tasta săgeată, o regiune live politicoasă pentru selecție, și o serie de obiective de tip >24px. - Deschizătoarele de panouri din NavTop erau cutii nefocalizate; acum sunt butoane. - Rândurile de chat au fost doar divs click cu nici o cale de tastatură; acestea sunt elemente listă cu butoane reale și nume accesibile. Theming - Nou -- pe-primar semn de text atât de alb pe un chiriaș primar ușor este fixabil. - Paleta de disponibilitate comună se încheie NavTop/MemberItem nue drift, și firul de păr încetează să se refere --color-primar-rgb, o variabilă nu este niciodată definită. - Timbre relative trec prin Intl în loc să emită hardcoded English, and last-active etichete ticking again via one shared 30s clock.

  3. · SecurityService

    Detectarea și alertarea cu privire la pista de audit cu acces record

    fil access log a acumulat dovezi la care nu se uită nimeni. Care satisface §164.312(b) Articolul 164.308 alineatul (a) punctul (1) punctul (ii) punctul (d), care solicită revizuirea sau articolul 164.400-414, al cărui ceas Nu pot începe până nu observă cineva. Acesta este lucrul care observă. Cinci detectoare pe oră închisă, per actor: BULK EXPORT 250 de înregistrări distincte exportate/descărcate/dezvăluite MASS READ 200 de înregistrări distincte citite REPEAT DENIALE 10 tentative refuzate (evenimente OFF HOURS ACCESS 20 de înregistrări distincte în afara săptămânii TENANTului PLATFORM STAFF ACCESS 1 Contele sunt înregistrări DISTINCT, nu evenimente: PhiAccessAuditor emite un rând LISTA pe rând grilă, astfel încât un membru reîncărcare aceeași pagină patruzeci de ori este 2.000 evenimente şi 50 de persoane şi "cât de multe persoane" este numărul o încălcare se efectuează evaluarea. Rationale pentru fiecare implicit este pe PhiDetectionSettings; toate acestea sunt configmap-tunabile, deoarece un detector care trage constant Se muta şi un detector de mutaţii încă mai citeşte ca acoperire. Off-oră este judecat în zona chiriașului prin intermediul său existent OFF HOURS ACCESS regula (orele de afaceri ecranul de securitate colectează deja) se încadrează înapoi la Organizare. fus orar. wave at is UTC, so a UTC-anchored check would page un chiriaş Sydney în fiecare dimineaţă muncind şi niciodată să nu chemi unul din New York. Livrarea reutilizează ceea ce există: EmailTemplateServiceClient -> Serviciul de e-mail /api/email/templates/trimite cu noua cheie canonică PHI ACCESS ALERT, către adresa org deja înregistrat în org suspicios detection reguli - Notificare email-uri. Un chiriaș care configurat nici unul devine jurnalul de revizuire și nimic altceva Membrul forței de muncă este suspectat. Fiecare constatare este autentificată la un dedicat Logger PHI-DETECTION; numai notificarea este accelerată (6h per detector/tenant/ actor, în Redis regulile de conectare-anomalie deja utilizate). Alerta transporta identificatori și conteaza, niciodata un record. Două alegeri structurale deliberate: - agregate rula printr-o entitateManager, nu Spring Data @Query. Primăvară Datele validează o interogare declarată prin crearea ei în depozitul boottrap, astfel încât greșeală acolo nu context startup începe să ia fiecare login cu ea, ca pe 2026-08-03. Aici cel mai rău caz este un Măturaţi jurnalele şi reţineţi ora viitoare. De asemenea, acesta elimină acest pachet din @EnableJpaRepositorii întrebare în întregime: nici fasole depozit, nimic la Uită. PhiDetectionQueryTest verifică fiecare cale de proprietate în mod reflectiv de atunci nici un test în acest serviciu nu poate porni un context. - Fiecare interogare este constrânsă de organizaţie. Numai phi access log indicele utilizabil este (ORGANIZATION ID, OCCURRED AT); filtrarea numai la timp Scanează complet o masă care nu creşte decât odată. Schituling: acest lucru se alătură sarcinaScheduler (4 fire, Sched-), care șapte matura Împărţim deja. Nu atinge traducereaExecutor @Async pool a observat saturații și nu se supune niciunui executor. Oral, cinci agregate grupate pe lot de chiriași, nicio rețea I/O în interiorul scanării și o blocare reintrare astfel încât o rulare lentă sare următoarea căpușă mai degrabă decât stivuire În spatele ei şi înfometarea piscinei pe care o are. Nicio entitate sau coloană nu a fost adăugată sau modificată.

  4. · EmailService

    Variabilele de previzualizare pentru PHI ACCESS ALERT

    Fără un eșantionVariables braț admin e-mail șabloane previzualizare redă fiecare titular gol, astfel încât oricine este rugat să aprobe formularea unei garanții Alerta vede o masă goală. Modelele de eșantion identifică și numără numai aceeaşi formă pe care o poartă adevărata alertă, pentru că adevărata alertă nu poartă niciodată o Înregistrează.

  5. · kamo-shared-library

    Șablon canonic PHI ACCESS ALERT

    Revizuire pe oră a serviciului de securitate fi access log are nevoie undeva pentru a trimite ce găseşte. Decât să inventeze un canal pe care îl foloseşte calea ferată de e-mail, ceea ce înseamnă o cheie canonică: absent de la CANONIC KEYS un șablon nu poate fi însămânțat, niciodată nu se auto-vindecă, și fiecare trimite returnează un permanent Pak şi nu livrează nimic. Modelul poartă identificatori, numere și doar o fereastră temporală. Detectare Artefact care reproduce ceea ce a detectat a mutat PHI într-o casetă cu nici o politică de reținere, astfel încât nu există în mod deliberat nici un titular al unei Înregistrează. PhiAccessAlertTemplateTest ace care, și pini cele două eșec tăcut moduri: un titular nimic nu furnizează ca un șir gol cu doar o RĂZBOIUL, şi făcătorul nu scapă HTML, aşa că orice ajunge la corp Foloseşte geamănul evadat. EmailService trebuie să redistribuie această legătură comună înainte de începerea serviciului de securitate trimiterea; până atunci trimiterea este prinsă și constatarea rămâne numai review-log.

  6. · kamo-internal

    Oglindeşte masca minimă necesară a clientului (§164.502(b)))

    Securitatea Serviciul reţine acum răspunsuri personalizate de la un apelant care nu este Atribuit de plumb (și, într-un chiriaș hackerPhi, chiar de la un titular de dreapta 161). Aceasta masca este de aplicare; acest lucru nu este. Două căi încă ocolesc: - LeadRealtimePublisher pune un întreg, nemurit LeadDTO pe securitate.conduce.rt.{orgId} org, cu nici o proiecție per-recipient posibil. Până la acel eveniment Doar identificatorii și reactivii clientului, aplicația/lib/lider/liderFieldMask.ts este Singurul lucru dintre răspunsurile de admisie ale unui coleg și fiecare geam deschis de plumb în chiriaş. LeadViewClient rulează acum de intrare în timp real sarcini utile prin ea înainte ca oricare dintre ele să ajungă la stat. - Închiriere: un formular ascuns și o nu-umplut-in ajunge în căutarea identice, astfel încât decizia trebuie să fie redefinită, nu deduse. Forma personalizată vedere scade sale Editare accesibilitate atunci când răspunsurile sunt restricționate forma ar pune {} peste răspunsurile reale, care serverul acum 403, oricum. Organization.handlesPhi este livrat pe coloana existentă -> DTO - > OrgContext calea (entitatea de org deja o în serie; schema de zol și Organization.from JSON permis-list au fost link-urile lipsă), nu un al doilea canal. Nicio nouă copie vizibilă a utilizatorului: eticheta explicativă "restricționată" are nevoie de o cheie în traducere-dicționar repo și este în mod deliberat lăsat pentru această schimbare.

  7. · SecurityService

    Mascarea minimă necesară a răspunsurilor la formularul personalizat de plumb (§164.502(b)))

    Singura mască de câmp a platformei a fost aplicată. de LeadController.getLeadById la un apelant care nu este nici Dumnezeu, nici delegatul și Ifree view LEAD CONTACT INFO Others (161). Acesta acoperă e-mail, telefoane, data nașterea și părțile de stradă ale adreselor de mail/proprietate și nimic altceva. personalizatFormData a mers direct prin ea, care este singurul loc de pe platforma a Chiriaşul de la asistenţă medicală va pune întrebări despre aport şi simptome. LeadFieldMask deține acum decizia și proiecția: - orice org: raspunsuri personalizate cu masca de contact. Dacă nu puteţi vedea E-mail-ul liderului e posibil să nu vezi ce a răspuns. - handlesPhi chiriași: răspunsurile sunt reținute de la oricine plumbul nu este atribuit La dreapta 161. Acest drept este reglementat, pe nume propriu, de a contacta informații; un răspuns simptom nu este informații de contact. Titlul forma merge De asemenea, "Diabetes Intake Question" dezvăluie condiţia pe cont propriu. Forma de intrare supraviețuiește mascarea transportă doar ID-ul său, astfel încât UI poate spune "restricționat" în loc să se facă un chestionar martor. O org care nu va încărca este trataţi ca fiind trataţi cu PHI, potrivindu-se cu poziţia de negare a lui PhiTenantStatus. Pune / plumb / {id} câștigă poarta scrie simetric. Editorul formei pune întregul fieldValues map, so without it un membru a arătat un chestionar gol care a apăsat Salvare ar fi înlocuit răspunsurile reale cu {} devine o ștergere tăcută. Utilitar static, fără stereotip și fără depozit: decizia este pură și Apelantul deţine deja orga.

  8. · kamo-internal

    Vizualizator de audit acces PHI

    Urma era scrisă şi nimic nu o putea citi. Aceasta este jumătatea ecranului: o revizuire a accesului la scară largă în cadrul Setări → Securitate, și un "care a accesat acest dialog record" deschis din plumb în sine, care este forma unui §164.528 cererea de contabilitate ajunge de fapt în nu cineva cu timp pentru a filtra un jurnal global. Trei lucruri aici nu sunt cosmetice. Stampile temporale sunt absolute și întotdeauna numele zona au fost redate în, cu un Comutator cu un clic pe UTC. Această dovadă este citită luni mai târziu de cineva care a fost nu sunt prezente; un perete-ceas gol citit dintr-o altă zonă în tăcere se misplace un accesul cu orele, care este diferența dintre "în timpul schimbării" și "la 3am." Timpii relativi sunt excluşi în mod direct Încercările respinse și accesul personalului platformei sunt marcate pe rând (țint, regula stângă, pictogramă lider) mai degrabă decât lăsat într-o coloană ochi sare, deoarece o conformitate Ofițer scanează sute de rânduri pentru cel care nu ar trebui să fie acolo. Ordinar citire sunt în mod deliberat simplu: decorarea totul este la fel ca decorarea Nimic. Refuzat outranks platforma-personal atunci când un rând este atât de Kamo personal fiind refuzat este cea mai interesantă linie pe care o poate arăta ecranul. Exportul se face la export ACCESS Logs separat de dreptul de vizualizare și un 503 din amonte este la suprafață ca "nimic a fost dezvăluit" mai degrabă decât netezit într-o eroare generică. Exportul este un tip de audit închis: refuzul înseamnă dezvăluirea nu a putut fi înregistrată, ceea ce este un rezultat corect de care are nevoie ofițerul pentru a vedea. Clădire de întrebări, formatare de ștampilă de timp și clasificare de rând live în aplicație/lib astfel Vitest poate ajunge la ele; componentele sunt asamblare. Un 403 nu cade niciodată la o grilă goală "nimeni nu a atins vreodată acest record" este cel mai periculos greșit Răspunde la acest ecran poate da.

  9. · kamo-internal

    Retitle pagina membru la Profil, scurta etichete tab, adăuga iconițe tab

    Antetul paginii de setări pentru membri devine "Profilul meu {membruLabel}" (sau "{membruLabel} Profilul" pentru un alt membru) și link-ul Nav-top devine Profilul meu. Etichete fila scurta Permisiuni, Activitate rubrici descriptive prin intermediul unor noi ***************** Cheile. Fiecare filă poartă acum o pictogramă în bara de file; file interogare-param ids sunt neschimbate atât de profunde link-uri continua sa lucreze.

  10. · kamo-internal

    Tone slider

    A per-membru fundalTone ui-preference (0 alb / 50 culoare completă / 100 negru) redat ca o spălare deasupra crim lizibil în ambele consolă strat de slideshow şi scena WYSIWYG a editorului. Slider trăiește în etapa lui media crom cu previzualizare live drag, centru fixa, și persist-on-release.

  11. · kamo-internal

    Cartelele de lansare și eroul folosesc culoarea mărcii org în loc de accentele permodul

    Cartelele de opţiuni ale lansării casei, trageţi peste şi primul erou acum. ia accentul lor de la var (--color-primar) (orgului dinamic set Tema de culoare) mai degrabă decât multi-color fix --accent-* harta familiei.

  12. · kamo-internal

    Break-glass zeu mode

    Modul lui Dumnezeu nu avea deloc UI în kamo-intern: un boolean local Storage pe care un munte Efectul s-a oglindit în ***, reafirmat pe fiecare filă nouă pentru totdeauna. Care a făcut browser autoritatea cu privire la dacă personalul platformei au fost ridicate, și a făcut elevație ceva în care ai putea fi fără să te hotărăşti să fii. - GodModeJustificationDialogul cere motivul înainte de a se ridica. Un motiv colectat ulterior este un motiv scris pentru a se potrivi ceea ce a fost deja făcut. Copia declară clar ce va vedea operatorul şi că numele lor va apărea pe el. - GodModeIndicator este o bara de jos latime completa plus un cadru rosu in jurul intregului vedereport, cu o numărătoare inversă live și "Sfârșit acum." Cineva care uită că sunt înăuntru. modul zeu este exact scenariul de control există pentru a preveni, astfel încât nu este un Insigna subtilă fluxul de aspect, astfel încât să nu intercepteze un clic sau reflux un ecran. - Ambele sunt montate o dată în aspectul rădăcină, lângă AutomatLogoff, astfel încât Indicatorul este prezent oriunde ajunge operatorul mai degrabă decât pe ecrane Cineva şi-a amintit. Nu dă nimic dacă sesiunea nu e de la Dumnezeu. - Serverul deţine statul. app/lib/godMode deține un singur magazin cu cărbune; Clientul citeste doar vreodata serviciul de securitate expirat stampilat si nu se poate extinde niciodata it. setIsGodMode este plecat Setter. - Sondajul de stare se dubleaza ca clar durabil: GET /session / God-mode este unde SecurityService scrie o elevație scursă din Redis pentru serviciile care să citească sesiunea în mod direct. UtilizațiPlatformAdminGuard așteaptă acum statutul de Dumnezeu pentru sesiuni eligibile de Dumnezeu. Accesul folosit pentru a fi lizibile sincron de la Storage locale; fără așteptare o operator cu o fereastră deschisă ar fi sarit la /setarea în decalaj. Stringurile sunt în ***************** (Pushed primul, pe comanda clonei clădirii). npx vitest run: 329 trecut (32 fişiere), 17 dintre ele noi. curat.

  13. · SecurityService

    Citiţi traseul de acces al PHI

    Traseul a fost scris pentru o vreme și nimic nu a putut citi, care a lăsat două obligații nesatisfăcute: o contabilitate a informațiilor pentru înregistrarea unei persoane (§164.528) și revizuirea periodică a activității sistemului informatic (§164.308(a)(1)(ii)(D)). Ambele sunt întrebări. Aceasta adaugă suprafaţa de interogare. Autorizarea este caracteristica, nu grila. Organizaţia este luată de la sesiune și de nicăieri altundeva handler, și PhiAuditQueryService este un singur punct de sufocare care adaugă chiriașului Predicate înainte de a consulta chiar filtrul. Patru metode de interogare frate ar Au fost patru şanse să uite. Scopingul este o clauză DE UNDE mai degrabă decât o după filtru, deoarece filtrarea unei pagini returnate ar lăsa elemente totale numărarea rândurilor apelantul nu poate vedea. Partea citită are propria interfaţă a depozitului. PhiAccessLogRepository Finders sunt în mod deliberat cross-tenant dacă este înmânat unui ecran de client punctul ia o specificație. Trăieşte sub com. kamo. Serviciul de securitate, care @EnableJpaRepositores entry covers already, so no scan change is needed şi nimeni nu poate fi uitat. Drepturile sunt VERY ACCESS Logs (29) și EXPORT ACCESS Logs (32) Deja poartă jurnalul de autentificare, deci oricine administrează securitatea astăzi Pot folosi asta în prima zi. Un nou ID ar fi trimis ecranul mort: are nevoie de un kamoInitializer rula și un grant înainte de orice membru deține unul. Citirea traseului este ea însăși înregistrată, ca RAPORT / CĂUTARE pentru o citire și RAPORT/EXPORT pentru o copie, inclusiv tentative refuzate. Criteriile de căutare sunt: neînregistrate ceea ce a fost căutat acumulează identificatorii pe care există pentru a proteja. Totul este limitat: cleme de dimensiunea paginii la 200, un capac de export la 10.000 de rânduri. Un traseu de șase ani este de milioane de rânduri și stratul de captare scrie un rând pe rând grilă pe sarcină, astfel încât o dimensiune unclamped este un OM accesibil mai degrabă decât un Teoretic. Ștampile de timp pleacă ca instantanee UTC explicite. Coloana este zona-mai puțin perete-ceas, Iar această dovadă este citită luni mai târziu de cineva care nu era acolo.

  14. · kamo-internal

    Comment

    Două suprafeţe de setări pentru backend-uri care nu aveau. Înscrierea MAE (setări → profilul meu → Sign-in Security, numai pe sine). Obiectivele finale ale Serviciului de Securitate au fost complete şi complete. De negăsit, deci MFA a existat şi nimeni de pe platformă nu l-ar putea porni. ă fila este de sine stătătoare, deoarece aceste criterii de evaluare rezolvă utilizatorul din propriul apelant sesiune și să ia nici un parametru de utilizator şi-ar înscrie propriul autentificator pe acel ecran. Codul QR folosește qrcode.react, deja o dependență; nu a fost adăugat niciun pachet. ă secret este afișat lângă el indiferent, deoarece o aplicație de autentificare pe același dispozitivul deoarece browserul nu poate scana ecranul pe care îl acoperă. Două căi de eșec obține de primă clasă de manipulare mai degrabă decât o eroare generică. A 409 înseamnă un factor confirmat deja există și spune așa, cu remediul (un administrator resetare) o acţiune care nu poate reuşi. Un cod de confirmare greșit păstrează în așteptare înscriere: secretul este afişat o dată, deci aruncarea acestuia ar însemna ştergerea intrarea și rescanarea autentificatorului, iar serverul este în curs de înscriere ar fi încă acolo, astfel încât rejudecarea ar veni înapoi 409 și le bloca. Codurile de recuperare sunt afișate o dată și nu pot fi reemitete. Dialogul nu poate fi respins prin evadare, fundal sau buton de închidere; codurile au fost copiate sau descărcate ȘI avertismentul recunoscut. Ambele sunt necesare: o cutie de checkbox singur este click reflexiv, și un clipboard singur este suprascris de urmatoarea copie si nimic nu arata gresit pana in ziua in care utilizatorul îşi pierde telefonul. Limita PHI (setări → securitate → → Date de sănătate, numai eligibile pentru Dumnezeu). Tabula este vizibile pentru operatorii eligibili de la Dumnezeu și controlul interior necesită modul Dumnezeu de fapt pornit, pe care Serviciul de securitate îl reverifică; eligibilitatea nu este numai Activare. Niciodată nu se răstoarnă fără prima listare a modulelor care nu mai funcționează PhiTenantGuard, deci nu se poate abate de la ceea ce se aplică. A 503 este la suprafață ca "schimbarea nu a fost aplicată deoarece nu a putut fi înregistrată," deoarece aceasta este ce s-a întâmplat. Logica de decizie trăiește în aplicație/lib/securitate astfel încât vitest poate ajunge la ea; componentele Doar redă. Verificat: npx vitest run NPX TSC --noEmit raportează doar trei erori în ************* un fişier nedetectat de la o altă sesiune în acest copac, în nici unul dintre dosarele de aici.

  15. · SecurityService

    Punct final pentru citirea și mutarea limitelor HIPAA ale unei organizații

    Organizare.handlesPhi a existat ca o coloană fără nici o modalitate de a seta, așa PhiTenantGuard a fost aplicarea unui steag nimeni nu ar putea porni. Aceasta este Lipseşte jumătate: GET/PUT /api/security/phi/tenant. Autoritatea este eligibilitatea lui Dumnezeu ȘI un zeu activToggleModeActive, niciodată unul. Eligibilitatea numai este ceea ce a lăsat porţile zeilor platformei moarte până în 2026-07-22; Aici ar lăsa orice operator eligibil de Dumnezeu să oprească modulele unui chiriaş viu. cu un singur clic de neuitat. Ținta este întotdeauna propria sesiune a apelantului org Chiriaşul nu e deja înăuntru. FiEfficientDate este ştampilat pe primul activ şi niciodată rescris, inclusiv pe o mai târziu dezactivați/re-enable. Acesta acoperă ferestrele de evaluare a încălcării și de reținere, Astfel, mutarea sa în viitor ar reduce în liniște perioada examinată și un audit data la care cererea poate avansa nu este o dovadă. Rândul de audit este scris Inainte ca steagul se misca, si CONFIGURE esueaza inchis, asa ca o traseu care nu poate fi scris refuză schimbarea și se întoarce 503 mai degrabă decât Lăsând o limită care s-a mişcat fără să ştie când. Încercările sunt respinse. înregistrat prea. Fiecare rând poartă identificatori și doar tranziția, niciodată conţinut. Module blocate este derivat din PhiModule prin PhiTenantGuard, mai degrabă decât listat, astfel încât avertismentul IU arată nu poate deriva de la ceea ce pune în aplicare paznicul. Nici un nou pachet depozit: OrganizationRepository este deja în acest serviciu @EnableJpaRepositorii lista, astfel încât nu există nimic de adăugat alături de această fasole. Verificat: 298 teste, 1 eroare ***************** ENTITATEManager NPE, care este preexistentă (baza de referință la 7968a21: 281 teste, aceleași 1 eroare). Depozitul ScanCoverageTest și ******************* atât Pas.

  16. · kamo-internal

    Reconstruiește forma de citat ca un flux ghidat, adaugă o previzualizare ieșire

    Tabula detalii a fost un stiva plat de cutii conturate care a dat fiecare domeniu la fel greutate, deci nimic nu a semnalat care intrări schimba de fapt ceea ce vede clientul. Acesta acum citește ca cele patru decizii se face un citat de vândut, modul în care este ajustat, ceea ce citește clientul Problema este că, în total, funcţionează într-o şină lipicioasă, în loc să fie îngropată la fund. Moțiunea poartă mai degrabă sens decât decorare: secțiunile ajung în ordine, a Câmpul condiționat se extinde de la controlul care l-a arătat, zona de stabilire a prețurilor eco-fade atunci când forma sa se schimbă, și un total contează la noua valoare, astfel încât un tip greșit prețul unitar este observat în loc de absorbit în tăcere. Toate acestea respectă preferă mişcarea redusă. Noua acţiune Previzualizare redă documentul finit totaluri, termeni şi printuri pe cont propriu. Proiectul proiectează statul redactor CURENT, nu statul salvat record, deoarece momentul în care aveți nevoie pentru a vedea citatul terminat este în timp ce decide dacă să-l trimită. Branding vine din propria rezoluție a serverului, astfel încât previzualizat antetul este cel pe care clientul il primeste, iar aritmetica optiunii este importata din Mai degrabă editor decât reinstalat.

  17. · kamo-shared-library

    Vocabularul de audit pentru o modificare a limitelor de conformitate în sine

    Adaugă PhiResourceType.ORGANIZATION și PhiAccessKind.CONFIGURA astfel încât de cotitură Organization.handlesPhi on sau off poate fi înregistrat ca ceea ce este. Fiecare tip de resurse existente nume recordul unei persoane. Depunerea unei modificări a postura de conformitate chiriaș sub unul dintre ei ar pune o minciună în §164.528 contabilitatea informațiilor și "când a devenit acest chiriaș o entitate acoperită" asociat de afaceri" este întrebarea restul traseului este domeniul de aplicare împotriva are nevoie de propria formă de rând, nu una împrumutată. CONFIGURE eșuează închis pentru un motiv diferit de tipurile de vrac: nimic nu este Dezvăluit, astfel încât refuzul costurilor operatorul o rejudecare, în timp ce o limită care a mutat fără nicio înregistrare a momentului în care statul nu poate reconstitui o evaluare §164.402. Nu implică schema. phi access log.RESOURCE TYPE și ACCES KIND sunt simple VARCHARS create de PhiAccessTabelMigration with no enum whitelist Check, so nici constant nu are nevoie de un kamoInitializer rula înainte de a putea fi introdus, și nu entitate sau @Column este atins. Verificat nici un comutator exhaustiv peste oricare enum există în orice serviciu.

  18. · SecurityService

    Serveşte vizualizarea clienţilor către personal pentru previzualizare

    GET / {uid} / preview returnează același PublicQuoteView link-ul de acțiune servește, de la Același citatRezoluțiePresenție, astfel încât un antet previzualizare nu poate diferi de un trimis Unu. Acesta nu ment în mod deliberat un jeton, conta o vedere sau înregistra un eveniment la propriul proiect nu este angajarea clienților, și permițându-l în traseul de activitate ar face tejgheaua inutilă ca semnal.

  19. · ConversionService

    Scanarea uploadurilor pentru malware la ingerare (§164.308(a)(5)(ii)(B)))

    Seiful documentelor a acceptat upload-uri arbitrare fără scanare malware oriunde pe platforma, și este multi-tenant deschis de utilizatorii unui alt org prin intermediul vizualizatorului, editorului WOPI și liant. ClamAV peste INSTREAM, vorbit direct la retras (nici o bibliotecă client; protocolul este o priză și un prefix lungime). Poarta intră. ImagingUploadController on /upload and /templates/upload, before the member Lookup și înainte de orice octeți ajunge la MinIO obiect retrievabil pentru lățimea cursei. Comportamentul de neatins al scanerului este DESCHIS în mod implicit, iar aceasta este o decizie Mai degrabă decât un accident. nu s-a aplicat încă: aceasta este cererea jumătate, iar desfășurarea este un act operațional separat (KlusterServices) se aplică automat la împingere și nu este această schimbare de atins). Livrare închisă ar lua documentul de încărcare în jos pentru fiecare chiriaș în momentul în care imaginea se rostogolește, fără nicio punere în scenă în care ar fi fost prins. Eșec-deschis aici nu este "fără protecţie," este status quo-ul din ultimii ani, acum logat la EROARE de fiecare dată când se întâmplă. Fiecare mâner kamowsconversion-config, astfel încât să strângeți-l odată scobit este stabil este un configmap edita și o repornire, nu o versiune. Un întrerupător de circuit leagă costul unui scaner absent: după 3 consecutiv esecuri de paza se oprește apelarea pentru 60 de ani, astfel încât upload-uri nu plătesc fiecare a Conectați timeout pentru un control care este efectiv oprit. La detectare: 422 de numire a semnăturii (nu o rejudecare 5x octeții sunt conservați într-o găleată de carantină dedicată mai degrabă decât să cadă; și respingerea este înregistrată prin PhiAccessRecorder. Rândul de audit poartă Numai identificatori; numele de fișier încărcat rămâne în afara acestuia deoarece numele de fișier aici conține în mod obișnuit nume de împrumut. PhiAccessKind nu are nici un membru UPLOAD și adăugarea s-ar modifica un @Enumerated (STRING) constrangere coloană în comun biblioteca, deci DOWNLOAD + permis = fals este utilizat și motivul este documentat la locul apelului. De asemenea, comută traseul PHI al acestui serviciu la scriitorul phi access log durabil. Intrarea de audit com.kamo.z.shared.phi. este în aceeași comitere @EnableJpaRepositories list, și PhiAuditRepositoryScanTest nu reușește să construiască dacă cele două drift vreodată că perechea este ceea ce a luat fiecare login jos pe 2026-08-03. Retro-scan (POST ************* verifică deja documentele în seif, cu vedere la chiriaşi şi chemat. Raportează şi păstrează, nu blochează niciodată sau șterge: transformarea unui obiect stocat într-o carantină persistentă pavilion, și anume o coloană comună-bibliotecă aplicată de un inițializor de mână în timp ce serviciul CI construiește împotriva principal, și ștergerea pe un fals pozitiv ar distruge recordul unui chiriaş fără recuperare. Teste: 36 noi. Pre-existente *************** la sau sub 1080 încă nu reușește pe un copac curat; neatins. Neacoperit, în mod deliberat: înregistrarea IngestController (aut intern Asterisc impinge) and Docsservice's WOPI PutFile are second ingerează căi care doresc același lucru Poarta, dar scanerul trăieşte în acest serviciu şi WOPI nu are nici un semn atribuie un rând de audit. Ambele sunt urmăriri, nu neglijenţe.

  20. · SecurityService

    Modul zeului din sticlă spartă

    Modul Dumnezeu s-a activat silenţios şi a durat atât cât a durat sesiunea. Aceasta este să controleze revizuirea de securitate a unei entități acoperite, pentru că " Personalul poate citi datele noastre de pacient" este întotdeauna întrebat și un nejustificat, fără legătură Elevaţia nu are nici un răspuns. - POST /api/security/session/god-mode necesită acum o justificare scrisă pentru Urcă. Pasul în JOS nu face niciodată un control care poarta acțiunea în condiții de siguranță este o control care menține operatorii ridicate. - Ambele margini sunt înregistrate prin PhiAccessRecorder cu justificarea și platforma Personal (true). Numai identificatori; justificarea este a operatorului cuvinte despre de ce, nimic din ce au citit. - Fereastra este de 30 de minute și non-SLIDING. Expirarea este o clipă absolută în organismul de sesiune, nu un TTL, astfel încât reîmprospătarea sesiunii glisante nu se poate extinde; și reafirmarea dintr-o a doua filă returnează expirarea originală mai degrabă decât Cumpăr altă fereastră. - KSessionService.getSession masti un steag scurs, astfel încât toate ~10 existente Porţile de acţiune onorează time-box fără a schimba. GET /session / God-mode scrie clar prin Redis (facand-o in interior Obțineți Sesssion ar reapărea) și este ceea ce sondajele UI pentru numărătoarea inversă. Eșuează deliberat OPEN on the audit write: modul Dumnezeu este modul în care se stabilește sprijinul producția, și refuzul unei elevații deoarece fi access log clipit este mai rău decât un rând recorderul a înregistrat deja tare. Nicio entitate sau @Colomm schimbat. PhiResourceType câștigă nici o constantă, fie este @Enumerated (STRING) with a CREATE TABLE whitelist that ddl-auto:update nu se lărgeşte niciodată, astfel încât o nouă constantă să nu reuşească fiecare inserţie până când KamoInitializer a fost condus de mână. Elevația este înregistrată în raport cu propriul membru al operatorului record cu un prefix *********** în schimb.

  21. · kamo-internal

    Reordonare taburi administrator; pliați identificatorii într-o conductă găsi-împrumut popover

    Tab order is now Pipeline, Documents, Subwriting, Pricing, Capital & Risk, Guvernanța, Ingestia, Catalogul devine ecranul de aterizare implicit. Fila de identificare independentă a dispărut; căutarea ei trăieşte în conductă bara de instrumente ca un compact Find-împrumut popover: căutare prin împrumut UID (default) sau rezolva orice identificator extern (MERS MIN, agentie caz #, e-semn plic, etc.) la împrumutul său, cu un card de rezultat bogat, registrul de identificare al împrumutului; istoria ciclului de viață, și un clic pe deschis / show-in-pipeline.

  22. · kamo-signer-monorepo

    Compară opțiunile pe pagina de citat public

    Opțiunile redau mai degrabă cărți selectabile decât rânduri, deoarece acestea sunt alegeri şi nu adăugări. Suma totală a perioadei este titlul; echivalentul lunar stă lângă ea ca figura care face diferiți termeni de facturare comparabile, și o insignă de economii apare numai atunci când diferența este în valoare de numire. Tabelul plat și blocul total combinat sunt suprimate ambele opțiuni sunt prezente Nimeni nu poate plăti. Regulile de imprimare păstrează cărțile unul lângă altul, astfel încât un citat tipărit încă se compară.

  23. · kamo-internal

    Autor multi-opțiuni citate de la editor

    Un citat este fie o foaie de preț plat sau un set de alternative, astfel încât editorul oferă un mod de a comuta mai degrabă decât să lase ambele există dintr-o dată trimite ambele ar arăta clientului un preț pe care nu-l pot cumpăra. Comutarea la opțiuni poartă liniile existente în prima opțiune în loc de aruncarea înapoi în mare a muncii tastate. Fiecare opțiune primește propriile elemente de linie, termen de facturare, durata angajamentului, reducere și taxa de configurare, cu o previzualizare live a perioadei totale, echivalent lunar; valoarea contractului și economiile față de valoarea de referință. Oglinzile de previzualizare CiteOptionTotals; serverul recalculează pe salvează și cifrele sale câștigă. Numărul de locuri trăieşte pe cotaţie, aşa că 40 - > 60 de preţuri la fiecare opţiune în acelaşi timp.

  24. · SecurityService

    Acceptă o opțiune privind obiectivul de cotare publică

    Multi-opţiuni citate nu pot fi acceptate orb opțiunea aleasăUid și serviciul refuză acceptarea fără una.

  25. · kamo-shared-library

    Cotații multiopționale cu totaluri de comparație per opțiune

    Un citat poate prezenta acum mai multe moduri reciproc-exclusive de a cumpăra lunar, anual, de trei ani În afară de momentul în care se schimbă numărul scaunului. - CitatOpţiunea deţine propriile elemente de linie şi totaluri; fraţii nu sunt niciodată rezumate. - CitatOpţiuneaTotals normalizează fiecare opţiune la un echivalent lunar, care este singura bază pe care pot fi comparați diferiți termeni de facturare, plus o totalul contractului și economiile față de valoarea de referință marcată. - Perioada de facturare si durata de angajament sejur separat: plata anuala nu este același angajament ca și un mandat de trei ani facturat anual. - Citat.quantity este un driver comun; o linie optând cu ussQuoteQuantity Reprețuri pe fiecare opțiune la o dată. CitatTotal îl onorează identic pe foi plate astfel încât o linie nu poate preț diferit în interiorul și în afara unei opțiuni. - Acceptarea unui citat multi-opțiune necesită numirea opțiunii; frații aproape ca NOT SELECTE și acceptateOptionUid înregistrează alegerea. CitatTotalsTest 15, CitatOptionTotalsTest 11, CiteTokenTest 9 .

  26. · kamo-internal

    Acoperirea livrării, stabilirea prețurilor, panouri de depozit de mari dimensiuni

    Înlocuiește fisele finale Coming-soon (Hedge & coverage, Priceing sign-off, Large-depozit) cu panouri live conectate la noile proxys administrator.

  27. · SecurityService

    Previziuni de acoperire, de stabilire a prețurilor, de depozit mare

    Org+membru cu ştampilă de sesiune, proprietate închisă în caz contrar (fără cross-org) Oracolul existenţei). Noi criterii finale iniţiale în cutia neautentică.

  28. · kamo-shared-library

    Entitatea care semnează prețurile WORM

    Apendice numai approve/REJECT judecată pe un rezultat la preț înghețat. @PreUpdate aruncări (o inversare este un rând nou). Tabel + 4 indici (org, run, rezultat, împrumut) aplicat prod CockroachDB prin KamoInitializer.

  29. · kamo-internal

    Consola Steward runda 2

    - Capital + Subscriere: Steward ExceptionionQueue (panou partajat) cu fir real criteriile de evaluare ale administratorului; Şi... Excepții orientative E un stat gol şi cinstit. - Guvernanţă: CalibrareRefiabilitatePanel (previzitat vs observat per segment) şi PullThroughFunnelPanel (distribuție în stadiul real, etichetat un instantaneu nu o cohortă Conversie). Am înlocuit cele două jetoane. - Documente: Panoul de reconciliere MERS peste adevărata recunoaştere internă. Obiective finale reale de-a lungul întregului; exemplar simplu-șir (i18n follow-up); tsc --noEmit curat.

  30. · SecurityService

    Relee gateway pentru sarcini administrative, calibrare/pâlnie, reconciliere MERS

    dumnezeu-eligibil, server-org marcate relee GET: *************** - Nu. MlosDocOrchestrare - Nu. (filtru de org închis, picături de ambalaj non-proprietate rânduri + re-derives the tall). Toate cele patru valori iniţiale ale clichetului nepăzit (poarta delegată() garda, ca fraţii lor).

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