CHANGELOG
What shipped
NEWICAO-generic document coverage
Added the TD2 format and country-independent document profiles; the engine now handles any ICAO 9303 compliant document through one path.
NEWModule catalogue and per-module pricing
Every verification module is priced separately and billed only when it actually runs. Per-customer pricing and module switch-off landed with it.
IMPROVEDIssuing country detected from the MRZ
The document's issuing country is read from the MRZ and checks are adapted to it — scoring against the wrong country profile is gone.
FIXEDGhana Card support and an MRZ check-digit fix
Added the gh_id_card profile. Fixed the root cause in check-digit computation: the input was corrected rather than the symptom patched.
IMPROVEDMRZ name repair in the passport engine
Garbled name fields are repaired from the MRZ; date, label and frame checks plus a hard specimen rule were added.
NEWSandbox / production separation
Test data is now fully separated from real production data via the environment field, and a go-live lifecycle was defined for tenants.
NEWNFC chip reading on Flutter and React Native
dmrtd was vendored on the Flutter side and a pure-TS BAC/Secure Messaging implementation written for React Native. DG11 and DG12 are read too.
NEWOngoing AML monitoring, reusable KYC and PEP
Re-screening as lists update, skipping every module on a returning person's second verification, and PEP list support.
FIXEDFalse-rejection rate cut on the ID module
Against a test set built from real documents, false rejections dropped from 47% to 5.5% — the problem was the measurement, not the thresholds.
NEWML anti-spoofing and biometric face matching
Passive liveness via a MiniFASNet ensemble, face matching on ArcFace embeddings, and duplicate-face detection over pgvector went live.
BLOG
Notes on verification
- ENGINEERING · 8 MINPassive authentication: the check forgers can't beatWhy the SOD signature on the chip is stronger evidence than every visual check combined.
- COMPLIANCE · 6 MINWhy a match is not an automatic rejectionA name resembling a sanctions entry does not make it the same person. The cost, and the case, for keeping a human in the loop.
- ENGINEERING · 5 MINYou cannot lower a false-rejection rate you never measuredFixing the measurement instead of nudging thresholds: the story of a test set built from real documents.