Repository navigation
Conversation
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. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Since claude wrote the code, I asked claude to review the PR:
|
…ing exposed flexure_set ran once per target, in parallel with the slew, so flexured computed the compensation from telescope telemetry read before or during the slew, for the previous pointing. It was never refreshed during an NEXP>1 series, or for a REPEAT, while the telescope tracks. flexure_set now runs for every exposure, unconditionally: - as each exposure is initiated, for every target, however it was acquired (automatically, by hand, or not at all) and after any target offset. After a slew, the slit move to the expose position covers it; - at each shutter close camerad reports (not a pause) that another sub-exposure of the expose command follows, until camerad is ready again. The shutter is closed between any two integrations, also with frame transfer; camerad's INREADOUT flag is not used, since with frame transfer two readouts can give it one rising edge; - for a REPEAT, once camera_set has seen the camera ready. When the telescope has not moved, flexured recomputes the positions the actuators already hold, so they do not move. Each set runs in a detached thread, in the std::thread( ..., this ).detach() form main uses for its other detached Sequence calls, and nothing waits for it. A failure is reported and no longer stops the sequence; flexure_set no longer throws, and after a cancel it no longer reports a set it skipped. camerad takes the flexure positions (FLEX_X/Y/Z) once, at the end of each exposure, instead of at its start: in each channel's readout thread, after the shutter has closed and before the readout. The compensation can change after an exposure starts, and with frame transfer while the next sub-exposure is already integrating. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
239adf5 to
3eb9e3a
Compare
|
Thanks for the review. Rewritten as one commit. Per finding: 1. The EXPOSE-wait gate was not needed; removed. The EXPOSE wait is unchanged. 2. INREADOUT edges fail with frame transfer: the next integration starts as soon as the transfer ends, so back-to-back readouts keep INREADOUT true and two readouts give one edge. The re-apply is made instead at each shutter close camerad reports (not a pause), the event that ends an integration. The shutter closes between every two integrations, also with frame transfer, so nothing merges. No progress strings are parsed, and nothing waits on it: a missed report skips one re-apply. 3. Telemetry check removed; flexured checks its own telemetry. 4-6. 7. 8. Normal squash merge. Worker + join alternative: the pointing is final only when the exposure is initiated. Acquisition can be manual, failed or off, and the telescope can still move after Not yet tested on sky in this form. Should not be on main until tested. A second Claude 'review' of this could be useful although likely to identify mostly non-issues (or even more useful at this stage, a human review). |
On main,
flexure_setruns in parallel with the slew, so flexure is compensated for the previous pointing, and it is never refreshed during an NEXP>1 series or for a REPEAT.flexure_setnow runs for every exposure, in a detached thread that nothing waits for:A flexured failure is broadcast and no longer stops the sequence. camerad records FLEX_X/Y/Z at the end of each exposure, with SHUTTIME, since the compensation can change after an exposure starts. An exposure shorter than the rest of the flexure actuator move (a 4-channel move takes 1.6 s) records the earlier positions; only a blocking compensation would avoid that.
Check: "flexure compensator set for ..." once per expose command, plus once per extra sub-exposure.
The previous version was tested on sky using branch cf/summit-20261030 on 2026-11-03 (20 re-applies between sub-exposures); this version is not yet tested on sky.
Jira: PAL-152.
🤖 Generated with Claude Code