CI for csaxs_bec / test (push) Successful in 1m57s
_oshield_is_ST_open() reads a digital switch (@IN[8014]) on otransx's Galil controller to confirm the sample-stage thermal shield reached its physical "open" limit -- but oshield is a Smaract stage, simulated by a completely separate simulator (sim_smaract.py), so that switch had no connection to oshield's actual simulated position and always read a stale default. sim_galil.py's @IN[8014] handler now computes the switch value live from oshield's real position via SimStateRegistry (cross-simulator lookup), instead of a disconnected default -- 1.0 within tolerance of the "open" target (-11.88, _oshield_ST_open()'s own umv() target), 0.0 otherwise. Also fixes oshield's simulated starting position: it started at 0 (neither the "open" -11.88 nor "closed" 15.5), so _otransfer_stage_to_ST()'s oshield_current < 15 closed-check always failed fresh. Now starts at 15.5, matching the real idle/closed resting state. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018Mupip8x7Hean6E3FFvpbj