CI for csaxs_bec / test (push) Successful in 3m10s
Queue-control "command job" changes: - Remove the "optimize_idgap" stub action (not commissioned, always a no-op) from both Flomni's and LamNI's action registry, and delete the now-dead TomoQueueMixin.optimize_idgap() method. - Fix the "move" action's device allow-list: "mokev" doesn't exist in the current device config at all -- the real energy device is "ccm_energy" (LamNI's copy already had this right). Also drop "ftray" (sample transfer tray), which was only ever there as a sim-testable move target. - Add a new "move_foptz_with_shift" action: moves foptz (the FZP optics-Z stage) and sets the compensating manual_shift_x/manual_shift_y in one atomic step. foptz is deliberately NOT in the plain move allow-list -- moving it shifts the aligned scan center (interferometer mirrors aren't perfectly parallel to the beam), so this is the only way to queue a foptz move, specifically so the compensating shift can never be forgotten. - The foptz target is validated against the device's real, live limits (not a hand-duplicated static number) both in the GUI spinbox's range and in the CLI's add-time validation, so a queued job can't raise when it executes unattended later; a defense-in-depth check also exists at execution time. Retargeted the e2e command-job tests from ftray to foptz (now the only sim-testable move-adjacent path) and updated the AI_docs testing/GUI-testing notes to match the new action set. Also fixes a pre-existing, unrelated broken import (plugins.omny.omny_general_tools -> plugins.OMNY_shared.omny_general_tools, already broken on main) in _bootstrap.py/test_tomo_queue.py/ test_tomo_queue_command_jobs.py that was blocking omny_e2e_tests collection entirely, needed to actually verify this change's own test rewrites. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NPZ9gzN2rt3wgiMnTKyrug