From 0b0a643b53afd0d352a5747e2f2a35c8ff44d3ac Mon Sep 17 00:00:00 2001 From: Christoffer Fremling Date: Wed, 26 Aug 2026 04:08:02 -0700 Subject: [PATCH] acamd: the deliberate-offset allowance must not be gated on TARGET_GUIDE A deliberate goal offset (put-on-slit, offset-star, the end-of-fineacquire target offset) is correct by construction; the mode gate made the offset command race the guide-mode transition. Measured on sky 2026-08-26 10:37 UT (ZTF26abicncn): the 72 arcsec science offset arrived 6 ms after fine-acquire convergence, the loop was not yet in TARGET_GUIDE, the armed allowance was ignored, and the offset was refused five times against the 60 arcsec guide cap ('calculated offset 72.2476 not below max 60 and will not be sent to the TCS') -- the guide loop then died and 900 s were exposed at the star pointing. Every same-night offset above 60 arcsec whose command landed seconds (not ms) after convergence executed normally. The allowance is one-shot and consumed on use or rejection, so honoring it regardless of mode adds no exposure to bad-solution guiding corrections, which remain capped at ACQUIRE_TCS_MAX_OFFSET. --- acamd/acam_interface.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/acamd/acam_interface.cpp b/acamd/acam_interface.cpp index f3a0daf1..e1c1808e 100644 --- a/acamd/acam_interface.cpp +++ b/acamd/acam_interface.cpp @@ -3644,7 +3644,10 @@ logwrite( function, message.str() ); // and is unaffected. // double maxoffset = this->tcs_max_offset; - if ( this->acquire_mode == Acam::TARGET_GUIDE && this->allow_large_offset.load() ) { + if ( this->allow_large_offset.load() ) { + // A deliberate goal offset is correct by construction and must not + // be capped as a guide correction, whatever mode the loop is in + // when the correction lands. maxoffset = this->tcs_max_putonslit_offset; }