# Patch Notes Fase 5A–5B

## Fase 5A yang diperbaiki

- Fatal `App\Controllers\Flash` pada halaman latihan.
- Leading Lines salah dikategorikan sebagai Angle.
- Membuka halaman latihan sebelumnya menambah jumlah percobaan.
- Skor terbaik dan statistik penyelesaian dapat menghasilkan data tidak tepat.
- Koordinat High/Low Angle terbalik terhadap koordinat layar.
- Target Leading Lines tidak sama dengan garis panduan.
- Skala awal/reset Framing tidak konsisten.
- Validasi posisi menerima angka di luar frame.
- Kontrol kamera belum mendukung keyboard.
- Variabel CSS dan kelas tombol/badge Fase 4–5 tidak tersedia pada design system utama.
- Feedback gagal simpan hanya masuk console dan tidak terlihat oleh siswa.

## Fase 5B yang ditambahkan

- Lampiran PDF, PNG, JPG/JPEG pada materi.
- Maksimal 5 file per materi dan 5 MB per file.
- Upload dari form tambah/edit materi serta form khusus pada halaman edit.
- Daftar, preview, urutan, aktif/nonaktif, dan hapus untuk Guru.
- Preview/unduh lampiran aktif pada detail materi Siswa.
- Penyimpanan di luar public, random filename, MIME validation, image/PDF validation, controller streaming, `nosniff`, transaksi, dan rollback.
- Checklist manual: `MANUAL_TEST_PHASE5B.md`.

## Verifikasi lingkungan patch

- PHP lint, JavaScript syntax, route contract, static security contract, service scoring, dan mock UI desktop/mobile dijalankan.
- Pengujian HTTP/MariaDB/upload/session penuh tetap dilakukan pada XAMPP pengguna.
