Repository navigation
acamd: the deliberate-offset allowance may be consumed only by the correction that used it (wrong-object exposure, stacked on #484) - #488
Conversation
…rrection that used it An offsetgoal that lands while an ordinary guide correction's blocking pt_offset is in flight had its allowance cleared by that correction's post-send store(false); the science offset was then refused against the 60" cap and the exposure was taken on the offset star (UT 2026-10-06 09:10:41, ZTF26abydudp). Latch the allowance into `large` when the cap is chosen and clear it only when `large` is true, at both consume sites. Stacked on #484 (same block).
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b92e042768
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| // offset_goal armed while that correction's blocking pt_offset was still | ||
| // in flight (UT 2026-10-06 09:10:41, ZTF26abydudp: armed at .026, | ||
| // cleared at .031, the 136" science offset refused against 60"). | ||
| const bool large = this->allow_large_offset.load(); |
There was a problem hiding this comment.
Tie the allowance to the goal generation
If offset_goal updates acam_goal and arms the flag after ra_off/offset were calculated but before this load, the stale ordinary correction is incorrectly classified as large; it can be sent under the expanded cap and then clear the allowance at line 3704. The next iteration computes the actual deliberate science offset without its allowance, so an offset above 60″ is rejected and exposure can remain on the offset star. A boolean snapshot cannot associate an allowance with the goal that created it; this needs synchronization or a generation/token captured alongside the goal.
Useful? React with 👍 / 👎.
|
Withdrawn: a boolean snapshot cannot bind the allowance to the goal that armed it (see review), and the complete fix is a goal-generation token rather than a one-line change. The defect and trace stay in Jira PAL-171 for the acamd owner. |
Problem (one sentence): an
offsetgoalthat lands while an ordinary guide correction's blockingpt_offsetis still in flight has its large-offset allowance cleared by that correction's post-sendstore(false), so the science offset is then refused against the 60″ guide cap and the exposure is taken on the offset star.Trace, UT 2026-10-06, ZTF26abydudp (acamd + tcsd logs):
The 136″ star→target offset was armed at .026 and consumed at .031 by the 0.14″ correction that was already being sent; the telescope never moved and 09:10:50–09:14:12 exposed the star.
Fix: latch the allowance into
largewhen the cap is chosen and clear it only whenlargeis true, at both consume sites (send and reject). A correction decided under the ordinary cap can no longer clear an allowance armed during its send. Stacked on #484, which fixes the other race on the same flag (the mode gate); base isfix/deliberate-offset-cap, retarget tomainonce #484 merges.