Przejdź do treści
KAMOUniverse

Changelog

Co nowego.

Każde ulepszenie platformy, jak to wysyła.

  1. · kamo-shared-library

    Pokaż, ile kosztowałoby wyłączenie, awaria -

    kamo.entitlement.fail-open zapewnia dowolną aplikację, o której wersja planowa matryca nigdy nie wspomina. To jest Udokumentowany jako tymczasowy zawór na zasypanie katalogów - wyłącz go raz Matryca jest rozstawiona – ale nic nie może odpowiedzieć na pytanie, które decyduje, czy Wyłączenie go jest bezpieczne: którzy najemcy trzymają aplikacje tylko z tego powodu. Flipping go ślepym zabrałby aplikacje z organizacji na żywo, z Pierwszy bilet wsparcia jako powiadomienia. Program failOpenGrants rozwiązuje każdą organizację dwukrotnie, raz przyznając niewymienione aplikacje Raz im zaprzeczać i zgłaszać różnicę. Nie czyta na żywo Flaga, więc daje tę samą odpowiedź przed i po przewróceniu. Ponowna rozdzielczość przechodzi przez rozwiązanie planu, a nie przez plan id bezpośrednio, Odzwierciedlając prawdziwą drogę do planuCode lookup - w przeciwnym razie dotacja, która W rzeczywistości przetrwanie zostanie zgłoszone jako strata.

  2. · kamo-internal

    Pokaż, czy ktoś tam jest, i jego przedłużenie

    Każdy rząd teraz nosi kropkę obecności i słowo obok nazwy i jej rozszerzenia w linii szczegółów – więc wybór osoby nie oznacza już wybrania imienia i nazwiska oraz W nadziei. To jest jedna osoba wybierająca w aplikacji, więc ląduje na Menedżerze Pole, e-sygnatariusze, dodając ludzi do czatu i przypisując wsparcie. Offline bije wszystko, co zadeklarowano. dostępność_status porusza się tylko na log-in, Wypis i ręczny przełącznik, więc ktoś, kto nigdy nie podpisuje odczytu, jest dostępny Nieskończenie – pokazując, że jako zielona kropka byłaby pewnie błędna co do tego, co do tego, Jedną rzeczą jest ta kropka. Niepołączone losowania jako pierścień zarysowy, a nie Napełniona kropka, więc odczytuje jako nieobecność, a nie jako inny kolor statusu. Katalog, który nigdy nie niósł obecności – źródło w pamięci za „fetcher” – Nie wykazuje żadnego wskaźnika. Nieobecny jest nieznany i nieznane nie powinno nic mówić Zamiast twierdzić, że wszyscy są offline.

  3. · SecurityService

    Przenieś dostępność, obecność i rozszerzenie w wierszu katalogu

    Wybór osoby jest łatwiejszy, gdy rząd mówi, czy tam jest i jak to zrobić Dotarcie do nich, więc każdy z nich teraz nosi to, co ostatnio zadeklarowali, czy cokolwiek z tego, co się dzieje. Są one w rzeczywistości połączone, a ich praca jest zbudowana, gdy je mają. Dostępność i obecność są tutaj, ponieważ albo same wprowadzają w błąd: Availability_status porusza się tylko na log-in, wylogowanie i ręczny przełącznik, więc a więc Członek, który nigdy się nie podpisuje, czyta się w nieskończoność. Obecność jest odczytywana z PRESENCE:-memberId key MediaService pisze — a a Pomiędzywy serwisowo czytany warty nazewnictwa. Alternatywą była podróż HTTP w obie strony MediaService na każdym naciśnięciu klawisza wyszukiwania lub odczytu obecności w przeglądarce, A przeglądarka nie może: ToolProviders renderuje narzędzie dokowanie jako rodzeństwo Drzewo trzymające dostawców obecności, więc zbieracz otworzył się wewnątrz biletu pomocy technicznej Okno zgłasza każdego kolegę offline. Obie usługi dzielą gospodarza Redis I bazę danych. Nieudany wygląd odczytuje się jako offline, zamiast nieustępować wyszukiwania.

  4. · BillingService

    Kup blok, gdy wybiega się z org

    Biegnie wkrótce po nocnym zamiataniu, ponieważ to właśnie produkuje Liczba użytkowników, na które decyduje się – rozszerzenie na wczorajszy numer kupi Blokada o dzień spóźnia się za każdym razem. Jeden blok na bieg, nigdy nie wybuch nadrabiania zaległości, a zatrzymuje się na suficie właściciela. Jeśli organizacja jest daleko poza tym sufitem, właściwym rezultatem jest to, że pisze stop I ktoś na to patrzy, nie że platforma po cichu kupuje sobie drogę do swojego wyjścia Wydatki. Automatycznie rozwijaj bez odczytów sufitowych jako niepełnosprawny niż nieograniczony, Ponieważ nieobecny limit jest znacznie bardziej prawdopodobny niż intencją.

  5. · InitializerService

    Dodaj kolumny automatycznego rozszerzanie

  6. · kamo-shared-library

    Zdecydowanie o automatycznej ekspandie z sufitem

    Dwie kolumny na subskrypcji, która zawiera bloki: czy kupić inną Automatycznie, gdy organizacji zabrakło miejsca, a najbardziej może Zawsze kup. Celowo domyślnie – po cichu zwiększanie czyjegoś rachunku jest gorsze niż Prześlij, aby zawodził z wyjaśnieniem, więc włączenie go jest właścicielem handlu Mało pieniędzy za to, że nigdy nie trzeba o tym myśleć, a to tylko ich handel. Wynaj się. Sufit jest wymagany zamiast opcjonalnego: automatyczny zakup bez Jest to zobowiązanie otwarte do procesu, który nikt nie obserwuje.

  7. · BillingService

    Niech zmiana ceny katalogowej faktycznie dotrze do Stripe

    Ceny Stripe są niezmienne, a mapowanie zawiera jeden wiersz na (org, typ, kod, Cykl) za unikalnym kluczem, więc gdy tylko cena istniała, nigdy nie mogła się zmienić. A A Etuicja cen była stałym punktem zwrotnym od przychodów i nic nie zgłosiło. StripePriceReconciler porównuje każdą zmapową cenę w stosunku do tego, jaki katalog teraz Mówi i, gdy zostanie to poproszone, wskazuje na odwzorowanie w świeżej Stripe Price ze starym Zarchiwizowany — raczej archiwizowany niż usuwany, ponieważ Stripe wciąż rozlicza zarchiwizowanej ceny już na nim subskrypcje i odmawia jej nowych, To jest dokładnie takie zachowanie, jakiego pożądanego. Poderze są przenoszone, więc mierzą się Cena nie może wrócić bez znaczenia i po cichu zatrzymać fakturowania. Celowo nie przenosi istniejących subskrybentów na nową cenę. Cicho Ponowne wycenie klienta na żywo, ponieważ ktoś edytował wiersz katalogowy, jest opłatą Nikt nie upoważnił; czy dziadek jest decyzją handlową, a Fakt, że nigdy nie była to decyzja, czego brakowało. Liczb wciąż na Zamiast tego podaje się stara cena. Wyeksponowany raport tylko domyślnie w GET - z Powtórz punkt za wyraźnym POST.

  8. · InitializerService

    Dodać kolumny, które sprawiają, że zmiana ceny jest wykrywalna

    Order(0), nieważne, bez zasypiania — nie ma broni łamania brzmi tak, jak "nie wiemy, co Cena ta została stworzona z" a gornik traktuje ją jako niewiadomą, a nie nie Tak jak dryf.

  9. · kamo-shared-library

    Nagraj to, co każda cena Stripe została stworzona z

    Odwzorowanie przechowywane tylko w cenie id, więc zmiana ceny katalogowej może być Nawet nie być zauważone. Upewnij się, że PlanPrices zwarł się na istnieniu rzędu i Wyjątkowy klucz zabronił drugiego, co oznaczało podniesienie planu z 72 USD do 79 USD. Zaktualizowano stronę marketingową, wycenę w aplikacji i plan DTO i zmiana Nic o tym, co ktokolwiek został oskarżony – bez niczego zgłaszającego rozbieżność. unit_amount_cents i waluta dają gorowi coś do porównania. Zarówno nieważny, jak i pozostawiony NULL dla istniejących rzędów: null oznacza "nieznany", który jest true każdego wiersza poprzedzającego kolumnę i traktowanie nieznanego jako niedopasowanego Odtwórz każdą cenę w osiedlu w pierwszym biegu.

  10. · kamo-internal

    Wpisz pojemność magazynową, z powrotem podsumowania

    Utrzymuje umowę klienta w pogotowiu za pomocą BillingService, która teraz informuje, co Plan obejmuje, jakie bloki zostały zakupione, połączony sufit i Frakcja używana obok przechowywanych bajtów. Panel, który sprawia, że potrzebuje nowej kopii, a kamo-translation-dictionary jest W połowie strony innej sesji, więc interfejs użytkownika ląduje osobno, zamiast zamiatać Praca w locie w tym repo.

  11. · BillingService

    Zgłoś pojemność wraz z użytkowaniem

    Panel przechowywania zgłoszony bytes przechowywany za nic nie w ogóle – brak zasiłku, Brak procentu, bez pieniędzy - więc właściciel patrząc na 400 GB nie miał sposobu, aby powiedzieć Czy to było wygodne, czy zamierza zatrzymać ich przesyłanie. Ich pierwszy Znajomość problemu byłaby nieudanym przesłaniem. Podsumowanie zawiera teraz to, co obejmuje plan, jakie bloki zostały zakupione, Połączony sufit i użyte ułamek, plus rozmiar bloku i cena, więc Powierzchnia może powiedzieć, co dałby kolejny blok i kosztuj bez twardo kodowania. Wszystko pochodzi z tych samych wierszy katalogów, z których ładunek jest wyceniony.

  12. · kamo-shared-library

    Nadaj przydziałowi magazynowe efekt

    Przechowywanie było mierzone w dziewiętnastu domenach, nocą, z efektem budowy. Test pokrycia – i nigdzie nie obliczył zasiłku lub odmówił bajtowi. Dane dotyczące przechowywania planu były danymi, których nikt nie czytał, a dodatkowe przechowywanie Napłydzenie nie miało żadnego efektu produktu: płacenie nic nie zmieniło i nie płaciło kosztów Nic. StorageQuotaService rozwiązuje to, co organizacja może posiadać — plan na użytkownika Dodatek połączony na jego siedzeniach, a także bloków, które kupił - i ImageService odrzuca treści, które by je przewyższały. Szeregotkę znajduje się po Rozduwa, więc ponowne przyłączenie pliku, który platforma już posiada, nigdy nie jest odrzucane W przestrzeni, tylko naprawdę nowe baje się liczą. Mieszka tu, a nie w BillingService, ponieważ usługi, które piszą bajty nie mogą nazywać API rozliczeniowego na swojej ścieżce przesyłania, a on jest wstrzykiwany przez Pole zamiast przez konstruktora, ponieważ ImageService jest montowany przez Ręka w kilku miejscach – argument konstruktora to jedna edycja, która kompiluje Wszędzie, z wyjątkiem testów, a następnie zawodzi budowanie obrazu. Dwa celowe sposoby na pomyłkę. "GB" jest odczytywany jako gibibyt, co jest tym, co Menedżer plików oznacza, gdy drukuje GB i bardziej hojny odczyt. I a) organizacja bez subskrypcji na żywo lub usługa bez limitu fasoli przewodowej, Sklepy dokładnie tak, jak wcześniej: ta brama istnieje, aby trzymać płacący klientowi do czego Kupili, a nie po to, aby zamienić lukę rozliczeniową w utratę danych. Odczyty nigdy nie są zamknięte - Wypełnienie magazynu zatrzymuje dodawanie więcej, nigdy nie odbierasz tego, co masz.

  13. · kamo-internal

    Powiedz wnioskodawcy, czy ich agent rzeczywiście tam jest

    Cichy wątek nie odróżnia "nikt nie patrzył na to" od "mój agent Odszedł”, a osoba oczekująca nie może powiedzieć, która. Zawiadomienie w ramach Rozmowa mówi, która, a kiedy odpowiedź brzmi "nie teraz", mówi, co się dzieje Następnie wiadomość jest odbierana i zostanie odebrana, gdy wrócą – raczej Aby zostawić kogoś, kto zastanawia się, czy w ogóle wylądował. Umieszczony pod czatem, a nie w nagłówku, ponieważ odpowiada "jest każdy Gdzieś?", czyli pytanie jest zadawane podczas pisania, a nie podczas skanowania Metadane biletu. Odpowiadany na serwer, nie odczytany z mapy obecności żądającego: obecność jest Transmisja na organizację, więc klient-org jest wspomagany przez dostawcę Ig postrzega ich agenta jako trwale offline. Pewne, że się mylą "są "jest gorszy niż brak uwagi. Z tego samego powodu nieudany sondaż utrzymuje ostatni Znana odpowiedź zamiast odwrócić uwagę. Postrzeliła w wieku 30 lat i tylko wtedy, gdy zakładka jest widoczna. Dostępność jest komfortem Sygnał, a nie poprawność, a zakładka z przeszłością nie jest nikim.

  14. · MediaService

    Przypisanie dociera do nowego agenta, a wnioskodawcy mówi się, kto tam jest

    Przypisanie nie dotarło do nikogo. zadanieOpenedAt rekordy, które umieścił klient Rozmowa na ekranie i to jest to, co podnosi bilet przy logowaniu - ale to Nadal trzymał pieczątkę umorzeni agenta, więc nowy dostał impuls na żywo tylko wtedy, gdy Byli w tym drugim miejscu i nic, jeśli byli. wylogowany. applyPrzypisanie teraz oczyszcza go za każdym razem, gdy przydzielony faktycznie się zmienia, To sprawia, że przekazanie jest trwałe dla każdego, kto jest jego właścicielem. GET - mówi osobie, która poprosiła o pomoc, czy Osoba pomagająca im jest dostępna. Odpowiadana po stronie serwera celowo: obecność Jest nadawany na organizację, więc klient-org requestor nie może zobaczyć agenta w Dostawca org w ogóle i status odczytałby "offline" dla każdego pojedynczego Rozmowa cross-org. Scoed do ludzi już w rozmowie – a Bilet id jest UUID, a nie tajemnicą, i "czy ta osoba przy biurku" nie powinna Odpowiedz na zgadywanie.

  15. · kamo-internal

    Przypisz prośbę o czat i przypisać z listy biletów

    Dwie luki, ta sama przyczyna – przydział został potraktowany jako coś, co dzieje się z czymś, co się dzieje Bilet zamiast na pracę. Przycisk przypisujący został ukryty dla biletów wstępnie, więc żądanie czatu na żywo, Sprawa, w której dotarcie do właściwej osoby ma największe znaczenie, nie miała możliwości bycia W ogóle został przekazany. To wykluczenie pochodzi od tego, kiedy prośba o czacie nie była jeszcze "a" Prawdziwy bilet" i przydział tylko na konwersji. Jest teraz przypisywalny, A status przetrwa, więc nadal można go później nawrócić. A przypisanie wymagało otwarcia rozmowy jako pierwszego, co jest złym kształtem Do trójsta jazdy w kolejce – osoba pracująca w kolejce często nie jest osobą, która Powinien odpowiedzieć. Komórka przydzielona na listę biletów jest teraz kontrolna: Zawisłe pokazy przypisują lub przypiszą, kliknięcie otwiera ten sam picker bilet Zużycia okien. Kliknięcie wiersza nadal otwiera rozmowę. Odpowiedź łatuje swój własny rząd, a nie przeładowuje, więc przypisanie nie Przesuń miejsce operatora w przefiltrowanej, posortowanej, poskładkowej kolejce.

  16. · kamo-internal

    Silnik wyceny dla zbieracza planu, dopasowujący to, co Stripe będzie rozliczać

    Irytmetyka za żywą sumą biegu, trzymana od siebie oddzielona od dowolnego składnika, więc Liczby można przetestować bezpośrednio. Odzwierciedla ;) ;) Dokładnie: na siedząco dodatki skalne z liczbą pracowników, rachunki płaskich według zakupionych jednostek Bez względu na to, jak wiele osób jest na planie, a te mierzone są nazwane, a nie Zgadłeś. Ta korespondencja jest sedna. Oba miejsca platforma wcześniej cytowała Cena nie zgadza się z ładunkiem — kreator zamówienia w aplikacji dodał każdy dodatek raz Bez względu na miejsca siedzące, a strona publiczna rozliczała pulę magazynową w całej organizacji - Na użytkownika.

  17. · BillingService

    Zrób pierwszy plan do kupie, a także zwróć realne ceny planu

    Dwie rzeczy zatrzymały organizację, która kiedykolwiek kupiła pierwszą subskrypcję. Listy planów były osiągalne tylko za pośrednictwem sub.marketId w subskrypcji org Już posiadany, więc org z nikim z nikim nie mógł zobaczyć planu nigdzie w produkcie. GET /api/billing/markets/for-org rozwiązuje rynek od osoby dzwonijącej roota uprawnień – ten sam org, którego wolny plan dostarcza już ich wartości bazowej, Tak więc plany i uprawnienia nie mogą pochodzić z różnych katalogów. I plan DTO przeczytał - czego nic nie Zawsze zaludnia: są one NULL dla każdego planu KamoCRM, ponieważ widz pisze Ceny w - Powierzchnia kupna pokazała zatem W ogóle nie cena, a konto zarejestrowało nieważną opłatę. Teraz czyta się już cenę Rządy, z kolumnami planu jako odwrotną dla katalogów, które je niosą. Naraża również rozmiar jednostki dodatku, dzięki czemu powierzchnia kupna może powiedzieć "na 10 GB" Bez twardego kodowania.

  18. · kamo-internal

    Brama zapłaciła akcja na licencjonowanym miejscu, w punkcie zadławieni

    Prawie każda akcja bramowa w produkcie — wybierz rozszerzenie, e-mail użytkownika, Otwórz asystenta AI, odtworzyć nagranie, rozpocząć rozmowę społeczną – jest nagi - a rejestr narzędzi nie miał żadnej bramki. Pozywanie tych miejsc na połączeniach pojedynczo nigdy nie może być kompletne: dyspozytor Dodano później lub po prostu spudłował trasy wokół niego. Teraz czek żyje Pojedyncze narzędzie WindowsContext: open handler, więc każdy dzwoniąc jest objęty. Czynności, które nigdy nie przechodzą przez okno narzędzia, są ogrodzone tam, gdzie żyją: załączniki (w tym przeciąganie i pasta, które są tą samą zdolnością przez Kolejna trasa), rozwijanie czatu w grupie i miejsca spotkań. Załatwi to również trzy niespójności, jakie stwierdzono w przypadku audytu. Dwa z tych trzech "Zaprosić do spotkania" punkty wejścia sprawdzonej organizacji.isMeet i trzeci to zrobił Nie; dwa z trzech punktów wejścia do poczty e-mail sprawdziły ACCESS_MAIL, a trzeci Nie; i wybranie rozszerzenia członka z listy nie miało VOIP sprawdzenia żadnego Niemiły. Teraz wszyscy się zgadzają. Możliwości nie domyślnie zablokowanego - podczas gdy pierwsze obciążenie jest w locie, jeśli połączenie Porażka, a jeśli starszy backend pominie pole. Zgadywanie "dozwolone" by się oddało naliczonych cech, które są błędem, jaką ścieżka uprawnień już raz została wykonana Z jego nieudanym-otwartym domyślnym domyślnym.

  19. · SecurityService

    Rozwiązuj to, co może zrobić członek, a nie tylko to, co obejmuje ich plan

    Dotacje fabularne opisują plan. Nigdy nie opisali tego członka, ponieważ Nawigacja bramek konsolowych na org-level org.features — tak więc członek bez licencji W ogóle widział każdą aplikację, do której organizacja była uprawniona, oraz na poziomie członkowskim Licencje, które już istniały w bazie danych, nie miały żadnego wpływu na nic. MemberCapabilities jest tą brakującą odpowiedzią, rozwiązaną raz na serwerze. Jeden z członków Bez siedzenia utrzymuje celową podłogę: rozmowa tekstowa z kolegami z drużyny, Wsparcie, ich własny profil, własne fakturowanie – wystarczająco, aby dotrzeć do człowieka i Kup sobie siedzenie. Tłumaczenie przychodzące na wiadomości również pozostaje, ponieważ czytanie czego Wysłano cię, że nie wydajesz. Wszystko, co kosztuje pieniądze, jest wyłączone. Aktywny test org licencjonuje wszystkich w orgach, a nie tylko na siedzeniu Uchwyt. Próbny org jest rozstawiony z pojedynczym siedziskiem Free Plan, więc bramka Próba na licencjach oznaczałaby, że sam właściciel mógłby ocenić produkt Podczas gdy zespół, którego zaprosili do jej oceny, nic nie widział. Logowanie jest nietknięte: uwierzytelnianie nigdy nie konsultowało się z państwem rozliczeniowym i nadal Nie robi tego. Utrata funkcji siedzących kosztuje, nigdy nie ma dostępu.

  20. · BillingService

    Bill per-ont przez jednostki zakupione, a nie przez liczbę pracowników

    Wątek nowej ilości dodatku poprzez tworzenie i aktualizowanie: dodatek FLAT teraz Odbiera swoją ilość Stripe z tego, co faktycznie kupiła subskrypcja, więc cztery 10 GB bloków pamięci masowej jako cztery bloki, a nie raz na siedzenie. Ilość jest filtrowana na podstawie rozwiązanych kodów dodatkowych w drodze, więc Nieświeży lub wrogi organ nie może zaparkować ilości przeciwko kodowi, którego nie było uprawnione Kupić.

  21. · InitializerService

    Wycena dodatkowa pamięć masowa jako 2,50 USD za 10 GB, org

    Dodatek opisał wspólną pulę w całej organizacji, a następnie był wyceniony USAGE_BASED za 4 USD z "25 GB" podanym tylko w prozach. Nic nigdy nie zgłosiło Zdarzenie na obbiórkę, więc nic nie obciążyło; i gdyby było przymocowane, Stripe Odrzuca ilość po cenie odmierzonej, więc tworzenie subskrypcji Rzucony. Tymczasem strona publiczna uczyniła go "+$4 /user/month". Teraz jest to FLAT z jednostką_size 10 za 2,50 USD - blokuje zakup właściciela, wyceniło Podobnie jest z wieloma osobami na planie. AddOnQuantityMigration dodaje te dwa Nieuważne kolumny na zamówienie(0), zanim jakikolwiek biegacz będzie mógł załadować podmiot, który mapuje - Idzą.

  22. · kamo-shared-library

    Daj dodatki rozmiar jednostki i ilość do przejmą

    Jednostka dodatkowa istniała tylko jako proza w swoim opisie ("Każda jednostka Dodaje 25 GB") i jako zakodowana stała w witrynie marketingowej, więc nic nie mogło Rachunek przeciwko temu. SubskrypcjaDodanoNawyk zysku jednostki_size i zyskanie AccountSubsscription addon_quantities — ile jednostek każdego dodatku zakupionej subskrypcji. active_addon_codes pozostaje źródłem uprawnień prawdy, więc nic, co tylko nie Pyta "jest ta aplikacja, która musi wiedzieć, że mapa ilości istnieje. Naprawia również cytat kreatora zamówienia, który dodawał każdy dodatek raz bez miejsc Czynnik, mimo że większość to PER_SEAT: 25-miejscowe zamówienie z czterema modułami było Zacytowano 31 dolarów na rachunek za 775 dolarów Stripe. Cytat jest teraz następujący właśnie ten sam Model cenowy, który pobiera, i pomija raczej odmierzone dodatki niż zgadywanie.

  23. · kamo-internal

    Wybierz agenta, aby przydzielić bilet, zamiast wpisać ich id

    Przypisz i ponowny przypisanie otworzyło pole tekstowe, w którym wpisałeś surowy id członka — który Oznaczało to już znać id osoby, której chciałeś, za działanie, którego całość Celem jest znalezienie właściwego. Teraz korzysta z MemberPickerDialog, tego samego pickera za polem Managera na Profil członka i jedna osoba wybiera w tej aplikacji. Jego wyszukiwanie katalogów działa Po stronie serwera i mecze na temat nazwisk, alias, pracy i poczty e-mail, tytuł pracy i Departament, więc "pożyczka z tytułu aana" znajduje Anę w pożyczaniu; każdy rząd ma wystarczająco dużo, aby Powiedz dwóm osobom o tym samym nazwisku. Aktualny cesjonariusz jest przypięty nad Wyniki więc nie są utracone w połowie poszukiwań. Ids członkowskie przekraczają dokładny zakres liczby dziewickiej JavaScript, więc id pozostaje ciągiem znaków od Katalog na drut.

  24. · MediaService

    Punkty końcowe dla automatycznego otwierania logowania

    GET /sessions/chat/auto-open zwraca rozmowy na czacie klienta tego członka Powinien podnieść; POST /sessions/'guid'/auto-otwarte rekordy, które to zrobił. Trwałe odpowiednika przekazania wsparcia i z tego samego powodu: decyzja Należy do platformy, a nie do jednej karty przeglądarki sessionStorage. Pisz jest szeroko rozpowszechniony do własnego wiersza członkowskiego dzwonionego, więc klient jednego członka Nigdy nie może przejść na emeryturę i oznaczyć czasu serwera, a nie na klienta. wartość — porównanie jest sprzeczne z znacznikami czasu wiadomości napisanych przez ten sam zegar, Zniekształcona przeglądarka w przeciwnym razie albo zahamowałaby rozmowę na zawsze, albo Zbierz go w nieskończoność. ChatAutoOpenHqlTest analizuje zapytanie przeciwko prawdziwemu modelowi bytu i przypina Trzy predykaty, dla których istnieje. Wiosenne dane tylko potwierdzają tylko ?Query w kontekście But, więc literówka w przeciwnym razie pojawiłaby się jako nieudany start lub 500 na ścieżce Każdy członek uderza przy logowaniu; test odczytuje zapytanie z adnotacji przez Odzwierciedlanie, więc nie może przejść przeciwko nieświeżej kopii.

  25. · kamo-shared-library

    Trwały zapis rozmowy klienta podniesionego przez siebie

    MediaSessionMember zyskuje AUTO_OPENED_AT, obok msgIdLastViewed, ponieważ jest to To samo ziarno – fakt o związku jednego członka z jedną sesją. Ten jeden Odpowiedzi na pytanie "ile oni czytali"; ten odpowiada "czy zostało to już pokazane To, bez zarzutu”. Zastępuje on sesję per-tab flagaStorage, która nie była zapisem niczego: Drugie urządzenie ponownie otworzyło każdą rozmowę, która pierwsza już się zaskoczyła, i Przesłanie magazynowe całkowicie straciło fakt. ZnajdźChatSessionsToAutoOpen powraca sesje z czymś, co ma członek Nie czytaj, gdzie coś dotarło od ostatniej podwyżki - więc rozmowa Celowo pozostawił nieprzeczytane zatrzymania ponownego otwarcia na każdym obciążeniu, ale wraca, gdy Wynosi naprawdę nowe przesłanie. Tylko sesje czatu; bilety wsparcia mają swoje własne Przekazanie. Własne komunikaty członka są wykluczone, a zwisające msgIdLastViewed Wskazówce liczy się raczej niereadne niż jako złapane, ponieważ skalar subquery over Zniknięty rząd daje NULL i czytał go jako trwale czytany.

  26. · kamo-internal

    Rewij panel preferencji

    Cztery zrzuty i przełącznik na panelu umyty na górę na dół w dzierżawcy Kolor w pełni sił, więc każda kontrola walczyła z własnym tłem. Każdy z nas Wybierz ukryć trzy lub cztery opcje za kliknięciem i powtórzenie tego samego dwunastu Linie stylizacji granicznej. Panel jest teraz powierzchnią, a kolor należy do tego, co jest wybrane. - Każda opcja jest na ekranie. Są to cztery ustawienia z trzema do pięciu Po pierwsze wartości; pokazywanie ich jest szybsze niż otwieranie menu, oraz Jednoskładnik Choice zastępuje cztery bloki zduplikowanej stylizacji. - Przypomnienie czasu i metody współdzielić kartę, ponieważ żadne z nich nie oznacza niczego - Bez drugiego. Przypomnienie offsetów są mono, pasujące do reszty Leczenie czasu w kalendarzu. - Domyślny kalendarz pokazuje jego kolor, więc jest rozpoznawany w ten sam sposób Jest w pasku bocznym i oknie dialogowym zdarzenia, a nie tylko z imienia i nazwiska. - Nagłówek pozostaje umieszczony, podczas gdy ciało przewija się - z czterema sekcjami tytułu W przeciwnym razie przewija się. Ustawienia te zapisują się na zmianie bez przycisku do naciśnięcia, a wcześniej powiedział Tak z gołym spinnerem. Jest teraz wyraźny "Saved", który zanika po Kilka sekund, ponieważ jest to paragoń za zmianę dokonaną, a nie na Stan stałego panelu. Sekcje zataczają się i źródłami potwierdzenia; oba są tłumione pod Preferuje-redukowany ruch. Każdy ciąg jest istniejącym kluczem. Zweryfikowany za pomocą produkcji w oderwanym drzewie robotniczym.

  27. · kamo-internal

    Zamień spinnery skrzynki pocztowej szkieletem, który się składa

    Każdy stan załadunku na /messages był ładowarka2 na pustej szybie — Buty, lista wiadomości, drzewo folderów, ciało wiadomości i następna strona Rozpiętość na miejscu i nie powiedziała czytelnikowi nic o tym, co nadchodzi. Teraz rysują to, co jest ładowaniem. Każdy zastępca kopiuje geometrię Komponent, który stanowi, aż do awatara 40px, wcięcia folderu i Rząd wiadomości 104/120px mierzony od rzeczywistej znacznika, więc układ nie Poruszają się, gdy dane lądują. Jedna idea niesie ruch: pasmo przemierań światła Każdy zastępca od lewej do prawej i rozpoczyna bit później w każdym rzędzie poniżej niego, więc Podświetlenie opada stosu jako pojedyncza przemijana przepustka, a nie w każdym rzędzie Migając na własnym zegarze. Wiersze wznoszą się w tej samej kolejności. Światło jest mieszane z --akcent-comms, własny rodzinny akcent modułu wiadomości, Tak więc czyta się za ten produkt, a nie ogólny połysk. preferuje-redukację w ruchu Uchwyca całą sprawę, aby nieruchomo paski. Brak nowych kluczy wiadomości: symbole zastępcze ogłaszają się czytelnikom ekranowym Przejście przez trzy ciągi załadowcze, które już tam były.

  28. · kamo-internal

    Dodawanie i usuwanie gości z dialogu wydarzenia

    Ostatnia rzecz, której dialog nie mógł zrobić. Może pokazać, kto już był na Wydarzenie, ale nie było sposobu, aby umieścić kogoś tam - jedyna kontrola gości Był "aktualizacja i powiadomienie", która ponownie wysyła osoby, które zostały już zaproszone. Goście są dodawani pocztą elektroniczną, wymienieni z ich RSVP jako kolorowa kropka zatytułowana Z państwem i usunięty na zawisu. Enter dodaje gościa, a nie Przesłanie dialogu, ponieważ jesteś w połowie listy, a nie ukończono. A w pog w, w powtachnie w zd pow. w tym, w tym, w tym, w tym, w tym, w tym, w tym, w tym, w tym, w tym, w tym, w tym, Organizator jest oznaczony i nie można go pomylić ze zwykłym gościem. Walidacja e-mail jest celowo permierna: prawdziwym testem jest to, czy poczta Odbija się, a bardziej rygorystyczny wzorzec odrzuca adresy, które są idealnie Oważalny. To chwyta oczywisty typo, nic więcej. Pusty stan zaprasza, a nie przeprasza. Stringi wysłane przed tym w kamo-translation-dykcyjne — next-intl Rzuca na kluczy zaginiony w en.json i kamo-internal's CI klony, które się repo W czasie budowy, więc lądowanie tego pierwszego wysłałoby stronę kalendarzową, która - Rozbija się. Zweryfikowany z produkcją w odernym drzewie; kolejna sesja Przechowuje zamek w drzewie.

  29. · EmailService

    Zarządzanie listą gości wydarzenia

    Okno dialogowe może pokazać, kto był już na wydarzeniu, ale nigdy nie dodawać ani nie usuwać Każdy; jedyną operacją gościa było ponowne zganizowanie ludzi, którzy w jakiś sposób byli Już tam jest. Wydarzenia przyjmują teraz listę gości, wymienioną hurtowo na oszczędzaniu. Zamień raczej niż się scalić, ponieważ dialog jest właścicielem listy — gość usunięty musi Znika tu. Lista zerowa oznacza "niedostarczona" i pozostawia gości Tylko w pojedynkę, co wysyła tylko język kliencki. Dwie rzeczy, których klient nie może twierdzić, więc nie jest odczytywany prośba: RSVP, który jest gościem do wysłania, oraz flaga organizatora, Co rejestruje, kto zwołał spotkanie. Obaj przetrwają edycję – odtwór Rządy zamiast ich aktualizować zresetowałyby każdą odpowiedź i rozebrać jedną Osoba może odwołać wydarzenie. Goście wracają patched. Widz miesięczny zwraca sto wydarzeń i pyta Według zdarzenia jest zapytaniem na wiersz. Usuwanie wydarzenia najpierw usuwa swoich gości. Prowadzą nienuczkę Obcy klucz z powrotem do niego, więc usunięcie albo osierociło, albo raz nie powiodło się Baza danych wymusiła odniesienie.

  30. · kamo-shared-library

    Batched guest lookup i usunąć przez wypozwijenie

    Okno dialogowe zdarzenia pokazuje, z kim jest zdarzenie, a lista zwraca punkt końcowy Miesiąc wydarzeń na raz. Prośba o gości na wydarzenie jest zapytaniem w jednym wierszu; ZnajdźByEventIdIn pyta raz. UńByEventId to pierwsza połowa wymiany listy gości hurtowej, oraz usunięcie zdarzenia bez osieroconych rzędów, które niosą nienujne zagraniczne Klucz do tego.

Twój wszechświat czeka.

Rozpocznij bezpłatnie w kilka minut.Dodaj produkty, kiedy tylko będziesz gotowy — bez migracji, bez nowych logowań.

Bezpłatne na zawsze — nie wymaga karty kredytowej