At present a few Cylc 7 use cases are not currently possible at Cylc 8 or are technically possible, but difficult to action, or have little to no feedback via the user interfaces when actioned.
We have been addressing these limitations one at a time so far. However, since the remaining use cases/interventions overlap quite a bit it makes more sense to consider them in one go to ensure we have all bases covered, as changes to one proposal may mandate changes to another.
Most of the functionality issues which remain are around the cylc reset
command which provided a powerful and surprisingly intuitive interface for
performing a much broader range of interventions than it was initially designed
for including:
Here are the new proposals which will be referenced in the use-cases below.
Here follows a list of use cases which are either not currently possible, or awkward to action in Cylc 8.
If approved, this list of interventions should padded out with the more straight-forward cases and turned into a new section of the documentation. The proposals also open up new use cases which are not covered here but should also be documented.
Description:
Cylc 7 Intervention:
Proposed Intervention:
cylc remove <ids>
This will kill any active tasks, remove any waiting tasks from the pool and strip the specified flow numbers from any tasks, outputs and corresponding prerequisites of the selected tasks.
As the new intervention only requires one action it is not necessary to pause/resume the workflow although that may still be desired.
Description:
Cylc 7 Intervention:
Proposed Intervention:
cylc set <id> [--out=all]
Description:
Cylc 7 Intervention:
*.<cycle>
to succeeded.*.<cycle>
to expired and manually trigger downstream tasks as
required.Proposed Intervention:
cylc broadcast -p <cycle-glob> -n <namespace-glob> -s 'run mode = skip'
Description:
Cylc 7 Intervention:
Proposed Intervention:
cylc set <id> --out=failed
cylc remove <id>
Description:
Cylc 7 Intervention:
Proposed Intervention:
cylc set <id> --out=failed
Description:
Cylc 7 Intervention:
cylc broadcast
.This use case was not especially prevalent at Cylc 7 due to the limitations of suicide triggers but will likely become more common at Cylc 8 as switches currently embedded in task logic are elevated to the workflow level for better visibility/control/provenance/graph-interaction.
Proposed intervention:
cylc set <id> --out=<custom-output>,succeeded --wait
Description:
@clock => a => b
Cylc 7 Intervention:
Proposed Intervention:
cylc set <id> --pre=all
The cylc set
command sets prereqs/outputs and implicitly spawns tasks when
they are not yet present. In this case we want the task to spawn but have no
prerequisites to set.
Description:
Cylc 7 Intervention:
expired
output to action graph changes e.g.
via suicide triggers.Proposed Intervention:
This would need to come with the documented advice to use a single head-of-cycle task to detect expiry, then use graph branching to determine which tasks are run. This is a change for several Cylc 7 workflows which configure families or entire cycles of tasks to expire, as this approach will no longer work at Cylc 8, under this, or the previous proposal. However, having gone through the use cases, it would appear these cases could all be converted to use the new approach.
Description:
Cylc 7 Intervention:
Proposed Intervention:
In situations where users can easily list the start tasks of a cycle, I can trigger a new flow starting from these tasks. However, this is error prone and many users do not understand the graph structure of the workflow they are working on well enough. The list of start tasks may differ depending on the cycle and could be too long to type out.
This functionality is discussed/tracked in cylc-flow#5416, however, is sufficiently orthogonal to be omitted from this proposal pending future discussion :)
Open questions (to be resolved on #5416):
play
, trigger
, set
?