Problem

AbsoluteDeadline::validateConfigurationForm() and RelativeDeadline::validateConfigurationForm() read their field as $form_state->getValue($form['until']['#parents'] ?? ['until']) (and the same for offset and duration). The only host that calls them is the timeout editor, Timeout::validateEditor(), through InnerPluginSettingsTrait::validateInnerSettings(), which hands the plugin a SubformState. A subform state's getValues() is already the slice under the subform's own #parents, so asking it for the element's absolute parents (nodes, n_x, timeout, deadline_settings, until) looks those keys up inside the slice and finds nothing. The value read is always the empty string, and empty is accepted by both providers, so the refusals ("Enter an absolute date...", "Enter a duration...") never fire on any real form.

TimeoutJoin::validateConfigurationForm() states the correct rule two directories over: a subform state's getValue() is relative to the subform, so the key is the field's own name.

Steps to reproduce

In the Complete modeler, give a wait node a relative timeout with the duration tomorrowish, or an absolute one with the date whenever, and save. The workflow saves. At run time the task parks with no deadline and the log says the value resolves to nothing usable (Troubleshooting documents that symptom for configuration imports, which is the one door it was meant to arrive through).

The existing NodeFeatureEditorTest::testRelativeDeadlineRejectsInvalidDuration does not see it because it builds a plain FormState with #parents = ['duration'], so the absolute path and the relative one are the same there.

Proposed resolution

Read the field's own key, as TimeoutJoin does. Test through Timeout::validateEditor() with the element parents the modeler really uses, for both providers, so the test fails without the fix; rewrite the existing direct test the same way rather than keep a shape no host produces.

AI disclosure: this issue was drafted by Claude Code from an automated file-by-file audit of the module; the code and tests in the merge request are written by Claude Code, with the affected test classes run locally and the whole suite run by the project pipeline. The maintainer reviews and merges.

Issue fork orchestra-3624690

Command icon Show commands

Start within a Git clone of the project using the version control instructions.

Or, if you do not have SSH keys set up on git.drupalcode.org:

Comments

mably created an issue. See original summary.

mably’s picture

Status: Active » Needs review

  • mably committed 74e97efe on 1.x
    fix: #3624690 The deadline providers refuse nothing in the modeler:...
mably’s picture

Status: Needs review » Fixed

Now that this issue is closed, review the contribution record.

As a contributor, attribute any organization that helped you, or if you volunteered your own time.

Maintainers, credit people who helped resolve this issue.

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.