audit
Catatan teknis seputar web development, DevOps, dan integrasi AI.
6 artikel
- 19.22backend
Ketika Guard Status Dilepas: Satu Aturan Keras Pengganti Larangan
Pengalaman melepas guard forward-only pada state machine booking, dan mengapa satu aturan keras lebih efektif daripada larangan total.
TL;DR: Gara-gara guard status cuma boleh maju, admin kesulitan mundurin tiket yang salah input, malah bikin tiket sampah buat akal-akalan. Solusinya simpel: guard dibuang, admin bebas ubah status ke mana aja lewat API yang sama. Tapi satu aturan keras tetap: kalau jadi ditolak, wajib isi catatan keputusan dan pemohon otomatis dikirim surel, jadi semua kegiatan tetap ke-audit.
#workflow#backend#state-machine - 15.05backend
Rebuild Hanya untuk Pemulihan: Menjaga Ledger Tetap Sehat
Insiden rebuild yang mengubah 20 baris sehat jadi 77 UNKNOWN memaksa kontrak baru: alat pemulihan hanya mengisi kekosongan, tidak pernah menimpa baris sehat.
TL;DR: Gara-gara prinsip "raw is truth", alat rebuild malah merusak data sehat karena parser ikut baca berkas sub-tab yang bukan data detail. Kontraknya pun diubah jadi recovery-only: baris sehat dipertahankan, sub-tab diabaikan, dan ketemu UNKNOWN berarti nggak nulis apa-apa sama sekali. Karena raw-nya append-only, ledger yang sehat cukup dilengkapi, bukan ditimpa ulang.
#python#data-engineering#sqlite - 15.04backend
Melacak Jejak Panen Data dengan Log Audit SQLite
Dua penjaga lokal untuk pipeline panen data: rulebook AGENTS.md untuk agen koding dan log audit SQLite yang idempoten lewat UPSERT.
TL;DR: Pas panen data di DemandScope error terus, aku bingung commit mana yang ngasilin datanya karena Git cuma nyatet berkas berubah doang. Solusinya gampang: bikin AGENTS.md buat ngatur agen koding biar nggak sembarangan nulis data atau commit kredensial. Terus bikin log audit SQLite per target pakai UPSERT biar idempoten, jadi tiap data bisa dilacak asalnya.
#sqlite#scraping#audit-trail - 11.12backend
Harvest Masuk Lewat Satu Pintu: Kontrak API yang Aman Diulang
Isolasi ruang kerja scraping dan pengiriman hasil lewat satu pintu API yang aman diulang: antrian resumable, kunci deduplikasi, ship-log.
TL;DR: Dulu scraping langsung nulis ke database aplikasi, pas sesi putus jadi bingung data mana yang udah masuk. Nah, commit ini mindahin semua alat scraping ke folder terpisah, hasil panen cuma boleh masuk lewat endpoint API ingest. Ada antrian kerja yang bisa dilanjutin plus kirim ulang yang aman berkat kunci dedup yang stabil, jadi idempoten dan bebas data dobel.
#scraping#idempotency#data-engineering - 10.28backend
Raw Dulu, Parse Belakangan: Pola Harvest yang Tahan Gagal
Pola raw dulu, parse belakangan: data mentah disimpan utuh dulu, parsing jadi proses turunan yang aman diulang saat parser berubah.
TL;DR: Scraping data dari web itu rentan mandek di tengah jalan, makanya jangan langsung parsing sambil ambil. Simpan dulu data mentahnya utuh, baru parsing terpisah lewat perintah rebuild, pakai kursor dan ledger idempoten biar bisa lanjut tanpa data dobel. Jadi kalau parser ada yang salah, tinggal perbaiki terus rebuild deh, nggak usah buka situs sumbernya lagi.
#scraping#idempotency#audit-trail - 13.18backend
Pengaduan Lahir Tanpa Jejak: Timeline yang Kosong Sejak Awal
Timeline pengaduan kosong bukan bug tampilan. Baris history pertamanya memang tidak pernah di-INSERT, karena fungsi kembar CreateRegistration dan CreateReport
TL;DR: Buka timeline pengaduan di dashboard admin kosong padahal laporan udah masuk, kirain query-nya error. Ternyata pas dicek DB emang baris awal history dari NULL ke pengajuan gak pernah dibikin, beda sama fitur pendaftaran yang udah bener. Akhirnya diperbaiki pakai transaksi biar laporan dan history kecreate barengan plus ditambahin test biar gak kejadian lagi.
#golang#mysql#audit-trail