Solución: Riverpod 3.0 lanza ProviderException en lugar del error original
Riverpod 3.0 envuelve en un ProviderException los errores lanzados al leer un provider. Captura ese tipo y lee e.exception para recuperar tu error original, o usa AsyncValue.error, que viene sin envolver.