Fold the 2-BM hexapod, timing and piezo staff answers - #634
Merged
Conversation
The 2026-07-28 patch-panel trace (cora#245, cora#599) settled which FPGA output drives which piezo axis, and staff commit 2bm-docs a3aa6be0 corrected item_028's delay-PV axis comments in the same pass. CORA had recorded those comments faithfully and flagged the result as a cable-map contradiction. The contradiction was in the source, not the wiring: out2 is X and out3 is Y, as the cable map always said. The wires are therefore unchanged and only the delay-PV association moves, which is worth stating explicitly so the flag is not reinstated from a cached reading of the old page. Replace PIEZO-5 with PIEZO-6, which asks the one thing the doc fix cannot answer: whether the operator screen carries a stale annotation.
The camera leg is confirmed end to end (cora#599): PSO -> MUX2-1 -> GateDly1 -> outTrig -> FPGA out1 -> Oryx Line2. Rename the port camera_trigger_out to out1. The old name was an explicit placeholder standing in for the unknown channel, and the answer supplies it; out1 also reads as a peer of out2 and out3, which are already pin names. The staff answer suggested naming the port for the softGlue signal instead, but outTrig is what travels on the pin rather than the pin itself, so it is recorded as an annotation. Record the GateDly1 PV form verbatim. Its dot-separated record fields differ from the piezo legs' flat underscore names, so the three blocks are peers in function and not in form; deriving any of them from a template would invent a PV. They stay unregistered as Assets, since nothing needs to address a gate-delay block by identity. TIME-1 needs no fold: cora#598 is a duplicate of cora#271, whose answer is already in beamline.yaml and the settings table. Correct the two places that still called the gateware version pending, and keep the box's output-channel count unknown: three pins in use is not a count.
Staff confirmed decarlof/2bmb-bin as the current production source on 2026-07-28 (cora#592-597), which settles the enable PVs, IOC scripts and host, PDU and outlet, reboot timings, and the over-travel lockup route. Every cited constant was re-read from the script before folding. Pin the citation to commit 372285c6 rather than HEAD. A record that points at a moving ref stops being a record the next time the file changes, and that commit is the last to touch it, dated to match the deployed copy staff compared against. Retire the Y-dial caution. The manual post-reboot correction it described is no longer performed; the coordinate convention behind it becomes calibration state on the hexapod instead, which is where a dial-to-user offset belongs. item_050 still documents the old step pending a staff-side edit, so say so on the page: the next reader to reconcile the two should not restore the caution from the stale source. Do not claim a homing postcondition for the recipe. The pinned script contains no homing step and neither IOC wrapper does, so whatever re-homes the axes was not part of what HXP-7 certified. HXP-9 asks what it is; the fact is recorded, the postcondition is not. Add the headless-invocation blocker HXP-4 exposed. Both IOC wrappers open a gnome-terminal tab and ssh interactively, so an executor cannot call them as written and will have to reach the launcher they wrap.
Folding HXP-7 exposed a citation that could not stay true: the hexapod recipe sourced PVs, scripts, timings and an outlet from a link to blob/HEAD. A HEAD link means "whatever is there now", so every value read from that file would silently stop matching its own citation the next time the script changed, with nothing to notice. The fix is not to pin every link. A navigational link wants the moving ref, and pinning one sends the reader to a stale page. The rule that actually separates the two cases is whether CORA is repeating a claim: a record whose provenance means "whatever that file says now" is not a record, while "see the staff page" is fine unpinned. Apply it to the MCTOptics citation, which is the other deployment-doc case where an external file supplies recorded values. Verified the file at the pinned commit before citing it, per the rule's own last line: a wrong pin is worse than a moving one, because it looks checked.
xmap
force-pushed
the
worktree-fold-2bm-hxp-time-piezo
branch
from
August 9, 2026 18:56
42319fe to
54fe0b5
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Folds the eight 2-BM staff answers that had been sitting unread, and fixes what checking them turned up. Closes cora#592, cora#593, cora#594, cora#595, cora#596, cora#597, cora#599 and cora#245; cora#598 was a duplicate of cora#271 and closed as one.
Every cited constant was re-read from source before folding:
hexapod_reboot.pyat the pinned commit, both IOC wrappers, and the two docs2bm pages. The answers were accurate. Three of them still could not be folded as written.PIEZO-5: the cross was in the source, not the wiring
CORA had recorded the two gate-delay PVs with their axes reversed and flagged the result as a contradiction with the cable map. Staff traced the cables on 2026-07-28 and the same pass corrected
item_028itself (2bm-docsa3aa6be0): the axis comments were wrong,out2is X andout3is Y as the cable map always said. So the wires are unchanged and only the delay-PV association moves. The page says that explicitly, because a future reader working from a cached copy of the old page would otherwise reinstate the flag. The chain is now recorded per axis, so the PV, pin, signal and controller IP cannot drift apart again.HXP-8: the Y-dial caution goes, the homing postcondition does not arrive
The manual post-reboot dial correction is obsolete, so the Caution is removed and the convention it described (
user = dial home + OFFSET, Y at 350 / -350) becomes calibration state on the hexapod, recorded without a unit because the source gives none.What is deliberately absent is a homing postcondition on the recipe. The pinned reboot script contains no homing step and neither IOC wrapper does, so whatever re-homes the axes was not part of what HXP-7 certified. Until it is named (new question HXP-9) the recipe records the convention but claims no homed hexapod as its own outcome.
item_050still carries the old instruction pending a staff-side edit, so the page states that it is out of date rather than leaving the two sources to be reconciled by whoever reads them next.HXP-4: a correct confirmation that CORA cannot act on
The IOC script names and host are confirmed. Both wrappers also open a
gnome-terminaltab and runssh -tinteractively, so no headless executor can invoke them; the callable surface is the2bmHXP.pllauncher they wrap. The recipe keeps the wrapper names, because they are what an operator runs, and gains the gap as a listed blocker.Citations
Folding HXP-7 exposed a
blob/HEADcitation that could not stay true, since every value read from that script would silently stop matching its source on the next edit. The rule added toconventions.mdis not "pin everything": a navigational link wants the moving ref, and the test is whether CORA is repeating a claim. Applied to the MCTOptics citation, verified at the pinned commit first.Also
camera_trigger_outrenamedout1, which was the fold (the old name was an explicit placeholder for the unknown channel).outTrigis recorded as the signal on the pin, not as the port name. Gate-delay blocks stay unregistered as Assets; nothing needs to address one by identity.pdu_a/pdu_bselector carried into the model.Staff questions go 33 rows to 27. Two new: HXP-9 (what homes the hexapod) and PIEZO-6 (whether the operator screen carries a stale axis annotation).
Verified:
mkdocs build --strictclean,test_2bm_trigger_wiring.pypasses after the rename, no dangling references to any retired question ID.