Per-bug commits, each referencing its Lark record:
- Borrow detail header -> "Borrowed Detail" (per tester note, to distinguish from Earn; Figma still says "Loan Details" and should be updated).
- Passcode eye toggles on the set/change passcode form (change-password already had them).
- KYC issuing-country prefill from the signup phone country (fixedInfo.country, alpha-3 from the shared country-code helper; covers new, existing and resumed applicants; never overwrites an existing country; fail-open with 3s request timeouts).
- Receipt secondary action follows the operation kind: BORROW -> "View Borrow" -> /list-borrow.
- Hub debt display: new bookedDebtValue (settled only) feeds "Currently borrowing"; debtValue/healthFactor/ltv/liquidationPrice stay on the full risk context.
Verification
- Bugs 1, 2, 4, 5: verified end-to-end with
.maestro/borrow-ui-batch-verify.yaml(32 steps) on an isolated local backend + dev-client simulator: hub shows $4.00 booked with no $10.00, HF stays risk-true at 8.99, "Borrowed Detail" header, "View Borrow" receipt, passcode toggles. - Bug 3: verified at payload/unit level only (createApplicant fixedInfo.country; resumed and existing-applicant PATCH paths; never-overwrite; fail-open on profile/GET/PATCH failure; real-axios hang tests for the 3s timeout). Sumsub SDK UI behavior on a fresh and a resumed applicant is PENDING sandbox verification with a non-VN signup account - no Sumsub credentials are available locally.
- FE: type-check clean; loans + passcode suites pass. BE: kyc + sumsub + lending summary/controller suites pass; tsc error count identical to develop baseline; no new lint errors vs develop.
Known follow-ups: product to confirm the hub's booked-debt figure next to risk-true HF/utilisation during a pending borrow; bug 3 sandbox check as described above.