# PROGRESS — KabarNikah (catatan kerja berkelanjutan)

Terakhir diperbarui: 13 Nov 2026.

## Selesai
- Audit 4 ZIP + OpenWA (v0.30.0, commit 6bb8b5749ed6aefb120eb11842472359516ae7c5 — sama dengan ZIP unggahan kecuali berkas uji sdk/php).
- Logo pemilik: PNG transparan, favicon, SVG berlapis; layar muat animasi (amplop → cincin → hati) di `app/public/assets/{css/kn-loader.css,js/kn-loader.js}` + `views/partials/loader.php`.
- Kerangka PHP: `app/kabarnikah/src/Core/*`, skema `migrations/001_schema.sql`, layanan Auth/Access/Catalog/Order/Entitlement/Invitation/Media/TemplateRegistry/Renderer/Content/Seeder.
- Installer (kode bootstrap), auth (masuk/daftar/lupa/reset/profil), landing + katalog + produk + harga + FAQ + bantuan + halaman kebijakan.
- Pipeline template `tools/build_templates.py` (T01 selesai) + adaptor T01 `app/public/tpl/glass-wonder/kn/adapter.js`, runtime `kn-runtime.js`.

## Selesai (lanjutan)
- Renderer T01–T04 (build_templates.py + adaptor + theme.css via tools/extract_theme.js + token warna runtime).
- Layanan Order/Midtrans/Entitlement; OrderController + view checkout/invoice; MemberController + view dasbor/undangan/tamu/RSVP/ucapan/bantuan.
- EditorController + editor.js/editor.css (autosave, konflik revisi, cadangan lokal, pustaka+unggah, crop, warna+kontras, terbit, riwayat).

## Selesai (sesi ini)
- AdminController + 16 view admin (ringkasan, pesanan/verifikasi, produk+lisensi+cover, member/hak, undangan, konten, pengaturan, WA, dukungan, audit, email, cadangan, sistem). Diuji Playwright: semua 200.
- Modul WA: OpenWAAdapter, MessageTemplate, ContactService (impor CSV/XLSX), WaService (koneksi, kampanye, klaim/lapor worker, webhook), InternalController (HMAC+nonce), WaController + 9 view + wa.js.
- Worker Node `worker/kabarnikah-openwa-worker.mjs`; cron PHP `bin/wa-dispatch.php`; `bin/maintenance.php` (backup|cleanup|check|worker-secret|migrate).
- BackupService (VACUUM INTO, pemulihan terjadwal atomik), SystemCheck (+uji akses storage), migrasi otomatis (App::upgradeIfNeeded), migrasi 002.
- Perbaikan: router regex {20,40} (media 404), base_path deteksi, halaman error bergaya, pattern HTML v-flag.
- Uji: tools/qa_admin.js, tools/qa_flow.js (E2E beli→setujui→edit→terbit→RSVP; akses silang 404), tools/qa_wa.js + tools/mock_openwa.js (impor, pesan, QR, kampanye, worker → read/failed/retry), tools/openwa_real_test.php & openwa_real_webhook.php terhadap OpenWA v0.30.0 asli (sesi, webhook, QR, 409 retry, webhook bertanda tangan OK).
- Data uji lokal: member58607@contoh.test / SandiMember#2026 (undangan #2 terbit), mock OpenWA :2786 key kunci-uji-lokal.

## Selesai (lanjutan 2)
- Aset nyata: tpl/*/kn/{cover,cover-480,shot-1..3}.jpg, tpl/*/kn/hero.mp4+hero-poster.jpg (4 template), assets/video/kabarnikah-demo.mp4 (31 dtk) + poster, assets/img/landing/{editor-foto,editor-warna,sebar-wa}.jpg, assets/brand/og-image.jpg. Skrip: tools/capture_tpl.js, record_hero.js, record_landing.js.
- PRIVASI: foto model contoh template tidak lagi jadi fallback slot kosong. Placeholder netral tpl/*/kn/ph-{portrait,landscape,cover}.svg; manifest.samplePhotos → TemplateRenderer mengganti referensi foto contoh di HTML bila mode != demo. Demo tetap memakai foto contoh lewat data demo.
- CSS: .dash-content grid minmax(0,1fr) (overflow ponsel), .kv dd wrap. Halaman produk: mockup ponsel + video nyata + cover utuh; autoplay video dipindah ke app.js (data-autoplay).
- QA viewport (tools/qa_viewports.js) 360/390/768/1366/1920: tanpa overflow setelah perbaikan.
- Akun uji member diganti: akun.contoh@contoh.test / SandiMember#2026 (undangan #2 terbit, kampanye #1).

## Selesai (lanjutan 3)
- tests/run.php: 111 tes lulus (laporan docs/bukti/hasil-tes-otomatis.{txt,json}). Jalankan: php kabarnikah/tests/run.php
- BUG DIPERBAIKI: Db::tx tidak ROLLBACK saat galat (PDO::inTransaction false setelah exec BEGIN) → kunci tulis tertahan.
- T03: aturan warna ekstra hanya aktif bila token diubah (runtime menambah kelas html.kn-c-<token>); token panel kini mewarnai panel bergradasi. T02 token teks terverifikasi.

## Selesai (lanjutan 4) — PENYERAHAN
- Dokumen di deliverables/ (9 .md + TEMPLATE_KONTAK_KABARNIKAH.xlsx/.csv, keduanya lolos impor 3/3 valid).
- Paket: dist/KabarNikah_Siap_Upload.zip (public_html + kabarnikah + dokumen + pengembangan/tools), dist/KabarNikah_OpenWA_Worker.zip (worker, package.json/lock, .env.example, docker-compose.yml pin OpenWA 6bb8b57 + health check, systemd).
- Uji instal bersih dari ZIP (tools/qa_clean_install.js) lulus; tests/run.php dari paket: 111/111.
- .htaccess kompatibel Apache 2.2/2.4. Skrip pengemasan: python3 -I tools/package.py ROOT OUTDIR.

## Sedang dikerjakan
- (tidak ada) — tinggal ringkasan akhir ke pengguna.

## Berikutnya
- Ekstraksi token warna → theme.css tiap template.
- Member dashboard, checkout/invoice, editor (foto/crop/warna/revisi/publish), tamu/RSVP/ucapan.
- Modul WhatsApp (kontak, impor XLSX/CSV, pesan, OpenWA adapter, kampanye, worker Node, webhook).
- Admin panel, pengujian, video/screenshot, paket ZIP & dokumen.

## Keputusan
- Palet platform mengikuti logo navy-emas pemilik; burgundy aksen sekunder.
- Renderer memakai <base href> ke folder aset template; runtime memperbaiki anchor/history.
- lax.min.js T01 dipatch (evaluator aritmetika) agar CSP tanpa unsafe-eval.
- Musik bawaan template (mp3 sama di 4 ZIP, lisensi tak diketahui) hanya dipakai bila admin mengaktifkan `allow_bundled_music`.
- Produk tidak bisa dibeli sebelum admin konfirmasi hak aset + metode pembayaran.

## Dev server
cd app && php -d upload_max_filesize=20M -d post_max_size=24M -S 127.0.0.1:8300 -t public public/router-dev.php
Admin uji: admin@contoh.test / SandiAdmin#2026 (hanya lingkungan uji lokal).
