Changelog
Ada kabar baru.
Setiap perbaikan pada platform, sebagai kapal.
· kamo-shared-library
DesisionGate.applied Threshold mengekspos bar kepercayaan yang sebenarnya
Gerbang secara internal berlaku maksimal (override penyewa, lantai aman, lantai panggung) tapi Penelepon hanya memiliki dinding pra-gerbang penyewa. diterapkan Ambang batas mengembalikan benar bar sehingga decision-of-record dapat bertahan dengan ambang batas -In- EFFECT (pemeriksaan - reproduksi) bukan nilai gerbang diam-diam menimbulkan. Tambahan; evaluasi () tidak berubah. DecisionGateTest 14 / 14 lulus.
· kamo-internal
Area kerja Material Enterprise (P0) - folder, pencarian, massal, pratinjau nyata, komposer surel terbagi
Mengganti kisi butir datar 200-item dengan area kerja penuh dokumen atas pencitraan yang ada backend (yang telah mendukung folder, sampah, berbagi, riwayat, massal untuk MATERIALS): - Bilah sisi folder (buat / ubah nama / hapus, drag-to-folder) + All / Tong tampilan - Cari, sort, grid < - > daftar toggle, paginated 'load lebih' (menghapus 200 cap) - Bulk pilih + register download (ZIP) / email / move / delete - Benar - tangan detail laci: pratinjau nyata, inline mengubah nama + deskripsi, bergerak -to-folder, sharing internal (anggota, allow- edit, kadaluwarsa) dan riwayat aktivitas Email kini memakai komposer MessageTool yang dipakai bersama melalui alat global: acara terbuka (Dari / kotak surat, CC / BCC, tubuh kaya, tanda tangan, draf) daripada bentuk yang diucapkan - Rute proksi pencitraan baru: folder buat / [id] ganti nama + delete / move-doc, ganti nama, deskripsi, restore, accesses-level - Hapus Library Materials yang telah diganti; semua fitur Canva (buat / impor / otomatis / jadwal) dilakukan. imgIds ditangani sebagai string tepat seluruh.
· kamo-internal
Overhaul / messages - iframe rendering, list context menu, threading, races, a11y
Implikasi audit dari halaman / pesan end-to-end. Masalah yang dilaporkan: - Balas / Balas Semua / Maju tombol sekarang menunjukkan label teks; dihapus dari lebih banyak aksi dropdown (tombol yang berdekatan) sedangkan menu daftar baru menyimpannya. - Pesan-daftar baris sekarang membuka menu aksi bersama pada right- klik dan sentuh tekan panjang * * * * * * * * * * * * * * * baris gain ring fokus (j / k), pilihan checkbox (x), dan scroll-into-view. - Email sekarang dirender dalam sebuah sandboxed auto- tinggi iframe (srcdoc) daripada inline Bahaya SetInnerHTML. Ini mengisolasi CSS / layout surel, yang membetulkan baca-panel "bounce" dan mid-drag kehilangan pilihan, menutup app- lebar CSS-kebocoran, dan menambahkan baku "gambar eksternal diblokir" pelacakan-pixel gerbang. Koreksi / bug: - Full--compose Reply / ReplyEver now set In- ReplyTo / References (unified DraftMessage tipe) sehingga menjawab tetap threaded; quic-reply threads threaters + induk id, HTML- lolos dari tubuh, dan mengirim dari kotak surat bersama / anggota aktif. - Teruskan membawa lampiran asli; jawaban / maju meresolf pesan lengkap (mengambil tubuh untuk list-row aksi) daripada mengutip apa pun yang terbuka. - Penjaga race (lates- menang) pada loadMessages / pesan pilih / thread load / percakapan beban; jajak pendapat tidak lagi Yanks paged pengguna untuk halaman 0; WS reload filter ke folder aktif; searchPage resets pada perubahan query. - ThreadDetail berkembang keadaan diketemukan oleh folder + uid (cross- folder tabrakan); markRead hanya ketika belum dibaca; coba lagi gunakan prop folder. - Compose: flush typed- but- uncommitted penerima pada Kirim / Draft; lampiran dedupe + 40MB kumpulan cap + fungsional pemutakhiran; drop klien berlebihan OTK. - Proxy: Rentang Depan + caching validator untuk lampiran / inline streaming; close multipart carve- keluar pada jalur yang dijaga. - Email WebSocket: real stop setelah max retries, exponensial backoff, stable-connection coba ulang ulang; memoized nilai konteks untuk memotong konsumen re-render churn. Kualitas: unified * * * * * * * * * * * * * * * * * * a11y (aria- label, aria- ditekan, keyboard-operable baris / toggles); i18n (nama folder, daftar tanggal, pager, ICU plural); dihapus kode mati dan papan kunci phantom-jalan pintas masukan.
· kamo-internal
Instrumen Panel mendesain ulang - aksen keluarga, kepala surat, bagian-indeks nav, kartu kaca unified
Merancang ulang dua tempat yang dikunjungi ke dalam konsol operator berbentuk permanen. Foundation - Nyalakan alreadi- bundle Geist Sans / Mono (dibuang oleh fallback Arial); rute tipografi MUI melalui Geist. - Tambahkan putih-label-aman --accent- * module token, tangga elevation, top-edge lit- kaca, Obator-Label + .tabular utilitas, dan --ease-house token. Perbaiki --gradient- primary -transparted (itu hardcode biru Schulnow berasal dari --color-primary). Fitur Bersama (satu komponen, keyboard- benar) - Now a real anchor (NextLink): Tab / Enter / middle-click work and the focuus- visible ring can finally fire. Tambahkan penjaga ReducedMotion, sementara InView masuk pada kemudahan rumah, keluarga-aksen menyala chip, perhatian menghitung pip, tiers berat badan, dan onClick Paste. Ulasan niat warna per- modul yang dibuang pada render. Hapus kartu masuk yang sudah diforked. Rumah - Masthead (mono kicker + time / name salam + tabular strip status) menggantikan org- hanya panji; oklab Backdrop menggantikan wackdrop - mengalikan washmark; permission- bentuk dua-tier launchpad (usage- memerintahkan direktori primer + pengelompokan) dengan sebuah "needs you today" attle strip and "Jump back in" (new useHomeired + global RecentRoutetracker); adative / negara kosong; < h1 >. Pengaturan - Registry-driven render replaces 18 copy-stasted Collapse blocks: brucky section-index trail + IntersectionObserver scroll- spy + live counts, 4 super- group, progresif disclosure (Personal open, recent-section restore, expand / collect all), SectionHeader arders roads, and a fixed Quick Access Access (benar MAX _ RECENT _ RECENT slice + relative- waktu + relative- waktu + Start disini). Menjaga setiap izin / produksi-bendera gerbang tepat. Cross- memotong: kerangka + EmptyState, lebih memilih -reduced- transparansi + reduced- jalur gerak, per-locale Operator -Label caps opt- keluar. UI baru string tanah di kamo- terjemahan - kamus (en) dalam komit pendamping.
· kamo-shared-library
* * * * * * * * * * * * * * * * yang ditargetkan pemutakhiran
Konversi asynon (benang virtual) dan penyapuan dijadwalkan memegang ImgDat terpisah; simpan () / merge () cascades kedalam archiremoval = kumpulan gambar sejati dan lempar 'Koleksi dengan cascade = all-delete- yatim piatu tidak lagi direferensikan dengan memiliki entitas instance '. Sebuah UPDATE besar hanya kolom thumbnail menghindari grafik entitas Sepenuhnya dan aman dari benang apapun.
· kamo-internal
Tambah Balas Semua ke pesan-pesan membaca panel dan thread view
Balas Semua diiklankan (keyboard-shortcut label + i18n) tapi tidak ada handler. Wire it up: new computing ReplyAllRecipients helper puts the sender in Untuk dan setiap penerima asli lainnya dalam Cc, mengecualikan diri dan de- duping Case- tidak sensitif. Tambahkan tombol, pintasan 'a', dan entri menu konteks di MesgageBrowser, ditambah tombol pesan dalam ThreadDetail View.
· InitializerService
Sebagian-indeks unik menegakkan satu paket penutupan aktif per pinjaman (eClose double-close backstop)
CREATE UNIQUE INDEX uk _ mlos _ closing _ pkg _ active _ any ON mlos _ closing _ package (lenn _ file _ uid) Status where < > 'CANCELLED'. Backstop Durable di belakang penjaga idempotensi in- app: sebuah paket penutupan aktif akan drive sendiri Mens registrasi + pendanaan (ganda dekat). Paket Penutupan tinggal di shared-lib dengan hanya bukan-unik @ Indeks masukan dan tidak dapat mengekspresikan Kekurangan unik partial melalui JPA, jadi tulisan tangan DDL di sini (KI memiliki Skema). Idempt; berlaku pada run KI berikutnya.
· MediaService
Tembnail penjadwalan bahan yang dihasilkan dalam proses
Penyapuan tanpa kepala tidak dapat mendorong pipa thumbnail Percakapan, jadi buat sebuah pawai-0 cap jempol melalui ImageIO tepat setelah menyimpan ekspor - bahan yang dijadwalkan sekarang render dalam grid seperti yang lain, tidak perlu backfill.
· kamo-internal
Recurring generasi jadwal UI
ScheduleManager: jadwal create / list / delete (resep + everyday / weekday / monthly + jam / day + opsional autopost target + caption); diluncurkan dari Materials, gated pada kemampuan otomatis Canva (Enterprise). + canvaApi + / api / canva / jadwal proxy.
· MediaService
Generasi terjadwal - menyapu berjalan resep pada irama
- CanvaScheduleController: CRUD untuk jadwal org (resep + irama + jam / hari + target sosial opsional), komputes nextRunAt - Pembatalan Generasi Layanan: tanpa kepala * * * * * * * * * * * * * * * * * sebagai Material (dalam proses ImageService; thumnail - kurang sampai mengisi ulang) - CanvaScheduleSweep: @ Scheduled menyapu, klaim jadwal atom, menghasilkan dan hasil dari target koneksi sosial melalui tertanda segel public-URL
· kamo-shared-library
Entitas pembatalan + repo (generasi berulang)
Organ-scoped jadwal berulang (resep + cadence + opsional target sosial) dengan sebuah query atomic- klaim sehingga menyapu MediaService berjalan setiap jadwal jatuh tempo sekali.
· kamo-internal
Inline expandable Whisper transkrip pada baris pesan suara telepon + call-history
Tiap baris rekaman (riwayat pesan suara dan panggilan) mendapat 'Transkrip' menjungkitkan itu mengambil transkrip Whisper rekaman sesuai permintaan dan menunjukkan inline, jadi anggota dapat membacanya tanpa membuka pemain. Cache per rekaman.
· kamo-internal
Simpan + gunakan ulang resep autofill
TemplateAutofill: "Resep tersimpan" chip memuat pemetaan template + prefilled; "Simpan sebagai resep" persist template + field saat ini nilai org- lebar. + canvaApi list / save / delete + / api / canva / resep proxies.
· MediaService
Simpan resep autofill CRUD (org- scoped)
CanvaRecipeController: GET / POST / API / media / canva / reseples + DELETE / {id} - save / list / soft-delete sebuah brand- template + field pemetaan, scoped ke penelpon org.
· kamo-shared-library
CanvaAutofillrecipe entitas + repo (disimpan resep autofill)
Organ - terbagi bernama binding dari sebuah template merek Canva ke nilai field (literal teks atau citra Materials), sehingga stewards dapat re-jalankan sebuah data standar-merge.
· kamo-internal
Tambahkan ruas ID Material untuk membuat bentuk, halaman rincian, dan impor
Thread a nulable materialId (max 40) through the Lead type, leadsApi (buat + update wire request), dan pembagian leadFields systemm-field daftar - yang drive baik manual impor wizard dan API / vendor asupan pemetaan UI (ditambah template CSV yang dapat diunduh). Menambahkan masukan ke / lead / baru dan sebuah tilikan / edit baris di halaman rincian utama, kabel ke real time pane- flash peta. Label melalui leads.new.fields / leads.vieimbalan field / leads.vievings (materialId).
· kamo-internal
Enterprise autofill UI - data- merge template merek
TemplateAutofill: pilih template merek Canva, isi setiap ruas dengan literal text, an org / compliance token (NMLS #, Equal Housing disclosure, org name / phone / situs / alamat, nama anggota), atau citra Materials; hasilkan sebuah data-merged desain dan impor kembali ke Bahan. Gated on the Canva 'autofill' (Enterprise) kemampuan. + canvaApi metode dan / api / canva / {brand -templates, * * * * * * * * * * * * * * * Proxy.
· MediaService
Isi otomatis Enterprise - data- gabungan template merek
- CanvaAPiClient: tampilkan template merek (dataset = non _ empty), ambil dataset, aset-upload pekerjaan, buat / dapatkan pekerjaan otomatis - CanvaController: GET / brand-templates, GET / brand-templates / {id} / dataset, POST / autofill - menyelesaikan ruas gambar dengan mengunggah MATERIALS yang direferensikan Materi ke Canva sebagai aset, lalu penyatuan data; polling ke desain baru. Canva 403 (tidak ada kemampuan autofill) permukaan sebagai autofill _ not _ available.
· SecurityService
Persist dipetakan ID Material pada impor manual + API masukan
Keduanya setDirectFieldOnCreateRequest switch kurang kasus baku, sehingga tidak dipetakan system FieldPath secara diam-diam dijatuhkan. Tambahkan kasus materialId ke Manual-import (LeadImportController) dan vendor / API-asupan (LeadIntakeController) displatchers sehingga Material dipetakan kolom / field sebenarnya tetap.
· kamo-shared-library
Tambahkan bagian ID Material end-to-end dalam shared -lib
Tambahkan sebuah null, max-40-char materialId ke entitas memimpin (MATERIAL _ ID VARCHAR (40)), register dalam LeadHistoriFieldRegistry (Kategori Profil) begitu edits diaudit, benang melalui Buat / Update / Baca DTOs dan Layanan pengantin membuat / memperbarui (trim + memotong ke 40, mencerminkan companyName), dan mempertahankan itu di seluruh basis < - > hipotek konversi timbal.
· kamo-internal
Tautan sosial + email-a-material + link publik
Distribusi untuk bahan pemasaran, dibangun di atas jahitan publikasi -URL baru yang ditandatangani. - Material Api.publicLink (imgId) + / api / material / link proxy - Materials: "Salin link publik" dan "Email bahan ini" (melampirkan file ke a outbound send via the existing multipart / api / email / send, gated on org email) - MaterialPickerDialog (grid dapat digunakan kembali atas MATERIALS assoc) - SosialComposer: tombol foto pertama-dinonaktifkan sekarang membuka picker dan melampirkan sebuah materi sebagai media pos melalui URL public (bekerja untuk Meta / Telegram / Discord)
· MediaService
URL publik yang ditandatangani pendek untuk aset pemasaran
Memungkinkan penyedia sosial (Meta) dan email mengambil bahan tertentu untuk dibatasi jendela tanpa mengekspos pribadi imajinasi-bahan ember. - MaterialUrlSigner: HMAC-SHA256 (platform.enc-key) token = imgId: orgId: exp, 1h TTL - MaterialsController: POST / api / media / material / link (URL auth inclumint untuk gambar MATERIALS org- dimiliki) + GET * * * * * * * * * * * * * * * * (unauth....... melayani bytes untuk sebuah token yang valid; org + assoc diperiksa). Rides yang ada sessionless / api / media / * maju - tidak ada perubahan APIService yang dibutuhkan.
· kamo-shared-library
Pertama-kelas peminjam diri - pengiriman transisi * * * * * * * * * * * * * * * * *
DRAFT APPLIKASI _ TAKEN untuk peminjam (sebuah pesta pinjaman, bukan operator, jadi tidak ada LOS _ TAKE _ APPLIKASI). Routes melalui transisi () dengan scoped predicate yang hibah HANYA aplikasi take- benar dan disematkan ke StatusId, sehingga peminjam kirim menjadi transisi pipa yang tepat - status - mesin legalitas, Hash-chained milestone, the ApplicationSubmission (INTIAL _ DISLOPUSTE), and the afterCommit STATUS _ CHANGE event - bukan sebuah loan-file diam status poke. Anggota partai Loan diverifikasi oleh penelepon.
· kamo-internal
Hapus + pratinjau + import- berkas -to -Canva
- delete sebuah material (gated on manvage _ MATERIALS) dengan konfirmasi - klik thumbnail untuk menerbitkannya dalam lightbox - "Impor berkas" mengubah PDF / PPTX / image menjadi desain Canva yang dapat disunting (proxy rebuild the multipart body like the imaging uploader)
· MediaService
Impor berkas ke Canva sebagai desain yang dapat disunting
- * * * * * * * * * * * * * * (Impor desain biner) - CanvaController POST / imports (multipart) GNU buat + poll impor job penyunting deep- link dengan korelasi _ state untuk kembali -nav - drop now-unused Base64 import dalam CanvaOauthority Controller
· InitializerService
Migrasi menambahkan recordings.transkrip kolom TEXT
· VOIPService
Kembali transkrip dalam metadata rekaman untuk pemutar softphone
· kamo-internal
Tampilkan transkrip Whisper dalam pemutar media softphone
· ConversionService
Layanan Transkripsi Bersama + titik akhir generik; translate rekaman VOIP
- Ekstrak Layanan Transkripsi dapat digunakan ulang (ffmpeg normalkan - > bisikan -asr) dan general POST / api / converse / transcribe titik akhir, mengganti pertemuan-spesifik Pengontrol. Temui + VOIP sekarang berbagi satu jalur transkripsi. - Recording ProcessController: menerjemahkan setiap akhir VOIP rekaman / voicemail in- proses (non-fatal pada kegagalan) dan menyimpan transkrip pada Recording.
· kamo-shared-library
Kolom transkrip pada Recording + RecordingMetadata
Tambahkan kolom TRANSCRIPT TEXT ke entitas Rekaman dan thread transkrip Melalui... (dengan mundur-clat konstruktor sehingga ada 5- dan 9-arg penelepon tidak terpengaruh). Populasikan oleh Merekam - menyelesaikan aliran melalui Whisper; dibuat oleh migrasi KI.

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