OpenGradient gets tricky when the receipt field is empty, not when the model fails.
I kept looking at the response object because the danger is easy to miss.
A builder can get chat_output back. The payment hash can exist. The TEE signature can come through. The user sees an answer and the app feels done.
But the settlement trail is not always a neat clickable hash.
In some paths, data_settlement_transaction_hash can be None. data_settlement_blob_id can be None too, especially around private or batch settlement, or when the provider does not return that metadata. That does not automatically mean the inference is fake. It means the builder has to understand what kind of evidence this response actually carries.
That is where the consequence shows up.
If an app prints “verified” beside an answer, and a user later asks for the exact settlement record, the builder cannot point at an empty field and act surprised. They need to know whether they promised a private result, a batched record, a full settlement, or just a payment-backed response with signature data.
The UI only has one word for the user.
The backend has to know which proof shape it is really holding.
A missing hash is not a small detail if the app sold the answer as defensible.
#OPG $OPG @OpenGradient