Reference
Safety model
›
Motion-cleanup invariant (v3.7.5): every LLM-callable motion tool that starts an actuator must guarantee a finally-block stop on every code path that starts motion.
A static validator (check_motion_cleanup) runs on user-dir generated adapters at load time, refusing any with an unbounded motion path. The 12 registered SunFounder tools each keep their own try/finally stop(). The full chain:
| Version | Protection |
|---|---|
| v3.7.5 | Motion-cleanup invariant + static validator; atexit emergency-stop |
| v3.7.7 | Bounded default durations; unconditional steering recenter in finally |
| v3.7.9 | Neutralize robot_hat audio sudo path before init |
| v3.7.10 | _SudoBlocker intercepts every shell-out and blocks sudo |
| v3.7.11–12 | Release GPIO and retry Picarx() on any "GPIO busy" error |
| v3.9.0 | _GLOBAL_STOP + _MOTOR_LOCK across parallel workers |
The v3.9.3 continuous-motion primitives are skill-internal (never registered as tools), so the LLM can't select them and the invariant holds; their only caller wraps them in a try/finally that always stops the motor.
