Prestige Barber Club v4.42.0 - Build Test Report Scope: Deep audit QR kartu member / scanner fisik / lookup member. Root causes identified: 1. QR kartu lama membawa URL portal cek member lengkap. Pada area QR kartu CR80 yang kecil, payload panjang + EC H meningkatkan kepadatan modul dan menurunkan toleransi scanner fisik. 2. QR pada PNG di-resize saat digambar ke canvas, berpotensi memberi interpolasi/blur pada tepi modul. 3. api_member.php sebelumnya melakukan exact lookup atas input yang diterima dan tidak menormalisasi QR URL/prefix scanner secara server-side. 4. Scanner fisik tertentu dapat mengirim AIM/Symbology Identifier seperti ]Q1 atau ]Q3. Prefix ini membuat kode berbeda dari members.member_code walaupun QR berhasil dibaca. Fixes: - QR kartu baru: payload pendek MEMBER:. - Error correction QR diubah H -> M agar modul lebih longgar untuk kartu fisik. - Print QR diperbesar dan quiet-zone putih dipertahankan. - PNG canvas menonaktifkan image smoothing saat menggambar QR. - Normalisasi server-side menerima QR baru, QR URL lama, AIM prefix, control chars/BOM, quote, URL encoding, case/space variants. - scan.php melakukan normalisasi client-side dan API tetap mengulang normalisasi sebagai authoritative guard. - scanner_diagnostic.php menampilkan raw input, hasil normalisasi, dan lookup database langsung. - member_check.php memakai normalisasi yang sama. - Backward compatibility: kartu QR URL versi lama tetap dapat dipakai. Static tests: - PHP lint: 211 PHP files, 0 syntax errors. - No destructive database table/column changes. - Upgrade page uses page_header($pdo,...). Operational note: - Untuk hasil terbaik, kartu fisik/PNG lama sebaiknya dibuat/cetak ulang agar memakai QR pendek v4.42.0. - Kartu lama tetap didukung melalui normalisasi URL lama.