Tres integradores reportaron por separado "el approve devuelve un string
vacio". Dos defectos de _settle_via_facilitator lo producian:
1) result.get("errorReason", result.get("error", "Unknown error")) — el default
de dict.get NO dispara cuando la clave esta PRESENTE y vacia, y el
facilitador manda errorReason: "" seguido. El default nunca entraba.
2) str(e) sobre un httpx.HTTPStatusError es "Client error '400 Bad Request'
for url ..." y TIRA el cuerpo, que es el unico lugar donde el facilitador
dice por que. Sobre un ReadTimeout es directamente "".
Ahora: `or` en vez de default, el ultimo recurso nombra el status HTTP y las
claves que SI vinieron, el HTTPStatusError conserva el body, y una excepcion
sin mensaje dice al menos su tipo.
Un fallo que no puede nombrarse cuesta mas que el bug que reporta.
Co-Authored-By: Claude <noreply@anthropic.com>