# V2 Oshun Identity Binding

V2 uses `@oshun/identity` as the account source of truth. There is no V2-only
publisher account root: PSN, Xbox Live, Nintendo Account, and Steam records are
linked credentials on one Oshun identity account.

## Contract

- `@oshun/identity` exports the V2 account-state contract in
  `v2-account-binding.ts`.
- `@v2/oshun-identity-binding` composes that shared contract for V2 service
  integration and exposes an off-rollback surface.
- `FV2OshunIdentityAccountBinding` mirrors the contract in Unreal online
  services for login/session state.
- `FV2SaveHeader` stores `OshunAccountId`, `HomeRegionId`, and
  `IdentitySourcePackageName` separately from `PlatformUserId`.

## Required State

The V2 identity binding requires:

- an `@oshun/identity` account id;
- account home-region binding;
- enrolled account 2FA, with verified TOTP or hardware key required for merge,
  platform rebind, region change, payment-detail change, ranked-pro
  qualification, and DSR request actions;
- recovery-ready state via verified email or issued backup codes;
- one or more platform account bindings whose `linkedOshunAccountId` equals the
  canonical Oshun account id.

Region changes remain identity-owned and enforce the 90-day cooldown described
in §67.6. Platform rebinds honor the 30-day cooldown described in §50.

## Rollback Boundary

Identity resolution is off rollback. Deterministic gameplay may receive the
already-resolved `OshunAccountId` as metadata, but platform account lookup,
2FA/recovery checks, and region binding decisions stay in the service layer.
