# Risiko migrasi

| Risiko | Dampak | Mitigasi |
|--------|--------|----------|
| **MD5 password** | Kompromi kredensial mudah | Rencanakan upgrade bcrypt/argon; sementara pertahankan untuk kompatibilitas mobile |
| **Token plain di DB** | Token bocor = impersonation | Hash token di DB + bandingkan; atau JWT pendek umur |
| **CORS `*`** | Origin jahat memanggil API jika kombinasi browser | Setelah cutover, batasi origin; tetap POST + token |
| **Upload base64** | Beban memori / file besar / MIME palsu | Validasi ukuran, tipe, virus scan; limit body |
| **Path upload** | Salah permission / traversal | `public/assets/uploads` + nama file random (sudah mirip legacy) |
| **Query join `daftar_today`** | Dulu string tanggal inline | Di CI4 memakai `escape()`; tetap review indeks DB |
| **serialize(`jadwal`) di presensi** | Kaku saat skema berubah | JSON column atau normalisasi jadwal |
| **PHPExcel** | Usang, tidak aman | Ganti PhpSpreadsheet saat modul laporan dimigrasi |
| **HMVC + Grocery** | Tidak ada port 1:1 CI4 | Rencanakan ulang modul admin per domain |
| **TailAdmin source** | `css/style.css` memakai `@import "tailwindcss"` — perlu build untuk CSS penuh | Foundation admin memakai **Tailwind CDN**; aset TailAdmin (logo, FA) disalin; untuk pixel-perfect jalankan build template |

## Blocker potensial

- **Kredensial DB** harus diisi manual di `.env` CI4 (jangan commit secret).
- **Selisih charset** DB `utf8` (CI3) vs `utf8mb4` (CI4 default) — uji karakter Indonesia.
- **File upload** yang sudah ada di server CI3 (`assets/uploads/...`) perlu **sinkron** atau symlink jika sharing storage dengan CI4.

## Dependensi eksternal

- PHP ≥ 8.2 (CI4 appstarter).
- MySQL/MariaDB dengan skema yang sama antara CI3 dan CI4 selama transisi.
