Session 15. Defend the capstone — Fri 02 Oct

Reading your buyer under pressure

Why the output is the whole defence

Six minutes is not long enough to reason from first principles about what just went wrong. It is long enough to read the buyer's output out loud, line by line, because every line says which step it came from:

  [  ok] pin       1 x 'Espresso', budget 2000000, mint Eoqdd43n..  -> intents/...
  [  ok] prepare   simulated: pass, expires in 150 blocks
  [  NO] check     REFUSED on quantity: asked 2, prepared 1
  Nothing was signed.

The diagnosis, in order

When the card lands, resist explaining. Read instead.

  1. Where did it stop? The step with NO or STOP, and whether it is a refusal the buyer chose or a failure it fell into.
  2. Which field decided? A refusal names one field and both values: what was asked, from the pin, and what was found, in the bytes or from verify or the signer.
  3. Was anything signed or sent? The last line says Nothing was signed or Nothing was submitted. That line is the pass.
  4. Where is it written down? refusals/<stamp>-<field>.json. Open it: it is the evidence that outlives the screen.

STOP is different from NO. STOP means the buyer could not reach what a step needed: the network, Gecko, or a file. Say so, and switch to the recorded lane with GECKO_SOURCE=recorded. Nothing was signed either way.

Rehearse the card, not the demo

Run all four before Friday: uv run buyer --cards --recorded offline, then each one live on devnet. You will find at least one you did not expect. That is the point of finding it on Thursday rather than on stage.