Blog
Catatan teknis seputar web development, DevOps, dan integrasi AI.
500 artikel
- 20.39testing
Persen Cakupan Bukan Tameng: Amankan Jalur Penolakan
Audit cakupan middleware Go dari 27 ke 96,7 persen: pelajaran uji lengan penolakan dengan httptest, dari JWT sampai CORS.
TL;DR: Cakupan test middleware cuma 27 persen padahal itu gerbang auth, jalur penolakan kayak token expired dan role mismatch nggak pernah disentuh test. Penulis nambahin 850 baris test ke tujuh file pakai httptest, tanpa ngubah kode produksi. Hasilnya middleware naik ke 96,7 persen, tapi pelajarannya: angka berhenti di tempat mock mulai bohong, yang penting tiap jalur risiko punya saksi.
#golang#testing#security - 15.38ai
Kontrak Sebelas Agen Spesialis: Batasan Alat, Bukan Narasi
Sebelas file .claude/agents bikin saya sadar: yang mengendalikan subagen adalah field tools, model, dan hook, bukan panjang deskripsinya.
TL;DR: Ternyata yang ngatur agen bukan deskripsi panjangnya, tapi field kecil kayak tools, model, dan maxTurns yang membatasi apa yang boleh mereka sentuh. Tiap agen cuma dikasih alat yang memang dia butuh, dan laporannya wajib menyebut konsumennya biar bisa diteruskan. Gerbang kerja diikat ke cek yang bisa dijalankan, bukan cuma obrolan.
#ai-agents#claude-code#coding-agent - 14.42tooling
Dua Taraf Hukum Hook Commit di Proyek KotaPortal
Hook commit KotaPortal memisahkan dua taraf hukum: penanda uji yang salah blok keras, permukaan berisiko hanya dapat peringatan plus jejak audit.
TL;DR: review_gate.sh punya dua tingkat: soal kata kunci kayak karakterisasi langsung diblokir, tapi area berisiko kayak autentikasi atau migrasi cuma kasih peringatan. Dua tingkat biar keamanan tetap jalan tanpa ngelambatin kerja tim. Soalnya hook bisa dilewati kok, jadi tujuannya bukan tembok tapi rambu jelas.
#git#git-hooks#security - 13.45tooling
Mesin Penjaga Klaim Review di Pesan Commit
Tiga invarian mesin untuk klaim Security-review: tepat satu, posisi trailer, dan substansi dicek terhadap diff.
TL;DR: Klaim review di pesan commit selama ini cuma perkataan, nggak ada yang ngecek. Jadi repo itu bikin hook commit-msg yang ngetes tiga invarian: baris Security-review: harus tepat satu, posisinya bener, dan klaim tests only dicocokkan sama diff. Hooknya memang bisa di-bypass, tapi tujuannya menaikkan harga kelalaian, bukan nahan penipu.
#git#bash#security - 13.45security
Lima Celah yang Dikunci, Bukan Dibenahi
Lima kelemahan autentikasi dikunci sebagai characterization test bermarker keputusan, dipetakan sebelum diperbaiki.
TL;DR: Lagi riset tes autentikasi, ketemu 5 celah keamanan tapi nggak langsung dibenerin, malah dikunci jadi characterization test lengkap sama penanda keputusan pemilik proyek. Alasannya jujur aja: benerin diam-diam itu ngehapus jejak kenapa perilakunya ada. Jadi mending dipetain dulu semua risikonya, baru owner yang mutusin urutan prioritasnya.
#testing#security#authentication - 13.06backend
Mesin Status Moderasi Ulasan: Validasi Transisi State Melalui Pengujian Integrasi
Uji integrasi membuktikan mesin status moderasi: seed agregat salah 9.9/999, Remove mengisi audit, Restore membersihkannya, agregat dihitung ulang dua arah.
TL;DR: Jadi sistem review ini punya mesin status: hapus review langsung ganti status jadi dihapus plus isi kolom audit, bukan cuma nunggu proses belakang. Batasannya ketat banget, alasan hapus cuma enam pilihan, rating harus 1-5, komentar maksimal 2000 karakter. Semua transisi diuji pakai table-driven test, makanya perilakunya dijamin konsisten, bukan sekadar asumsi.
#go#testing#mysql - 12.12testing
Assertion LIKE yang Licik: Saat Nomor 1 Kena Nomor 19
Pola LIKE atas JSON ter-serialisasi membuat assertion integration test melenceng: nomor 1 tertukar nomor 19 karena collision substring.
TL;DR: Test assertion pakai LIKE '%"no":1%' buat nyari JSON, eh taunya nyangkut ke objek nomor 19 gara-gara 16 dan 19 sama-sama diawali "no":1. Jadi flake-nya murni soal substring dan urutan data, bukan race condition. Solusinya bandingin nilai hasil parsing atau pakai JSON_SEARCH, jangan LIKE buat predikat identitas.
#testing#mysql#flaky-tests - 11.59testing
Test Karakterisasi: Mencatat Perilaku, Bukan Menghakimi
Test karakterisasi mengunci perilaku kode apa adanya saat keputusan pemilik produk belum jatuh, lengkap dengan marker pending.
TL;DR: Test karakterisasi tujuannya bukan mastiin kode bener, tapi ngunci perilaku yang sekarang terjadi. Jadi assertion gagal artinya ada yang berubah, bukan rusak. Pas keputusan owner masih pending, test ini jadi pagar biar nggak ada yang ubah perilaku diam-diam.
#testing#characterization-testing#refactoring - 11.24backend
Kontrak Repositori di Garisan SQL
Uji integrasi mengunci kontrak repositori di batas SQL: pemetaan error 1062, visibilitas soft delete, clamp paginasi, dan pelajaran parameter marker MySQL.
TL;DR: Awalnya nulis fungsi seed data, karena binding SQL expression buat deleted_at, kuerinya gagal diam-diam tanpa error. Ternyata placeholder prepared statement cuma nampung nilai data, bukan ekspresi SQL, jadi solusinya pecah jadi dua cabang query dan panggil fungsi waktu langsung. Sekarang kontrak repo dikunci pake uji integrasi MySQL beneran, termasuk mapping error 1062 ke ErrSlugTaken pake errors.Is.
#go#testing#mysql