Skip to content

Dua Taraf Hukum Hook Commit di Proyek KotaPortal

Adityo Guni Waluyo

Hook commit KotaPortal memisahkan dua taraf hukum: penanda uji yang salah blok keras, permukaan berisiko hanya dapat peringatan plus jejak audit.

Ringkasan

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.

Malam itu saya nyaris kehilangan commit karena satu kata: karakterisasi. Saya menjalankan perintah commit pada berkas pengujian yang menyebutkan kata itu, dan layar terminal langsung menampilkan pesan error yang membatalkan proses secara instan. Pesannya minta satu baris komentar persis tertentu, bukan sekadar itikad baik.

Asumsi awal saya keliru. Saya mengira skrip review_gate.sh bekerja sebagai penjaga gawang mutlak yang akan memblokir segala perubahan yang mengandung kata kunci berisiko atau komentar yang tidak lengkap. Kenyataannya, mekanisme ini tidak hitam-putih. Sistem ini menerapkan dua taraf hukum hook commit: pelanggaran penanda bahasa dihukum, sedangkan permukaan kode yang berisiko hanya menyalakan lampu peringatan — desain yang menyeimbangkan kecepatan pengembangan dengan keamanan kode.

Pemblokiran Keras untuk Penanda Uji

Fungsi check_markers bertugas memindai berkas yang telah di-staging di direktori pengujian API dan frontend. Jika ada baris tambahan yang menyebutkan kata characterization atau karakterisasi tanpa memperhatikan huruf besar atau kecil, proses commit langsung dihentikan. Satu-satunya cara agar commit lolos adalah menyertakan literal teks yang persis sama seperti // characterization: current behavior, owner decision pending. Permukaan perubahan yang diperiksa skrip ini diambil pakai perintah git diff --cached -U0 yang dipadukan dengan pola ekstraksi grep [2]. Pola ini memastikan hanya baris-baris tambahan yang dievaluasi, menjadikan pipeline pemeriksaan deterministik berdasarkan status keluaran grep yang terdokumentasi dalam manual resmi [4][6]. Dengan mengganti klaim teks bebas dengan satu literal yang mutlak, istilah karakterisasi berubah menjadi kondisi yang bisa diverifikasi mesin.

Peringatan Lunak untuk Permukaan Berisiko

Fungsi warn_triggers menangani skenario yang berbeda: ia tidak pernah memblokir commit secara paksa karena selalu mengembalikan nilai nol. Ia memeriksa dua kondisi. Pertama, apakah nilai trailer cakupan tinjauan berada di bawah tingkat code+security, dengan pilihan nilai none, code-only, atau code+security. Kedua, apakah perubahan menyentuh permukaan pemicu tertentu. Permukaan pemicu itu mencakup jalur autentikasi, middleware, userauth, mediaadmin, penyimpanan bersama, openapi.yaml, sampai middleware frontend. Selain itu, skrip juga mendeteksi migrasi destruktif yang mengandung kata kunci drop, delete from, atau rename, serta penggunaan dangerouslySetInnerHTML di frontend yang secara inheren merupakan sinyal risiko keamanan [5].

Jika kedua kondisi terpenuhi, skrip menambahkan baris peringatan ke berkas audit WARN_LOG dengan format tanggal, cakupan, dan pemicu, lalu mencetaknya ke standar error. Tinjauan kode yang aman harus terintegrasi ke dalam siklus hidup pengembangan perangkat lunak [3]. Catatan peringatan ini menjaga agar perubahan berisiko tidak lolos tanpa jejak audit yang wajib dibersihkan sebelum proses push.

Mengapa Pendekatan Dua Tingkat Ini Masuk Akal

Menerapkan pemblokiran mutlak untuk setiap perubahan yang menyentuh lapisan autentikasi atau migrasi basis data akan melumpuhkan kecepatan tim pengembang. Hook commit pada dasarnya bisa dilewati dengan flag --no-verify oleh pengembang yang memang berniat melakukannya [1]. Jadi tujuan utama alat ini bukan menghentikan pelanggar yang bertekad, melainkan menaikkan biaya kelalaian.

Dengan memisahkan logika check_markers yang bersifat memveto dan warn_triggers yang bersifat advisori, sistem mempertahankan alur kerja yang lancar untuk perubahan rutin. Pada saat yang sama, perubahan pada permukaan kritis tetap meninggalkan jejak yang terdokumentasi. Saya menyimpulkan alat otomatisasi terbaik bukan tembok tanpa pintu; ia pemberi rambu yang jelas saat pengembang melangkah ke area yang butuh perhatian ekstra.

Artikel terkait