01
The limit is inclusive
Exactly $50.00 executes. Every comparison in the engine is a
greater-than, never a greater-than-or-equal, so an amount that
lands on a limit is inside it. $50.01 is the first amount that
holds. The ceiling behaves the same way: exactly $1,000.00 is
not denied — it is over the per-action limit, so it stops for
a person, and $1,000.01 is the first amount refused.
02
Nothing set is not the same as zero
A limit left unset means no limit. A limit of
0 means nothing is allowed.
A per-action limit of zero holds every payment including a
single cent; a hard ceiling of zero denies every one of them.
The same trap sits in the allowlist: unset lets anyone
through, and an empty list lets nobody through. Every check
compares against null explicitly, because a plain truthiness
test would read a zero as absent and quietly take the fence
down.
03
The cap is tested on spent plus this amount
Checking the running total on its own would let one request
walk straight through a cap it started the day under. So the
test is what the day would come to if this action executed.
With $1,950.00 already executed today, a $75.00 request is
refused outright — not held, because the cap is a deny rule
and deny rules run first:
04
The cap is per currency and never converts
Today's spend is summed for the currency in the request, so a
project with a $2,000.00 cap has one cap in US dollars and
another, independent one in euros. Two currencies mean two
fences, not one shared between them. That is a known
limitation of this build, written down here so it is not
mistaken for a bug and quietly fixed into something the daily
cap was never measured against.