Composite study

This is a product-class write-up, not a named-client story and not a results press release. Counts below describe the pack we actually write (approach points, tools, layers) — not invented bug totals or conversion lifts.

4
Approach points
4
Tools in the pack
4
Layers covered
3
Challenges documented

Overview

The extractor was accurate on clean passports. Blurry images, two-sided IDs, and a second file from a joint applicant caused field bleed: DOB from person A, name from person B.

The product still opened a funded wallet while KYC sat in “manual review,” against stated policy.

Industry pattern this is grounded in

Identity products fail on matching and isolation, not on OCR accuracy demos. A wrong merge is an account-takeover and AML problem.

Highlights

Typical launch bar: Block until pass rules hold on the money, identity, or safety path.

Challenges

01

Vendors quote “99% accuracy” without saying on which field and which image quality.

02

Reviewers rubber-stamped the model’s fields because the UI highlighted them as verified.

03

Retention: failed KYC images stayed in a public bucket longer than the policy allowed.

How we tested

01

Fixture pack: pass, fail, manual review, expired ID, mismatched selfie, joint application.

02

Human-review queue must see the raw image next to extracted fields; auto-accept only on high-confidence consistent fields.

03

Policy test: pending users cannot move money if the policy says so.

04

Document isolation: applicant A cannot GET applicant B’s image by id.

Starting point vs what we required

Starting point versus the controls we required
Starting pointWhat we required
Vendors quote “99% accuracy” without saying on which field and which image quality.Fixture pack: pass, fail, manual review, expired ID, mismatched selfie, joint application.
Reviewers rubber-stamped the model’s fields because the UI highlighted them as verified.Human-review queue must see the raw image next to extracted fields; auto-accept only on high-confidence consistent fields.
Retention: failed KYC images stayed in a public bucket longer than the policy allowed.Policy test: pending users cannot move money if the policy says so.

What we delivered

01

Journeys / UI

  • Playwright — Onboarding states and review queue
02

API / contract

  • Postman — Document IDOR and pending-transaction policy
03

Security scan

  • OWASP ZAP — Open buckets and debug upload endpoints
04

LLM traces / evals

  • LangSmith — Extraction traces vs raw fields

Outcomes

We failed auto-accept when any identity field conflicted or confidence was below the agreed threshold. Wallet funding was blocked in the pending state with an automated API test.

S3/object ACLs and signed URL expiry were reported as High alongside the extraction bugs.

Stack

Testing stack used on this product class
LayerToolWhat we validated
Journeys / UIPlaywrightOnboarding states and review queue
API / contractPostmanDocument IDOR and pending-transaction policy
Security scanOWASP ZAPOpen buckets and debug upload endpoints
LLM traces / evalsLangSmithExtraction traces vs raw fields

Same method as the rest of our work: severity-ranked findings, pass rules in writing, and a ship / wait / block call. See the evaluation method and tool comparison.