Issue #3608397: Surface live workflow context as Drupal messages via context_display, replacing the stored feedback prefill
Closes #3608397 on drupal.org: https://www.drupal.org/project/orchestra/issues/3608397
The operator viewing a submission saw an old "request changes" note instead of the current reviewer comment: the comment was only ever surfaced by freezing it into a stored submission element at prefill time, so every later viewer read a stale copy, and view mode had no display path at all.
Rework, replacing the mechanism outright (pre-release, no compat):
- New context_display setting on WebformInteraction: a list of {variable, label, severity} entries. Each resolves the variable's CURRENT value (dotted paths reach into structured values, e.g. validation.comment) and posts it as a Drupal message (status/warning/error), so it reaches the actor in view mode and on every page of a wizard form, under both doorways. Values are always read live from the instance, never stored into the submission.
- The request that completes the step withdraws its own messages (ContextMessages::retract() from the handler resume), so the note shows on every visit and reload until the resubmit, and never flashes onto the confirmation page after it.
- feedback_variable / feedback_element and the examples' frozen "Reviewer feedback" element are removed.
- New InteractionResolver::declaredInteractionOn(): metadata-only resolution that also reads the interaction_task shape, so the webform handler can find a task step's context_display; the dispatch-guarding interactionOn() is untouched.
- The dispatcher's untitled-page fallback now follows the outcome: "Continue" only when dispatching a step to act on, "Status" over untitled status messages, "Thank you" over the finished and nothing-to-do pages.
Example workflow upgrades (both request-validation variants), so the shipped examples model the full journey:
- The validation decision is recorded at token scope: each round keeps its decision on its own consumed token as history while downstream steps read the current round through the lineage.
- The validate and process steps carry titled render-only status messages ("Awaiting validation", "Being processed"), so a poster re-clicking their consumed modify link sees where the request stands instead of the neutral page.
- old_link_catch_up is enabled, so a stale link whose run moved into another chain follows it to the current status.
Tests: new ContextMessagesTest kernel coverage (dotted paths, severity fallback, sanitizing config-shaped entries, branch-scoped resolution); the title fallbacks are covered in InteractionAccessTest; RequestValidationTest drives the full regression end to end over HTTP in both doorways: the poster sees the changes note on every wizard page and on reload until the resubmit, the confirmation page does not repeat it, the stale link then shows the titled validation/processing statuses, and the processor sees the current approval comment, not the stale note.
Verified: webform + interaction kernel suites, the examples Functional suite in Docker, phpcs, cspell, plus manual end-to-end validation on a live site.