CI for csaxs_bec / test (push) Failing after 41s
Three changes, all driven by what the camera actually did. info.cgi must not carry the session id -------------------------------------- Hardware run on 2026-08-17: get_camera_info() succeeded but every position lookup raised "axis 'pan' (c.1.pan) not in info.cgi response". Bare info.cgi returns the full ~32 kB device state; `info.cgi?s=<id>` returns only the session-scoped `s.*` subset -- which contains s.hardware and s.firmware, so identity worked while nothing under c.1.* existed. The session parameter is now omitted for info.cgi (and open.cgi, as before); control CGIs still carry it. This is what unblocks Stages 2 and 3. Drop the mjpeg acquisition mode ------------------------------- The CR-N300 implements no MJPEG operator -- nphMotionJpeg, GetLiveImage and the rest all answer "Unknown Operator" -- so the mode could never have produced a frame here. Removed rather than left as a config value that silently does nothing: ACQUISITION_MODES is now (jpeg_poll, jpeg_on_demand), and MJPEGHttpSource, the stream_url key and DEFAULT_STREAM_CGI go with it. Re-adding a streaming mode means writing one FrameSource; the worker, ring buffer and grab API are indifferent to how frames arrive. The JPEG path is 1280x720 at up to 12.5 fps (w.3); 4K is H.264-only, so nobody should expect full-resolution frames through the grab API. acquisition_check.py -- the Stage 7 tool ----------------------------------------- Drives the production acquisition path (SingleJpegPollSource + StreamWorker + FrameRingBuffer) and reports establishment time, achieved rate, measured bandwidth, grab latency and -- with --decode -- a real cv2 decode with its resolution. Standard-library only and runnable from a copied canon/ directory, like probe.py, so it works before BEC is installed on a beamline machine. It is read-only, which means **Stage 7 does not depend on Stage 4**: the whole acquisition path can be closed with the camera still on the bench, waiting to be mounted. COMMISSIONING gains this as step 7.0b. Tests: 86. New coverage for the sessionless info.cgi (regression for the exact hardware failure), mjpeg now being rejected at construction, and the Stage 7 tool end-to-end against the mock camera including its non-zero exit when nothing answers. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>