| 1 | An investor goes from onboarding to a first trade: SecId create and submit, suitability (and the DLT test in the EEA), wallet link, price, prepare, sign, submit | Run Prepare an investor to trade and Trade a stock end to end |
| 2 | UNAUTHORIZED_INVESTOR leads the investor back to the SecId step that is missing, never to a dead end | Product review against Errors |
| 3 | The agreement message is signed verbatim, and the investor sees it before signing | Product review |
| 4 | The real-time price is fetched for the order ticket on a fixed cadence, and only while it is open | Code review against Prices and market data |
| 5 | Any screen not tied to one eligible investor uses the delayed price, labelled as delayed | Product review |
| 6 | Prices are shown as best bid, best offer and last sale with their venues, not as a derived NBBO | Product review |
| 7 | EXPIRED_PRICE fetches a new price and prepares again, and the investor confirms the new price | Code review |
| 8 | The prepared transaction is signed unchanged, signed only (never broadcast by the wallet), and submitted within 120 seconds | Code review against Trade a stock |
| 9 | Each prepared transaction is submitted once; TRADE_IN_PROGRESS is never followed by a resubmission | Code review |
| 10 | The outcome is read from the transaction on chain, and a reverted order is shown as not executed | Code review |
| 11 | minOutputAmount is computed from the quote and the investor’s slippage, in base units | Code review against Working out minOutputAmount |
| 12 | The required disclosures are in your screens, placed as agreed; the best execution acknowledgement sits on the order confirmation | The compliance UI audit |
| 13 | The API key is only in your backend’s secret store, never in frontend code or logs | Secret scan |
| 14 | Every non-2xx response is logged with its status and message | Log review |