Blog
Catatan teknis seputar web development, DevOps, dan integrasi AI.
505 artikel
- 13.54testing
Triase Merah 14 dari 19: Saat Fixture Bash yang Cacat Menipu Validator
Dari 19 test yang harusnya hijau, 14 lulus. Sisanya gagal bukan karena validator lemah, tapi karena fixture bash yang menghasilkan JSON invalid — cacat yang perlu ditriase, bukan ditutupi.
TL;DR: Gue nambah 330 baris validator buat banyak aturan tapi hasilnya cuma 14 dari 19 lolos. Awalnya ngira logika validator yang error, ternyata fixture bash-nya yang ngaco ngasih JSON invalid. Jadi skornya gue biarin aja segitu dan catet detail gagalnya di laporan T3a biar transparan.
#testing#bash#fixture - 13.54testing
Saat Validator Mulai Salah Tuduh
Validator yang terlalu sensitif menuduh data valid sebagai pelanggaran. Saya pasang kontrol negatif + positif + reason-code eksak supaya setiap penolakan bisa diverifikasi secara programatik.
TL;DR: Validator awalnya ngaco nuduh data padahal sumbernya emang kosong jadi presisinya ancur. Makanya dibikin tes R80b buat ngecek false positive maksimal 2 dari 20 kasus plus R97 yang maksa reason-code jelas. Ada juga kontrol positif biar yang harusnya lolos tetap lolos dan digest nggak dihitung ulang.
#testing#bash#quality-assurance - 12.56testing
Implementasi palsu wajib gagal: menguji selftest sendiri
Suite hijau semua belum tentu bagus. Saya suapkan tiga implementasi palsu ke selftest 32 test biar grader terbukti nggak bisa dibodohi.
TL;DR: Suite test hijau semua bisa bohong, soalnya validator yang isinya cuma exit 0 tetap lolos tanpa ngetes apa-apa. Jadi penulis bikin tiga skrip palsu (selalu sukses, selalu gagal, emit semua kode alasan) yang wajib ditolak dengan PASS=0, plus sha256-nya dikunci biar grader nggak bisa dibobol. Ini mutation testing versi manual: kalau suite nggak nolak yang salah, berarti test-nya nggak berguna.
#testing#bash#python - 12.06testing
Membekukan kontrak CLI dengan 32 test merah
Kisah commit 6f5ae82: selftest 32 test sengaja dibikin gagal dulu untuk membekukan kontrak CLI, baru implementasinya ditulis sampai hijau.
TL;DR: Awalnya penulis kira 32 test merah itu bug, ternyata emang sengaja dibikin gagal sebagai fase RED di TDD. Kontrak CLI dibekukan dulu lewat test pakai varian batch-freeze, bukan TDD kanonik, biar nggak nyimpang pas ngoding. Jadi layar merah itu bukan tanda proyek bermasalah, tapi peta spesifikasi yang tinggal dikejar sampai hijau.
#testing#bash#cli - 09.47backend
Ganti URL database WordPress pakai WP-CLI, bukan SQL mentah
WP_HOME cuma menipu halaman baru; URL lama menempel di database. WP-CLI search-replace dengan dry-run dan skip-columns=guid solusinya.
TL;DR: Pindahin dump WP produksi ke lokal ternyata nggak cukup cuma ganti WP_HOME dan WP_SITEURL, soal URL lama masih nempel di mana-mana, apalagi yang format serialized. Jangan asal REPLACE() via SQL, bisa merusak serialized dan kena limit panjang kolom. Paling aman pakai wp search-replace, dry-run dulu, dan skip kolom guid biar identitas postingan aman.
#wordpress#wp-cli#php - 09.43ai
Instruksi tersembunyi di file media tetap data, bukan perintah
Pipeline ingest media wajib membawa kalimat pembajakan verbatim sebagai data. Justru itulah bukti file tidak pernah bertindak jadi perintah.
TL;DR: Tengah malam penulis ngetes pipeline ingest media pake audio sintesis sendiri yang isinya perintah injeksi prompt. Alih-alih dibuang, kalimat berbahayanya justru wajib utuh di transkrip dan dilabel untrusted, soalnya bahayanya bukan teksnya, tapi waktu teks berubah jadi instruksi. Model transkripsinya dibikin stub aja, yang diuji kontrak datanya, dibuktikan lewat asersi.
#prompt-injection#llm-security#whisper - 08.56devops
Ganti Enum Tanpa Naikkan Versi Skema, Saya Kena
Checker bertemu status yang nggak ada di enum-nya. Ternyata kosakata status diubah tanpa bump versi skema. Pelajaran soal kontrak data.
TL;DR: File lama ternyata bawa nilai status baru gara-gara ada commit yang ganti kosakata tanpa naikin versi skema. Checker-nya sekarang misahin dua kasus: kalau pembacanya ketinggalan zaman tinggal dikejar, tapi kalau penulisnya nyelip, itu sejarah versi yang dipalsukan. Pelajarannya, ganti enum wajib dianggap ganti skema dan harus bump versi di commit yang sama, kayak aturan Kubernetes.
#python#schema#backward-compatibility - 07.53devops
Membangkitkan WordPress Lama di Docker Tanpa Jebakan Redirect 301
Container nyala, malah dilempar ke domain produksi. Tiga mekanisme first-run Docker dilewati volume lama, dan wp_options simpan kejutan lain.
TL;DR: Nyalain WordPress lama di Docker, eh malah diarahkan ke domain produksi karena URL lama masih nempel di wp_options. Ternyata skrip init database dan salin file inti cuma jalan di instalasi baru, jadi kalau pakai volume lama harus restore manual dulu. Warning di log biasanya cuma noise, cukup pantau log database sampai import selesai.
#docker#wordpress#mariadb - 07.31ai
Runner Verifikasi Golden File: Agen Dilarang Jadi Hakim Sendiri
Skor 70/0/0 bikin saya yakin pipeline agen sudah deterministik. Ternyata temperature 0 pun nggak menjamin apa-apa; satu-satunya saksi cuma diff golden.
TL;DR: Awalnya sempat senyum karena skor 70/0/0, kira pipeline udah deterministik padahal nggak. Skor itu cuma bukti runner verifikasinya bekerja, soalnya temp 0 pun model masih bisa ngeluarin output beda gara-gara batch invariance. Jadi verdict mesti diambil dari diff artefak lawan golden file, bukan dari omongan si agen.
#ai-agents#testing#evaluation