Batasan 50-byte yang tersembunyi pada pola LIKE SQLite menyebabkan Cloudflare Workers crash saat proyek Agentic Inbox mencoba mencari subjek email yang panjang, dan pemotongan string pencarian menjadi 48 karakter menghentikan kegagalan tersebut.

Apa yang merusak edge runtime

Agentic Inbox menjalankan setiap kotak masuk di dalam Cloudflare Durable Object, menggunakan database SQLite tersemat untuk penyimpanan. Agen berbasis AI membangun pola pencarian sebagai %search_term%. SQLite menerapkan batas keras 50-byte pada total panjang pola LIKE. Ketika pengguna memasukkan subjek yang lebih panjang dari 48 karakter, tanda % di sekitarnya mendorong pola tersebut melewati batas tersebut. SQLite melemparkan runtime error yang tidak tertangani, yang oleh lingkungan Worker yang terbatas dianggap sebagai fatal. Seluruh skrip terhenti, membuat kotak masuk tidak dapat digunakan dan agen AI rusak.

Bagaimana bug tersebut ditemukan

Sentry mencatat pengecualian (exception) yang tidak tertangkap dari Workers. Saat crash terjadi, Sentry merekam baris tepat di mana SQLite memunculkan error. Fitur “Seer AI”-nya mengurai stack trace, menyoroti konstruksi pola LIKE, dan menyarankan panjang pola sebagai penyebabnya. Peninjauan cepat pada dokumentasi compile-time SQLite mengonfirmasi pembatasan 50-byte tersebut, dan tim menggunakan Gemini untuk memverifikasi batas tersebut serta menghitung panjang maksimum yang aman untuk input pengguna.

Perbaikan yang presisi

Resolusi ini memerlukan tiga perubahan kecil, semuanya di dalam rutinitas pencarian yang sudah ada:

  • Menerapkan batas keras 48 karakter pada setiap istilah pencarian yang masuk.
  • Memotong (slice) string input ke panjang tersebut sebelum menggabungkan wildcard %.
  • Membiarkan sisa kueri tidak berubah, menjaga akurasi pencarian tanpa menambahkan library baru.

Karena penyesuaian terjadi sebelum kueri mencapai SQLite, pola akhir tidak pernah melebihi ambang batas 50-byte, dan Worker tidak lagi crash. Tidak ada dependensi tambahan yang ditambahkan, sehingga codebase tetap ringan.

Mengapa ini penting

Database yang dihosting di edge sangat menarik untuk kasus penggunaan latensi rendah, tetapi mereka mewarisi batasan yang sama dengan versi on-premises. Batasan compile-time yang samar dapat menjadi bug yang menghambat produksi ketika runtime menganggap pengecualian apa pun yang tidak tertangkap sebagai fatal. Di sini, crash tersebut menghentikan asisten email berbasis AI untuk bekerja bagi pengguna mana pun yang mengetik baris subjek yang panjang—sebuah dampak langsung terhadap pengalaman pengguna dan janji keandalan platform serverless.

Apa yang seharusnya bisa dilakukan secara berbeda

Perbaikannya sederhana, tetapi ini menyoroti langkah validasi yang terlewatkan. Sanitasi input yang memeriksa panjang pola sebelum membangun string SQL akan menangkap masalah tersebut selama pengembangan, bukan di produksi.

Apa yang perlu diperhatikan selanjutnya

Pengembang yang menerapkan SQLite pada edge runtime harus mengaudit semua konstruksi kueri yang melibatkan pencocokan pola, terutama yang menambahkan wildcard atau karakter escape. Sentry menangkap baris tepat di mana SQLite gagal. Seiring dengan meningkatnya traksi edge computing, batasan platform yang tersembunyi akan lebih sering muncul, dan kebiasaan memvalidasi input terhadap batasan yang terdokumentasi akan membuahkan hasil.

Kesimpulan: Batas 50-byte pada pola LIKE SQLite dapat menyebabkan Cloudflare Workers crash, tetapi memotong istilah pencarian menjadi 48 karakter menghilangkan kesalahan tersebut tanpa beban tambahan—bukti bahwa langkah validasi kecil dapat menjaga stabilitas layanan edge.