Changelog
Ada kabar baru.
Setiap perbaikan pada platform, sebagai kapal.
· EmailService
Baca salah satu acara oleh id
Halaman utama berisi iD acara callback dan ingin membuka kembali dalam sama dialog penggunaan kalender, sehingga perlu dapat mengambil acara sendiri. Dilipat persis seperti daftar - anggota sendiri kalender ditambah organisasi - sehingga id milik orang lain kalender dibaca sebagai absen bukan sebagai terlarang.
· kamo-internal
Catatan mengambang menjadi kelas kedua dari hex head window
Hex heads now back two kinds of window: the popup tool windows they Selalu begitu, dan catatan mengambang. Minimalkan menggantikan gulung lama - a lengket minimalkan daun overlay sepenuhnya dan tanah di kepala hex dock memakai warna catatan sendiri, di mana popover terbuka / dekat dan melempar - to- tujuan drive persis seperti mereka drive jendela alat. Integrasi adalah kontrak acara, tidak lebih: kepala dikebiri oleh id jendela, jadi catatan mengambil sebuah 'floating-note: < id >' namespace didalam yang berbagi ruang id dan menjawab 'tool: fokus' / 'alat: close' untuk mereka sendiri. 'tool: requesClose' tidak sengaja divetoed - bahwa veto protective draft yang tidak dikirim, dan sebuah autossaves lengket dan flushes di unmount. Juga: - Seluruh judul bar drags. Judul adalah sebuah label daripada sebuah masukan, yang merupakan apa yang mencuri setiap pixel tetapi bagian atas kiri; double-clicking it renames, double-clicking anywhere else memaksimalkan. Maksimalkan layar penuh, dari tombol atau klik ganda. - Sebuah catatan adalah hidup di satu tempat atau yang lain, tidak pernah keduanya. Sementara mengambang, kartu dalam / catatan dim dan inert (hanya pasang ulang tetap hidup) dan melepas dari penyunting menutup penyunting. "Buka di Catatan" tangan catatan kembali dan menutup lengket. - The deep- link kait adalah boolean tunggal, jadi catatan diserahkan kembali kedua kalinya tidak pernah dibuka kembali. Ini adalah keyed per id sekarang. - Sebuah lengket kiri diminimalkan re- spawns kepalanya setelah reload, dan legacy 'collapse' lengket migrasi untuk meminimalkan daripada menghilang.
· kamo-internal
Sebuah kontrol yang benar-benar membuka apa yang dihasilkan acara
Deskripsi callback membawa "Buka timah: / lead / view / 123" sebagai teks, dan teks dalam textarea tidak dapat diklik - kejadian dialog deskripsi dalam satu, sehingga jalan yang bisa pernah telah link di sana. Tujuan telah berada pada deepLink acara sejak kolom ditambahkan; ini adalah keuntungan yang menggunakannya. Dialog menawarkan itu di samping jenis acara, pandangan agenda menawarkan di bawah deskripsi, dan keduanya pergi melalui router daripada memuat dokumen, karena baik dapat dibuka atas setiap halaman dan navigasi akan merobek apa pun anggota telah pergi. Keyed off deepLink daripada off callback secara khusus, jadi apa pun yang menghasilkan kejadian berikutnya akan mendapatkan kontrol tanpa menyentuh dialog ini. Label berbunyi "Buka memimpin "ketika asal adalah callback dan" Buka "jika tidak.
· kamo-internal
Callbacks pada kalender, dan penanda pada daftar
Dua cara untuk melihat panggilan Anda berjanji untuk membuat tanpa membuka memimpin. Pada kalender, callback mendapat item baris sendiri daripada terlihat seperti apapun janji lain - panggilan Anda berutang seseorang adalah jenis yang berbeda kewajiban dari pertemuan Anda setuju untuk hadir, dan pemandangan yang membuat mereka identik membuat Anda membaca setiap judul untuk memberitahu mereka terpisah. Pemandangan bulan runtuh sehari panggilan ke satu baris membaca berapa banyak ada, karena sel cocok sekitar tiga chip dan pagi sibuk panggilan akan sebaliknya mendorong setiap pertemuan di bawah "+ 4 lagi". Minggu ini tampilan nama itu "Lead Callback" dan menempatkan memimpin dalam hover, karena blok adalah beberapa karakter lebar pada zoom itu. Hari dan agenda views memiliki ruang untuk keduanya dan menunjukkan keduanya. Pada daftar lead, memimpin dengan panggilan yang luar biasa membawa penanda telepon di sel id, berwarna oleh bagaimana menekan itu: abu-abu sehari atau lebih, amber hari ini, merah sekali waktu telah berlalu tanpa seorang pun menandai itu dihubungi. Overdue pulsa, yang merupakan negara layak menangkap saat menggulung. Lebih dari satu panggilan pada memimpin menunjukkan hitungan. Keadaan darurat dibaca dalam hari kalender daripada jam-jam yang telah berlalu, karena itulah yang "hari ini" berarti bagi orang yang membaca daftar: panggilan jam 9 pagi besok tidak mendesak jam 5 sore hari ini meskipun enam belas jam jauhnya, dan panggilan 9 pagi hari ini mendesak di 8am meskipun satu jam jauhnya.
· SecurityService
Ringkasan Callback bagi penanda daftar lead
Jawaban yang mengarah memiliki panggilan masih menunggu, dan ketika yang paling cepat adalah karena, untuk organisasi penelepon dalam satu permintaan. Its sendiri titik akhir daripada bidang pada memimpin: callbacks berubah pada jadwal mereka sendiri, sehingga melipat mereka ke muatan memimpin akan berarti baik bergabung pada setiap kuiri memimpin atau penanda basi.
· kamo-shared-library
Pending callback untuk seluruh organisasi dalam satu query
Memberi makan penanda barisan belakang. Jaringan memegang setiap petunjuk anggota dapat melihat, sehingga meminta per lead akan menjadi permintaan per baris untuk membuat satu kolom; ini adalah pertanyaan yang sama pernah ditanyakan. Hanya suatu metoda repositori - tidak ada entitas atau kolom perubahan, jadi tidak ada di sini yang bersenjata terhadap skema.
· kamo-internal
Sebuah pusat pemberitahuan, di setiap halaman
Pengingat punya tempat untuk tiba. Upload kalender adalah peringatan jelas dalam atas sudut dari halaman mana kebetulan terbuka, itu lenyap pada timer, dan apa pun yang diangkat sementara anggota itu di tempat lain hanya hilang - soket publikasi, dan publikasi tidak ada yang berlangganan untuk sukses dan menghilang. Jadi pemberitahuan sekarang disimpan serta diterbitkan, dan peramban membaca keduanya melalui satu konteks dipasang di atas seluruh pohon. Apa yang tiba sementara Anda di sini didorong, apa yang tiba sementara Anda tidak diklaim pada berikutnya koneksi, sekali, jadi dua tab membuka bersama-sama tidak baik meningkatkan tumpukan yang sama. Dek duduk di sudut viewport, lebih dari halaman apa pun di bawahnya. Kartu menumpuk daripada daftar - empat pengingat mendarat bersama-sama, yang adalah apa yang Acara perusahaan ditambah pertemuan Anda sendiri tidak, akan dinyatakan mengambil right- tangan ketiga layar - dan melayang penggemar mereka keluar. Setiap kartu mengarah dengan hal setiap pemberitahuan dalam produk ini memiliki kesamaan: jam. Ini menghitung ke acara, menawarkan sekarang, nanti atau tidak sama sekali, dan menguras rel sebagai selamat datang sendiri berjalan keluar, yang berhenti sementara Anda membacanya. Swipe benar untuk menyingkirkannya. Segala sesuatu yang lain adalah di belakang dua menu: tertidur oleh lima, sepuluh, lima belas, tiga puluh, satu jam, atau sampai lima menit sebelum hal ini dimulai; bisu semacam ini pemberitahuan langsung; buka pengaturan. Producer-diberikan tindakan naik bersama, sehingga callback menawarkan nomor memimpin dan pertemuan menawarkan link gabungan nya. Taut melalui router, tidak pernah sebuah dokumen beban - dek dapat menembak setiap saat dan navigasi di sini akan meruntuhkan draft yang belum dikirim. Bel di nav atas tetap krom untuk alasan yang sama jam kepatuhan adalah: lonceng seseorang dapat membuka pin dan kemudian tidak diberitahu apa-apa lebih buruk daripada tidak ada. Dibalik itu adalah sejarah, disaring oleh jenis atau dengan belum dibaca, dengan tidak-mengganggu di mana anggota pemberitahuan kebisingan. tab memberitahu Anda juga. TabAttention telah menampilkan judul dan badged favicon untuk percakapan, petunjuk, dan dukungan; pemberitahuan tidak terbaca bergabung, di atas percakapan karena mereka adalah waktu - pengingat bahwa panggilan karena dalam lima menit berhenti menjadi berguna lima menit dari sekarang. Suara disintesis daripada dimuat, sehingga pemberitahuan pertama dari suatu sesi bukan yang diam pada koneksi lambat. Pemberitahuan desktop hanya dinaikkan ketika tab disembunyikan, dan izin diminta pada saat anggota ternyata saklar aktif daripada pada beban halaman, yang merupakan pola peramban ditekan Dan orang-orang yang mengulangi perkataan itu.
· SecurityService
Sebuah callback yang mengarah kembali ke memimpin
Callback telah mencapai kalender anggota, sebagai acara berjudul "Lead" Callback "dengan komentar mereka dalam deskripsi. Tidak ada yang mengatakan yang panggilan itu, tidak ada yang mengatakan nomor apa untuk dial, dan tidak ada yang menyebabkan kembali ke memimpin - sehingga anggota melihat kalender mereka harus pergi dan menemukan memimpin dengan tangan, yaitu cari masukan kalender ada untuk menyelamatkan mereka. Sekarang membawa nama pemimpin dalam judul, nomor mereka di lokasi, dan sie- hubungan dalam relatif kembali ke memimpin pada acara dan dalam deskripsi tersebut. Deskripsi mengulangi rincian kontak sengaja: kalender dibaca dimana CRM tidak, dan callback Anda tidak dapat bertindak tanpa membuka yang lain aplikasi adalah pengingat untuk pergi dan mencari sesuatu. Halaman utama kini menyusun callback dalam dialog peristiwa kalender sendiri, jadi permintaan dapat membawa seluruh acara - judul, tamu, pengingat, warna - dan ini melewati semuanya. Setiap bidang tapi instan adalah opsional; penelepon yang mengirim hanya tiga asli masih mendapat judul, benar terkait entri dibangun dari memimpin. Menyelesaikan panggilan tanpa menarik pemberitahuan serta membatalkan acara. Jika tidak panggilan yang dibuat pada dua menit lalu daun kartu masih meminta untuk itu, dan yang tertidur yang datang kembali besok untuk bertanya lagi.
· InitializerService
Tabel pemberitahuan anggota, dan kolom asal acara
Dua bagian dari satu fitur. Sebuah callback dijadwalkan pada memimpin adalah cermin ke penjadwalan anggota kalender, dan titik cermin adalah untuk kembali ke lead - so calendar _ events carry source _ type, source _ id and deep _ link, and the pemberitahuan yang diangkat dari itu membawa tiga sama onward. Urutan 0: CalendarEvent memetakan tiga kolom baru dari saat ini dibangun dimulai, sehingga setiap pelari yang beban acara memancarkan mereka dalam SELECT nya dan ddl- auto tidak dapat menambahkan mereka belum. Memerintah terlambat itu tidak akan pernah mengeksekusi. Terapan dan diverifikasi melawan Yugabyte 2026-08- 13.
· kamo-shared-library
Pusat pemberitahuan anggota, dan asal acara
Tambahkan Pemberitahuan Anggota dan Preferensi Kenyamanan: satu baris per anggota per pemberitahuan, karena membaca, dipecat dan tertidur adalah jawaban orang yang permanen dan baris bersama tidak memiliki tempat untuk menempatkan mereka. Preferensi menutupi dua bagian secara terpisah - Mutes, jam-jam tenang dan jangan-mengganggu diterapkan ketika pemberitahuan adalah dinaikkan; suara, volume dan pemberitahuan desktop adalah sifat dari peramban. CalendarEvent memperoleh SOURCE _ TYPE, SOURCE _ ID dan DEEP _ LINK sehingga suatu acara yang dibuat oleh Layanan dapat mengarah kembali ke apa pun itu tentang. Sebuah callback memimpin cermin ke kalender sebelumnya berjudul "Lead Callback" dan menunjuk tempat, sehingga anggota melihat itu harus pergi dan menemukan memimpin dengan tangan. CalendarEventReminderRedome memperoleh pencarian peristiwa dan mengambil kepemilikan (yaitu) pintu-pintu (neraka Jahanam) yang mengalir di bawahnya sungai-sungai, mereka kekal di dalamnya. apakah suatu peristiwa milik organisasi tanpa permintaan per pengingat. Skema yang diterapkan oleh Maminalizer 's MenmberNotificationMigration dan diverifikasi dalam Yugabyte sebelum ini mendarat.
· kamo-internal
Melepas catatan ke dalam stickies yang dapat dilepas dan dapat diubah ukurannya
Setiap catatan dalam daftar (dan editor) mendapat kontrol detach yang muncul ke layar-lebar overlay. Setiap nomor dapat mengapung sekaligus; masing-masing dapat menyeret di mana saja, resize dari setiap tepi atau sudut ke 220x170 lantai, digulung ke judul bar, diduplikat, dan diedit di tempat. Penempatan, ukuran, menumpuk dan warna terus menerus dalam anggota per- DB- didukung ui- preferensi store di bawah kunci 'floatingNotes' -- mekanisme yang sama tata letak nav menggunakan. Toko itu, bukan sesionStorage, adalah titik: stickies harus bertahan menandatangani keluar dan kembali, dan logout membersihkan Sesi Penyimpanan grosir. Catatan: - Teks sticky selalu dekat-hitam, jadi setiap latar belakang dapat dipilih diadakan di atas rasio kontras 7: 1 terhadap itu oleh tes unit. Palet tidak dapat tidak terbaca nanti. - Penyuntingan inline hanya ditawarkan untuk catatan yang menyatakan Lexie tersimpan tidak membawa format; apapun lebih kaya membuka baca-hanya daripada menjadi Diratakan oleh perjalanan keliling. - note.color sebelumnya hex dijatuhkan ke dalam slot nama kelas, di mana Tidak membuat apa-apa. Sekarang sebuah palet id diselesaikan ke inline latar belakang, dan sebuah pin kartu berwarna teks gelap sehingga mode gelap tidak dapat cat putih di pastel. - Overlay portaled ke < body >; kotak isi shell adalah overflow: auto dan sebaliknya akan klip itu.
· EmailService
Satu integer untuk lencana surat, dan menghitung apa path indeks bernilai
Tiga hal, semua tentang mengetahui daripada berasumsi. Lencana Nav-top yang belum dibaca mengambil seluruh pohon folder dan memilih INBOX dari hasil - yang paling mahal panggilan backend surat membuat, untuk membuat nomor. MailReader telah membawa getUnreadcount untuk tepat ini sejak ditulis (a single STATUS di penyedia IMAP, sebuah bidang inline di Grafik) dan tidak pernah ada terkena di atas HTTP. Sekarang tidak. Ini adalah jalan mundur yang hanya menembak ketika soket yang belum dibaca telah gagal, sehingga langka dan mahal tepatnya ketika Hal-hal yang sudah terjadi salah. Daftar index-backed sekarang melaporkan mengapa hal itu atau tidak berfungsi, sebagai * * * * * * * * * * * * dan aktuator mengekspos metrik sehingga counter dapat dibaca. Rasio yang disajikan untuk modseq _ moved adalah jumlah yang mengatakan apakah jalur yang menghasilkan kompleksitas, dan tidak dijawab dengan membaca kode: sebuah folder membatalkan pos pemeriksaan sendiri segera setelah seseorang membaca pesan di dalamnya, sehingga tingkat hit adalah fakta tentang bagaimana anggota bergerak melalui surat mereka. The bukti laporan sekarang adalah enum daripada boolean, jadi setiap penolakan adalah dan tes menegaskan alasan spesifik - tes yang menerima setiap penolakan akan membiarkan mereka ember melayang ke dalam omong kosong. Juga perbaikan tes flaky saya menonton gagal tiga kali siang ini dan yang bukan milikku: IcapIdleRegistryTest menyudutkan sebuah mockito 's timeout () untuk melihat async dekat tanah, dan pada mesin dimuat yang berakhir sementara dekat hanya mengantri di balik ciptaan benang. Ini gagal sebagai "nol interaksi", yang berbunyi seperti a rusak registry dan benar-benar CPU sibuk. It now waits on a latch that wakes penutupan instan () dimasukkan, pencocokan tes saudara dua metode ke bawah, dan thread yang diparkir terganggu di blok akhirnya - run gagal digunakan untuk bocor satu tidur non-daemon benang selama tiga puluh detik dan memperlambat segala sesuatu setelah itu, termasuk upaya berikutnya pada tes yang sama. Tiga suite penuh berjalan saat ini: 257 berlalu, tiga kali lebih.
· kamo-internal
Merek krom sekitar papan penyusunan di ruang penandatanganan
Meja itu bermain dengan warna org dan pergi gelap di kedua tema, yang menempatkan merek di bawah dokumen dan meninggalkan krom netral - persis mundur. Terbalik: - CHROME adalah primer org di setiap sisi halaman: header, docket rel dan dermaga. Setiap tanda di atasnya adalah putih, melalui satu token tangga (--legal- on- krom / -dim / -fail / -line) sehingga tiga daerah tidak dapat masing-masing menemukan ide mereka sendiri dari "teks sekunder pada merek". - THE DESK adalah papan penyusunan - abu-abu sangat ringan diperintah dengan 45 derajat bujur axonometric, dalam gradien CSS murni (tanpa aset, tanpa permintaan, skala CSS murni (tanpa aset, tanpa permintaan, skala ke viewport manapun. background- lampiran: lokal menghubungkan lattice ke scrolled konten sehingga perjalanan dengan halaman. Hal ini sengaja TIDAK turunan dari --color-primary: white- label org dengan sebuah primary pucat akan mencuci permukaan dokumen terletak pada, dan halaman harus dibaca sebagai kertas pada permukaan kerja, tidak pernah sebagai kertas pada merek. The lattice is what memisahkan pinggiran halaman dari latar belakang, sehingga tidak ada batas yang ditarik. - Bayangan halaman sekarang dua gips - yang lebar lembut untuk mengangkat, gelap ketat satu untuk ujung lembaran. Sebuah kabur tunggal pada permukaan cahaya dibaca sebagai noda bukan halaman. - Sebuah titik map lengkap adalah putih padat dengan warna org di dalamnya, inverting node dan rel persis ketika anggota bank bekerja. Hijau akan ada warna ketiga melawan merek untuk satu makna. - Attestation pindah ke papan yang sama sebagai lembaran putih dengan sama angkat, karena pernyataan adalah instrumen terlalu dan menjatuhkan ke polos panel dibaca sebagai memiliki meninggalkan ruangan. SATU DOCK, SELALU. Sebuah langkah dokumen memiliki bar bawah - hanya dia yang tahu apakah itu menunjukkan sebuah spinner, gerbang persetujuan, sebuah permukaan penandatanganan atau menangkap tanda tangan - sehingga wizard tangan nya Kembali dan berikutnya kontrol DOWN daripada menumpuk sebuah bar kedua di bawah yang pertama, dan menarik dermaga itu hanya pada langkah stasiun. GuideBar memperoleh nada 'brand' dan awal slot untuk itu: pada merek itu melukis krom, tetes perbatasan dan bayangan yang akan memotong ruangan menjadi dua, inverts cincin dan teks untuk putih, dan pilnya dibaca dalam warna org. Its alldone halo adalah hardcode Signer- app biru, tak terlihat di dermaga berwarna. Muatan, gagal-sesi, persetujuan dan langkah-up gerbang sekarang menjaga meja di bawah mereka dan dermaga di bawah, sehingga ruangan tidak pernah kehilangan dinding tengah aliran dan Kembali dapat dicapai dari layar anggota jika tidak dapat meninggalkan.
· EmailService
Buktikan sebuah folder tidak berubah dengan HIGHESTMODSEQ, kemudian layani dari indeks
Nyalakan daftar pesan yang didukung indeks, dengan memperbaiki hal yang membuatnya tidak aman daripada dengan membalik bendera. Cek lama jumlah pesan perbandingan dan UIDNEXT. Keduanya buta terhadap bendera memindahkan, dan tidak ada re- index pesan ketika seseorang membacanya di telepon mereka, jadi sebuah folder yang melewati pemeriksaan dapat disajikan dengan setiap keadaan baca pesan beku pada saat itu tiba - inbox yang menunjukkan baca surat sebagai belum dibaca. Itu adalah mengapa dikirim dinonaktifkan. CONDSTORE memiliki nomor yang tidak bergerak. Tinggi MODSEQ adalah selebar dan kemajuan pada apa pun sama sekali: kedatangan, ekspunge, bendera set dari klien setiap di mana saja. Jadi "di Modseq N pesan K terbaru diindeks" ditambah modseq segar N adalah bukti bahwa tidak ada yang berubah sejak, bendera termasuk. Verifikasi pada server langsung sebelum membangun di atasnya - / usr / libexec / dovekot / imap (2.3.20) membawa CONDSTORE, QRESYNC dan LITT. UIDVALIDITY diperiksa bersama, karena server yang mengubahnya telah direnovasi folder dan tidak diindeks di bawah nilai lama menggambarkan surat yang sama. Jakarta Mail sendiri STATUS hanya pernah meminta untuk lima item klasik, sehingga formulir diperpanjang dikeluarkan langsung dan jawaban diurai di sini - di bawah tes, terhadap literal wire data, karena satu nomor adalah seluruh argumen keselamatan. Pos pemeriksaan tinggal di Redis, bukan meja. Ini adalah penanda sinkronisasi yang benar perilaku pada kehilangan adalah "lupakan dan re-read", sehingga berbagi- entitas perpustakaan, migrasi dan jalankan KamoInitializer akan harga yang salah untuk itu. Tidak ada pekerjaan backfill, sengaja. Ketika bukti gagal permintaan dibaca dari IMAP persis seperti sebelumnya dan memberikan hasil kembali untuk diindeks, sehingga folder mengisi sebagai Mereka melihat - urutan yang sama di mana menjadi hal-hal cepat, dan apa-apa yang dapat lari di setiap kotak surat di platform. Itu juga alamat mengapa ini akan sia-sia sebelumnya: indeks diadakan 31 baris secara total. Dua tugas penting dan keduanya gagal dalam satu arah saja. Modseq disimpan adalah yang dibaca sebelum mengambil, tidak pernah setelah, sehingga perubahan landing tengah-mengambil daun pos pemeriksaan di belakang realitas dan biaya satu mengambil terbuang - sebaliknya akan pasangan sebuah modseq dengan surat basi. Dan baris sudah dalam indeks hanya memiliki bendera mereka diperbarui, tidak pernah tubuh mereka, karena baris penuh indexer menulis Membawa pencarian teks dibangun dari, dan membangunnya kembali dari amplop akan diam-diam drop pesan keluar dari pencarian ketika membuat daftar lebih cepat.
· kamo-shared-library
Peta adalah _ menjawab, sekarang kolom ada
KamoInitializer ditambahkan * * * * * * * * * * * * * * * * pada 2026- 08- 13 * * * * * * * * * * * * * * * Diverifikasi dalam Yugabyte: boolean, baku Sesungguhnya kamu, pada gilirannya, akan mendapatkan kemenangan seperti para nabi terdahulu. Pemetaan itu aman sekarang dan tidak sebelum - full TextSearch adalah asli SELECT * yang baris Hibernasi hydrates ke kelas ini, sehingga kolom tabel kurang istirahat pencarian email itu sendiri, tidak hanya menulis. Itulah mengapa hal ini pergi keluar dan kembali beberapa jam yang lalu. SearchIndexService mencatat itu dari sini pada, sehingga pesan baru terindeks membawa semua tiga bendera IMAP daripada dua.
· EmailService
Layers-action
Baris di belakang suatu daftar pesan telah dalam Indeks metadata memegang pengirim, subjek, tanggal, ukuran, lampiran, dan tanda untuk setiap pesan yang dimilikinya terlihat. Membaca halaman dari sana adalah satu permintaan; membacanya dari IMAP adalah SELECT ditambah lima puluh amplop FETCH dan membuat server membangun indeks kotak surat ke Jawab. Apa yang menghentikan siapa pun menggunakan itu bukan kecepatan tapi kepercayaan. Indeks diisi oleh push indexer yang hanya berjalan sementara seseorang memiliki kotak surat terbuka, sehingga diizinkan untuk menjadi acak basi, dan tidak ada dibedakan folder ini dari yang basi. Satu STATUS membedakan mereka. Ini adalah pertanyaan termurah IMAP jawaban - tidak SELECT, tidak ada data pesan - dan itu kembali jumlah pesan folder dan berikutnya UID. Indeks hanya digunakan ketika keduanya cocok dengan apa yang ia pegang: jumlah menangkap apa pun ditambahkan atau dihapus, dan maxUid + 1 = = UIDNEXT menangkap kasus hitungan tidak dapat melihat, di mana banyak yang tiba seperti yang dihapus. UIDNEXT hanya bergerak maju, jadi append indeks tidak terjawab daun itu terdampar di atas tertinggi UID indeks Tahu. Setiap hasil lainnya kembali ke IMAP: folder yang hilang, server yang decoder STATUS, indeks kosong, kesalahan basis data. Hasil terburuk yang tersedia adalah perilaku yang ada sebelum ini. Sebuah folder yang gagal dalam ujian menyembuhkan dirinya sendiri ketika pesan berikutnya tiba dan terindeks. Off by default behind * * * * * * * * * * * * * * * * * * * karena balasan penanda tergantung dari pencarian _ index.is _ answer, yang tidak ada sampai KamoInitializer telah berjalan. Menghidupkan adalah kemudian tindakan disengaja daripada efek samping dari penyebaran. Perjanjian predikat adalah di mana menjadi salah menunjukkan seseorang surat yang salah, sehingga pure, package- private dan tested from that direction - every case asks whether dapat menggunakan indeks ketika tidak harus.
· InitializerService
Tambah adalah _ menjawab ke indeks pencarian surat
Tambahkan * * * * * * * * * * * * * * * * sehingga catatan indeks semua Bendera IMAP daripada dua. Daftar pesan menarik penanda balasan dari ini satu, dan indeks-didukung daftar dalam EmailService tidak dapat diaktifkan sampai kolom ada. Pesan 0, untuk alasan biasa: SearchIndexEntity memetakan kolom dari saat ini perpustakaan bersama membawanya dibangun, sehingga setiap pelari yang beban entitas yang emits it in its SELECT and ddl- auto can add it for us. Pelari terlampir tidak akan pernah dijalankan - yang sebelumnya akan mati di "kolom tidak ada" dan mengambil jalankan dengan itu. Bernomor dengan nilai FALSE dan mengisi baris yang ada. Tidak dibaca kembali dari server surat: salah sudah tepat untuk mayoritas pesan, dan path baca menolak untuk melayani folder apapun itu tidak dapat membuktikannya setuju dengan server tentang, sehingga baris yang basi di sini adalah baris itu tidak akan gunakan. Mengindeks ulang memperbaikinya.
· kamo-shared-library
Rekam apakah suatu pesan dijawab dalam indeks surat
e _ metadat.search _ index telah dilakukan adalah _ read dan adalah _ starred sejak itu dibuat tetapi tidak pernah bendera IMAP ketiga,\ Menjawab. Itu tidak berbahaya sementara indeks hanya diberikan pencarian penuh teks, yang tidak peduli tentang hal itu. Berhenti menjadi tidak berbahaya sekarang bahwa indeks dapat melayani halaman dari sebuah folder secara langsung: daftar pesan menarik penanda jawabannya dari bendera ini, jadi baris disajikan dari indeks tanpa itu akan menyatakan, diam-diam dan salah, bahwa anggota tidak pernah menjawab pesan itu. Kolom ditambahkan oleh KamoInitializer * * * * * * * * * * * * * * * * * dan tidak ada sampai yang telah berjalan - itulah sebabnya jalan baca yang perlu itu di belakang bendera yang default untuk mati.
· kamo-internal
Indikator clock-out memakai pulsa yang sama dengan standar hukum
Jam pukulan bernapas cahaya radial merah sementara kewajiban lencana tiga piksel ke kiri berdenyut dua cincin memperluas. Kedua kontrol meminta anggota untuk pergi dan melakukan sesuatu, dan dua animasi yang berbeda yang dekat bersama-sama dibaca sebagai dua sistem yang tidak berhubungan - masing-masing belajar secara terpisah. Satu animasi cincin sekarang melayani keduanya, sehingga keyframe diubah namanya dari fitur kewajiban dimulai. Mengurangi gerakan masih menurunkan mereka berbeda, karena mereka tidak kehilangan jumlah yang sama: jumlah lencana dan kesalahan warna masih mengatakan "Anda berutang sesuatu", sehingga cincin-cincin hanya berhenti; tidak ada lain di layar mengatakan "Anda dari jam", sehingga satu memegang tunggal Cincin terbuka pada intensitas stabil dan tetes yang trailing satu.
· kamo-internal
Pada layar tidak sama dengan dibaca
Sebuah percakapan dukungan ditandai membaca instan jendelanya dimuat, sehingga satu jenis jendela yang TIDAK harus dihitung sebagai membaca - jenis yang menimbulkan sendiri, dari tugas, penugasan, atau jawaban tiba - dibersihkan lencana sebelum anggota telah melihat apa-apa. isFocused tidak dapat membedakan mereka: ini diturunkan dari urutan z, dan jendela yang Hanya dibuka paling atas oleh konstruksi. The shell 's mousedown and touchstart are satu-satunya sinyal dalam sistem yang berarti seseorang melakukan sesuatu, sehingga penyedia sekarang mengumumkan mereka sebagai alat: userFocus dari satu tempat kedua tanah. Dari itu, aturan yang dijelaskan oleh anggota: Dibuka sengaja dibaca segera setelah dimuat dibesarkan dengan sendirinya belum dibaca sampai disentuh menyentuh membaca, baik perangko dipindahkan ke anda tidak dibaca lagi, tidak ada pesan baru yang dibutuhkan Dua perangko, karena ada dua cara untuk tidak dibaca dan masing-masing harus dibersihkan: markAsRead memajukan penunjuk baca melewati pesan permintaan, dan Dibuka untuk pensiun. AssignedTicketOpener tidak lagi perangko handover ketika meningkatkan jendela - yang bug dalam miniatur, sebuah pengakuan bahwa agen telah melihat sesuatu yang mereka tidak melihat. tab pernya Penjaga membawa berat badan sebagai gantinya. TicketChat mematuhi jendela daripada menentukan sendiri, termasuk pesan yang tiba ketika dibuka: sebuah pendarat jawaban dalam percakapan anggota membaca dibaca, satu mendarat di belakang mereka tidak.
· MediaService
Belum dibaca berarti permintaan berbicara, atau tiket hanya menjadi milikmu
Lencana dihitung "tiket hidup tidak ada yang mengambil, ditambah yang saya pegang" - pesan-buta, dan hanya pernah jatuh ketika tiket mencapai status terminal. Jadi itu duduk di lima atas daftar yang ditandai apa-apa, dan membuka percakapan bergerak tidak. Sekarang penting apa yang dikatakan: percakapan dengan sesuatu di dalamnya untuk anggota ini untuk dibaca. Kedua bagian dari prediksi lama hilang. Belum dibaca adalah salah satu query asli yang dipakai daftar tiket, sehingga nomor dan baris ditandai adalah fakta yang sama daripada dua pendekatan yang melayang dua kali. Pensiunan yang melelahkan sekarang menyiarkan lencana. Ini adalah salah satu dari dua cara percakapan berhenti sedang unread, dan tanpa siaran nomor tetap put untuk kasus tanpa pesan baru di dalamnya - yang justru kasus tanda tangan ada. Lencana sendiri tes bergerak dengan itu: mereka tidak lagi stub dua setengah HQL tetapi menegaskan apa arti angka - percakapan sisi lain menulis dalam hitungan, satu hanya bahkan dengan tidak ada yang baru di dalamnya, dan setiap tiket dihitung sekali Namun banyak cara yang memenuhi syarat.
· kamo-shared-library
Satu definisi dari percakapan dukungan yang belum dibaca
Lencana navtop dan daftar tiket telah dua kali melayang terpisah dengan menjawab pertanyaan yang berbeda. findUnreadStateForViewer adalah jawaban tunggal baik sekarang membaca, Sehingga mereka tidak bisa setuju lagi. Belum dibaca berarti sisi lain dari percakapan berbicara dan Anda belum melihat. Untuk agen yang ditugaskan yang secara khusus REQUESOR berbicara - catatan rekan pada tiket yang sama bukan sesuatu agen berutang balasan ke, Sehingga tidak menimbulkan bendera. Untuk permintaan itu adalah siapa pun di sisi dukungan. Siapapun lain bukan pihak untuk percakapan dan melihat apa-apa, itulah sebabnya query diskoped oleh peran daripada oleh org: permintaan cross-org dijawab oleh agen dalam org berbeda dari orang yang membesarkannya, jadi tidak ada sisi org Mengidentifikasi keduanya. handoverUnread adalah cara kedua untuk tidak dibaca, tanpa pesan baru yang terlibat. Menjadi menyerahkan percakapan adalah sendiri hal yang Anda belum melihat, jadi assignment tanah unread namun lama pesan terakhir - jika tidak sebuah tiket pindah kepada Anda di pagi hari tetap tidak terlihat sampai pelanggan terjadi untuk berbicara lagi. Dijelaskan di setiap tugas (re), hanya dicap sekali agen telah benar-benar meletakkannya di layar. REFILVED tetap memenuhi syarat dengan sengaja. Sebuah permintaan menjawab sesuatu agen ditandai diselesaikan adalah kasus yang paling layak mendapatkan melalui, dan salah satu yang akan jika tidak akan diam-diam dijatuhkan; hanya CLOSED dan VOID mengakhirinya.
· kamo-internal
Berikan rel yang diperluas sebuah scrollbar daripada mengakhiri panah
Panah naik / turun ada karena rel runtuh adalah 80px dari ubin dengan tidak kamar untuk menghabiskan untuk hal lain. Diperluas, rel 248px dan pilihan dibaca sebagai daftar - ada panah adalah instrumen yang lebih buruk: mereka mengatakan hanya "lebih seperti itu", di mana scrollbar mengatakan berapa banyak lagi dan di mana di dalamnya Anda sudah, dan mereka mengapung di atas dua baris bukannya duduk di samping mereka. Jadi scroller sekarang mengambil sebuah 'affordance', dan NavPri meminta scrollbar ketika rel lebar (gigih ekspansi atau hover-mengintip). Segala sesuatu tentang strip tidak berubah dalam mode kedua: grab- dan-throw, roda, sentuh, dan gulir pilihan halaman saat ini ke tampilan. Dua rincian gaya switch: - Tepi lembut berdiri, karena topeng melukis sebuah scrollbar elemen Bersama dengan isinya, dan memudar selama akhir bar itu dimaksudkan untuk menemani terlihat seperti kesalahan rendering; - Grab- -slide sekarang mengabaikan pers yang mendarat di selokan. Krom memberikan pointerdown di sana, jadi tanpa itu satu drag dari ibu jari pindah strip dua kali - peramban menggulung itu satu cara dan handler pan yang lain.
· kamo-internal
Gunakan logo penjual gaji yang sebenarnya pada kartu penyedia
Menambahkan sepuluh aset vendor dan membuat mereka menggantikan lettermark Pemegang tempat. Ini adalah wordMARKS, bukan ikon persegi seperti penyedia email, dan mereka rasio aspek dijalankan dari 0.72: 1 (Dayforce, lebih tinggi dari lebar) ke 6.2: 1 (Paychex). Kartu surel '44px persegi ubin akan squash sebagian besar dari mereka dan menyusut luas satu ke noda yang tidak terbaca, dan perbatasan yang digambar sekitar sebuah wordmark dibaca sebagai kesalahan daripada frame. Jadi tanda sekarang render di TINGGI tetap dengan otomatis lebar dan sendiri rasio aspek, capped sehingga Paychex tidak dapat mendominasi kartu. Satu tinggi konsisten di sepuluh bentuk yang berbeda adalah apa yang membuat jaringan terlihat disengaja. Setiap aset dimensi viewBox intrinsik direkam bersama tapak karena gambar berikutnya membutuhkan mereka untuk menyimpan kotak yang benar - memberikan sebuah persegi untuk aset 6: 1 Memperkenalkan kembali distorsi yang dihindari ini. Pada kartu logo mengambil baris sendiri di atas nama dan status chip, bukan daripada duduk di samping mereka sebagai ikon akan. Logo ditandai dekoratif dimanapun nama penyedia dirender di sebelahnya, sehingga pembaca layar membaca nama sekali daripada dua kali; ubin lettermark tetap untuk GENERIC _ CSV, yang merupakan keadaan koneksi daripada vendor dan memiliki tidak ada aset.
· kamo-shared-library
Membawa apakah tiket adalah salah satu item jumlah badge dukungan
Lencana navtop dan daftar tiket menjawab pertanyaan yang berbeda dan Tak ada yang tahu. Lencana menghitung item menunggu perhatian - sangat tiket tidak ada yang mengambil belum, yang merupakan fakta tentang TIKET. Daftar ditandai pesan obrolan yang belum dibaca, fakta tentang CONVERSASI nya. Jadi lencana dibaca "5" atas daftar yang ditandai apa-apa, dan dua nomor tidak terlihat Hubungan. NecesAttention membawa badge 's own keanggotaan tes per baris, sehingga daftar dapat Tandai persis apa lencana menghitung. unseenCount tetap: "seseorang mengatakan sesuatu yang belum Anda baca "masih layak ditampilkan, dan itu tidak sama Hal sebagai "tidak ada yang menangani hal ini".
· kamo-internal
Penyedia Payroll, dan memetakan orang ke gaji pada pendaftaran
Mengganti placeholder tab HRS Overview dengan hal yang nyata. tab sekarang "Penyedia Provider" dan layar adalah "Pengaturan Penyedia Payroll", berikut layar penyedia email itu dimodifikasi pada - kunci tab tetap "overview" sehingga menu pengaturan, kartu launchpad dan setiap bookmark yang ada tetap bekerja. Dibangun sehingga administrator HR tanpa latar belakang teknis dapat menjawab tiga pertanyaan tanpa bertanya siapa pun: apakah ini terhubung, apakah itu sinkron, dan ada yang salah sekarang. - Kartu penyedia menunjukkan apa yang bisa dilakukan setiap penjual sebelum org berkomitmen, jadi memilih adalah perbandingan daripada menebak, dan kemampuan absen adalah terlihat di depan bukannya ditemukan pada hari gaji. - Formulir mandat diberikan dari skema lapangan BACKEND. Menambahkan field ke vendor adalah salah satu perubahan Java daripada sebuah komponen React baru - layar email tangan-menulis satu komponen per penyedia dan memiliki dua belas. - Rahasia tidak pernah dikirim kembali ke browser, hanya bendera "ini diatur", dan kotak kosong berarti tidak berubah daripada jelas. - Panel kesehatan mengarah dengan dua cara diam-diam gagal untuk mencapai gaji - orang yang belum dipetakan dan kode yang belum dipetakan - karena keduanya adalah tidak terlihat pada saat itu dan hanya permukaan sebagai keluhan membayar. - A parsial run adalah warna sendiri. "412 dari 415 orang" tidak sukses dan tidak kegagalan, dan rendering sebagai baik menyembunyikan tiga orang yang belum dibayar. - Jalankan nama detail orang dan memperbaiki, bukan jejak stack. Kode surat datang dari server sebagai token stabil dan lokal di sini. Mendaftar memperoleh kolom pemetaan gaji, karena mendaftarkan seseorang dan memberitahu gaji siapa mereka adalah satu pekerjaan. Otomatis cocok dengan email yang tepat Kesetaraan dan manusia menegaskan - nama bukan identitas, dan link yang salah Mengirim jam satu orang untuk membayar orang lain. Operator yang sudah diklaim record tetap terlihat tetapi tidak dapat diakses. Layar itu juga tidak memiliki terjemahan sama sekali dan membuat anggota mentah 19- digit ids; baik tetap, dengan display- nama pencarian diekstraksi ke hook karena setiap layar timecard memiliki kesenjangan yang sama. Platform config lanjutan memperoleh tujuh vendor gaji di mana Kamo memegang satu pendaftaran mitra. Secara paksa tidak ada kartu untuk Dayforce, Workday atau UKG: mereka isu kredensial per pelanggan, dan layar render kartu untuk setiap enum konstan, sehingga satu untuk mereka akan bentuk tidak ada operator bisa mengisi masuk RoleRightType cermin memperoleh 197, 198 dan 199 - dua pertama ada server- side dan sudah hilang di sini, jadi checkRight tidak memiliki diketik untuk referensi.
· InitializerService
Indeks dan REVOKE tabel payroll- provider
Apa yang Hibernasi tidak dapat mengekspresikan untuk tabel hr _ timecard _ sajian baru. Dua REVOKEs. PayrollDispatch dan PayrollSyncIssue menolak pemutakhiran dan penghapusan dalam Java melalui @ PreUpdate / @ Hapus, tetapi entity callbacks hanya untuk baris dimuat ke dalam konteks persistensi - massal JPQL, deleteAllInBatch () dan asli SQL Berjalan lurus melewati mereka. Sebuah transmisi gaji upaya adalah acara uang, dan bukti tentang sinkronisasi yang selesai harus bertahan hidup untuk menjadi bukti. Dua indeks parsial, yang entitas tidak dapat membawa karena mereka memiliki prediksi: daftar kerja menyapu (orgs dengan syncing diaktifkan dan sync karena, kecil minoritas baris) dan per- anggota sync error (ERROR baris, kalah jumlah oleh INFO kira-kira sebesar daftar). Terapan dan diverifikasi terhadap Yugabyte.
· kamo-internal
Ukuran lampiran oleh apa yang dibawa API penyedia
Komposer yang diadakan setiap DM sosial ke sebuah MB 10 datar, yang merupakan foto Telegram batas diterapkan ke empat penyedia yang tidak berbagi. Masing-masing sekarang mendapatkan sendiri langit-langit, dan dalam penyedia setiap jenis media akan sendiri di mana API Bagi mereka: Telegram foto 10 MB, 50 MB dokumen / video / audio (sendPhoto vs sendDocument) Messenger 25 MB, sama untuk setiap jenis Gambar Instagram 8 MB, video / audio / file 25 MB Discord 8 MB (bot mengunggah langit-langit) X tidak ada lampiran sama sekali 8 MB tidak diketahui, kemungkinan besar dari atas Ini adalah batas dari posting API setiap adaptor ke, TIDAK dari aplikasi konsumen nama yang sama. Keduanya berbeda dan itu penting: aplikasi utusan mengangkat file berbagi ke 100 MB sementara yang Kirim API didokumentasikan pada 25 MB, dan itu adalah API nomor yang memutuskan apakah pelanggan menerima berkas. Melihat aplikasi tokoh akan memiliki komposer menerima sesuatu Meta kemudian menolak, lama setelah agen telah diberitahu itu keluar. X tidak mendapat klip kertas daripada salah satu yang menolak segalanya: XAdapter 's sendImage dan sendMedia keduanya jatuh ke sendText - media upload keluar dari lingkup v1 - sehingga file yang terpasang akan pergi ke mana-mana sementara judul tiba sendirian. ProviderCapability mengatakan hal yang sama. Kebijakan Lampiran tumbuh 'maxBytesByClass' untuk ini, dengan nilai empat yang baru Lampiran Kelas (gambar / video / audio / berkas) yang cocok dengan bagaimana penyedia split mereka titik akhir dan bagaimana rute MediaService outbound media. SVG adalah file dalam keduanya.
· DaemonService
Pekerjaan sync penyedia gaji dengan nyenyak
Drives TimecardService 's * * * * * * * * * * * * * * * * yang syncs setiap organisasi yang sinkronisasi berikutnya jatuh tempo. Cron tinggal di sini daripada di TimecardService karena penyebaran yang RollingUpdate with maxSurge 1, so two pod overlap on every rollout and a @ Scheduled metode kebakaran dua kali - yang untuk pembayaran sync berarti dua push dari jam yang sama. DaemonService adalah replika 1, strategi Recreate. Scheduled at 03: 00, forty minutes after the timecard sweeps: that close open shift dan mendeteksi pengecualian, dan mengirim jam ke penyedia gaji sebelum mereka telah menjalankan akan mengirimkan nomor yang akan berubah. Menolak untuk menjalankan sebuah mlos kosong. Secara penelitian - rahasia-daripada log palsu sukses - sync gaji yang diam-diam tidak pernah berjalan persis seperti itu ditemukan apa-apa yang harus dilakukan, dan perbedaan adalah jangka waktu membayar yang tidak pernah mencapai penyedia.
· SecurityService
Batas otorisasi bagi pengaturan penyedia gaji
Relays baru * * * * * * * * * * * * * * * permukaan dan memaksakan yang mungkin Mendapatkannya. Layanan waktu memegang mesin dan tanpa sesi; ini memuat sesi dan memutuskan. SecurityService runs anyRequest () .permitAll () with hand- rolling per-handler auth, sehingga penanganan yang lupa penjaganya tidak lemah dikendalikan - itu tidak terkendali dan terjangkau dari internet umum. Dipetakan di bawah awalan yang ada / api / keamanan / gaji dengan sengaja: kamo- internal mencapai melalui catch-all BFF rute, dan prefix baru akan 404 dalam peramban ketika setiap layanan sehat dan setiap bangunan hijau. Empat tiers: - Manage _ PAYROLL _ PROVIDER (199) menulis kredensial dan menghubungkan atau terputus OAuth. Ini adalah kemampuan untuk memutuskan mana jam organisasi Terkirim, itulah sebabnya mengapa itu adalah hak sendiri. - Mengelola _ HRS _ SETTINGS (45) membaca koneksi dan kesehatannya. - Mengelola _ TIMECARDS (183) mencakup pemetaan karyawan dan riwayat sinkronisasi. - FINALIZE _ PAY _ PERIODS (198) mentransmisikan batch berkomitmen - tingkat yang sama dengan melakukan ekspor, karena itu adalah tindakan yang sama. Uji Koneksi duduk dengan menulis yang benar daripada yang dibaca: itu adalah panggilan outbound dibuat dengan kredensial tersimpan, dan membiarkan siapa pun yang dapat melihat halaman api itu tangan mereka cara untuk probe org apos; s vendor gaji. Pertukaran OAuth TIDAK meneruskan id org. Layanan Waktu mengeluarkan itu dari negara HMAC-signed, sehingga kode yang diperoleh untuk satu penyewa tidak dapat ditebus (Yang memanggil orang yang membelakang dan yang berpaling) dari iman; sebab neraka Jahanam itu mengatakan kepada mereka kemarilah, kemarilah. Tambahkan / hapus ke TimecardServiceClient, yang hanya mendapat / posting.

Alam semestamu menunggu.
Mulai gratis dalam beberapa menit. Tambahkan produk kapanpun Anda siap — tidak ada migrasi, tidak ada login baru.
Gratis selamanya — tidak diperlukan kartu kredit