# Patch Runtime Fase 3C

Patch ini memperbaiki error HTTP 500 pada menu Praktikum dan melanjutkan implementasi Fase 3C tanpa mengganti fondasi Fase 1–3B.

## Penyebab Error yang Ditemukan

- Pemanggilan `Csrf::generate()` padahal API yang tersedia adalah `Csrf::token()`.
- Variabel `user` tidak diteruskan ke layout/sidebar pada controller praktikum.
- Query daftar hasil memakai placeholder melalui `PDO::query()`, sehingga menghasilkan `HY093 Invalid parameter number`.

## Perbaikan Tambahan yang Diperlukan Agar Alur Fase 3C Utuh

- Helper CSRF untuk form praktikum.
- Streaming foto hasil untuk role guru.
- Penyimpanan processed Canvas sebagai file simulasi terpisah dari foto asli.
- Validasi ownership capture, MIME, ukuran, dimensi, random filename, thumbnail, dan rollback.
- Evaluasi exposure aktual serta target ISO/shutter/aperture yang deterministik.
- Seed praktikum terintegrasi ke runner utama dan target seed dinormalkan.
- Pilih hasil terbaik, pengumpulan, revisi, dan pengumpulan ulang.
- Penilaian guru memakai transaksi dan kembali ke halaman detail dengan flash message.

## Penerapan di XAMPP

1. Backup folder proyek lama dan database `virtual_lab_fotografi_v2`.
2. Ganti folder proyek dengan paket patch.
3. Jalankan:

```bat
cd D:\XAMPP\htdocs\final_virtuallab
D:\XAMPP\php\php.exe database\migrate.php
D:\XAMPP\php\php.exe database\seed.php
```

4. Lakukan hard refresh browser dengan `Ctrl + F5`.
5. Login sebagai guru dan buka `/guru/praktikum`.
6. Jalankan:

```bat
D:\XAMPP\php\php.exe tests\phase3c_acceptance.php
D:\XAMPP\php\php.exe tests\praktikum_evaluation_test.php
```

7. Jalankan regression test Fase 1–3B sesuai dokumentasi proyek.
8. Periksa `storage/logs/app.log`, Apache error log, dan PHP error log setelah tes.

## Status Verifikasi Paket

- PHP syntax lint: 85/85 lulus.
- JavaScript/MJS syntax: 12/12 lulus.
- Photography Engine: 22/22 lulus.
- Camera Capabilities: 7/7 lulus.
- Praktikum Evaluation: 6/6 lulus.
- Acceptance HTTP/database penuh wajib dijalankan pada XAMPP/MariaDB pengguna.
