# Audit Proposal Flow

Audit cepat untuk memastikan alur “Pengajuan Judul Proposal Skripsi → SK Pembimbing → Mahasiswa download SK” sudah terhubung di kode.

## Menjalankan

```bash
php spark audit:proposal-flow
```

Output berupa tabel PASS/FAIL (dengan warna ANSI bila terminal mendukung). Audit ini statis, hanya membaca kode di `app/` tanpa memanggil DB.

## Checkpoint yang dicek

- **A. Mahasiswa** – Route `/mhs/proposal` terlindungi `role:MAHASISWA`; endpoint draft (`create`, `save-draft`) dan `submit` tersedia.
- **B. WD1** – Endpoint `approve/reject` ada; status `REJECTED_BY_WD1` bisa disubmit ulang (cek layanan/ controller).
- **C. Kabag** – Endpoint `/proposal/kabag/propose` + service `proposeSupervisors`.
- **D. WD1 Final Pembimbing** – Endpoint finalisasi WD1 aktif, menonaktifkan usulan lama, memanggil `generateSkPembimbing`.
- **E. Workload Dosen** – Ada query perhitungan beban bimbingan/penguji yang dipakai di alur usulan/finalisasi.
- **F. SK Pembimbing** – Generator SK (`ProposalService::generateSkPembimbing`) dan route download mahasiswa (`/mhs/proposal/sk-pembimbing/download`) dengan pengecekan kepemilikan.
- **G. Pelaporan AI** – Artefak modul/endpoint/command untuk pelaporan berbasis AI.

## Contoh output singkat

```
Checkpoint                         Status  Detail
A1 Mahasiswa route /mhs/proposal   PASS    Dilindungi auth + role:MAHASISWA di app/Config/Routes.php:299
E Workload dosen saat usulan/final FAIL    Workload memakai COUNT proposal_supervisors tanpa filter status mahasiswa/ujian
...
Ringkasan: 7 checkpoint · 1 FAIL · 0 WARN
```

Interpretasi:
- **PASS**: Artefak ditemukan sesuai kriteria.
- **FAIL**: Artefak hilang/tidak sesuai; gunakan detail untuk file/route yang perlu dicek.
- **WARN** (jika muncul): Ditemukan parsial tetapi perlu perhatian.
