think
16px
820px

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-region tidak 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_MATCH kini 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

  • nameKey di matcher (ScoredCandidate) → kandidat JSON → kontrak (opsional) → grouping FE
    (groupCandidates + CandidateRow + expander state).
  • SignatureAdvisory/SignerMatchBlock/DocumentSetSection dapat prop showSignatureAi
    (halaman mengirim isVerifikator); cabang pemohon-OK baru (netral + tombol kotak).
  • Route signature-region: guard verifikator dihapus; pra-match → persist box manual:true
    tanpa perbandingan; respons {ok:true} saja.
  • Tier & rule: <50 → netral "AI belum dapat menilai"; 50–79 "cukup mirip, periksa manual";
    ≥80 "sangat mirip".