1. Instalasi ✓ Sebelum instalasi semua halaman diarahkan ke /install ✓ Installer tampil dan membuat kode bootstrap di folder privat ✓ Kode instalasi salah ditolak ✓ Instalasi berhasil dengan kode benar ✓ Kode bootstrap dihapus setelah instalasi ✓ Installer terkunci setelah selesai (404) ✓ Tidak ada sandi admin bawaan: admin = data yang diisi 2. Publik & header keamanan ✓ Beranda 200 ✓ CSP script-src tanpa unsafe-inline/unsafe-eval dan memakai nonce ✓ Header nosniff, frame-ancestors, referrer ✓ Tidak ada statistik/testimoni karangan di beranda ✓ Katalog menampilkan 4 desain ✓ Demo glass-wonder 200 & berlabel demo ✓ Demo burgundy-vintage-hitam 200 & berlabel demo ✓ Demo isometric-castle 200 & berlabel demo ✓ Demo istana-kertas 200 & berlabel demo ✓ Traversal pada URL media ditolak ✓ robots.txt menutup area privat 3. Akun & peran ✓ Pendaftaran berhasil ✓ Parameter role=admin diabaikan: pendaftar selalu member ✓ Sandi di-hash (Argon2id/bcrypt), bukan teks asli ✓ Email ganda (beda huruf besar) ditolak ✓ POST tanpa token CSRF ditolak (419) ✓ Member tidak bisa membuka panel admin (403) ✓ Tamu diarahkan ke halaman masuk ✓ Percobaan masuk berulang dibatasi ✓ Admin masuk 4. Pembelian & pembayaran manual ✓ Belum bisa membeli sebelum admin konfirmasi lisensi & metode bayar ✓ Admin mengonfirmasi lisensi & mengubah kuota WA produk ✓ Pesanan dibuat (pending_payment) dengan snapshot harga ✓ Kirim ganda dengan kunci idempoten tidak membuat pesanan ganda ✓ Ubah harga produk tidak mengubah pesanan lama ✓ Bukti transfer diunggah → menunggu verifikasi ✓ Bukti transfer saja tidak membuat hak aktif ✓ Bukti transfer tidak bisa dibuka member lain ✓ Bukti transfer tidak bisa dibuka tamu ✓ Member tidak dapat menyetujui pembayaran sendiri ✓ Admin menyetujui → lunas, 1 hak, 1 undangan ✓ Persetujuan ganda idempoten (tetap 1 hak) ✓ Masa aktif 365 hari sejak konfirmasi ✓ Pemilik pesanan lain tidak bisa melihat invoice orang lain ✓ Admin aktivitas tercatat di audit 5. Editor & undangan ✓ Draft dapat dibaca pemilik ✓ Member lain tidak bisa membaca draft (404) ✓ Simpan draft berhasil ✓ Revisi usang ditolak sebagai konflik (409) ✓ Mengganti template lewat data tidak mengubah template undangan ✓ Member lain tidak bisa menyimpan draft (404) ✓ Terbit ditolak bila acara belum lengkap (422) ✓ URL peta javascript: tidak pernah tersimpan (ditolak/dibuang) ✓ Terbit berhasil ✓ Undangan publik 200 ✓ Nama berisi