v0.3.1
Corrects the onSale JSDoc: the hook has always been awaited before the buyer's receipt is sent, and the comment claimed the opposite. That is worth a release because believing the old comment means writing a fire-and-forget hook, which silently loses the sale on any runtime that stops when the response does. Two tests now hold the behaviour down, including that a throwing hook still sells the pass. No behaviour change.