İçeriye geçin
KAMOUniverse

Değişiklik Günlüğü

Yeni ne var?

Gemideki her iyileştirme.

  1. · SecurityService

    Rekor liderlik okur ve istenmeyen ihracat reddetme

    HIPAA §164.312 (b) Güvenlik Hizmeti için. Platform her liderlik kaydeder CHANGE (LeadHistory) ve her giriş (SystemAccessLog) ve kayıtlar Her şeye uygun, bu yüzden "Bu borçlayıcıya kim baktı" - ilk soru §164.402 ihlali değerlendirme soruyor - cevapsızdı. Phi Access ISStor, OTK/ seansı ile ilgili olayları inşa ediyor endpoint zaten çözüldü, bu yüzden denetim sırasındaki kimlik aynı İsteke izin veren kimlik. Müşteri IP gelir X-Forwarded-For; Traefik arkasında, uzaktanAddr ingress pod ve algılama için değersizdir. Denials da kaydedilir - olasılıktır algılama için görünüyor - ve gönderilen veyagörünen bir arazide oturumsuz çağrıcı topraklar düşmemek yerine. Reads: Tek liderlik = İNCE, grid = liderlik başına bir LIST olayı aslında (Projeden DTO'lar gönderdi, bu yüzden öncü bir filtre dışarı çıktı İNCELE UNASSIGNED LEADS hiç okumamış gibi görünmüyor). 401 /404 Bütün bir inkar kaydı. İhracatlar kapalı başarısız olur - erişim-log CSV, HMDA LAR, QC antrenman korpus ve platform çapında ekstraksiyon korpus. Her kayıt bir olay BEFORE dosyası inşa edildi ve başarısız bir denetim 503 geri döndü: "Veriyi teslim ettik ama rekoru kaybettik" tek cevap Geri yürüyemez. Platform çapında korpus her kiracıyı aşıyor, bu yüzden Her kayıt, operatörün değil, sahip olduğu org'a atfedilir. Sadece tanımlayıcılar girişilir, asla içerik değildir. ************ üyeId) gitti: Bir ihracat şimdi var Onlarda kim olduğunu kaydetmek için sıralarını tutmak.

  2. · kamo-signer-monorepo

    Public branded quotation/estimate document at /{locale}/q/{token}

    The customer-facing surface for the commerce quote system. Server-rendered so the org's branding is in the first paint — an unbranded flash on a commercial document is exactly what this must not do, and it is why the page emits brand custom properties inline via QuoteBrandVars rather than swapping them after hydration. Lives in kamo-signer because that app already has the HostRegexp ingress, autocert coverage, DNS aliases and the theme package with hostnameOverride — and because quote -> accept -> e-sign is then one hop, since EsignGenericEnvelope binds any record via (context_type, context_id). Reusing it was only viable once the /{locale}/ i18n work landed; all 31 strings are translation keys sourced from the dictionary. Money and dates format through next-intl using the quote's own currency and the server-resolved timezone (recipient member -> org -> UTC), never the viewer's device. An expiry rendered in the wrong zone can name a date on which the offer is already dead. Adds the platform's first real @media print block. "Print Invoice" in kamo-internal has always printed the whole app chrome because no @media print rule existed anywhere; here the same markup prints as a clean Letter document with the brand accent preserved (print-color-adjust: exact — a colourless quote reads as a draft), the action bar suppressed, and page-break-inside: avoid on rows and totals. Terminal states are deliberately asymmetric: EXPIRED gets an honest branded page naming the date and the org's contact details, safe because the caller already proved possession of a 256-bit token; unknown/revoked/wrong-org all collapse to one generic page so the surface cannot be probed. The client whitelists the reason before rendering. The token never travels onward in a URL — the server-side resolve posts it in a body, and the BFF forwards the real client IP explicitly because APIService stamps X-Forwarded-For from its own inbound request, which would otherwise put every viewer in one rate-limit bucket keyed to the pod IP. Adds SECURITYSERVICE_URL to the configmap (verified: kamowssecurity-service exists in the kamo namespace).

  3. · SecurityService

    REST yüzeyi - personel yönetimi ve halk bağlantıları

    Staff endpoints at /api/security/ticaret/quotes and an unauthenticated resolverr /api / güvenlik / kamu / bölümler. Sözcükler BaseLosController'i kopyalamak yerine genişletiyor Preamble: CallerSessionResolver X-OTK özelliklerini kabul eder, X- -Token Başlık ve - kurabiye, POSController'in özel aldığı yerOrgId sadece okur OTK özelliği. Her eller haktır (VIEW/MANAGE/SEND QUOTES). Bunların çoğu Ticaret yüzeyi sadece seanstır - herhangi bir org herhangi bir gerçekleştirilmiş üye mutatetete olabilir siparişler - ve bu kasıtlı olarak burada tekrar edilmez, çünkü bir alıntı bunu taahhüt eder veya müşteri önünde bir fiyat için. Sözcüklerin güvenlik yapılandırmasına ihtiyacı yoktur: Bahar zinciridir Herhangi birRequest().permitAll() ve OTKPreAuthFilter sadece bir X-OTK başlığı üzerinde hareket eder, ki bu E-postalı bir bağlantıdan sonra bir tarayıcı asla göndermez. Tasarım noktaları: - Token POST gövdesine gelir, asla bir URL. APIApp. forward() günlük istek isteği hatları ve bir yoldaki bir ayık, o loglarda toprak olurdu. - Enumeration oracle değil: Bilinmeyen, geri dönüşümlü ve veya org-mismatched tüm jetonlar Bir indistinguishable jenep geri dön. Sadece EXPIRED belirli bir alır, Dürüst cevap, bu güvenli çünkü çağrıcı zaten bir mal varlığını kanıtladı 256-bit token. - İstek ev sahibinden elde edilen org, org'a karşı kontrol edilir. link satır. Bu olmadan, org A için geçerli bir bağlantı veya B'nin ev sahibi altında açılacaktı B'nin markasını giyen bir fiyat - bir phishing ilkel. - No-store / Referr-Policy: no-referrer / X-Robots-Etik: Her şey hakkında bir deneyim yok Cevap. Sayfa temadan logolar yükler. <org> ve bir Refer taşıyacak token off-origin. PublicLinkRateLimiter Redis-backed çünkü Güvenlik Hizmeti çok-replidir - In-process counters sadece isimde bir limiter olurdu. Açıkça DoS ve log-hygiene koruması, anti-guesing kontrolü değil: 256 bit entropidir. Başarısızlıklar başarılardan çok daha sert sayılıyor, çünkü bir ofis bir ofis açıyor 50 kez ileri gelen alıntılar, elli kişi olmadığı zaman normaldir. Açıklamıyor, bu yüzden Redis outage, alıntı sayfasını aşağı alamaz. WordEmailClient, E-Internal-Auth (X-Internal-Auth) E-Internal-Auth'ı yeniden kullanır. QUOTE SENT şablonu) ve sadece başlık rakam artısını gönderir - asla bağlantı Ürünleştirilmiş fiyat, bu yüzden ileriye dönük bir e-postanın kendisinin açıklaması değildir. Bu iş tarafından değişmeden önceki test başarısızlıkları (bu işi durdurarak) Ve temiz HEAD'da yeniden çalışır: **************** NPE bir null EntityManager ve mirası com.retval SecurityServiceAppTests eksik @SpringBootConfiguration. Bu uç nokta çalışmadan önce KamoInitializerService çalıştırın: alıntı tabloları: Yeni ve ddl-auto burada değil, bu yüzden servis botları normalde ve sadece alıntılar KI'nin çalışmasına kadar eksik bir ilişki 500.

  4. · kamo-shared-library

    Alıntı / enimate domain - varlıklar, fiyatlandırma motoru, bağlantıları paylaş

    Adds a first-class Quote alongside the existing commerce spine. The pre-existing "ServiceQuote" is an Intent plus a JSON blob carrying one offering and one flat amount, with no recipient, no expiry and no UI; it is not a foundation. Extending Intent directly was rejected too: commerce_intents is shared by LOAN_APPLICATION, RENTAL_REQUEST, SUBSCRIPTION_SIGNUP and PURCHASE_REQUEST, so ~25 quote columns would put permanent NULLs on the mortgage and rental paths. Entities **************** Quote engagement-linked, versioned, valid_until + valid_for_days QuoteLineItem snapshots name/sku/price so a sent quote never re-prices QuoteShareLink bearer credential, SHA-256 at rest, revoke/expiry/view counts QuoteLinkView per-open audit (ip, user-agent) QuoteEvent append-only lifecycle trail Totals are server-authoritative. QuoteTotals is the single writer of every money field and the request DTOs carry no totals at all — deliberately unlike createRetailOrder, which takes subtotal/tax/total verbatim and can be handed a populated order with total = 0. Line discounts apply before the quote-level discount, discounts can never exceed their base, intermediate maths stays at scale 4 and only the grand total rounds to the currency's minor unit. Share tokens: 32 bytes of SecureRandom as 43 base64url chars (256 bits). Same entropy as the e-sign signer token but 21 chars shorter, keeping the emailed URL under the 76-char plain-text wrap limit. Only the SHA-256 is persisted. Tax is honest rather than invented: the platform has no tax engine (TaxClass/ TaxZone/TaxRate are authorable and read by no calculation), so ENGINE mode reports NOT_CONFIGURED instead of fabricating a figure on a commercial document. QuoteLineItem.taxClassId is UUID, matching TaxClass's real PK — Offering.taxClassId is a Long against a UUID-keyed table and is structurally unresolvable. Also: rights 178-180 (VIEW/MANAGE/SEND_QUOTES) and the QUOTE_SENT canonical email template, registered in CANONICAL_KEYS (absent there means a permanent 404). 35 tests covering the pricing engine and token hygiene. Full suite: 896 passing. Schema note: these are new tables. KamoInitializerService must run before SecurityService serves the quote endpoints — ddl-auto is none there, so the service boots fine and the endpoints 500 on a missing relation until it does.

  5. · KlusterServices

    Egress, bir CiliumNetworkPolicy olarak avatar çözme için yer alıyor

    8f6c672'nin yeniden ortaya çıktığı, aslında burada çalışan tek formda. Daha önceki deneme başarısız oldu çünkü düz bir NetworkPolicy bunu ifade edemez kümenin topolojisi. Güvenlik Hizmetinin dört kritik bağımlısı yaşıyor Node, pod ağında değil - cockroachdb-0 ve nats-k1m1-0 ev sahibi bir Ağ, MinIO ev sahibi bir süreçtir - bu yüzden bir podSeçor onları asla eşleştiremez. The The The The The The The The Şaşırtıcı olmayan bir parça ve ilk yama denemesinin de başarısız olmasının nedeni, bu bir an. Node subnet için ipBlock bunu düzeltmez: Cilium sınıfı node as the node as Özel ev sahibi /rem-node kimliği ve CIDR kuralları kasıtlı olarak eşleşmez Ayrı kimlikler. Varlıklar bunu ifade eden tek yapıdır. Her iki başarısızlık modu da yazı yazmadan önce bir ataway canary pod'a karşı yeniden üretildi. Bu, üretime karşı değil. Canary, aynı kuralın altında aynı kuralı taşıdı Farklı bir etiket, ipBlock versiyonu nasıl sessizce yakalandı CockroachDB, NATS ve MinIO mükemmel bir şekilde makul görünüyordu. Kanarya üzerinde doğrulandı, o zaman güvenlik hizmetlerinde yeniden başlatmaz ve yeniden başlamaz. Bağlantı hataları: ALLOW dns, crdb:26257, nats:4222, minio:9000, redis:6379, kardeşler:80, dünya:443 BLOCK Node:22, node:443, kube-api:443, redis-via-node:6379, 169.254.169.254, döngü:9000 Son dört nokta: Şu anda bir SSR'nin gitmesine gerek yok. The The The The The The The The In-code guard birincil kontrol olarak kalır - anlayan tek tabakadır DNS rebinding - ve bu onun arkasında savunmadır. Header kanary prosedürü taşır. Bunu değiştiren herkes onu yeniden çalıştırmalı Bunun sebebinden daha fazlası; Cilium'un kimlik modeli, düzelme yolu hareket etmiyor NetworkPolicy sezgileri öne çıkıyor ve çevre yok.

  6. · kamo-internal

    Grup konuşmaları için bir yüzpile gösterin

    Üzerinde beş kişi olan bir iplik, bir keyfi yüz tarafından temsil edildi, ki bu Bir kişiden bir mesaj olarak okur. Şimdi üç katılımcıya kadar, bu yüzden "Selam insanlar", isim çizgisini görmezden gelmeye gerek kalmadan bir bakışta haklıdır. Üçte Capped: Geçmişte çevreler tanınabilirliği ve sırayı azaltır Bilgiden ziyade doku haline gelir ve geri kalanlar zaten belirtilmiştir. "ve N diğerleri" metni hemen yanında. Okuyucu kendi iplik listelerinden filtrelenir ve diğer parti yol açar - Yüzler sağa sola döndü, bu yüzden birincil muhabir en çok sol olmak zorunda Ve geri kalan kötü olanı taşıyan kişi. Her yüz satırda bir yüzük alır Arka rengi; benzer fotoğraflar yığını olmadan bir şekilde birleştirir. Karar şimdi sadece liderlik yerine ilk birkaç katılımcıyı kapsar, Aksi takdirde ikinci ve üçüncü yüzler, monogramlar olarak oturacaktır.

  7. · SecurityService

    Zincire uygun olarak, yeniden tamamlanmamış girişler, kayıt açıklamaları

    Bu özellikteki her başarısızlık modu sessizdir. A latched circuit breaker, bir işçi Her görevdeki kuyruk, HTML'ye geri dönmeye başlayan bir sağlayıcı – her biri görünüyor Tam olarak "Bu muhabirin fotoğrafı yok" gibi, bu da doğru olanı. Davranışlar gibi görünüyor. Çalışma ve çalışma arasında kullanıcı tarafından düşünülemez bir fark yoktur. Tamamen ölü, bu yüzden ölçülmelidir. Metrikler (Prometheus zaten teld edildi, bu yüzden çoğunlukla isimlendirilir): Önbellek vuruş oran, cevap veren tier tarafından etiketlenen zincir süresi, per-provider hit/miss, işçi kuyruk derinliği ve bir parçalanmış-task toplam. Bu son bir daha önce kullanılmıştı DiscardPolicy, bu sessizce tasarıma düşer; şimdi bir karşı artır ve Karşılaşma, executor'dan önce ilan edilir, çünkü alan ilkleştiricileri çalıştırılır Kaynak siparişi ve tembel yakalamaya güvenmek zararsız bir yeniden siparişi kıracaktır. Açıklamalar kendi loggerlarına gider. Sadece kimlik katmanı kişiseldir Açıklama - alan tiers, bir adresin sağ tarafını iletiyor, Hiç kimse tanımlama - ve daha sonra çağrıdan önce kaydedilir, bu yüzden Yol daha sonra başarısız olduğunda bile var. Adres tam olarak yazılır ve kasıtlı olarak: nokta “Bu kişinin verileriyle paylaşılan” cevap vermek. Ve bir hash buna cevap veremez. Gerici bir sızıntıyı kapatır: Yok etmeden önce silinir ve hiçbir şey buna benzemiyor, bu yüzden Sender identity sonsuza kadar büyüdü. Yoğun bir posta kutusu binlerce muhabire dokunuyor Her bir kez ve her biri için arkasında negatif bir sıra bırakır. Testler gerçek bir sokete karşı hediyeyi kaplar, çünkü ilginç vakalar ilginç durumlardır Tüm sağlayıcı davranışları mantıktan ziyade: geçerli bir görüntü taşıyan 404 (DuckDuckGo), bir yumuşak-404, HTML'ye hizmet eden, bir kaynağı olan bir içerik-Length, a soft-404, 1x1 stub ve pod ağına yönelik bir yönlendirme. Üretim müşterisi yapamaz Bir loopback test sunucusuna işaret edilir - DNS pin her şeyi çözmeyi reddeder Tüm nokta olan özel - bu yüzden rahat bir müşteriye ve müşteriye karşı çalışır pin ayrı iddia edilir.

  8. · kamo-internal

    Konsoldan ayarlamalara en büyük bir LLPA matrisi teşvik edin

    İngestion paneli sadece bir oran sayfası yayınlayabilir. Bir LLPA MATRIX kaynağı için Şimdi belge, LLPA ayarlamaları olarak bir "Promote" kartı gösteriyor: Mevcut mevcut seçimi seçin LLPAs ayarı (+ bir grup), ve her biri onaylanmış FICO/LTV kova, koşullu bir fiyat ayarı haline gelir. Sonuç isimleri nasıl Birçoğu yazardı ve dürüstçe, kaç satır atıldı çünkü bir kova güvenle okuyamazdı ya da zaten mevcuttu. IngestionApi.promoteAdjustments Yeni ağ geçidi röleğe gönderiler.

  9. · SecurityService

    Bir LLPA matrisini koşullu ayarlamalara teşvik etmek için Gateway rö

    ************ kazanç promosyonlar, aynalar Uygulamalı röle: Tanrı tarafından uygun bir kapı, organizasyonId server-stamped on to Yaz yoluyla ödeme yükü(), downstream 4xx rödülü fiilatim. Hadis a steward bir dönüş Konsoldan LLPA matrisi gerçek per-scenario fiyat düzenlemeleri.

  10. · VOIPService

    Kayıt çağrısı kaydı, sesmail ve transkript erişim

    Kayıt oyun gerisi hiçbir iz bırakmadı. Kayıtlı bir çağrı yoğun PHI'dir Platform mağazaları - sonuçlanmamış konuşma - ve "Buna kim dinledi Çağrı" cevapsızdı, bu ilk soru §164.402 ihlalidir Değerlendirme soruyor. Wires CallRecording ISStor her okumaya çağırın: - GET /recordings/{id}/audio CALL RECORDING / DOWNLOAD - GET ************************ CALL RECORDING / DOWNLOAD - GET /recordings/{id} CALL RECORDING + TRANSCRIPT / D - GET ************************ CALL RECORDING / DOWNLOAD - GET /instances/{id} / fatura postaları TRANSCRIPT / LIST, per row Transkript gizlenen kişidir. Bu bir medya indirmiyor; biniyor metadata JSON'un içinde ve her sesmail sırasında ve aynı şey aynı. PHI, greps şeklinde ses olarak. Kendi etkinliğini alır çünkü bir Açıklamaların muhasebesi kaynak başına toplanır. Hizmete hizmet etmek başarısız oldu, bu yüzden Phi CaretAvailabilityAdvice bir güvenilmez 500'den ziyade 503'e okuyun - istek iyiydi, biz deşifre ediyoruz PHI'ye hizmet edemiyoruz. Refusallar da kaydedilir; olasılıktır Hangi algılama görünür. Ayrıca bunu kablolarken bulunan bir yetki boşluğu kapatıyor: POST /recordings / gözlüğü istek gövdesinden örnek aldı ve asla caller'in veyag'in bunu kontrol etti, bu yüzden başka bir kiracının sağlayıcısını çözdü. Kayıt iddalarına idda ederler. Diğer her örnek çizilmiş uç noktası Servis zaten IdAndOrgId tarafından bulmaktadır; bu şimdi de. Kayıt oyun izni olarak bırakılır ve yerinde belgelenir: veyag mülkiyet tek kontroldür, böylece herhangi bir üye herhangi bir kayıt geri oynayabilir Onların org. Narrowing, "kendi genişleme"nin ne olup olmadığına karar vermek anlamına gelir. Sınır ve hangi doğru asansörler – bu bir ürün kararı değil, bir ürün kararıdır Burada yapılması tahmin edin ve her erişim şimdi en az kaydedilmiştir.

  11. · AIService

    Record PHI access on every read of storage AI conversation history

    Paylaşılan §164.312 (b) omurgası, devam eden yollara doğru ve tamamlanmışlar. Asistan, uyumluluk değerlendirme koymak modülüdür Sınırı OUTSIDE - hiçbir BAA ve altında dış sağlayıcılara fanlar Daha sonra süresiz olarak tutuluyor - bu mağazanın çoğu açıklığa kavuşturuyor Bir ize ihtiyaç var ve hiçbiri yoktu. Denetim: Oturum listesi ve tarih arama (tek konuşma başına bir olay, konuşma başına değil, İstek başına biri), tek bir konuşma metadata ve mesajları, halk widget kendi transkriptini tekrar okuyor ve eloff paketi. Refusals are are Ayrıca kayıt olun - başka bir ya dag'un guidse izin vermek, algılamanın neye benzediğini - ve bir an Unauthenticated girişim, geri çekilmeden ziyade, gönderilen veyag'e atfedilir. kaydedici, hangi özelliği değiştiremeyeceği ve bu en çok olaydır tutmaya değer. Eloff paketi bir DISCLOSE değil, bir görünmez: bir ziyaretçinin taşıyor AIService'dan ve başka bir üründeki bir insanın önünde konuşma. İşte bu Tür kapalı değildir, bu yüzden kayıp bir rekor şimdi transkript ve cevaplar 503, veriye hizmet etmek yerine hesap veremez. Identifiers only. Asla bir mesaj gövdesi, bir başlık veya arama terimi – bir üye Asistan tarihlerini arama, ödünç sahibinin adını ona ve bir anlığına arama Hızlıyı yeniden üreten denetim yolu sadece PHI'yi içine taşıdı log akışı. Eş zamanlı bir seansın orta değiştirmesini sağlayan d428eee3: denetçi Kayıp rekorDeniedInternalView ve PublicAiChatController'in yeni albümü Yapıcı argüman testine ulaşmamıştı.

  12. · MediaService

    Record chat message reads on the endpoints that return bodies

    Sending a message left a row; reading one left nothing. Every chat, support and social thread on the platform renders from a handful of endpoints here, and none of them recorded anything, so "who read this conversation" had no answer — which is the first question a 164.402 breach assessment asks. ChatMessageAccessAuditor emits a PhiAccessEvent (CHAT_MESSAGE) from the five paths that hand a caller message text: GET **************** LIST GET /api/media/sessions/chat LIST POST **************** VIEW GET **************** LIST POST **************** VIEW One event per message, not one per request. "They opened the thread" is not an answer to "was this individual's message disclosed", and the message ids are already in hand at every call site, so a request-shaped row would have been a choice rather than a limitation. The thread read records AFTER the mute filter, so a row means a body that caller was actually handed. The chat list is in scope because each row carries up to 140 characters of the thread's last message — that is content, not metadata. Rows with an empty preview record nothing. Deliberately NOT recorded: unread counts, presence, last-seen, typing, read receipts, session-member lists, mutes, ticket detail (metadata plus status history, no bodies) and support reporting aggregates. A trail is only useful if a row means someone saw content; rows that stand for nothing bury the ones that do. Refusals are recorded too, against the thread guid — no message id exists yet at the point of refusal, and repeated refusals against thread guids is the shape probing has. An unauthenticated reader is attributed to a sentinel org rather than dropped: the recorder rejects unattributable events, and that is the single most interesting event this trail can hold. Client IP comes from X-Forwarded-For with remoteAddr as fallback — everything arrives via Traefik, so remoteAddr alone records the ingress pod. Public chat takes a second hop through APIService, which sets X-Forwarded-For to the visitor address and moves the browser's User-Agent to X-Original-User-Agent, so the auditor prefers that header; the literal User-Agent on that hop is APIService's own HTTP client and identifies nobody. Visitor reads are attributed to the org from X-Public-Chat-Org-Id with no member id: a visitor has no member identity of their own, but the org owns the records, so the read stays attributable. Identifiers only, never message text. An audit trail that reproduces the message it audits has just copied the PHI into the log stream. Also completes eed3817, which swept this work in mid-edit and left MediaController referencing PhiAccessKind before the import existed — that revision does not compile. This one does: mvn -o test is 16/16 green.

  13. · DocsService

    Kayıt, kayıtlı olmayan dört belge yolunda erişim

    /download zaten **************** ile giriş yaptı ve bu oldu Platform'un sadece ulaşılan enjeksiyon sitesi. Kardeş uç noktaları hizmet eder Tam aynı bytes – /stream, /bulk-download, şablon dönüştürüldü-PDF ve şablon sayfası penail - hiçbir şey kaydetti, bu yüzden belge isteyen herkes Bir iz bırakmadan sadece farklı bir URL seçmek zorunda kaldı. Tüm dördü şimdi bir PhiAccess Event in the point access is doğrulandı ve Bytes servis edilmek üzeredir. Bulk indir, istek başına bir tane yerine belge başına bir olayı yayıyor. "Onlar " 400 belge ihraç edildi" için bir cevap değil "Bu bireysel rekor oldu Açıklamalar ve per-document satırları, altı yıl sonra cevaplanabilir kılan şeydir §164.528 altında. Müşteri IP, X-Forwarded-For with uzaktanAddr as fallback: Her istek Traefik'e gelir, bu kadar uzaktan ekr yalnız ingress pod'u kaydedecektir Her erişim ve algılama için değersiz olun. A unauthenticated attempt, gönderilmemiş bir organizasyona atfedilir düştü - kayıtsız olayları reddeder ve belge için bir istek Oturumu olmayanlar tam olarak tutmaya değer. Bu, mevcut ImgLogDownload satırları yerine birlikte oturur: Bunlar görüntüleme alanı kayıtlarıdır, bu haçlı iz bir muhasebedir Açıklamalar toplanır. Not ImgLogService, bu satırları okuyan, hala Platformda her yerde sıfır çağrıcı var.

  14. · KlusterServices

    Avatar çözümleyicisinden gelen egress; Redis Eviction havuzuna dikkat edin

    GüvenlikHizmeti şimdi URL'nin güvensiz bir şekilde seçildiği bir hediyeyi çalıştırıyor Parti - bir BIMI kaydı, gönderen bir domaini olan herkes tarafından yayınlanan DNS içeriğidir. Ve herkes bir kiracı e-posta yoluyla bir gönderme domaini olur. Bu kümede hiçbir şey yok Böyle bir talebin nereye gidebileceğini kısıtladı: Redis, 6379'da öngörülemeyen cevaplar, MinIO 9000'de kök bilgisi, CockroachDB 26257'de ve node metadata endpoint herhangi bir pod'dan ulaşılabilir. Komiser kendi kontrollerini kodda uygular ve bunlar birincil kalır Savunma çünkü DNS rebinding'i anlayan tek tabakadır. İşte bu İkincisi, bu yüzden hala özel bir adrese ulaşamıyor. Deliberately izin listeden ziyade en çok izin verir. Bu hizmetler haklı olarak ulaşmak Ev sahibi, bu yüzden enumerating destinasyonlar güvenilmez ve kırılır sessizce. Bunun yerine, halka açık internete her özel aralık dışında izin verir, Daha sonra, belirli in-cluster limanları aslında gerekli. Kapsam pods'a Bu, emanetsiz yerleşmeler gerçekleştirir - bu adı alan çapında uygulayın Egress'in asla denetim edilmediği hizmetler. Redis değişikliği bir yorum ve bir veritabanı bump, bir davranış değişikliği değil. Bu Gönderici-avatar önbellek mağazalarının neden sadece kısa metadata dizeleri kaydeder: maxmemory Tüm örnekteki tüm anahtarlarla 2gb ve DB 0 her canlıyı tutar Oturum, bu yüzden burada bir yığın önbellek, kullanıcıların baskı altında rastgele işaret edecek Ve günlerce yanlış teşhis edilir.

  15. · kamo-internal

    Show sender ve alıcı fotoğrafları

    Posta kutusu herkes için tek paylaşılan bir gradient üzerinde tek bir mektup verdi, bu yüzden Her satır aynı görünüyordu ve çember hiçbir bilgi taşımadı. Şimdi gösteriyor Birinin bildiği zaman muhabirin gerçek fotoğrafı ve iki harfli bir monogram değil. Bir SenderAvatar yedi el kayıtlı ilk çemberleri değiştirir. Bu önemli Daha tutarlılıktan daha fazlası: Her biri bir adresi nasıl bölmek için kendi fikrini taşıdı ve Avatar önbellek bu bölünmede anahtarlandı, bu yüzden liste ve liste arasındaki herhangi bir anlaşmazlık Okuma pane sessizce vuruş oranını yarıp aynı kişiyi gösterecektir Bir ekranda farklı yollar. parseAddress şimdi bir RFC 5322'in tek yeri. adresi ayrı alınır. Liste ve iplik görüşleri aynı zamanda ham başlıkları baskıyı durdurur "Jane Doe <jane@acme.com>" gibi ve adını gösterin. Kimlik, adres tarafından anahtarlanan kendi mağazasında yaşıyor, asla mesaj nesneler üzerinde değil. Her iki liste her 30s ve her websocket bildiriminde her zaman ankete bakar, her seferinde Mesaj serisini toptan değiştirmek - bir mesaja bir şey bir araya getirilecek Bir dakikayı iki kez sildi, bu yüzden bir idle inbox, monogram ve geri dönmek için sert bir fotoğraf olurdu. Sonsuza dek. Ayrıca adrese göre anahtarlama, gecikmiş bir cevapın boyayamayacağı anlamına gelir Yanlış satırlar, çünkü satırlar anahtarlanan şey değildir. İstekler kömürleşmiştir Ekran başına bir toplua: bağımsız olarak sorulan elli satır İstekler ve her şeyden önce bu hizmet millerine çağrılmasından bu yana, Aslında yüz. Bir özleme 45'lerden sonra tekrarlanır, çünkü server-side Çözüm iki fazlı ve bilinmeyen bir adres sadece daha sonra bir çağrıda cevaplanır. Konuşma ListView şimdi sanallaştırılmış. 50 sırayı bir sayfaya getiriyor ve yeniden seçildi Bunların hepsi, her ankette bir per-index stagger ile anlaşır; Her birine bir görüntü eklemek, posta kutusunda en ağır yüzeyi yaptı. No-reply ve postacı-daemon postacılar bir monogram yerine tarafsız bir işaret alırlar - bir monogram yerine - bir monogram Bir çürük bildirimin yanı sıra aktif olarak yanıltıcıdır. Fotoğraflar dekoratiftir (alt=") Çünkü isim her zaman onların yanında görünür metindir ve taşır referrerpolicy="no-referrer" bu yüzden bir iplik tanımlayıcısı asla bir görüntü ev sahibine ulaşmaz. Her avatar kendi kökenimizden servis edilir - üçüncü taraf görüntüler getirilir, Doğrulanmış ve yeniden barındırılan sunucu-side – bu, yeni per-request'e izin veren şeydir Img-src politikası onant'ın kendi domainlerine kilitlendi. Bu politika inşa edilmiştir Bir sonrakiden daha ziyade. yapılandırılmış çünkü bu platform beyaz aydınlatılmış: a Statik politikanın bir onant ismi olmalı ve geri kalanı için görüntüler kıracaktır. Ayrıca, iletişimden bu yana önceden tanımlanmış bir izleme-dönüşüm vektörünü de kapatır. fotoğrafUrl Doğrudan birkaç <img src> ücretsiz bir URL'dir. Sonraki / görüntü artık uzaktan SVG'yi kabul etmiyor. Bu sadece kabul edilebilir bir riskdi SVG'ler kendi tema logolarımızdı; artık platform engests işaretlerinin işaret ettiği değil Üçüncü taraf DNS'de yayınlandı. İletişim çağrıcıları zor kodlanmış ORG ID = 1 ve orgId sorgu parametresini bırakır, Oturumdan onancy elde eden geri dönüş değişikliğini eşleştirin.

  16. · EmailService

    Avatar endpoints; fix unauthenticated reachability and contact tenancy

    Adds the mailbox side of sender avatars, and fixes three pre-existing holes this work would otherwise have built on top of. AUTHENTICATION. OTKPreAuthFilter used to reject a *bad* OTK but treat *no* OTK as anonymous-and-allowed, falling straight through to the filter chain — and the Spring Security chain here is anyRequest().permitAll(). Every mailbox, contact and calendar endpoint was therefore readable by anything that could reach the ClusterIP. Protected prefixes now fail closed. The fix lives in the filter rather than in the security chain deliberately: reshaping the chain would touch thirty unrelated surfaces at once, including two servlets and the DAV endpoints. The exempt list is the complete set of genuinely session-less entry points — the CAN-SPAM opt-out link, the OAuth redirect target where the tenant rides in the signed state parameter, and the server-to-server surfaces that authenticate with X-Internal-Auth. CONTACT TENANCY. Every contacts endpoint took orgId as a query parameter, or reached a book by id with no ownership check at all, so changing a number in the URL read another tenant's contacts — names, addresses, phone numbers, notes. The org now comes from the session and every book- or group-scoped operation proves the target belongs to it. Absent targets return 404 rather than 403 so an id in another tenant is not confirmed to exist. orgId is still accepted on the two list endpoints and ignored, so clients do not break mid-deploy. That change also fixes a silent bug: searchContacts derived orgId from bookId and passed null when no book was selected, into a query whose first predicate is contactBook.organization.id = :orgId. Book-less search therefore always returned nothing — which is exactly how the mail recipient autocomplete calls it. EMAILLOGOSERVICE. It fetched an operator-supplied URL with no scheme or address check, and transcoded the result on a Batik that resolves external references by default. A logo SVG containing <image **************** would have been dereferenced from inside the cluster. Now guarded on both ends. MESSAGEINDEXER. resolveMemberIdFromEmail pulled the entire members table into heap and filtered it in Java, once per indexed message, on a 1Gi pod — the code said so in a TODO. Same semantics, one indexed query. The avatar surface is one batched endpoint rather than a field on the message DTOs. Both list views poll every 30s and replace their message array wholesale, so an avatar carried on a message would be wiped twice a minute and the UI would flicker forever; and EmailMessage is shared by the folder list, reading pane, thread view and search, so changing its shape would touch all of them at once. The directory-photo endpoint is server-to-server only — exposed to a browser it would be a directory-enumeration oracle for the tenant.

  17. · SecurityService

    Sender-avatar resolution chain for the mailbox

    Resolves a correspondent's email address to a picture, working outward from what Kamo already knows: member photo, then a photo someone attached to a contact, then the tenant's connected Microsoft/Google directory, then the sender domain's BIMI mark, then its favicon, then Gravatar. Anything unresolved renders a monogram, so the chain always terminates locally. The directory tier is worth calling out: the connect flows here already request admin.directory.user (Google) and User.ReadWrite.All + Directory.Read.All (Microsoft) alongside the mail scopes, so for Workspace and 365 tenants this returns authoritative photos with no re-consent and no third party involved. It should beat anything on the public internet and usually will. Two phases, never one. A request reads cache only; unknowns go to a bounded worker with DiscardPolicy — running an overflowed task on the caller would hand a request thread to a third-party host, and a discarded resolve costs nothing because the next poll asks again. A full-miss chain is DNS plus four HTTP calls, and a page carries dozens of addresses; nothing about opening a folder may depend on third-party availability. Decoupling also keeps resolution from correlating with a human opening a message, which would make it a read receipt — the exact behaviour the mailbox already blocks by default for remote images. This is the platform's first fetcher whose target URL is chosen by an untrusted party: a BIMI record is DNS content published by whoever owns a sending domain, and anyone becomes a sending domain by emailing a tenant. There is no egress NetworkPolicy and no forward proxy, so the controls are in code. SafeImageFetcher pins DNS — a custom resolver hands OkHttp only the addresses that passed PublicHostGuard, closing the rebinding window that defeats a naive pre-flight check — refuses redirects, caps bytes as they stream rather than trusting Content-Length, and requires an image content-type. SvgSanitizer parses and re-serializes against an allowlist instead of rasterizing. Batik 1.17 resolves external resources by default, so handing it a hostile SVG would dereference <image **************** from inside the cluster after the URL check already passed. The Tiny PS profile forbidding that is a statement about conforming files, not about bytes fetched from an attacker's URL. Provider miss semantics are all different and all cache-poisoning if treated as hits: Gravatar is asked with d=404 because every other default returns 200 with a placeholder; Google's no-match is a 404 carrying a byte-identical globe, so it is rejected by content hash; DuckDuckGo returns 404 with a real image body, so status decides. Bytes are re-hosted under a random name — never one derived from the address, which would let anyone probe whether a given person corresponds with this platform — and served through an authenticated route. Redis holds metadata only. That instance is 2GB with allkeys-lru on an emptyDir, sharing a keyspace with every live session; caching image bytes there would evict sessions and sign users out at random.

  18. · kamo-shared-library

    Sender identity model + org-scoped batch email lookups

    Backing store and queries for the mailbox sender-avatar chain. SenderIdentityEntity is the durable tier of the avatar cache. org_id is part of the natural key rather than decoration: USERS.EMAIL is unique only per security provider, so an answer derived from tenant data must not be visible to another tenant. External-tier answers (BIMI/favicon/Gravatar) are genuinely global and share a sentinel org so every tenant shares the hit rate. Misses are stored as rows, not absences — without that, every unresolvable sender re-runs the whole provider chain on every inbox poll. OrgAvatarSettingsEntity splits the chain by what actually leaves the building. The identity tier defaults OFF because it discloses a digest of a correspondent's full address to a third party, which on a lending CRM is a decision about a borrower identifier rather than a display preference. The repository additions exist because none of this was reachable before: - ContactEmailRepository had no lookup by address at all — only substring LIKE for the autocomplete — so a contact that had a photo could not be resolved from a From: header. - Member/User batch lookups are org-scoped and take pre-lowercased input. LOWER() is applied to the stored column only; emails are persisted verbatim (EmbEmail has no normalizer) and CockroachDB equality is case-sensitive. - The avatar-id projections return ids rather than entities on purpose. Both Member.avatar and User.avatar are lazy associations onto a JOINED hierarchy: a caller outside a transaction gets LazyInitializationException, and one inside gets a base-type proxy that never narrows to AvatarPhoto, putting the file extension needed to build the URL out of reach. - **************** replaces a findAll() full-table scan that ran once per indexed message. PublicHostGuard is shared rather than duplicated because it is a security control: it decides whether an address is somewhere we will send a request that an untrusted party chose. Tested against the real bypass techniques — IPv4-mapped IPv6, 6to4, NAT64, CGNAT and link-local metadata. Right 177 gates the disclosure decision.

  19. · kamo-shared-library

    Audit spine for PHI access — §164.312(b)

    The Security Rule requires recording access to ePHI, which means reads. The platform records changes well — LeadHistory, SystemAccessLog, UserHistory, LoanAuditEvent — and reads almost nowhere, which is why "who viewed this record" is currently unanswerable. That is also the first question a §164.402 breach assessment asks, so this one gap blocks both the audit control and the four-factor analysis. Capture layer only; no schema. The durable store sits behind PhiAccessLogWriter so call sites can be wired now and the sink can evolve — plain table, then append-only with a hash chain, then a signed export to object-locked storage — without rippling back through hundreds of call sites. Two properties carry the weight: - Failure handling belongs to the access kind, not the caller. EXPORT, DOWNLOAD and DISCLOSE fail closed: an unlogged bulk export is exactly the event you cannot reconstruct afterwards, and "we served the data but lost the record" is the worst answer to give an investigator. VIEW, LIST and SEARCH fail open and log loudly, because losing one line is not worth taking the product down. That asymmetry is deliberate and wants signing off rather than assuming. Callers under pressure resolve policy questions in whichever direction unblocks them, so the policy is not at the call site. - A denied read is still a read. Refused attempts are recorded, because the access pattern of someone probing records they cannot reach is what detection needs and is invisible if only successes are logged. Startup safety, which nearly went wrong: PhiAccessRecorder is a @Component and every service component-scans com.kamo, so a hard dependency on a writer bean would have failed context startup across ~40 services at once — a whole-platform outage from a feature nothing had called. The first fix, a @Configuration with @ConditionalOnMissingBean, does not work: component-scanned configuration is processed alongside user configuration rather than after it, so both writers register and injection fails on ambiguity. PhiAuditContextWiringTest caught that. The fallback now lives in the recorder via ObjectProvider.getIfUnique, where no ordering question exists, and ambiguous writers degrade to the default rather than failing startup. The default Slf4j writer is a starting point, not the destination — log lines are not tamper-evident and retention is 14 days against a six-year obligation. It exists so call-site wiring does not wait on the store. Identifiers are logged, content never is: an audit trail that reproduces the record it audits has just moved the PHI into the log stream.

  20. · SecurityService

    403, uyumluluk sınırı reddedildiğinde 500'den fazla değil

    Şu anda HIPAA sınırını anlayan iki özellik sitesi: - / kullanılabilir haritalar PhiModule Sebep taşıyan 403'e dikkat etmedi Uygulamalı ModelViolationException'ı doğrudan yukarıdaki şekilde yansıtan. olmadan olmadan Aşağıdaki geniş yakalama, 500'e karşı kasıtlı bir politika reddedilmesine dönüştü. - Liste yolundaki oto-enable döngü,PhiPermed ve Atlar. Her tamamlanmış Servis Türü üzerinde çalışır, ancak * listeleme* Organizasyonun özellikleri, bu yüzden ilk engellenmiş modüle atfedin Özellikler sayfası bir PHI onant yerine bir giriş gizlemek için kullanılamaz. Bugün değil - her organizasyonPhi=false'yi ele alıyor.

  21. · kamo-shared-library

    Özelliklerin uyumluluk sınırının güçlendirilmesi

    Wires PhiTenantGuard into FeatureService, the single choke point through which a modülü bir organizasyon için yapılır. Sınırın durduğu yer burası Bir politika nesnesi ve uygulamaya başlar. Her iki yarısı da, çünkü tek başına bir boşluk bırakır: -İş PhiModule NotPermedInception, bu yüzden bir PHI onant olamaz Bir modül üzerinde geçiş Kamo bir iş ortağı olarak geride duramaz. - IsteEnabled(Organizasyon, ServisType) her zaman bir modül engelli rapor eder Onant PHI ve modül sınırın dışında, ne olursa olsun OrgWork satırları diyor. Tablo aktif olarak söyleyebilir - etkinleştirildi - etkinleştirildi Onant bir PHI onant haline gelmeden önce ve Hook'un tekrar çalışmasını sağlar Bu geçiş. PhiPermized, iterate'nin çağrıcıları için olmayan formdur. Özellik auto-enables every completed feature while *listing*, so a throw on the first blocked modülü, tek bir giriş atlamak yerine tüm özellikleri sayfası başarısız olacaktır. PhiServiceTypeMapping HizmetType'ı PhiModule'ye bağlar ve bir testle toplamdır. Bu, binayı herhangi bir değersiz değer üzerinde başarısız kılar. Bu test ilk önce tutmasını sağladı run: ServiceType.STORAGE, enum'un bir grepi kaçırmıştı ve sonra AI CHAT, DOC MANAGER, DOCS EDITOR ve DOC CLASSIFIER. olmadan, beş hizmet Türler sınır dışında sessiz olurdu - aynı omission başarısızlığı PhiModule'nin yapısı veya yakınları, bir tabakayı yeniden başlattı. Daha önce keşfedilmemiş servis türleri için yeni modüller, her biri açık açık açık bir hizmet türü ile Durum: object storage, document editörü ve sınıflandırıcı, destek biletleri, HR, envanter, yasal, hesaplayıcı ve aktivite besleme içeridedir; clubhouse ve oyunlar vardır. BLOCKED PENDING WORK on the reasons that they have been processed, which is a a a Tahmin etmek yerine blok yapmak için neden. Her organizasyon bugünPhi=false ile ilgilidir, bu yüzden bu değişiklikler hiçbir davranış değişmez Üretim. Bu, ilk onant'ın bayrağını taşıyan anı taşır.

  22. · kamo-shared-library

    Auto-as uygulama yaratımında bir MERS uyumlu kredi numarası imzalama

    KrediFile.loanNumber, yaratmakta (hem boş hem de liderlik-promote) çıplaktı. Ve sadece bir steward tipinde ayarlandığında – hangi sert engellenmiş MERS MIN minting (a MIN'in 10 dijital segmenti kredi numarası) ve her aşağıstream Başsız bir kredi için tanımlayıcı. AppMortgageHizmeti şimdi her iki yaratım yerinde bir kredi numarası atar: Temiz bir yer 10digit sayısal sayısal (MinMinter şeritleri dijital olmayan ve <=10-digit segmente ihtiyaç duyar, Bu yüzden saf bir numeric tek güvenli şeklidir), org üzerinden eşsiz bir şekilde (org id, kredi num) bir sınırlı retry ile indeks. FAILS AC to null on a çarpışma çizgisi veya mevcut olmayan bir repo - önceki manuele yükseltmek Uygulama yaratımını bozmak yerine davranış. Bir kredi veren-tümlenmiş Sayı hala kredi-file yama yolu ile overrides. Hiçbir şema değişikliği (thet sütun zaten var, indekslenmiş).

  23. · kamo-signer-monorepo

    Alıcının çözülme zamanı Bölgesinde Render signer tarihleri

    SigningSession, ESigService'nin çözdüğü gerekli bir “timeZone” (IANA id) kazanır. Alıcının üyesi bölgesinden sonra org's, sonra UTC. WelcomeScreen şimdi Açıkça formatta geçer, bu yüzden expiry tarihi nelere bağlıdır viewer's device ayarları ne de sağlayıcının UTC varsayılan. Alanı yapmak Seçmeli olarak yakalanandan ziyade, bir gerçek oturum inşaatı sitesi (purban.ts) der zaman. Ayrıca: - çağrı setRequestLocale yerel düzende, bu yüzden çeviriler URL'ye bağlanır Tek başına orta dikkate güvenmek yerine segment - Dockerfile'de mesajların / hayatta kalan "turbo prune" ve belge belgesinde Neden .dockerignore inşa bağlamdan dışarı çıkmalıdır; bu olmadan Takune çevirileri ve görüntü gemileri çiğ anahtarlar Bir işaretçi açılana kadar başarısız olan hiçbir şey belgeyi açar

  24. · ESigService

    Resolve signer timezone from member, then org

    İmzalama tarihleri, müşteriye varsayılan herhangi bir yerde verildi, bu yüzden bir an 2026-08-03T05:00Z bir Pasifik işaretleyicisi için "Aug 3" okuyabildi Çünkü bağlantı zaten 2 Ağustos akşamı öldü. SigningSession şimdi bir sunucu tarafından çözülebilir IANA zamanZone: alıcının Bir üye olduklarında kendi Üye.timezone ve bir tane kurdular, başka yol Organizasyon.timezone, başka UTC. SignerZone testlerle saf bir çözümleyicidir, Her ZamanzoneType haritalarını kendi bölgesine iddia eden biri de bu yüzden yeni bir alandım Enum değeri bir müşteri-side RangeError gemi yapamaz. Ayrıca, enum adı ("SPANISH") olan yerel yönetime işaret ediyor. BCP-47 kodu ("es") imza URL'nin yerel segmentinde kullanılır.

  25. · InitializerService

    ZeDLES PHI ve PHI EFFECTIVE DATE on orgs

    Aynalar, OrgBrandingFieldsMigration Kongre, bu yüzden sütunlar sadece sadece daha ziyade herhangi bir ortamda yenidenroducible on any environment rather than only Bir ddl-auto geçişinin çalıştırıldığı mevcut. HDLES PHI, NULL DEFAULT FALSE değil, mevcut kiracılar açıkça dışarıda. uyumluluk sınırı. PHI EFFECTIVE DATE, TimeSTAMPTZ değildir, Çünkü varlık alanı bir LocalDateTime. Test sürüklenme bir bekçidir, geri çekilmez: sütun isimlerini okur Bir varlık alanının ALTER olmadığı zaman yansıma ile varlık. İşte bu Bu kongrenin gerçek başarısızlık modu - biri bir alan ekliyor, unutur Göç ve ddl-auto ile: bir üretim olarak yüzeylere Zaman inşa etmek yerine sorgu hatası. mutasyon tarafından doğrulandı: kaldırmak PHI EFFECTIVE DATE ALTER, eylem edilebilir mesajla başarısız olur, geri yükleme yapar Yeşil gider. Her iki sütun zaten kümede mevcut; bu ALTERs idempotent.

  26. · kamo-shared-library

    PersistPhi'yi ve Organizasyonu Etkiliyor

    Backs PhiTenantGuard gerçek bir sütunla. HANDLES PHI NULL DEFAULT FALSE **************** deseni takip edin, bu yüzden mevcut her onant Doğrudan içeride sessiz kalmak yerine uyumluluk sınırı dışındadır. PHI EFFECTIVE DATE kapsamı bir ihlal değerlendirmesi ve bir tutma yükümlülüğüdür Doğru pencere - "ne zaman" ilk soru "nere maruz bırakıldı" sonra sordu. **************** ile politikaya dönüştürül bekçi Kendisi varlığın özgür kalır, bu yüzden sadece bir oturum açma bayrağı tutan bir çağrı Bir satır yüklemek zorunda değil. Güvenli itmek için: Her iki sütun zaten kümede ve 12 kişiden her biri var Organizasyonlar sahte okur. inişten önce bilgi schema'ya karşı doğrulandı - NULL DEFAULT sahte, felsefi date timestamp NULL değil. KamoInitializer migration for the reproducible form.

  27. · kamo-shared-library

    PhiTenantGuard ve modül uyumluluk sınırı

    HIPAA uyumluluk sınırının anahtar taşı: onant hangi modüllere ulaşabilir, Bu onant'ın sağlık bilgilerini koruyup etmeyeceğini verdi. Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Her Şey Kapatıcı anahtarlar - hangi entegrasyonlar devre dışı bırakılır, MFA'nın zorlandığı, Hangi seanslar sıkı zaman alır, denetim omurgasının ne kapsaması gerekir. Carries hiçbir şema bağımlılığı yok. Daha önceki bir girişim bunu yeni bir girişimden uzaklaştırdı Organizasyon.handlesPhi sütunu ve yeniden düşünülmesi gerekiyordu: hizmet CI klonları KamoInitializer el tarafından çalıştırılırken, zamanında paylaşılan-library ana, bu yüzden bir el tarafından çalıştırılır. Anadaki varlık sütunu, bir kişinin göç ettiği zamana kadar bir sonraki hizmet dağıtmasını bozar. Politikayı varlıktan uzaklaştırmak, topraklar anlamına gelir ve şimdi uygulanabilir, Ve sütun bağımsız bir adım haline gelir. Tasarım etrafında inşa edilen üç özellik: - Başarısızlar kapalı. PhiModule'nin yapısı bir PhiDisposition ve bir neden gerektirir, Bu nedenle bir modül daha sonra omission tarafından izin alınamaz - bu kabul etmeyecektir Bir karar olmadan bir araya gelir ve PERMITTED'dan başka bir şey reddeder. İşte bu Başarısızlık modu uyumluluk sınırı hayatta kalmak zorundadır: bir modül gemisi, kimse PHI hakkında düşünüyor, bir klinik onu kullanmaya başlar. - Çözülmemiş bir kiracı güvenli bir kiracı değildir. Koruma tri-state alır PhiTenantStatus, bir boolean'dan ziyade, bu yüzden "Orgayi yükleyemiyorum" “Bu organizasyon PHI değil” gibi aynı şekilde yazılamaz. ile boolean, hata yolu göz ardı edilir (false, ...) - ulaşmak kolay, İncelemede yer almak imkansız. UNKNOWN her şeyi reddediyor. - yükseltmek için hiçbir şey. Karar, (status, modül) saf bir işlev değildir. caller, session, right or God-mode parameter. "Bizim destek personelimiz onu döndürebilir kapalı", kaplı bir varlığın incelemesi başarısız olan cevap. Ayrılmalar, kamo-internalternalternal **************** İzinli: CRM, kontaklar, belge toplay, Kendini barındırma e-posta, e-sign, notlar, görevler, takvim, iç sohbet, in-clusterter transkript / translasyon yığını, MLOS. Alınamaz BAA ile Bloked: sosyal mesajlaşma, Canva, e-ticaret senkronizasyonu, MCP ağ geçidi. İsimli çalışmayı bekleyen bloklar: AI yönlendirici, RAG arama, toplantı kayıtları, VOIP kayıtları, pazarlama kampanyaları, Analitik ihracat. Hiçbir şey gardiyanı henüz aramaz, bu yüzden telinceye kadar inert.

  28. · InitializerService

    ZeDLES PHI ve PHI EFFECTIVE DATE on orgs

    Aynalar, Camo-shared-library'deki organizasyon varlığındaki iki yeni alan, OrgBrandingFieldsMigration kongresini takip edin. HANDLES PHI, NULL DEFAULT FALSE bu yüzden mevcut olan her onant açıkça uyumluluk dışındadır. İçinde sessiz kalmak yerine sınır. PHI EFFECTIVE DATE, TimeSTAMP değildir, TIMESTAMPTZ, çünkü varlık alanı bir LocalDateTime. SEQUENCING - bu bir sonraki hizmet dağıtmasından önce çalıştırmak gerekir. Hizmetler pin Kamo-shared-library, yerinde yeniden yayımlanmış olan sabit bir versiyonda, bu yüzden ilk Bu kütüphane değişiminden sonra yeniden inşa etmek bu sütunları seçmeye başlar ve ddl-auto ile: Bu koşucu idam edilene kadar başarısız olan hizmetlerde biri. eşlik eden test sürüklenme bir bekçidir, geri çekilmez: sütunu okur Bir varlık alanının bir varlık alanının sahip olup olmadığını düşünerek varlıktan gelen isimler ALTER. Bu tüm kongrenin başarısızlığı modudur - biri bir alan ekliyor, Göçü unutun ve bunun yerine üretim sorgu hatası olarak yüzeyler Zaman inşa edin. mutasyon tarafından doğrulandı: PHI EFFECTIVE DATE ALTER onu ortadan kaldırmak Hareketlenebilir mesajla başarısız olun, yeşile geri dönün.

  29. · ESigService

    Emit the signer locale segment in imza bağlantıları

    Byte-for-bay tekrarlanan buildSignLink into SignLinkBuilder Ve Organizasyondan gelen yerel bir segment ekleyin. Çeviri olmadan dört Dil Türü değeri için İngilizce'ye geri dönün. Kamo-signer /{locale} / ilk önce dağıtılması gerekir.

  30. · kamo-shared-library

    İşi eklePhi onant bayrağı ve PhiTenantGuard

    HIPAA uyumluluk sınırının anahtar taşı: per-organizasyon bayrağı artı Organizasyonun hangi modüllere ulaşabileceğine karar vermek. Her şey aşağıstream Bunun dışında anahtarlar - hangi entegrasyonlar devre dışı bırakılır, MFA'nın zorlandığı, hangi seanslar sıkı zaman alır, denetim omurgasının kapağı gerekir. Organizasyon ZeDLES PHI (BOOL DEFAULT FALSE) ve PHI EFFECTIVE DATE, Mevcut **************** deseni takip edin. Sahte, Bu nedenle mevcut ipotek ve CRM kitabı için inert. Tasarım etrafında inşa edilen üç özellik: - Başarısızlar kapalı. PhiModule'nin yapısı bir PhiDisposition ve bir neden gerektirir, Bu nedenle bir modül daha sonra omission tarafından izin alınamaz - bu kabul etmeyecektir Bir karar olmadan bir araya gelir ve PERMITTED'dan başka bir şey reddeder. İşte bu Özel başarısızlık modu uyumluluk sınırı hayatta kalmak zorundadır: bir modül gemisi, PHI hakkında kimse düşünmez, bir klinik onu kullanmaya başlar. - Atılamaz. Karar, (organizasyon, modül) saf bir işlevdir. Hiçbir çağrıcı, oturum, doğru veya tanrı-mode parametresi yok, bu yüzden hiçbir şey yok yükseltmek. "Bizim destek personelimiz onu kapatabilir", kaplanmamış bir cevap. varlık incelemesi. - Denials bir sebep taşır, çünkü çıplak bir "denied" bir destek tarafından kullanılabilir değildir Mühendis veya müşteri. Ayrılmalar, kamo-internalternalternal **************** Bugün İzin: CRM, kontaklar, belge ton, kendini barındırma e-sign, notlar, görevler, takvim, iç sohbet, In-cluster transcription/translation yığını ve MLOS. Hiç elde edilemez BAA: sosyal mesajlaşma, Canva, e-ticaret senkronizasyonu, MCP ağ geçidi. Bloked wait adı İş: AI yönlendiricisi, RAG arama, toplantı kayıtları, VOIP kayıtları, pazarlama Kampanyalar, analitik ihracat. Schema notu: HANDLES PHI ve PHI EFFECTIVE DATE bir sonraki materyalde kullanılır KamoInitializer, CI bu paylaşılan-library inşasını yayınladıktan sonra. Hiçbir şey okumaz Bayrak henüz, bu yüzden sipariş güvenlidir.

Evreniniz sizi bekliyor.

Birkaç dakika içinde ücretsiz olarak başlatın. Hazır olduğunuzda ürünleri ekleyin - göç yok, yeni girişler yok.

Sonsuza kadar ücretsiz — kredi kartı gerekmiyor