Issue #3615625: Unlock the order from the payment step's own timeout instead of a separate workflow node
The shipped workflow drew an Unlock the order step with no lock step anywhere to match it. The lock is taken inside the payment step when the payer is handed off, and OrderLockSubscriber brackets that round-trip: it locks on the handoff and unlocks on any outcome that took no money. So the unlock was already the step's own work, and the node was half of that bracket leaked onto the diagram.
The payment step now uses orchestra's payment_lapsed timeout action (#3615627), which makes the payment lapse for real so the release rides on the payment's own event. The Unlock the order node is gone.
It also fixes a routing bug. PaymentWorkflowBridge resumes a lapsed checkout with expired, but the step's flows routed on timeout, which only the node's own resume action ever produced. A checkout lapsing the ordinary way, through the reaper, therefore resumed the step with an outcome no flow matched, which orchestra reports as a dead end. The lapse edge now routes on expired.
The basket window is asked for, not carried
Also in here, because orchestra #3615634 made a node's deadline a plugin: the form step's deadline was until: yoyaku_hold_expires, a process variable written once by a variables step at the start. The window belongs to the order and a booker who adds a place moves it, so that value went stale, and the model had to route every road back to the wait through that step purely to rewrite it.
yoyaku_basket_deadline is a deadline provider that asks the order as the step parks. So:
- the Read the basket window step is deleted, and both roads back from payment return straight to the form
- the
yoyaku_hold_expiresvariable provider is deleted with it, having no consumer left - a step woken on a window the booker has since extended is asked again rather than left with no deadline, which the old one-shot
untilcould not do
This requires orchestra 1.x at or past !396, which drops duration/until/anchor in favour of deadline + deadline_settings. All five timeouts in the workflow are converted: the form to yoyaku_basket_deadline, the payment backstop to relative, and the cancellation and guarantee windows to absolute.
Tests: PaymentLapsePathShapeTest pins the shape in the shipped config (no step unlocks the order, the step lapses in place, both roads return to the form, no step recomputes the window, the form's deadline is the provider). Four of its tests were checked to fail against the unedited workflow. RejectionPathShapeTest carried a comment describing the removed node, now corrected. Docs and the French translation updated.
Deploy note: merging this must be paired with importing the workflow config on any site running it — orchestra !396 is already merged, so a site that pulls orchestra without this change has five timeouts resolving no deadline.