Apostille K.11 — grup registrasi, redraw dua peran, verdict AI yang jujur
Deployed: ahu-ai-ocr:43e1f7f7 :3520 · backend 2548 ✅ / frontend 976 ✅ · semua diverifikasi live via klik terskrip pada e4229ea8
1. Empat "Drs. Darsani" → satu baris + expander
Tidak ada alasan bagus menampilkan empat baris datar — itu re-registrasi pejabat yang sama.
Alasan bagus untuk TETAP menyimpannya: tiap registrasi membawa berkas spesimen eranya sendiri
(2008 vs 2024 vs 2025), dan untuk dokumen lama spesimen se-eranya yang paling relevan. Solusi:
kandidat dengan nameKey sama (token nama tanpa gelar — "Drs. H. Darsani, M.Si" ≡
"Drs.H.DARSANI,M .Si" ≡ "darsani") dilipat di balik baris ber-skor terbaik, dengan expander
"+3 registrasi lain dari pejabat yang sama". Verifikasi live: 1 baris → klik → 4.
Catatan: pengelompokan berbasis nama-bersih; dua orang berbeda bernama persis sama akan ikut
tergabung, tapi tetap terlihat lewat expander (tak ada yang disembunyikan permanen).
2. "Gambar ulang kotak" untuk pemohon juga — tanpa membocorkan AI
Keputusan K.10 dibalik sesuai arahanmu: pemohon juga bisa memperbaiki kotak (dia yang paling
tahu letak tanda tangannya). Yang dijaga ketat justru artefak kemiripan AI — skor yang terekspos
adalah oracle brute-force: pemalsu bisa iterasi coretan sampai skornya lolos. Maka untuk pemohon:
- ❌ skor / panel perbandingan / peta kemiripan / modal — tidak dirender
- ❌ tautan "Lihat spesimen tanda tangan" — disembunyikan juga (lembar spesimen utuh adalah alat
bantu pemalsuan yang jauh lebih ampuh daripada skor) - ✅ "Tandai tanda tangan di dokumen" (sorot) + "Gambar ulang kotak" — tampil
- ✅ menggambar SEBELUM pejabat cocok kini juga bisa: kotak dipersist, perbandingan menyusul
otomatis saat match - Respons endpoint
signature-regiontidak lagi meng-echo skor.
Verifikasi live: role umum → 0 artefak AI, tombol gambar ada; verifikator → panel + modal + peta
lengkap.
Caveat jujur: role saat ini masih persona localStorage (belum ada auth asli), jadi payload
API review masih memuat skor bagi siapa pun yang membukanya lewat devtools. Penyaringan
server-side per-principal menyusul saat SECURITY_ENFORCE + penerbitan token diaktifkan — sudah
tercatat.
3. "Does the AI genuinely think it is 0%?" — Tidak. AI-nya memang belum bisa menilai, dan sekarang dia jujur soal itu
Dua lapis jawaban:
Mekanis: skor = cosine dinov2 dipetakan lewat floor 0.50 → ceil 0.95. Pasanganmu cosine 0.35 →
di bawah floor → "0%". Jadi "0%" tidak pernah berarti "0% mirip" — artinya "di bawah ambang
kalibrasi".
Fundamental (eksperimen, 13/7): kubandingkan 6 varian metrik (CLS-cosine & chamfer patch ×
tanpa-mask & ink-mask 12%/25%) pada korpus Darsani + kontrol negatif (tanda tangan pejabat
lain, Galih Yudha Praja). Hasil: kontrol beda-orang mencetak 0.66–0.80, pasangan asli
sesama-Darsani hanya 0.33–0.78 — si pembanding baseline tidak bisa membedakan orang sama vs
beda; stempel dan teks di sekitar goresan mendominasi embedding. Karena urutannya saja salah,
mengutak-atik kalibrasi agar "kelihatan lebih tinggi" adalah kebohongan — tidak kulakukan.
Yang kulakukan (jujur di produk):
- Skor < 50 tidak pernah lagi dibaca "0% — kemungkinan berbeda". Panel, modal, dan rule
SPESIMEN_TTD_MATCHkini berbunyi "AI belum dapat menilai — bandingkan manual" (tanpa angka
yang menyesatkan), plus penjelasan di modal: stempel/teks ikut terhitung dan tanda tangan asli
memang tak pernah identik 100%. - Instingmu ("I'll approve it") persis alur yang dimaksud: skor selalu advisory WARNING-ceiling,
keputusan di verifikator — dan modal + lembar spesimen utuh kini memberimu bahan pembandingnya. - Perbaikan nyata menunggu C5: model verifikasi tanda tangan khusus (metric-learning) +
pemisahan tinta/stempel. Matriks eksperimen ini jadi korpus evaluasi awalnya.
Teknis
nameKeydi matcher (ScoredCandidate) → kandidat JSON → kontrak (opsional) → grouping FE
(groupCandidates+CandidateRow+ expander state).SignatureAdvisory/SignerMatchBlock/DocumentSetSectiondapat propshowSignatureAi
(halaman mengirimisVerifikator); cabang pemohon-OK baru (netral + tombol kotak).- Route
signature-region: guard verifikator dihapus; pra-match → persist boxmanual:true
tanpa perbandingan; respons{ok:true}saja. - Tier & rule: <50 → netral "AI belum dapat menilai"; 50–79 "cukup mirip, periksa manual";
≥80 "sangat mirip".