Suicided triggers were needed in Cylc 7 and earlier to remove pre-spawned waiting tasks from graph branches not taken at runtime, which would stall the workflow.
However, Cylc 8 does not need suicide triggers for graph branching.
They remain supported, and documented, for backward compatibility and for a rare edge case.
They are activated just like normal task triggers but
they remove the downstream task (prefixed with
!) instead of triggering it
Here, the task
bar will be removed if
foo => !bar
Suicide triggers combine in the same way as normal triggers, so this graph:
foo => !baz bar => !baz
is equivalent to this:
foo & bar => !baz
bar must succeed for
baz to be removed.
To remove a task after any one of several events, use an OR operator:
foo | bar => !baz
There’s no point removing tasks that are not in the
In Cylc 8 all waiting tasks in front of the active window are virtual and don’t need to be “removed”
The only non-virtual waiting tasks in Cylc 8 are those actively waiting on an external trigger; these might need to be removed if they will never run
Remaining Use Case
Suicide triggers may be needed to remove an active-waiting task when it can be inferred from the status of another task that the external trigger will never be satisfied.
In the following example imagine that the two xtriggers watch two locations for the same file to appear. The file will be delivered to one location or the other but not to both, so if one xtrigger is satisfied the other will never be. The stuck waiting task can be removed with a suicide trigger, so that it doesn’t stall the workflow:
@xtrigger1 => A @xtrigger2 => B A => !B # If A succeeds, remove B B => !A # If B succeeds, remove A