# Global Agent Guidelines & Learnings

## CI3 Session & Cookie Management Rules

1. **Penghapusan Cookie Session (`authLogout`):**
   - Saat menghapus cookie cadangan (seperti `uprop`, `uid`, `pwd`), **Wajib** menggunakan waktu lampau `time() - 3600`, tentukan path `'/'`, dan hilangkan dari superglobal `$_COOKIE`:
     ```php
     setcookie("uprop", "", time() - 3600, "/");
     unset($_COOKIE['uprop']);
     ```
   - *Jangan pernah* menggunakan `setcookie("uprop", NULL, time())` tanpa path, karena cookie akan tetap ada di browser dan menyebabkan *zombie session*.

2. **Validasi di Depan (*Upfront Validation*) pada Cookie Restoration (`auth/Login/index`):**
   - Sebelum membangkitkan session dari cookie `uprop` dan melakukan `redirect(base_url())`, **Wajib** memvalidasi keberadaan `id` user dan status keaktifan user di database.
   - Jika cookie rusak atau user sudah dinonaktifkan/logout, langsung musnahkan cookie di depan dan tampilkan form login biasa (jangan di-redirect ke `base_url()` / pilih cabang).

3. **Strict Guard pada Constructor Controller:**
   - Semua controller utama (termasuk controller pilih cabang seperti `Welcome.php`) wajib mengecek `$this->session->login['id']` pada `__construct()`. Jika ID kosong, langsung alihkan pengguna ke `gotoLogin()`.

## Validasi Ketersediaan Saldo Riil terhadap Locker (Anti-Overselling & Race-Condition)

4. **Kewajiban Validasi Logika Saldo/Stok:**
   - Setiap kali Agent membuat atau memodifikasi modul yang menambahkan barang ke keranjang/draf transaksi (proses *checkout*, *booking*, dsb), **WAJIB** hukumnya menyertakan *Early Validation* untuk memeriksa ketersediaan saldo fisik.
   - Rumus logika validasi yang wajib diterapkan sebelum *query insert/update* ke keranjang/transaksi adalah:
     `Kuantitas yang Direquest <= (Saldo Riil - Total Saldo Locker Aktif di DB)`
   - **Tujuan:** Mencegah terjadinya *overselling* (stok minus) di mana sistem mengizinkan *user* untuk mereservasi atau menjual barang yang secara riil sudah habis karena sedang di-*hold* (dikunci) oleh transaksi atau pengguna lain.
   - Jika validasi gagal (kuantitas *request* melebihi saldo efektif), sistem **WAJIB** menolak eksekusi dan mengembalikan pesan *error* kepada pengguna (contoh: "Stok tidak mencukupi, sebagian stok sedang di-hold transaksi lain").
   - Aturan ini berlaku universal di semua entitas kuantitatif aplikasi (stok persediaan, saldo rekening koran, limit, dll).
