Blog
Catatan teknis seputar web development, DevOps, dan integrasi AI.
502 artikel
- 08.51backend
Satu Nilai, Dua Makna: Scope Global Itu Pilihan, Bukan Null
Null di filter scope manggut dua tugas: belum memilih dan pilih semua. Catatan desain kenapa sentinel ALL di enum lebih jujur soal maksud.
TL;DR: Di KotaPortal, null dipake buat dua hal sekaligus yaitu belum milih dan pilih semua unit, yang bikin logika backend jadi rancu. Akhirnya dibikin sentinel ALL sebagai member enum biar pilihannya eksplisit dan null balik jadi tanda belum milih aja. Hasilnya kontrak API lebih jelas, validasi aman, dan status tiket nggak gampang ketuker lagi.
#typescript#openapi#api - 08.39backend
Build Hijau, Runtime Runtuh: Kontrak API yang Hanya di Kode
Nilai status baru di handler backend lolos build frontend karena spec OpenAPI tidak ikut diubah. Catatan kenapa kontrak API harus eksplisit di spec.
TL;DR: Gue nambah status tiket di backend kirain aman soalnya nggak ada error pas kompilasi, eh pas dibuka malah kacau. Usut punya usut ternyata tipe frontend cuma ngikutin openapi yaml jadi nilai baru itu nggak kebaca. Pelajarannya spec harus jadi patokan utama, tulis enum lengkap di sana baru regenerate biar compiler bisa negur.
#openapi#typescript#api - 07.57database
Ganti Kosakata Status Tanpa Sekali Jalan: ENUM Tiga Langkah
Enam status baru, empat status lama. MODIFY + UPDATE + MODIFY bikin kosakata status ganti tanpa copy tabel dan tanpa baris invalid di tengah jalan.
TL;DR: Spec butuh enam status baru tapi DB masih pakai empat status Inggris lama jadi nggak bisa asal ganti kolom. MySQL cuma boleh nambah ENUM di akhir biar in-place, kalau diselip di tengah malah copy tabel dan data bisa geser. Makanya migrasinya dibikin tiga step expand-migrate-contract, down-nya lossy dan relasi sengaja nggak pakai foreign key biar soft delete aman.
#mysql#migration#schema - 16.58database
Satu Dump per Tag: Backup Database yang Bisa Dijawab
Cron harian nggak bisa jawab dump mana yang cocok sama versi yang live. Satu dump per tag rilis di folder .docs/BACKUPDB bikin rollback berhak nebak.
TL;DR: Saya pernah apes restore dump harian cron ternyata skemanya nggak cocok sama kode. Sekarang tiap rilis bikin annotated tag dan dump mariadb-dump dengan nama sama jadi jelas pasangannya. Tiap dump dites restore ke container kosong biar yakin bisa dipake pas darurat.
#backup#mariadb#git - 16.07security
Menutup Kebocoran Data di Pipeline Artikel Otomatis
Brief buat chatbot eksternal ternyata masih membawa hostname dan nama repo asli. Gerbang mekanis tiga titik yang menutupnya.
TL;DR: Gue kaget pas cek log pipeline ngirim hostname dan nama klien asli ke chatbot luar, padahal ngandelin prompt doang gak aman. Makanya gue bikin guard mekanis yang ngubah data jadi fiktif sebelum kekirim dan ngecek ketat pas push sama verify. Pake palet resmi kayak domain contoh dan IP dokumentasi cukup, soalnya cek awal nemu 7 dari 564 artikel masih bocor.
#security#prompt-injection#privacy - 15.30security
Gitleaks Crash Pas Commit Multi-File, Lahir Gerbang Supply Chain
Hook pemindai secret crash saat commit multi-file. Ternyata satu flag hilang di definisi hook, dan ujungnya CI diikat checksum.
TL;DR: Commit multi-file mendadak gagal gara-gara hook gitleaks-system crash karena lupa set pass_filenames false. Bugnya emang ada di file upstream, cuma hook golang sama docker yang bener. Akhirnya gue pindah ke hook lokal yang checksum-nya dicek plus CI cuma pake checkout yang di-pin SHA.
#github-actions#security#ci-cd - 18.02tooling
Pagi Itu, Tool Riset Saya Menelan Obatnya Sendiri
Baris pruned di build pagi mengungkap dua hal: index vektor tanpa pruning menjawab pakai dokumen yang sudah tidak ada, dan format bebas itu kontrak implisit.
TL;DR: Gara-gara rename file dossier lupa update index vektor, query malah ngasih dokumen hantu yang udah nggak ada. Fix-nya cuma 64 baris tapi ada tiga lapis: baca field ringkasan/summary yang toleran, pruning otomatis file hilang, sama selftest yang sengaja dibikin gagal. Intinya index jadi jujur lagi dan nggak percaya sama dokumen yang cuma ada di JSON doang.
#python#embedding#backward-compatibility - 13.52ai
Mental Mode Enterprise: 119 Baris Aturan Anti-Birokrasi
Commit +119 baris aturan eksekusi di AGENTS.md sempat saya duga jadi birokrasi baru. Ternyata kebalikannya: interview dibatasi, kartu di-scale, iterasi dicap.
TL;DR: Awalnya kirain aturan 119 baris ini cuma nambah ribet buat tugas sepele, ternyata malah bikin kerjaan lebih satset. Kuncinya ada di kartu kerja yang jelas plus verifikasi yang bisa dicek langsung jadi agen nggak ngarang sendiri. Hasilnya revisi nggak muter-muter dan kita bisa ninggalin keyboard dengan tenang.
#ai-agents#workflow#opencode - 13.22ai
26 Baris Aturan Agent yang Saya Hapus dari Dua Repo
Blok no-coding di dua file aturan akhirnya saya cabut. Ternyata aturan di file instruksi agent cuma konteks yang ikut termuat, bukan penjaga yang mengeksekusi.
TL;DR: Gue akhirnya hapus aturan no-coding Hermes di dua repo soalnya ternyata cuma jadi konteks doang, bukan blokir beneran dan bikin file gembung. Aturan gitu gampang kelupaan kalau context penuh, mending enforcement lewat hook sama approval gate. Sekarang tugas kecil gue kerjain langsung, yang ribet baru lempar ke Claude Code jadi lebih sat-set.
#hermes#claude-code#ai-agents