task: #3614495 Make taking the holds off the clock an explicit workflow step, instead of imposing it on every workflow from the starter
Closes #3614495
BookingWorkflowStarter took every held line off the clock for any workflow that drove an order, in code and unconditionally. That imposed a policy no workflow asked for, and it was invisible in the model, which is why it was easy to forget it happened at all.
Now the workflow says so, with a step:
yoyaku_suspend_holdsaction (SuspendHolds), placed first in the shipped booking workflow. It takes the lines off the clock and records the claim as ayoyaku_holds_suspendedinstance variable.WorkflowHoldOwnershipreads that variable rather than merely asking whether an instance is running, so a line held later (the basket stays editable) is suspended like its siblings. That is what stops an order carrying a mixture of lines with and without a deadline.- The starter no longer suspends anything. A workflow that wants yoyaku's per-resource basket expiry to keep running simply omits the step: one that confirms straight away, one that only asks an operator to approve a resource whose holds never lapse anyway, one that runs after placement when nothing is held.
The docs advertised this step all along (docs/orchestra.md listed a Suspend row beside Hold, Extend, Confirm and Release) and it was never built. Corrected, and the ownership rule is now written down with it.
Nothing crosses the layering: yoyaku announces that a line was held and knows nothing of workflows; this module, the one that depends on Orchestra, answers whether a run has claimed the order.
Tests were run against the unfixed code and seen to fail first, including a new one asserting the opt-out (a workflow without the step leaves the clock running, for lines added later too). The shipped workflow config is the diagram as saved from the modeler, so the auto-generated Flow_* ids in the embedded BPMN are regenerated; the config-level flow keys are unchanged. Whole yoyaku_orchestra suite green, including RejectionPathShapeTest and MinimumAgeTest which assert against that config.