Blog
Catatan teknis seputar web development, DevOps, dan integrasi AI.
506 artikel
- 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 - 05.51devops
Ketika monitor versi membangunkan untuk kondisi yang disengaja
PROBLEM jam lima pagi untuk fleet yang sehat dan sengaja lebih baru dari Docker Hub. Perbandingan versi ternyata buta arah.
TL;DR: Script monitor gue ngamuk jam 5 pagi gara-gara versi fleet beda sama Docker Hub. Ternyata semua host sehat dan sengaja di-upgrade ke versi custom, yang nggak kejar malah Docker Hub-nya. Akhirnya gue perbaiki logika perbandingannya: versi dihitung numerik kayak SemVer dan fleet lebih baru dari Hub dianggap rollout yang disetujui, bukan masalah.
#monitoring#docker#sre - 04.36tooling
OCR Tesseract di pipeline: urutan, karantina, output kosong
Nambahin tesseract ke pipeline ingest ternyata bukan soal CLI-nya. Urutan OCR, caption img, karantina meta korup, dan output kosong yang lebih menentukan.
TL;DR: Ceritanya job ingest gambar gue kena media-blocked gara-gara tesseract nggak terdaftar di config, padahal cek preflight-nya kebablasan sampai blokir semua job. Jadi gue persempit: tesseract cuma wajib buat job image-only, sisanya tetap boleh jalan. Pelajarannya, kontrak kegagalan itu penting—infrastruktur diblok cepat, konten korup dikarantina terus diheal, dan OCR kosong tetap sukses.
#tesseract#ocr#python - 03.53devops
Event Log Verifikasi Integritas Ala Git di Pipeline Ingest
Cara sidecar content-addressed, event log append-only, dan re-hash dari disk bikin state pipeline bisa diverifikasi dan dipulihkan tanpa perbaikan tangan.
TL;DR: File frame yang di-tamper nggak bikin planner crash, malah nge-emit action quarantine, soalnya state dibangun ulang dari event log. Caption disimpan sebagai sidecar yang namanya pakai prefix sha256, jadi teks sama dapet dedup gratis. Tapi hash chain cuma kasih tamper-evidence bukan authenticity, makanya verifikasi tetap baca ulang meta.json langsung dari disk.
#git#event-sourcing#automation - 02.54ai
MP4 valid yang nggak akan pernah tertranscribe
File video bisa saja valid tapi tak punya audio. Aksi skip nonstate membuat barisnya tetap kelihatan dan menahan pipeline sampai ada keputusan.
TL;DR: File MP4-nya valid, cuma isinya nggak ada track audio sama sekali, jadi asumsi video pasti punya suara itu salah. Sekarang ffprobe dicek duluan sebelum ekstraksi, hasil flag audio_track disimpan di meta.json, dan kalau nggak ada audio barisnya di-skip tapi tetap keliatan, bukan ditandai selesai. Frame video diekstrak pakai fps konstan plus timestamp, audionya jadi WAV mono 16kHz.
#ffmpeg#whisper#ffprobe - 01.52backend
Lock dicuri di tengah jalan: pelajaran fencing token
Lock yang dicek sekali di awal cuma menjaga pintu. Fencing token yang divalidasi di setiap tulisan state, plus heartbeat lease, yang menjaga datanya.
TL;DR: Cek lock sekali di awal doang nggak cukup, soalnya sesi lama bisa bangun lagi padahal lock-nya udah dicuri sesi lain. Solusinya fencing token: tiap tulis wajib bawa token yang naik terus, kalau udah basi langsung ditolak di sisi penyimpanan. Plus resume harus idempoten dan dites pakai kontrol negatif, biar guard-nya kebukti bisa gagal sebelum insiden beneran kejadian.
#distributed-systems#idempotency#testing - 01.07ai
Dua rumpun kegagalan transcribe yang akhirnya saya pisah
Pipeline transkripsi saya mati diam-diam di tengah window. Ternyata hang itu exception yang harus ditangkap, dan tiap kegagalan punya pemiliknya sendiri.
TL;DR: Proses transkrip yang hang itu ternyata nggak mati diam, cuma exception TimeoutExpired yang luput ditangkap. Kegagalannya dipetakan jadi dua rumpun: infrastruktur (exit 5, cukup retry) dan file rusak (exit 6, dicatat terus attempt-nya dinaikkan). File rusak dicoba max 3 kali lalu di-skip, tapi statusnya non-state jadi tetap ngeblok pipeline sampai manusia yang memutuskan.
#whisper#ffmpeg#python - 00.10ai
Rem biaya Claude Code ternyata bukan di limit turn
Kupikir --max-turns cukup buat nahan biaya delegasi. Ternyata flag itu cuma ngitung putaran; yang benar-benar nahan dolar adalah --max-budget-usd.
TL;DR: Penulis ngira --max-turns bisa nahan biaya Claude Code, ternyata cuma nahan jumlah putaran, bukan uang. Tesnya, tugas selesai di satu turn senilai 0.045 dolar tanpa nyentuh cap dua, sedangkan --max-budget-usd beneran menghentikan proses begitu biaya lewat batas. Jadi buat nahan tagihan, pasang cap dalam dolar, limit turn cukup buat nahan loop muter-muter.
#claude-code#cli#llm - 23.26ai
Filter transkrip itu proyeksi, bukan parameter
Mengubah aturan filter nggak harus menjalankan ulang whisper. Filter itu proyeksi dari stdout yang udah tersimpan, distamp sha256 tiap aturan berubah.
TL;DR: Ganti aturan filter kata kasar bikin penulis hampir re-run whisper buat semua file audio, padahal boros banget. Ternyata filter cuma proyeksi dari output whisper yang udah tersimpan, jadi yang diulang cukup proyeksinya aja, bukan transkripsinya. Solusinya: simpan raw output, tempel filter_version berupa hash sha256 di frontmatter, refilter selesai detikan tanpa panggil model.
#python#whisper#idempotency