Issue #3608298: Follow a consumed branch-scoped link to its branch's current step (chain begins after the interactive node)

Follows on the visitor-facing dispatch: when a branch-scoped link's own step is consumed (a payment return, once the payment resumes the step), the link now follows its own branch to that branch's current step, instead of dead-ending on "Thank you. There is nothing for you to do right now."

Model change

A chain now begins after an interactive interaction (a chain resets on the children of an interactive node), so an interactive step is the tail of the chain it was reached in and its successors root the next chain. This groups "the aftermath of one interaction, up to and including the next interactive step" into one chain, so a consumed link's continuation is a lookup keyed on its own token's direct children.

Behaviour

InteractionController::step(), for a consumed branch-scoped link, resolves the branch continuation (InteractionResolver::branchContinuation(), parent = token OR chain IN (token's direct children)) and either:

  • dispatches the visitor to the branch's next interactive step (a second payment, a follow-up form), or
  • shows its render-only status (an "awaiting confirmation", a terminal end-node message) under the latest-plus-sticky rule.

It is anchored on the token's own children, so a sibling branch is never included (sibling-safe by lineage). title() resolves the same current step, so the page is titled from it. The old_link_catch_up catch-up path is kept, now scoped to forwarding a link several interactive steps behind along its own lineage.

Tests

ChainTest: the new chain stamping (testChainStamping), the render-only status + title (testConsumedBranchLinkShowsOwnChainStatus), the interactive continuation / multi-payment dispatch (testConsumedBranchLinkDispatchesToNextInteractiveStep), and multi-step catch-up (testCatchUpForwardsStaleMultiStepLink). The parallel sibling-isolation test is unchanged and still green. Full interaction + webform + task kernel suites pass.

Verified live on a booking flow with a payment step: the post-payment page now shows the payment milestone and the awaiting-confirmation status, with the status step's own page title.

Docs

docs/interaction-chains.md updated for the new chain model and the branch-follow vs catch-up split.

Edited by Frank Mably

Merge request reports

Loading