Summary
- Card tab now shows the KeySecure cardholder onboarding state (KYC gate, not started, in review, approved, rejected, submit failed, blocked) using SP3
GET/POST /keysecure/cardholder. - Apply screen: consent (first apply only) and the missing-field form (gender, address, phone).
- Submit failures are grouped into retry / fix / hold with detailed copy and the offending field; "Try again" resends from the tab without the form; no contact-support CTA.
- Card tab refreshes right after an apply (cancels in-flight GET, then refetches).
- Dev-only autofill (
__DEV__ && APP_ENV=development) fills a valid US profile.
Test plan
-
npx jest cardholder keysecure-cardholder(172 tests),pnpm type-check,pnpm lint,pnpm lint:translations -
Manual on iOS simulator against local BE: fresh, in review, approved, rejected, submit failed (2012 / 2001 reconcile) -
Final Opus review approved
Depends on the BE fix in fix/keysecure-cardholder-name-hyphen for hyphenated names.