Cylc trigger --flow=new question about pre-reqs

I’ve asked similar questions before, but I wanted to see if there were any changes with recent updates or plans for future upgrades in this area.

When you trigger a new flow, and there are cross cycle pre-reqs, is there a way to automatically satisfy them?

e.g. with a simple workflow. This workflow will stall.

$ cat flow.cylc
[scheduler]
    allow implicit tasks = True
[scheduling]
    initial cycle point = 20250916T06
    runahead limit = P2

    [[graph]]
        T06, T18 = """
            @wall_clock => a_0
            b_0[-PT12H] => a_0 & b_0
            a_0 => b_0

        """
[runtime]
    [[a_0]]
        script = true
    [[b_0]]
        script = if [[ ${CYLC_TASK_CYCLE_POINT} == '20250917T0600Z' ]]; then cylc trigger --flow=new $CYLC_WORKFLOW_NAME //20250917T0600Z/a_0; fi

$ cylc show basic-workflow//20250917T0600Z/b_0
title: (not given)
description: (not given)
URL: (not given)
state: waiting
flows: [2]
prerequisites: ('⨯': not satisfied)
  ✓ 20250917T0600Z/a_0 succeeded
  ⨯ 20250916T1800Z/b_0 succeeded
...

Without manual intervention (or programming in logic to either know all cross-cycle pre-reqs or figure them out dynamically), 20250917T0600Z/b_0 will never be able to run. I had tried things like cylc set -p //20250916T1800Z/*:succeeded basic-workflow //20250917T0600Z/* but Cylc didn’t like that

2025-09-18T00:54:54Z WARNING - Invalid prerequisite task name:
    Illegal task name: *

It would be useful to be able to be able to do something like

# Trigger a new flow and Cylc auto-sets any prereqs from previous cycles which were satisfied for the previous flow
cylc trigger --flow-new --auto-set-old-cycle-prereq basic-workflow //20250917T0600Z/a_0

OR

# Trigger new flow and then set, for all tasks in the current cycle, including ones not in n=0 window, all prereqs from the previous cycle
cylc trigger --flow-new basic-workflow //20250917T0600Z/a_0
cylc set -p '//20250916T1800Z/*:succeeded' basic-workflow '//20250917T0600Z/*

Hi @TomC

Prerequisites always have to be satisfied within a self-consistent flow (otherwise all hell would break loose) and in general Cylc can’t tell if a given unsatisfied prerequisite should get satisfied later in the same flow or not - so it would be dangerous to automatically satisfy prerequisites like that.

However, cylc trigger improvements in 8.5 have this covered:

cylc trigger <group-of-tasks>

This means: run these tasks now, respecting dependencies within the group and automatically satisfying off-group prerequisites.

Make sure the group is big enough to encompass all off-group prerequisites because they only get detected and automatically satisfied for tasks in the group.
But the group could be as big as every task in an entire cycle if you need that.

NOTE:

  • Globs will match tasks beyond the active (n=0) window from Cylc 8.6 (to be released this week or next); until then you may need to give the individual task ID of every group member in the trigger command.
  • Since 8.4, cylc remove erases the run history of past tasks, to make it look as if they never ran (so they can run again in the same flow); and since 8.5 cylc trigger does a remove of target tasks - so now you can usually rerun stuff without triggering a new flow.