v1.3.1
Changed
- Behavior change: the consent gate is opt-in and off by default again.
policy.auto_approve_notionalreverts to its pre-1.3.0 semantics - the default
0now disables the gate, soplace_order/close_position/
modify_orderauto-execute (full-open) with no approval step. Set
auto_approve_notional> 0 to arm the gate: orders/closes at or above that
notional then require human approval, and widening or removing a stop does too.
This reverses the 1.3.0 fail-closed default, which broke unattended agents that
expected orders to execute. The pre-flight limits (max_*) and symbol
allow/deny lists remain opt-in (0/ empty = off), as before.
Added
- A startup
WARNING(both transports) when the consent gate is off
(auto_approve_notional<= 0), so the fail-open posture is visible in the logs.
Mirrors the existing empty-auth_tokenwarning.
Fixed
place_order(priced / pending orders) andmodify_order(widening or removing
a stop) no longer turn a quote outage into anINTERNAL_ERRORwhen the consent
gate is armed. If approval is required but no live tick is available to render
the preview, they now refuse gracefully withSYMBOL_NOT_ENABLED(mirroring
close_position);modify_orderalso falls back to the position's last-known
price for widening detection during the outage.- Corrected the
doctor --smoke-tradehint when the gate is armed: to run the
smoke order you raiseauto_approve_notionalabove it (or set0), not lower it.
Upgrade note
If you relied on 1.3.0's fail-closed default to force approval on every trade,
you must now set auto_approve_notional > 0 explicitly to keep that behavior;
otherwise mutating calls execute without an approval step.