Issue #3606607: Fix the webform back-button booking loop

Fixes the webform back-button booking loop. Three root causes, one flow:

  • Resume by node, not a fixed token id. When the flow re-enters the form node with a fresh token (a loop, e.g. a step routing "back" to the form), the reopened submission still names the original, now-consumed token. OrchestraResumeHandler now resumes the token parked on that node now (InteractionResolver::parkedTokenAtNode()), so a re-submit after going back advances instead of looping on the form.
  • The binding element now forces prepopulation. Webform tracks an element for prepopulation from its stored #prepopulate property, not the plugin default property (which only seeds the element-edit form), so the orchestra_interaction element never captured the capability token from the dispatcher link. Forcing it in initialize() makes the element genuinely zero-config.
  • Visitor outcomes (back, cancel) resume in one click. The signed capability token in the link is the gate, so the confirmation form is removed: InteractionController::signal() verifies the token, checks the outcome is one the parked step allows, and resumes immediately.

Adds a functional test driving the full dispatcher to webform to resume to back to resubmit path over HTTP, plus kernel coverage of the loop re-entry and the one-click signal action.

Merge request reports

Loading
Loading