The flag word
requestAction returns a flag word and emits it on
IntentRecorded before the pass/fail branch. Zero means the action
executed. Anything else means it was held, and each bit names the clause it is
written down as.
| Bit | Flag | Meaning | Clause |
|---|---|---|---|
| 0 | AGENT | Sender is not the agent this mandate names | — |
| 1 | PER_ACTION | Notional above the per-action cap | 2.1 |
| 2 | PAIR | Structural: the pair is enforced by measurement | 2.2 |
| 3 | VENUE | Target is unclassified for this owner | 2.3 |
| 4 | EXPIRY | Mandate expired | 2.4 |
| 5 | REVOKED | Mandate revoked by its owner | — |
| 6 | AGGREGATE | Epoch notional would cross the aggregate cap | 3.4 |
| 7 | RATE | Epoch action count would cross the limit | 3.5 |
| 8 | VENUE_CONC | Off-primary share would cross the bound | 3.7 |
| 9 | DEPTH | Structural: delegation depth refused at registration | — |
| 10 | RETURN | The agent asked for less back than the mandate requires | 2.5 |
PAIR and DEPTH are never raised. They exist in the word so
it is complete: the pair is enforced by measurement — the guard only approves the
mandate's tokenIn and only credits its tokenOut — and depth
by refusal at registration. TIER1_MASK and TIER2_MASK are
read from the contract rather than restated, so a screen and the guard cannot drift.
RETURN is tier 1 — what one action must give back is a property of that
action, not of the sequence it belongs to. It is raised before the venue is called, so
an agent that asks for a price the owner never accepted is held rather than executed.
The same floor is measured again after the venue answers, and that check has no
flag: value has already left, so it reverts rather than holding.