]]
__WORKFLOW__
-run_ok "${TEST_NAME_BASE}-12" cylc validate "flow.cylc"
-cylc graph --reference 'flow.cylc' >'12.graph'
+run_ok "${TEST_NAME_BASE}-12" cylc validate .
+cylc graph --reference . >'12.graph'
cmp_ok "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/12.graph.ref" '12.graph'
# Parameter with various meta characters
@@ -258,8 +258,8 @@ cat >'flow.cylc' <<'__WORKFLOW__'
[[foo]]
[[bar
]]
__WORKFLOW__
-run_ok "${TEST_NAME_BASE}-13" cylc validate "flow.cylc"
-cylc graph --reference 'flow.cylc' >'13.graph'
+run_ok "${TEST_NAME_BASE}-13" cylc validate .
+cylc graph --reference . >'13.graph'
cmp_ok "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/13.graph.ref" '13.graph'
# Parameter as task name
@@ -280,8 +280,8 @@ foo => => bar
[[foo, bar, , ]]
script = true
__WORKFLOW__
-run_ok "${TEST_NAME_BASE}-14" cylc validate "flow.cylc"
-cylc graph --reference 'flow.cylc' >'14.graph'
+run_ok "${TEST_NAME_BASE}-14" cylc validate .
+cylc graph --reference . >'14.graph'
cmp_ok "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/14.graph.ref" '14.graph'
# Parameter in middle of family name
@@ -297,8 +297,8 @@ cat >'flow.cylc' <<'__WORKFLOW__'
[[xy]]
inherit = XY
__WORKFLOW__
-run_ok "${TEST_NAME_BASE}-15" cylc validate "flow.cylc"
-cylc graph --reference --group="" 'flow.cylc' >'15.graph'
+run_ok "${TEST_NAME_BASE}-15" cylc validate .
+cylc graph --reference --group="" . >'15.graph'
cmp_ok "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/15.graph.ref" '15.graph'
# -ve offset on RHS
@@ -313,8 +313,8 @@ cat >'flow.cylc' <<'__WORKFLOW__'
script = true
[[foo]]
__WORKFLOW__
-run_ok "${TEST_NAME_BASE}-16" cylc validate "flow.cylc"
-cylc graph --reference 'flow.cylc' >'16.graph'
+run_ok "${TEST_NAME_BASE}-16" cylc validate .
+cylc graph --reference . >'16.graph'
cmp_ok "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/16.graph.ref" '16.graph'
# +ve offset
@@ -329,8 +329,8 @@ cat >'flow.cylc' <<'__WORKFLOW__'
script = true
[[foo]]
__WORKFLOW__
-run_ok "${TEST_NAME_BASE}-17" cylc validate "flow.cylc"
-cylc graph --reference 'flow.cylc' >'17.graph'
+run_ok "${TEST_NAME_BASE}-17" cylc validate .
+cylc graph --reference . >'17.graph'
cmp_ok "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/17.graph.ref" '17.graph'
# Negative integers
@@ -345,8 +345,8 @@ cat >'flow.cylc' <<'__WORKFLOW__'
script = true
[[foo]]
__WORKFLOW__
-run_ok "${TEST_NAME_BASE}-18" cylc validate "flow.cylc"
-cylc graph --reference 'flow.cylc' >'18.graph'
+run_ok "${TEST_NAME_BASE}-18" cylc validate .
+cylc graph --reference . >'18.graph'
cmp_ok "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/18.graph.ref" '18.graph'
# Reference by value, with -+ meta characters
@@ -368,13 +368,13 @@ cat >'flow.cylc' <<'__WORKFLOW__'
[[[environment]]]
FC = gfortran
__WORKFLOW__
-run_ok "${TEST_NAME_BASE}-19" cylc validate --debug "flow.cylc"
-cylc graph --reference 'flow.cylc' >'19.graph'
+run_ok "${TEST_NAME_BASE}-19" cylc validate --debug .
+cylc graph --reference . >'19.graph'
cmp_ok "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/19.graph.ref" '19.graph'
# Note: This also demonstrates current badness of "cylc config"...
# Inconsistence between graph/runtime whitespace handling.
# Inconsistence between graph/runtime parameter expansion.
-cylc config 'flow.cylc' >'19.cylc'
+cylc config . >'19.cylc'
cmp_ok '19.cylc' <<'__FLOW_CONFIG__'
[task parameters]
lang = c++, fortran-2008
diff --git a/tests/functional/param_expand/01-basic/01.graph.ref b/tests/functional/param_expand/01-basic/01.graph.ref
index 7fec74b765c..3c8e9f9b237 100644
--- a/tests/functional/param_expand/01-basic/01.graph.ref
+++ b/tests/functional/param_expand/01-basic/01.graph.ref
@@ -1,48 +1,48 @@
-edge "foo_cat.1" "bar_j1.1"
-edge "foo_cat.1" "bar_j2.1"
-edge "foo_cat.1" "bar_j3.1"
-edge "foo_cat.1" "bar_j4.1"
-edge "foo_cat.1" "bar_j5.1"
-edge "foo_dog.1" "bar_j1.1"
-edge "foo_dog.1" "bar_j2.1"
-edge "foo_dog.1" "bar_j3.1"
-edge "foo_dog.1" "bar_j4.1"
-edge "foo_dog.1" "bar_j5.1"
-edge "foo_fish.1" "bar_j1.1"
-edge "foo_fish.1" "bar_j2.1"
-edge "foo_fish.1" "bar_j3.1"
-edge "foo_fish.1" "bar_j4.1"
-edge "foo_fish.1" "bar_j5.1"
-edge "qux_j1.1" "waz_k1.1"
-edge "qux_j1.1" "waz_k5.1"
-edge "qux_j1.1" "waz_k9.1"
-edge "qux_j2.1" "waz_k1.1"
-edge "qux_j2.1" "waz_k5.1"
-edge "qux_j2.1" "waz_k9.1"
-edge "qux_j3.1" "waz_k1.1"
-edge "qux_j3.1" "waz_k5.1"
-edge "qux_j3.1" "waz_k9.1"
-edge "qux_j4.1" "waz_k1.1"
-edge "qux_j4.1" "waz_k5.1"
-edge "qux_j4.1" "waz_k9.1"
-edge "qux_j5.1" "waz_k1.1"
-edge "qux_j5.1" "waz_k5.1"
-edge "qux_j5.1" "waz_k9.1"
+edge "1/foo_cat" "1/bar_j1"
+edge "1/foo_cat" "1/bar_j2"
+edge "1/foo_cat" "1/bar_j3"
+edge "1/foo_cat" "1/bar_j4"
+edge "1/foo_cat" "1/bar_j5"
+edge "1/foo_dog" "1/bar_j1"
+edge "1/foo_dog" "1/bar_j2"
+edge "1/foo_dog" "1/bar_j3"
+edge "1/foo_dog" "1/bar_j4"
+edge "1/foo_dog" "1/bar_j5"
+edge "1/foo_fish" "1/bar_j1"
+edge "1/foo_fish" "1/bar_j2"
+edge "1/foo_fish" "1/bar_j3"
+edge "1/foo_fish" "1/bar_j4"
+edge "1/foo_fish" "1/bar_j5"
+edge "1/qux_j1" "1/waz_k1"
+edge "1/qux_j1" "1/waz_k5"
+edge "1/qux_j1" "1/waz_k9"
+edge "1/qux_j2" "1/waz_k1"
+edge "1/qux_j2" "1/waz_k5"
+edge "1/qux_j2" "1/waz_k9"
+edge "1/qux_j3" "1/waz_k1"
+edge "1/qux_j3" "1/waz_k5"
+edge "1/qux_j3" "1/waz_k9"
+edge "1/qux_j4" "1/waz_k1"
+edge "1/qux_j4" "1/waz_k5"
+edge "1/qux_j4" "1/waz_k9"
+edge "1/qux_j5" "1/waz_k1"
+edge "1/qux_j5" "1/waz_k5"
+edge "1/qux_j5" "1/waz_k9"
graph
-node "bar_j1.1" "bar_j1\n1"
-node "bar_j2.1" "bar_j2\n1"
-node "bar_j3.1" "bar_j3\n1"
-node "bar_j4.1" "bar_j4\n1"
-node "bar_j5.1" "bar_j5\n1"
-node "foo_cat.1" "foo_cat\n1"
-node "foo_dog.1" "foo_dog\n1"
-node "foo_fish.1" "foo_fish\n1"
-node "qux_j1.1" "qux_j1\n1"
-node "qux_j2.1" "qux_j2\n1"
-node "qux_j3.1" "qux_j3\n1"
-node "qux_j4.1" "qux_j4\n1"
-node "qux_j5.1" "qux_j5\n1"
-node "waz_k1.1" "waz_k1\n1"
-node "waz_k5.1" "waz_k5\n1"
-node "waz_k9.1" "waz_k9\n1"
+node "1/bar_j1" "bar_j1\n1"
+node "1/bar_j2" "bar_j2\n1"
+node "1/bar_j3" "bar_j3\n1"
+node "1/bar_j4" "bar_j4\n1"
+node "1/bar_j5" "bar_j5\n1"
+node "1/foo_cat" "foo_cat\n1"
+node "1/foo_dog" "foo_dog\n1"
+node "1/foo_fish" "foo_fish\n1"
+node "1/qux_j1" "qux_j1\n1"
+node "1/qux_j2" "qux_j2\n1"
+node "1/qux_j3" "qux_j3\n1"
+node "1/qux_j4" "qux_j4\n1"
+node "1/qux_j5" "qux_j5\n1"
+node "1/waz_k1" "waz_k1\n1"
+node "1/waz_k5" "waz_k5\n1"
+node "1/waz_k9" "waz_k9\n1"
stop
diff --git a/tests/functional/param_expand/01-basic/02.graph.ref b/tests/functional/param_expand/01-basic/02.graph.ref
index cd26f0f17a2..731ee9c94aa 100644
--- a/tests/functional/param_expand/01-basic/02.graph.ref
+++ b/tests/functional/param_expand/01-basic/02.graph.ref
@@ -1,41 +1,41 @@
-edge "foo_i001.1" "bar_i001.1"
-edge "foo_i002.1" "bar_i002.1"
-edge "foo_i003.1" "bar_i003.1"
-edge "foo_i004.1" "bar_i004.1"
-edge "foo_i005.1" "bar_i005.1"
-edge "foo_i025.1" "bar_i025.1"
-edge "foo_i030.1" "bar_i030.1"
-edge "foo_i031.1" "bar_i031.1"
-edge "foo_i032.1" "bar_i032.1"
-edge "foo_i033.1" "bar_i033.1"
-edge "foo_i034.1" "bar_i034.1"
-edge "foo_i035.1" "bar_i035.1"
-edge "foo_i110.1" "bar_i110.1"
+edge "1/foo_i001" "1/bar_i001"
+edge "1/foo_i002" "1/bar_i002"
+edge "1/foo_i003" "1/bar_i003"
+edge "1/foo_i004" "1/bar_i004"
+edge "1/foo_i005" "1/bar_i005"
+edge "1/foo_i025" "1/bar_i025"
+edge "1/foo_i030" "1/bar_i030"
+edge "1/foo_i031" "1/bar_i031"
+edge "1/foo_i032" "1/bar_i032"
+edge "1/foo_i033" "1/bar_i033"
+edge "1/foo_i034" "1/bar_i034"
+edge "1/foo_i035" "1/bar_i035"
+edge "1/foo_i110" "1/bar_i110"
graph
-node "bar_i001.1" "bar_i001\n1"
-node "bar_i002.1" "bar_i002\n1"
-node "bar_i003.1" "bar_i003\n1"
-node "bar_i004.1" "bar_i004\n1"
-node "bar_i005.1" "bar_i005\n1"
-node "bar_i025.1" "bar_i025\n1"
-node "bar_i030.1" "bar_i030\n1"
-node "bar_i031.1" "bar_i031\n1"
-node "bar_i032.1" "bar_i032\n1"
-node "bar_i033.1" "bar_i033\n1"
-node "bar_i034.1" "bar_i034\n1"
-node "bar_i035.1" "bar_i035\n1"
-node "bar_i110.1" "bar_i110\n1"
-node "foo_i001.1" "foo_i001\n1"
-node "foo_i002.1" "foo_i002\n1"
-node "foo_i003.1" "foo_i003\n1"
-node "foo_i004.1" "foo_i004\n1"
-node "foo_i005.1" "foo_i005\n1"
-node "foo_i025.1" "foo_i025\n1"
-node "foo_i030.1" "foo_i030\n1"
-node "foo_i031.1" "foo_i031\n1"
-node "foo_i032.1" "foo_i032\n1"
-node "foo_i033.1" "foo_i033\n1"
-node "foo_i034.1" "foo_i034\n1"
-node "foo_i035.1" "foo_i035\n1"
-node "foo_i110.1" "foo_i110\n1"
+node "1/bar_i001" "bar_i001\n1"
+node "1/bar_i002" "bar_i002\n1"
+node "1/bar_i003" "bar_i003\n1"
+node "1/bar_i004" "bar_i004\n1"
+node "1/bar_i005" "bar_i005\n1"
+node "1/bar_i025" "bar_i025\n1"
+node "1/bar_i030" "bar_i030\n1"
+node "1/bar_i031" "bar_i031\n1"
+node "1/bar_i032" "bar_i032\n1"
+node "1/bar_i033" "bar_i033\n1"
+node "1/bar_i034" "bar_i034\n1"
+node "1/bar_i035" "bar_i035\n1"
+node "1/bar_i110" "bar_i110\n1"
+node "1/foo_i001" "foo_i001\n1"
+node "1/foo_i002" "foo_i002\n1"
+node "1/foo_i003" "foo_i003\n1"
+node "1/foo_i004" "foo_i004\n1"
+node "1/foo_i005" "foo_i005\n1"
+node "1/foo_i025" "foo_i025\n1"
+node "1/foo_i030" "foo_i030\n1"
+node "1/foo_i031" "foo_i031\n1"
+node "1/foo_i032" "foo_i032\n1"
+node "1/foo_i033" "foo_i033\n1"
+node "1/foo_i034" "foo_i034\n1"
+node "1/foo_i035" "foo_i035\n1"
+node "1/foo_i110" "foo_i110\n1"
stop
diff --git a/tests/functional/param_expand/01-basic/03.graph.ref b/tests/functional/param_expand/01-basic/03.graph.ref
index 12d5f21eb07..59812789986 100644
--- a/tests/functional/param_expand/01-basic/03.graph.ref
+++ b/tests/functional/param_expand/01-basic/03.graph.ref
@@ -1,8 +1,8 @@
-edge "foo_a-t.1" "bar_a-t.1"
-edge "foo_c-g.1" "bar_c-g.1"
+edge "1/foo_a-t" "1/bar_a-t"
+edge "1/foo_c-g" "1/bar_c-g"
graph
-node "bar_a-t.1" "bar_a-t\n1"
-node "bar_c-g.1" "bar_c-g\n1"
-node "foo_a-t.1" "foo_a-t\n1"
-node "foo_c-g.1" "foo_c-g\n1"
+node "1/bar_a-t" "bar_a-t\n1"
+node "1/bar_c-g" "bar_c-g\n1"
+node "1/foo_a-t" "foo_a-t\n1"
+node "1/foo_c-g" "foo_c-g\n1"
stop
diff --git a/tests/functional/param_expand/01-basic/04.graph.ref b/tests/functional/param_expand/01-basic/04.graph.ref
index 6859458fc06..82f94b55fed 100644
--- a/tests/functional/param_expand/01-basic/04.graph.ref
+++ b/tests/functional/param_expand/01-basic/04.graph.ref
@@ -1,14 +1,14 @@
-edge "foo_100.1" "bar_100.1"
-edge "foo_99+1.1" "bar_99+1.1"
-edge "foo_hundred.1" "bar_hundred.1"
-edge "foo_one-hundred.1" "bar_one-hundred.1"
+edge "1/foo_100" "1/bar_100"
+edge "1/foo_99+1" "1/bar_99+1"
+edge "1/foo_hundred" "1/bar_hundred"
+edge "1/foo_one-hundred" "1/bar_one-hundred"
graph
-node "bar_100.1" "bar_100\n1"
-node "bar_99+1.1" "bar_99+1\n1"
-node "bar_hundred.1" "bar_hundred\n1"
-node "bar_one-hundred.1" "bar_one-hundred\n1"
-node "foo_100.1" "foo_100\n1"
-node "foo_99+1.1" "foo_99+1\n1"
-node "foo_hundred.1" "foo_hundred\n1"
-node "foo_one-hundred.1" "foo_one-hundred\n1"
+node "1/bar_100" "bar_100\n1"
+node "1/bar_99+1" "bar_99+1\n1"
+node "1/bar_hundred" "bar_hundred\n1"
+node "1/bar_one-hundred" "bar_one-hundred\n1"
+node "1/foo_100" "foo_100\n1"
+node "1/foo_99+1" "foo_99+1\n1"
+node "1/foo_hundred" "foo_hundred\n1"
+node "1/foo_one-hundred" "foo_one-hundred\n1"
stop
diff --git a/tests/functional/param_expand/01-basic/07.graph.ref b/tests/functional/param_expand/01-basic/07.graph.ref
index 953be36130f..41b1e03342d 100644
--- a/tests/functional/param_expand/01-basic/07.graph.ref
+++ b/tests/functional/param_expand/01-basic/07.graph.ref
@@ -1,8 +1,8 @@
-edge "foo_a.1" "bar_a.1"
-edge "foo_b.1" "bar_b.1"
+edge "1/foo_a" "1/bar_a"
+edge "1/foo_b" "1/bar_b"
graph
-node "bar_a.1" "bar_a\n1"
-node "bar_b.1" "bar_b\n1"
-node "foo_a.1" "foo_a\n1"
-node "foo_b.1" "foo_b\n1"
+node "1/bar_a" "bar_a\n1"
+node "1/bar_b" "bar_b\n1"
+node "1/foo_a" "foo_a\n1"
+node "1/foo_b" "foo_b\n1"
stop
diff --git a/tests/functional/param_expand/01-basic/11.graph.ref b/tests/functional/param_expand/01-basic/11.graph.ref
index bbfa56095a7..466a029dc15 100644
--- a/tests/functional/param_expand/01-basic/11.graph.ref
+++ b/tests/functional/param_expand/01-basic/11.graph.ref
@@ -1,17 +1,17 @@
-edge "foo@001.1" "bar@001.1"
-edge "foo@002.1" "bar@002.1"
-edge "foo@003.1" "bar@003.1"
-edge "foo@004.1" "bar@004.1"
-edge "foo@005.1" "bar@005.1"
+edge "1/foo@001" "1/bar@001"
+edge "1/foo@002" "1/bar@002"
+edge "1/foo@003" "1/bar@003"
+edge "1/foo@004" "1/bar@004"
+edge "1/foo@005" "1/bar@005"
graph
-node "bar@001.1" "bar@001\n1"
-node "bar@002.1" "bar@002\n1"
-node "bar@003.1" "bar@003\n1"
-node "bar@004.1" "bar@004\n1"
-node "bar@005.1" "bar@005\n1"
-node "foo@001.1" "foo@001\n1"
-node "foo@002.1" "foo@002\n1"
-node "foo@003.1" "foo@003\n1"
-node "foo@004.1" "foo@004\n1"
-node "foo@005.1" "foo@005\n1"
+node "1/bar@001" "bar@001\n1"
+node "1/bar@002" "bar@002\n1"
+node "1/bar@003" "bar@003\n1"
+node "1/bar@004" "bar@004\n1"
+node "1/bar@005" "bar@005\n1"
+node "1/foo@001" "foo@001\n1"
+node "1/foo@002" "foo@002\n1"
+node "1/foo@003" "foo@003\n1"
+node "1/foo@004" "foo@004\n1"
+node "1/foo@005" "foo@005\n1"
stop
diff --git a/tests/functional/param_expand/01-basic/12.graph.ref b/tests/functional/param_expand/01-basic/12.graph.ref
index 7a74f468675..5669d46ecfa 100644
--- a/tests/functional/param_expand/01-basic/12.graph.ref
+++ b/tests/functional/param_expand/01-basic/12.graph.ref
@@ -1,17 +1,17 @@
-edge "foo+%j001.1" "bar+%j001.1"
-edge "foo+%j002.1" "bar+%j002.1"
-edge "foo+%j003.1" "bar+%j003.1"
-edge "foo+%j004.1" "bar+%j004.1"
-edge "foo+%j005.1" "bar+%j005.1"
+edge "1/foo+%j001" "1/bar+%j001"
+edge "1/foo+%j002" "1/bar+%j002"
+edge "1/foo+%j003" "1/bar+%j003"
+edge "1/foo+%j004" "1/bar+%j004"
+edge "1/foo+%j005" "1/bar+%j005"
graph
-node "bar+%j001.1" "bar+%j001\n1"
-node "bar+%j002.1" "bar+%j002\n1"
-node "bar+%j003.1" "bar+%j003\n1"
-node "bar+%j004.1" "bar+%j004\n1"
-node "bar+%j005.1" "bar+%j005\n1"
-node "foo+%j001.1" "foo+%j001\n1"
-node "foo+%j002.1" "foo+%j002\n1"
-node "foo+%j003.1" "foo+%j003\n1"
-node "foo+%j004.1" "foo+%j004\n1"
-node "foo+%j005.1" "foo+%j005\n1"
+node "1/bar+%j001" "bar+%j001\n1"
+node "1/bar+%j002" "bar+%j002\n1"
+node "1/bar+%j003" "bar+%j003\n1"
+node "1/bar+%j004" "bar+%j004\n1"
+node "1/bar+%j005" "bar+%j005\n1"
+node "1/foo+%j001" "foo+%j001\n1"
+node "1/foo+%j002" "foo+%j002\n1"
+node "1/foo+%j003" "foo+%j003\n1"
+node "1/foo+%j004" "foo+%j004\n1"
+node "1/foo+%j005" "foo+%j005\n1"
stop
diff --git a/tests/functional/param_expand/01-basic/13.graph.ref b/tests/functional/param_expand/01-basic/13.graph.ref
index bc5a0c6954c..9655cdc3979 100644
--- a/tests/functional/param_expand/01-basic/13.graph.ref
+++ b/tests/functional/param_expand/01-basic/13.graph.ref
@@ -1,14 +1,14 @@
-edge "foo%percent.1" "bar%percent.1"
-edge "foo+plus.1" "bar+plus.1"
-edge "foo-minus.1" "bar-minus.1"
-edge "foo@at.1" "bar@at.1"
+edge "1/foo%percent" "1/bar%percent"
+edge "1/foo+plus" "1/bar+plus"
+edge "1/foo-minus" "1/bar-minus"
+edge "1/foo@at" "1/bar@at"
graph
-node "bar%percent.1" "bar%percent\n1"
-node "bar+plus.1" "bar+plus\n1"
-node "bar-minus.1" "bar-minus\n1"
-node "bar@at.1" "bar@at\n1"
-node "foo%percent.1" "foo%percent\n1"
-node "foo+plus.1" "foo+plus\n1"
-node "foo-minus.1" "foo-minus\n1"
-node "foo@at.1" "foo@at\n1"
+node "1/bar%percent" "bar%percent\n1"
+node "1/bar+plus" "bar+plus\n1"
+node "1/bar-minus" "bar-minus\n1"
+node "1/bar@at" "bar@at\n1"
+node "1/foo%percent" "foo%percent\n1"
+node "1/foo+plus" "foo+plus\n1"
+node "1/foo-minus" "foo-minus\n1"
+node "1/foo@at" "foo@at\n1"
stop
diff --git a/tests/functional/param_expand/01-basic/14.graph.ref b/tests/functional/param_expand/01-basic/14.graph.ref
index 12e080652b8..6f76cc7d68d 100644
--- a/tests/functional/param_expand/01-basic/14.graph.ref
+++ b/tests/functional/param_expand/01-basic/14.graph.ref
@@ -1,25 +1,25 @@
-edge "earth.1" "bar.1"
-edge "foo.1" "earth.1"
-edge "foo.1" "i0.1"
-edge "foo.1" "i1.1"
-edge "foo.1" "i2.1"
-edge "foo.1" "mars.1"
-edge "foo.1" "mercury.1"
-edge "foo.1" "venus.1"
-edge "i0.1" "bar.1"
-edge "i1.1" "bar.1"
-edge "i2.1" "bar.1"
-edge "mars.1" "bar.1"
-edge "mercury.1" "bar.1"
-edge "venus.1" "bar.1"
+edge "1/earth" "1/bar"
+edge "1/foo" "1/earth"
+edge "1/foo" "1/i0"
+edge "1/foo" "1/i1"
+edge "1/foo" "1/i2"
+edge "1/foo" "1/mars"
+edge "1/foo" "1/mercury"
+edge "1/foo" "1/venus"
+edge "1/i0" "1/bar"
+edge "1/i1" "1/bar"
+edge "1/i2" "1/bar"
+edge "1/mars" "1/bar"
+edge "1/mercury" "1/bar"
+edge "1/venus" "1/bar"
graph
-node "bar.1" "bar\n1"
-node "earth.1" "earth\n1"
-node "foo.1" "foo\n1"
-node "i0.1" "i0\n1"
-node "i1.1" "i1\n1"
-node "i2.1" "i2\n1"
-node "mars.1" "mars\n1"
-node "mercury.1" "mercury\n1"
-node "venus.1" "venus\n1"
+node "1/bar" "bar\n1"
+node "1/earth" "earth\n1"
+node "1/foo" "foo\n1"
+node "1/i0" "i0\n1"
+node "1/i1" "i1\n1"
+node "1/i2" "i2\n1"
+node "1/mars" "mars\n1"
+node "1/mercury" "mercury\n1"
+node "1/venus" "venus\n1"
stop
diff --git a/tests/functional/param_expand/01-basic/15.graph.ref b/tests/functional/param_expand/01-basic/15.graph.ref
index 53a1990a727..2db2a98fb35 100644
--- a/tests/functional/param_expand/01-basic/15.graph.ref
+++ b/tests/functional/param_expand/01-basic/15.graph.ref
@@ -1,6 +1,6 @@
graph
-node "X_earthY.1" "X_earthY\n1"
-node "X_marsY.1" "X_marsY\n1"
-node "X_mercuryY.1" "X_mercuryY\n1"
-node "X_venusY.1" "X_venusY\n1"
+node "1/X_earthY" "X_earthY\n1"
+node "1/X_marsY" "X_marsY\n1"
+node "1/X_mercuryY" "X_mercuryY\n1"
+node "1/X_venusY" "X_venusY\n1"
stop
diff --git a/tests/functional/param_expand/01-basic/16.graph.ref b/tests/functional/param_expand/01-basic/16.graph.ref
index 6bfaf0c6e49..9472ff8883e 100644
--- a/tests/functional/param_expand/01-basic/16.graph.ref
+++ b/tests/functional/param_expand/01-basic/16.graph.ref
@@ -1,5 +1,5 @@
-edge "foo_dog.1" "foo_cat.1"
+edge "1/foo_dog" "1/foo_cat"
graph
-node "foo_cat.1" "foo_cat\n1"
-node "foo_dog.1" "foo_dog\n1"
+node "1/foo_cat" "foo_cat\n1"
+node "1/foo_dog" "foo_dog\n1"
stop
diff --git a/tests/functional/param_expand/01-basic/17.graph.ref b/tests/functional/param_expand/01-basic/17.graph.ref
index b489c9316a9..b7647de3ed3 100644
--- a/tests/functional/param_expand/01-basic/17.graph.ref
+++ b/tests/functional/param_expand/01-basic/17.graph.ref
@@ -1,5 +1,5 @@
-edge "foo_cat.1" "foo_dog.1"
+edge "1/foo_cat" "1/foo_dog"
graph
-node "foo_cat.1" "foo_cat\n1"
-node "foo_dog.1" "foo_dog\n1"
+node "1/foo_cat" "foo_cat\n1"
+node "1/foo_dog" "foo_dog\n1"
stop
diff --git a/tests/functional/param_expand/01-basic/18.graph.ref b/tests/functional/param_expand/01-basic/18.graph.ref
index e38c2934335..5a6813fe72e 100644
--- a/tests/functional/param_expand/01-basic/18.graph.ref
+++ b/tests/functional/param_expand/01-basic/18.graph.ref
@@ -1,7 +1,7 @@
graph
-node "foo_m+00.1" "foo_m+00\n1"
-node "foo_m+06.1" "foo_m+06\n1"
-node "foo_m+12.1" "foo_m+12\n1"
-node "foo_m-06.1" "foo_m-06\n1"
-node "foo_m-12.1" "foo_m-12\n1"
+node "1/foo_m+00" "foo_m+00\n1"
+node "1/foo_m+06" "foo_m+06\n1"
+node "1/foo_m+12" "foo_m+12\n1"
+node "1/foo_m-06" "foo_m-06\n1"
+node "1/foo_m-12" "foo_m-12\n1"
stop
diff --git a/tests/functional/param_expand/01-basic/19.graph.ref b/tests/functional/param_expand/01-basic/19.graph.ref
index 2e83ef196d8..b45e815304f 100644
--- a/tests/functional/param_expand/01-basic/19.graph.ref
+++ b/tests/functional/param_expand/01-basic/19.graph.ref
@@ -1,5 +1,5 @@
-edge "c++.1" "fortran-2008.1"
+edge "1/c++" "1/fortran-2008"
graph
-node "c++.1" "c++\n1"
-node "fortran-2008.1" "fortran-2008\n1"
+node "1/c++" "c++\n1"
+node "1/fortran-2008" "fortran-2008\n1"
stop
diff --git a/tests/functional/param_expand/02-param_val.t b/tests/functional/param_expand/02-param_val.t
index b186770fcb9..6e92a646a62 100644
--- a/tests/functional/param_expand/02-param_val.t
+++ b/tests/functional/param_expand/02-param_val.t
@@ -41,15 +41,15 @@ __WORKFLOW__
TNAME=${TEST_NAME_BASE}-1
# validate
-run_ok "${TNAME}" cylc validate "flow.cylc"
+run_ok "${TNAME}" cylc validate .
# family graph
-graph_workflow "flow.cylc" "${TNAME}-graph-fam" --group=""
+graph_workflow . "${TNAME}-graph-fam" --group=""
cmp_ok "${TNAME}-graph-fam" "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/graph-fam-1.ref"
# task graph
-graph_workflow "flow.cylc" "${TNAME}-graph-exp"
+graph_workflow . "${TNAME}-graph-exp"
cmp_ok "${TNAME}-graph-exp" "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/graph-exp-1.ref"
# inheritance graph
-graph_workflow "flow.cylc" "${TNAME}-graph-nam" -n
+graph_workflow . "${TNAME}-graph-nam" -n
cmp_ok "${TNAME}-graph-nam" "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/graph-nam-1.ref"
#------------------------------------------------------------------------------
@@ -73,15 +73,15 @@ __WORKFLOW__
TNAME=${TEST_NAME_BASE}-2
# validate
-run_ok "${TNAME}" cylc validate "flow.cylc"
+run_ok "${TNAME}" cylc validate .
# family graph
-graph_workflow "flow.cylc" "${TNAME}-graph-fam" "--group="
+graph_workflow . "${TNAME}-graph-fam" "--group="
cmp_ok "${TNAME}-graph-fam" "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/graph-fam-1.ref"
# task graph
-graph_workflow "flow.cylc" "${TNAME}-graph-exp"
+graph_workflow . "${TNAME}-graph-exp"
cmp_ok "${TNAME}-graph-exp" "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/graph-exp-1.ref"
# inheritance graph
-graph_workflow "flow.cylc" "${TNAME}-graph-nam" -n
+graph_workflow . "${TNAME}-graph-nam" -n
cmp_ok "${TNAME}-graph-nam" "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/graph-nam-1.ref"
#------------------------------------------------------------------------------
@@ -106,15 +106,15 @@ __WORKFLOW__
TNAME=${TEST_NAME_BASE}-3
# validate
-run_ok "${TNAME}" cylc validate "flow.cylc"
+run_ok "${TNAME}" cylc validate .
# family graph
-graph_workflow "flow.cylc" "${TNAME}-graph-fam" "--group="
+graph_workflow . "${TNAME}-graph-fam" "--group="
cmp_ok "${TNAME}-graph-fam" "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/graph-fam-1.ref"
# task graph
-graph_workflow "flow.cylc" "${TNAME}-graph-exp"
+graph_workflow . "${TNAME}-graph-exp"
cmp_ok "${TNAME}-graph-exp" "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/graph-exp-1.ref"
# inheritance graph
-graph_workflow "flow.cylc" "${TNAME}-graph-nam" -n
+graph_workflow . "${TNAME}-graph-nam" -n
cmp_ok "${TNAME}-graph-nam" "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/graph-nam-1.ref"
#------------------------------------------------------------------------------
@@ -138,15 +138,15 @@ __WORKFLOW__
TNAME=${TEST_NAME_BASE}-4
# validate
-run_ok "${TNAME}" cylc validate "flow.cylc"
+run_ok "${TNAME}" cylc validate .
# family graph
-graph_workflow "flow.cylc" "${TNAME}-graph-fam" "--group="
+graph_workflow . "${TNAME}-graph-fam" "--group="
cmp_ok "${TNAME}-graph-fam" "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/graph-fam-b.ref"
# task graph
-graph_workflow "flow.cylc" "${TNAME}-graph-exp"
+graph_workflow . "${TNAME}-graph-exp"
cmp_ok "${TNAME}-graph-exp" "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/graph-exp-b.ref"
# inheritance graph
-graph_workflow "flow.cylc" "${TNAME}-graph-nam" -n
+graph_workflow . "${TNAME}-graph-nam" -n
cmp_ok "${TNAME}-graph-nam" "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/graph-nam-b.ref"
#------------------------------------------------------------------------------
@@ -170,7 +170,7 @@ cat >'flow.cylc' <<'__WORKFLOW__'
inherit = "FAM" # OK (plain task can inherit from specific params)
__WORKFLOW__
-run_ok "${TEST_NAME_BASE}-5" cylc validate "flow.cylc"
+run_ok "${TEST_NAME_BASE}-5" cylc validate .
#------------------------------------------------------------------------------
cat >'flow.cylc' <<'__WORKFLOW__'
@@ -189,8 +189,8 @@ cat >'flow.cylc' <<'__WORKFLOW__'
inherit = BAR, BAZ
__WORKFLOW__
-run_ok "${TEST_NAME_BASE}-6" cylc validate 'flow.cylc'
-cylc graph --reference 'flow.cylc' 1>'06.graph'
+run_ok "${TEST_NAME_BASE}-6" cylc validate .
+cylc graph --reference . 1>'06.graph'
cmp_ok '06.graph' "${TEST_SOURCE_DIR}/${TEST_NAME_BASE}/06.graph.ref"
#------------------------------------------------------------------------------
@@ -213,7 +213,7 @@ cat >'flow.cylc' <<'__WORKFLOW__'
__WORKFLOW__
TNAME=${TEST_NAME_BASE}-err-1
-run_fail "${TNAME}" cylc validate "flow.cylc"
+run_fail "${TNAME}" cylc validate .
cmp_ok "${TNAME}.stderr" - << __ERR__
ParamExpandError: illegal value 'i=frog' in 'inherit = FAM'
__ERR__
@@ -240,7 +240,7 @@ cat >'flow.cylc' <<'__WORKFLOW__'
__WORKFLOW__
TNAME="${TEST_NAME_BASE}-err-2"
-run_fail "${TNAME}" cylc validate "flow.cylc"
+run_fail "${TNAME}" cylc validate .
cmp_ok "${TNAME}.stderr" - << __ERR__
ParamExpandError: parameter 'i' undefined in 'inherit = FAM'
__ERR__
diff --git a/tests/functional/param_expand/02-param_val/06.graph.ref b/tests/functional/param_expand/02-param_val/06.graph.ref
index b37c5447205..11459c71ea5 100644
--- a/tests/functional/param_expand/02-param_val/06.graph.ref
+++ b/tests/functional/param_expand/02-param_val/06.graph.ref
@@ -1,33 +1,33 @@
-edge "foo.1" "bar_cat_baz_j1.1"
-edge "foo.1" "bar_cat_baz_j2.1"
-edge "foo.1" "bar_cat_baz_j3.1"
-edge "foo.1" "bar_cat_baz_j4.1"
-edge "foo.1" "bar_cat_baz_j5.1"
-edge "foo.1" "bar_dog_baz_j1.1"
-edge "foo.1" "bar_dog_baz_j2.1"
-edge "foo.1" "bar_dog_baz_j3.1"
-edge "foo.1" "bar_dog_baz_j4.1"
-edge "foo.1" "bar_dog_baz_j5.1"
-edge "foo.1" "bar_fish_baz_j1.1"
-edge "foo.1" "bar_fish_baz_j2.1"
-edge "foo.1" "bar_fish_baz_j3.1"
-edge "foo.1" "bar_fish_baz_j4.1"
-edge "foo.1" "bar_fish_baz_j5.1"
+edge "1/foo" "1/bar_cat_baz_j1"
+edge "1/foo" "1/bar_cat_baz_j2"
+edge "1/foo" "1/bar_cat_baz_j3"
+edge "1/foo" "1/bar_cat_baz_j4"
+edge "1/foo" "1/bar_cat_baz_j5"
+edge "1/foo" "1/bar_dog_baz_j1"
+edge "1/foo" "1/bar_dog_baz_j2"
+edge "1/foo" "1/bar_dog_baz_j3"
+edge "1/foo" "1/bar_dog_baz_j4"
+edge "1/foo" "1/bar_dog_baz_j5"
+edge "1/foo" "1/bar_fish_baz_j1"
+edge "1/foo" "1/bar_fish_baz_j2"
+edge "1/foo" "1/bar_fish_baz_j3"
+edge "1/foo" "1/bar_fish_baz_j4"
+edge "1/foo" "1/bar_fish_baz_j5"
graph
-node "bar_cat_baz_j1.1" "bar_cat_baz_j1\n1"
-node "bar_cat_baz_j2.1" "bar_cat_baz_j2\n1"
-node "bar_cat_baz_j3.1" "bar_cat_baz_j3\n1"
-node "bar_cat_baz_j4.1" "bar_cat_baz_j4\n1"
-node "bar_cat_baz_j5.1" "bar_cat_baz_j5\n1"
-node "bar_dog_baz_j1.1" "bar_dog_baz_j1\n1"
-node "bar_dog_baz_j2.1" "bar_dog_baz_j2\n1"
-node "bar_dog_baz_j3.1" "bar_dog_baz_j3\n1"
-node "bar_dog_baz_j4.1" "bar_dog_baz_j4\n1"
-node "bar_dog_baz_j5.1" "bar_dog_baz_j5\n1"
-node "bar_fish_baz_j1.1" "bar_fish_baz_j1\n1"
-node "bar_fish_baz_j2.1" "bar_fish_baz_j2\n1"
-node "bar_fish_baz_j3.1" "bar_fish_baz_j3\n1"
-node "bar_fish_baz_j4.1" "bar_fish_baz_j4\n1"
-node "bar_fish_baz_j5.1" "bar_fish_baz_j5\n1"
-node "foo.1" "foo\n1"
+node "1/bar_cat_baz_j1" "bar_cat_baz_j1\n1"
+node "1/bar_cat_baz_j2" "bar_cat_baz_j2\n1"
+node "1/bar_cat_baz_j3" "bar_cat_baz_j3\n1"
+node "1/bar_cat_baz_j4" "bar_cat_baz_j4\n1"
+node "1/bar_cat_baz_j5" "bar_cat_baz_j5\n1"
+node "1/bar_dog_baz_j1" "bar_dog_baz_j1\n1"
+node "1/bar_dog_baz_j2" "bar_dog_baz_j2\n1"
+node "1/bar_dog_baz_j3" "bar_dog_baz_j3\n1"
+node "1/bar_dog_baz_j4" "bar_dog_baz_j4\n1"
+node "1/bar_dog_baz_j5" "bar_dog_baz_j5\n1"
+node "1/bar_fish_baz_j1" "bar_fish_baz_j1\n1"
+node "1/bar_fish_baz_j2" "bar_fish_baz_j2\n1"
+node "1/bar_fish_baz_j3" "bar_fish_baz_j3\n1"
+node "1/bar_fish_baz_j4" "bar_fish_baz_j4\n1"
+node "1/bar_fish_baz_j5" "bar_fish_baz_j5\n1"
+node "1/foo" "foo\n1"
stop
diff --git a/tests/functional/param_expand/02-param_val/graph-exp-1.ref b/tests/functional/param_expand/02-param_val/graph-exp-1.ref
index 792975c7888..fa6a5df3697 100644
--- a/tests/functional/param_expand/02-param_val/graph-exp-1.ref
+++ b/tests/functional/param_expand/02-param_val/graph-exp-1.ref
@@ -1,35 +1,35 @@
-edge "bar_cat_j3.1" "boo.1"
-edge "foo.1" "bar_cat_j1.1"
-edge "foo.1" "bar_cat_j2.1"
-edge "foo.1" "bar_cat_j3.1"
-edge "foo.1" "bar_cat_j4.1"
-edge "foo.1" "bar_cat_j5.1"
-edge "foo.1" "bar_dog_j1.1"
-edge "foo.1" "bar_dog_j2.1"
-edge "foo.1" "bar_dog_j3.1"
-edge "foo.1" "bar_dog_j4.1"
-edge "foo.1" "bar_dog_j5.1"
-edge "foo.1" "bar_fish_j1.1"
-edge "foo.1" "bar_fish_j2.1"
-edge "foo.1" "bar_fish_j3.1"
-edge "foo.1" "bar_fish_j4.1"
-edge "foo.1" "bar_fish_j5.1"
+edge "1/bar_cat_j3" "1/boo"
+edge "1/foo" "1/bar_cat_j1"
+edge "1/foo" "1/bar_cat_j2"
+edge "1/foo" "1/bar_cat_j3"
+edge "1/foo" "1/bar_cat_j4"
+edge "1/foo" "1/bar_cat_j5"
+edge "1/foo" "1/bar_dog_j1"
+edge "1/foo" "1/bar_dog_j2"
+edge "1/foo" "1/bar_dog_j3"
+edge "1/foo" "1/bar_dog_j4"
+edge "1/foo" "1/bar_dog_j5"
+edge "1/foo" "1/bar_fish_j1"
+edge "1/foo" "1/bar_fish_j2"
+edge "1/foo" "1/bar_fish_j3"
+edge "1/foo" "1/bar_fish_j4"
+edge "1/foo" "1/bar_fish_j5"
graph
-node "bar_cat_j1.1" "bar_cat_j1\n1"
-node "bar_cat_j2.1" "bar_cat_j2\n1"
-node "bar_cat_j3.1" "bar_cat_j3\n1"
-node "bar_cat_j4.1" "bar_cat_j4\n1"
-node "bar_cat_j5.1" "bar_cat_j5\n1"
-node "bar_dog_j1.1" "bar_dog_j1\n1"
-node "bar_dog_j2.1" "bar_dog_j2\n1"
-node "bar_dog_j3.1" "bar_dog_j3\n1"
-node "bar_dog_j4.1" "bar_dog_j4\n1"
-node "bar_dog_j5.1" "bar_dog_j5\n1"
-node "bar_fish_j1.1" "bar_fish_j1\n1"
-node "bar_fish_j2.1" "bar_fish_j2\n1"
-node "bar_fish_j3.1" "bar_fish_j3\n1"
-node "bar_fish_j4.1" "bar_fish_j4\n1"
-node "bar_fish_j5.1" "bar_fish_j5\n1"
-node "boo.1" "boo\n1"
-node "foo.1" "foo\n1"
+node "1/bar_cat_j1" "bar_cat_j1\n1"
+node "1/bar_cat_j2" "bar_cat_j2\n1"
+node "1/bar_cat_j3" "bar_cat_j3\n1"
+node "1/bar_cat_j4" "bar_cat_j4\n1"
+node "1/bar_cat_j5" "bar_cat_j5\n1"
+node "1/bar_dog_j1" "bar_dog_j1\n1"
+node "1/bar_dog_j2" "bar_dog_j2\n1"
+node "1/bar_dog_j3" "bar_dog_j3\n1"
+node "1/bar_dog_j4" "bar_dog_j4\n1"
+node "1/bar_dog_j5" "bar_dog_j5\n1"
+node "1/bar_fish_j1" "bar_fish_j1\n1"
+node "1/bar_fish_j2" "bar_fish_j2\n1"
+node "1/bar_fish_j3" "bar_fish_j3\n1"
+node "1/bar_fish_j4" "bar_fish_j4\n1"
+node "1/bar_fish_j5" "bar_fish_j5\n1"
+node "1/boo" "boo\n1"
+node "1/foo" "foo\n1"
stop
diff --git a/tests/functional/param_expand/02-param_val/graph-exp-b.ref b/tests/functional/param_expand/02-param_val/graph-exp-b.ref
index 792975c7888..fa6a5df3697 100644
--- a/tests/functional/param_expand/02-param_val/graph-exp-b.ref
+++ b/tests/functional/param_expand/02-param_val/graph-exp-b.ref
@@ -1,35 +1,35 @@
-edge "bar_cat_j3.1" "boo.1"
-edge "foo.1" "bar_cat_j1.1"
-edge "foo.1" "bar_cat_j2.1"
-edge "foo.1" "bar_cat_j3.1"
-edge "foo.1" "bar_cat_j4.1"
-edge "foo.1" "bar_cat_j5.1"
-edge "foo.1" "bar_dog_j1.1"
-edge "foo.1" "bar_dog_j2.1"
-edge "foo.1" "bar_dog_j3.1"
-edge "foo.1" "bar_dog_j4.1"
-edge "foo.1" "bar_dog_j5.1"
-edge "foo.1" "bar_fish_j1.1"
-edge "foo.1" "bar_fish_j2.1"
-edge "foo.1" "bar_fish_j3.1"
-edge "foo.1" "bar_fish_j4.1"
-edge "foo.1" "bar_fish_j5.1"
+edge "1/bar_cat_j3" "1/boo"
+edge "1/foo" "1/bar_cat_j1"
+edge "1/foo" "1/bar_cat_j2"
+edge "1/foo" "1/bar_cat_j3"
+edge "1/foo" "1/bar_cat_j4"
+edge "1/foo" "1/bar_cat_j5"
+edge "1/foo" "1/bar_dog_j1"
+edge "1/foo" "1/bar_dog_j2"
+edge "1/foo" "1/bar_dog_j3"
+edge "1/foo" "1/bar_dog_j4"
+edge "1/foo" "1/bar_dog_j5"
+edge "1/foo" "1/bar_fish_j1"
+edge "1/foo" "1/bar_fish_j2"
+edge "1/foo" "1/bar_fish_j3"
+edge "1/foo" "1/bar_fish_j4"
+edge "1/foo" "1/bar_fish_j5"
graph
-node "bar_cat_j1.1" "bar_cat_j1\n1"
-node "bar_cat_j2.1" "bar_cat_j2\n1"
-node "bar_cat_j3.1" "bar_cat_j3\n1"
-node "bar_cat_j4.1" "bar_cat_j4\n1"
-node "bar_cat_j5.1" "bar_cat_j5\n1"
-node "bar_dog_j1.1" "bar_dog_j1\n1"
-node "bar_dog_j2.1" "bar_dog_j2\n1"
-node "bar_dog_j3.1" "bar_dog_j3\n1"
-node "bar_dog_j4.1" "bar_dog_j4\n1"
-node "bar_dog_j5.1" "bar_dog_j5\n1"
-node "bar_fish_j1.1" "bar_fish_j1\n1"
-node "bar_fish_j2.1" "bar_fish_j2\n1"
-node "bar_fish_j3.1" "bar_fish_j3\n1"
-node "bar_fish_j4.1" "bar_fish_j4\n1"
-node "bar_fish_j5.1" "bar_fish_j5\n1"
-node "boo.1" "boo\n1"
-node "foo.1" "foo\n1"
+node "1/bar_cat_j1" "bar_cat_j1\n1"
+node "1/bar_cat_j2" "bar_cat_j2\n1"
+node "1/bar_cat_j3" "bar_cat_j3\n1"
+node "1/bar_cat_j4" "bar_cat_j4\n1"
+node "1/bar_cat_j5" "bar_cat_j5\n1"
+node "1/bar_dog_j1" "bar_dog_j1\n1"
+node "1/bar_dog_j2" "bar_dog_j2\n1"
+node "1/bar_dog_j3" "bar_dog_j3\n1"
+node "1/bar_dog_j4" "bar_dog_j4\n1"
+node "1/bar_dog_j5" "bar_dog_j5\n1"
+node "1/bar_fish_j1" "bar_fish_j1\n1"
+node "1/bar_fish_j2" "bar_fish_j2\n1"
+node "1/bar_fish_j3" "bar_fish_j3\n1"
+node "1/bar_fish_j4" "bar_fish_j4\n1"
+node "1/bar_fish_j5" "bar_fish_j5\n1"
+node "1/boo" "boo\n1"
+node "1/foo" "foo\n1"
stop
diff --git a/tests/functional/param_expand/02-param_val/graph-fam-1.ref b/tests/functional/param_expand/02-param_val/graph-fam-1.ref
index c529ec7570c..4a85a9e3f1f 100644
--- a/tests/functional/param_expand/02-param_val/graph-fam-1.ref
+++ b/tests/functional/param_expand/02-param_val/graph-fam-1.ref
@@ -1,35 +1,35 @@
-edge "FAM_cat_j3.1" "boo.1"
-edge "foo.1" "FAM_cat_j1.1"
-edge "foo.1" "FAM_cat_j2.1"
-edge "foo.1" "FAM_cat_j3.1"
-edge "foo.1" "FAM_cat_j4.1"
-edge "foo.1" "FAM_cat_j5.1"
-edge "foo.1" "FAM_dog_j1.1"
-edge "foo.1" "FAM_dog_j2.1"
-edge "foo.1" "FAM_dog_j3.1"
-edge "foo.1" "FAM_dog_j4.1"
-edge "foo.1" "FAM_dog_j5.1"
-edge "foo.1" "FAM_fish_j1.1"
-edge "foo.1" "FAM_fish_j2.1"
-edge "foo.1" "FAM_fish_j3.1"
-edge "foo.1" "FAM_fish_j4.1"
-edge "foo.1" "FAM_fish_j5.1"
+edge "1/FAM_cat_j3" "1/boo"
+edge "1/foo" "1/FAM_cat_j1"
+edge "1/foo" "1/FAM_cat_j2"
+edge "1/foo" "1/FAM_cat_j3"
+edge "1/foo" "1/FAM_cat_j4"
+edge "1/foo" "1/FAM_cat_j5"
+edge "1/foo" "1/FAM_dog_j1"
+edge "1/foo" "1/FAM_dog_j2"
+edge "1/foo" "1/FAM_dog_j3"
+edge "1/foo" "1/FAM_dog_j4"
+edge "1/foo" "1/FAM_dog_j5"
+edge "1/foo" "1/FAM_fish_j1"
+edge "1/foo" "1/FAM_fish_j2"
+edge "1/foo" "1/FAM_fish_j3"
+edge "1/foo" "1/FAM_fish_j4"
+edge "1/foo" "1/FAM_fish_j5"
graph
-node "FAM_cat_j1.1" "FAM_cat_j1\n1"
-node "FAM_cat_j2.1" "FAM_cat_j2\n1"
-node "FAM_cat_j3.1" "FAM_cat_j3\n1"
-node "FAM_cat_j4.1" "FAM_cat_j4\n1"
-node "FAM_cat_j5.1" "FAM_cat_j5\n1"
-node "FAM_dog_j1.1" "FAM_dog_j1\n1"
-node "FAM_dog_j2.1" "FAM_dog_j2\n1"
-node "FAM_dog_j3.1" "FAM_dog_j3\n1"
-node "FAM_dog_j4.1" "FAM_dog_j4\n1"
-node "FAM_dog_j5.1" "FAM_dog_j5\n1"
-node "FAM_fish_j1.1" "FAM_fish_j1\n1"
-node "FAM_fish_j2.1" "FAM_fish_j2\n1"
-node "FAM_fish_j3.1" "FAM_fish_j3\n1"
-node "FAM_fish_j4.1" "FAM_fish_j4\n1"
-node "FAM_fish_j5.1" "FAM_fish_j5\n1"
-node "boo.1" "boo\n1"
-node "foo.1" "foo\n1"
+node "1/FAM_cat_j1" "FAM_cat_j1\n1"
+node "1/FAM_cat_j2" "FAM_cat_j2\n1"
+node "1/FAM_cat_j3" "FAM_cat_j3\n1"
+node "1/FAM_cat_j4" "FAM_cat_j4\n1"
+node "1/FAM_cat_j5" "FAM_cat_j5\n1"
+node "1/FAM_dog_j1" "FAM_dog_j1\n1"
+node "1/FAM_dog_j2" "FAM_dog_j2\n1"
+node "1/FAM_dog_j3" "FAM_dog_j3\n1"
+node "1/FAM_dog_j4" "FAM_dog_j4\n1"
+node "1/FAM_dog_j5" "FAM_dog_j5\n1"
+node "1/FAM_fish_j1" "FAM_fish_j1\n1"
+node "1/FAM_fish_j2" "FAM_fish_j2\n1"
+node "1/FAM_fish_j3" "FAM_fish_j3\n1"
+node "1/FAM_fish_j4" "FAM_fish_j4\n1"
+node "1/FAM_fish_j5" "FAM_fish_j5\n1"
+node "1/boo" "boo\n1"
+node "1/foo" "foo\n1"
stop
diff --git a/tests/functional/param_expand/02-param_val/graph-fam-b.ref b/tests/functional/param_expand/02-param_val/graph-fam-b.ref
index c434f17ad42..b71bd255ff4 100644
--- a/tests/functional/param_expand/02-param_val/graph-fam-b.ref
+++ b/tests/functional/param_expand/02-param_val/graph-fam-b.ref
@@ -1,33 +1,33 @@
-edge "FAM_dog_j1.1" "boo.1"
-edge "foo.1" "FAM_cat_j1.1"
-edge "foo.1" "FAM_cat_j2.1"
-edge "foo.1" "FAM_cat_j4.1"
-edge "foo.1" "FAM_cat_j5.1"
-edge "foo.1" "FAM_dog_j1.1"
-edge "foo.1" "FAM_dog_j2.1"
-edge "foo.1" "FAM_dog_j3.1"
-edge "foo.1" "FAM_dog_j4.1"
-edge "foo.1" "FAM_dog_j5.1"
-edge "foo.1" "FAM_fish_j1.1"
-edge "foo.1" "FAM_fish_j2.1"
-edge "foo.1" "FAM_fish_j3.1"
-edge "foo.1" "FAM_fish_j4.1"
-edge "foo.1" "FAM_fish_j5.1"
+edge "1/FAM_dog_j1" "1/boo"
+edge "1/foo" "1/FAM_cat_j1"
+edge "1/foo" "1/FAM_cat_j2"
+edge "1/foo" "1/FAM_cat_j4"
+edge "1/foo" "1/FAM_cat_j5"
+edge "1/foo" "1/FAM_dog_j1"
+edge "1/foo" "1/FAM_dog_j2"
+edge "1/foo" "1/FAM_dog_j3"
+edge "1/foo" "1/FAM_dog_j4"
+edge "1/foo" "1/FAM_dog_j5"
+edge "1/foo" "1/FAM_fish_j1"
+edge "1/foo" "1/FAM_fish_j2"
+edge "1/foo" "1/FAM_fish_j3"
+edge "1/foo" "1/FAM_fish_j4"
+edge "1/foo" "1/FAM_fish_j5"
graph
-node "FAM_cat_j1.1" "FAM_cat_j1\n1"
-node "FAM_cat_j2.1" "FAM_cat_j2\n1"
-node "FAM_cat_j4.1" "FAM_cat_j4\n1"
-node "FAM_cat_j5.1" "FAM_cat_j5\n1"
-node "FAM_dog_j1.1" "FAM_dog_j1\n1"
-node "FAM_dog_j2.1" "FAM_dog_j2\n1"
-node "FAM_dog_j3.1" "FAM_dog_j3\n1"
-node "FAM_dog_j4.1" "FAM_dog_j4\n1"
-node "FAM_dog_j5.1" "FAM_dog_j5\n1"
-node "FAM_fish_j1.1" "FAM_fish_j1\n1"
-node "FAM_fish_j2.1" "FAM_fish_j2\n1"
-node "FAM_fish_j3.1" "FAM_fish_j3\n1"
-node "FAM_fish_j4.1" "FAM_fish_j4\n1"
-node "FAM_fish_j5.1" "FAM_fish_j5\n1"
-node "boo.1" "boo\n1"
-node "foo.1" "foo\n1"
+node "1/FAM_cat_j1" "FAM_cat_j1\n1"
+node "1/FAM_cat_j2" "FAM_cat_j2\n1"
+node "1/FAM_cat_j4" "FAM_cat_j4\n1"
+node "1/FAM_cat_j5" "FAM_cat_j5\n1"
+node "1/FAM_dog_j1" "FAM_dog_j1\n1"
+node "1/FAM_dog_j2" "FAM_dog_j2\n1"
+node "1/FAM_dog_j3" "FAM_dog_j3\n1"
+node "1/FAM_dog_j4" "FAM_dog_j4\n1"
+node "1/FAM_dog_j5" "FAM_dog_j5\n1"
+node "1/FAM_fish_j1" "FAM_fish_j1\n1"
+node "1/FAM_fish_j2" "FAM_fish_j2\n1"
+node "1/FAM_fish_j3" "FAM_fish_j3\n1"
+node "1/FAM_fish_j4" "FAM_fish_j4\n1"
+node "1/FAM_fish_j5" "FAM_fish_j5\n1"
+node "1/boo" "boo\n1"
+node "1/foo" "foo\n1"
stop
diff --git a/tests/functional/param_expand/03-env-tmpl/reference.log b/tests/functional/param_expand/03-env-tmpl/reference.log
index 3f64c423c00..2175d4acffb 100644
--- a/tests/functional/param_expand/03-env-tmpl/reference.log
+++ b/tests/functional/param_expand/03-env-tmpl/reference.log
@@ -1,13 +1,12 @@
Initial point: 1
Final point: 1
-t1_num099_this.1 -triggered off []
-t2_num099_this.1 -triggered off ['t1_num099_this.1']
-t1_num099_that.1 -triggered off []
-t2_num099_that.1 -triggered off ['t1_num099_that.1']
-t1_num101_this.1 -triggered off []
-t2_num101_this.1 -triggered off ['t1_num101_this.1']
-t1_num101_that.1 -triggered off []
-t2_num101_that.1 -triggered off ['t1_num101_that.1']
-x_that.1 -triggered off []
-x_this.1 -triggered off []
-
+1/t1_num099_this -triggered off []
+1/t2_num099_this -triggered off ['1/t1_num099_this']
+1/t1_num099_that -triggered off []
+1/t2_num099_that -triggered off ['1/t1_num099_that']
+1/t1_num101_this -triggered off []
+1/t2_num101_this -triggered off ['1/t1_num101_this']
+1/t1_num101_that -triggered off []
+1/t2_num101_that -triggered off ['1/t1_num101_that']
+1/x_that -triggered off []
+1/x_this -triggered off []
diff --git a/tests/functional/pause-resume/00-workflow/reference.log b/tests/functional/pause-resume/00-workflow/reference.log
index b62bab41316..bb2ee4d5b31 100644
--- a/tests/functional/pause-resume/00-workflow/reference.log
+++ b/tests/functional/pause-resume/00-workflow/reference.log
@@ -1,3 +1,3 @@
-DEBUG - pause_resume.20140101T00 -triggered off []
-DEBUG - foo.20140101T00 -triggered off ['pause_resume.20140101T00']
-DEBUG - bar.20140101T00 -triggered off ['pause_resume.20140101T00']
+20140101T00/pause_resume -triggered off []
+20140101T00/foo -triggered off ['20140101T00/pause_resume']
+20140101T00/bar -triggered off ['20140101T00/pause_resume']
diff --git a/tests/functional/pause-resume/01-beyond-stop/reference.log b/tests/functional/pause-resume/01-beyond-stop/reference.log
index 504b86f3f29..457ce83dc8d 100644
--- a/tests/functional/pause-resume/01-beyond-stop/reference.log
+++ b/tests/functional/pause-resume/01-beyond-stop/reference.log
@@ -1,3 +1,3 @@
-DEBUG - foo.20140101T00 -triggered off []
-DEBUG - pause_resume.20140101T00 -triggered off ['foo.20140101T00']
-DEBUG - bar.20140101T00 -triggered off ['foo.20140101T00']
+20140101T00/foo -triggered off []
+20140101T00/pause_resume -triggered off ['20140101T00/foo']
+20140101T00/bar -triggered off ['20140101T00/foo']
diff --git a/tests/functional/pause-resume/12-pause-then-retry/flow.cylc b/tests/functional/pause-resume/12-pause-then-retry/flow.cylc
index dac9929a003..84ee88140fe 100644
--- a/tests/functional/pause-resume/12-pause-then-retry/flow.cylc
+++ b/tests/functional/pause-resume/12-pause-then-retry/flow.cylc
@@ -22,24 +22,24 @@
cylc__job__poll_grep_workflow_log -F 'Command succeeded: pause'
# Poll t-submit-retry-able, should return submit-fail
- cylc poll "${CYLC_WORKFLOW_ID}" 't-submit-retry-able'
+ cylc poll "${CYLC_WORKFLOW_ID}//*/t-submit-retry-able"
# Allow t-retry-able to continue
rm -f "${CYLC_WORKFLOW_RUN_DIR}/file"
cylc__job__poll_grep_workflow_log -E \
- 't-retry-able\.1 running .* => waiting'
+ '1/t-retry-able running .* => waiting'
cylc__job__poll_grep_workflow_log -E \
- 't-submit-retry-able\.1 submitted .* => waiting'
+ '1/t-submit-retry-able submitted .* => waiting'
# Resume the workflow
cylc play "${CYLC_WORKFLOW_ID}"
cylc__job__poll_grep_workflow_log -E \
- 't-retry-able\.1 waiting .* => waiting\(queued\)'
+ '1/t-retry-able waiting .* => waiting\(queued\)'
cylc__job__poll_grep_workflow_log -E \
- 't-submit-retry-able\.1 waiting .* => waiting\(queued\)'
+ '1/t-submit-retry-able waiting .* => waiting\(queued\)'
"""
[[t-retry-able]]
script = """
diff --git a/tests/functional/pause-resume/12-pause-then-retry/reference.log b/tests/functional/pause-resume/12-pause-then-retry/reference.log
index f16f34995e0..95d58ee3e29 100644
--- a/tests/functional/pause-resume/12-pause-then-retry/reference.log
+++ b/tests/functional/pause-resume/12-pause-then-retry/reference.log
@@ -1,7 +1,6 @@
-2014-12-18T16:14:12Z INFO - Initial point: 1
-2014-12-18T16:14:12Z INFO - Final point: 1
-2014-12-18T16:14:12Z DEBUG - t-submit-retry-able.1 -triggered off []
-2014-12-18T16:14:12Z DEBUG - t-retry-able.1 -triggered off []
-2014-12-18T16:14:15Z DEBUG - t-pause.1 -triggered off ['t-retry-able.1', 't-submit-retry-able.1']
-2014-12-18T16:14:24Z DEBUG - t-retry-able.1 -triggered off []
-2014-12-18T16:14:25Z DEBUG - t-submit-retry-able.1 -triggered off []
+Final point: 1
+1/t-submit-retry-able -triggered off []
+1/t-retry-able -triggered off []
+1/t-pause -triggered off ['1/t-retry-able', '1/t-submit-retry-able']
+1/t-retry-able -triggered off []
+1/t-submit-retry-able -triggered off []
diff --git a/tests/functional/pause-resume/21-client/reference.log b/tests/functional/pause-resume/21-client/reference.log
index e54adb0330b..7afe901c28f 100644
--- a/tests/functional/pause-resume/21-client/reference.log
+++ b/tests/functional/pause-resume/21-client/reference.log
@@ -1,3 +1,3 @@
-2016-10-10T14:01:04Z INFO - Initial point: 1
-2016-10-10T14:01:04Z INFO - Final point: 1
-2016-10-10T14:01:05Z DEBUG - t1.1 -triggered off []
+Initial point: 1
+Final point: 1
+1/t1 -triggered off []
diff --git a/tests/functional/periodicals/Daily/reference.log b/tests/functional/periodicals/Daily/reference.log
index 5e21b55647b..58028894257 100644
--- a/tests/functional/periodicals/Daily/reference.log
+++ b/tests/functional/periodicals/Daily/reference.log
@@ -1,5 +1,5 @@
-2014/05/15 22:12:12 INFO - Initial point: 20140107T0000Z
-2014/05/15 22:12:12 INFO - Final point: 20140118T0000Z
-2014/05/15 22:12:17 DEBUG - a.20140110T0600Z -triggered off []
-2014/05/15 22:12:21 DEBUG - a.20140113T0600Z -triggered off []
-2014/05/15 22:12:25 DEBUG - a.20140116T0600Z -triggered off []
+Initial point: 20140107T0000Z
+Final point: 20140118T0000Z
+20140110T0600Z/a -triggered off []
+20140113T0600Z/a -triggered off []
+20140116T0600Z/a -triggered off []
diff --git a/tests/functional/periodicals/Monthly-reorder/reference.log b/tests/functional/periodicals/Monthly-reorder/reference.log
index 7ef09bf7657..19e278365ca 100644
--- a/tests/functional/periodicals/Monthly-reorder/reference.log
+++ b/tests/functional/periodicals/Monthly-reorder/reference.log
@@ -1,11 +1,11 @@
Initial point: 20130130T0000Z
Final point: 20130202T0000Z
-dummy.20130130T0000Z -triggered off ['daily.20130129T0000Z']
-daily.20130130T0000Z -triggered off []
-dummy.20130131T0000Z -triggered off ['daily.20130130T0000Z']
-daily.20130131T0000Z -triggered off []
-dummy.20130201T0000Z -triggered off ['daily.20130131T0000Z']
-daily.20130201T0000Z -triggered off []
-monthly.20130201T0000Z -triggered off ['dummy.20130201T0000Z']
-dummy.20130202T0000Z -triggered off ['daily.20130201T0000Z']
-daily.20130202T0000Z -triggered off []
+20130130T0000Z/dummy -triggered off ['20130129T0000Z/daily']
+20130130T0000Z/daily -triggered off []
+20130131T0000Z/dummy -triggered off ['20130130T0000Z/daily']
+20130131T0000Z/daily -triggered off []
+20130201T0000Z/dummy -triggered off ['20130131T0000Z/daily']
+20130201T0000Z/daily -triggered off []
+20130201T0000Z/monthly -triggered off ['20130201T0000Z/dummy']
+20130202T0000Z/dummy -triggered off ['20130201T0000Z/daily']
+20130202T0000Z/daily -triggered off []
diff --git a/tests/functional/periodicals/Monthly/reference.log b/tests/functional/periodicals/Monthly/reference.log
index 3987fb8f2d5..faf7d19e728 100644
--- a/tests/functional/periodicals/Monthly/reference.log
+++ b/tests/functional/periodicals/Monthly/reference.log
@@ -1,4 +1,4 @@
-2013/11/01 15:41:48 INFO - Initial point: 20100201T0000Z
-2013/11/01 15:41:48 INFO - Final point: 20100801T0000Z
-2013/11/01 15:41:48 DEBUG - a.20100401T0000Z -triggered off []
-2013/11/01 15:41:53 DEBUG - a.20100701T0000Z -triggered off []
+Initial point: 20100201T0000Z
+Final point: 20100801T0000Z
+20100401T0000Z/a -triggered off []
+20100701T0000Z/a -triggered off []
diff --git a/tests/functional/periodicals/Yearly/reference.log b/tests/functional/periodicals/Yearly/reference.log
index c4f742be5a0..4a194661d79 100644
--- a/tests/functional/periodicals/Yearly/reference.log
+++ b/tests/functional/periodicals/Yearly/reference.log
@@ -1,4 +1,4 @@
-2013/11/01 14:15:49 INFO - Initial point: 20110101T0000Z
-2013/11/01 14:15:49 INFO - Final point: 20180101T0000Z
-2013/11/01 14:15:49 DEBUG - a.20130101T0000Z -triggered off []
-2013/11/01 14:15:54 DEBUG - a.20160101T0000Z -triggered off []
+Initial point: 20110101T0000Z
+Final point: 20180101T0000Z
+20130101T0000Z/a -triggered off []
+20160101T0000Z/a -triggered off []
diff --git a/tests/functional/platforms/01-platform-basic.t b/tests/functional/platforms/01-platform-basic.t
index 4a48861d29f..07aaaaed666 100755
--- a/tests/functional/platforms/01-platform-basic.t
+++ b/tests/functional/platforms/01-platform-basic.t
@@ -45,4 +45,4 @@ platform=lewis
__FLOW_CONFIG__
-run_ok "${TEST_NAME}" cylc validate flow.cylc
+run_ok "${TEST_NAME}" cylc validate .
diff --git a/tests/functional/platforms/02-host-to-platform-upgrade.t b/tests/functional/platforms/02-host-to-platform-upgrade.t
index 9b096da5fa1..476965aaae7 100644
--- a/tests/functional/platforms/02-host-to-platform-upgrade.t
+++ b/tests/functional/platforms/02-host-to-platform-upgrade.t
@@ -53,7 +53,7 @@ workflow_run_ok "${TEST_NAME_BASE}-run" \
grep "host=" "${WORKFLOW_RUN_DIR}/log/workflow/log" > hosts.log
-grep_ok "\[t2\.2.*\].*host=${CYLC_TEST_HOST}" hosts.log
+grep_ok "\[2/t2.*\].*host=${CYLC_TEST_HOST}" hosts.log
purge
exit
diff --git a/tests/functional/platforms/02-host-to-platform-upgrade/reference.log b/tests/functional/platforms/02-host-to-platform-upgrade/reference.log
index 7e38174f71d..f5bb03f781c 100644
--- a/tests/functional/platforms/02-host-to-platform-upgrade/reference.log
+++ b/tests/functional/platforms/02-host-to-platform-upgrade/reference.log
@@ -1,10 +1,10 @@
Initial point: 1
Final point: 1
-fin.1 -triggered off ['no_settings.1', 't1.1', 't2.1']
-fin.2 -triggered off ['no_settings.2', 't1.2', 't2.2']
-no_settings.1 -triggered off []
-no_settings.2 -triggered off []
-t1.1 -triggered off []
-t1.2 -triggered off []
-t2.1 -triggered off []
-t2.2 -triggered off []
+1/fin -triggered off ['1/no_settings', '1/t1', '1/t2']
+2/fin -triggered off ['2/no_settings', '2/t1', '2/t2']
+1/no_settings -triggered off []
+2/no_settings -triggered off []
+1/t1 -triggered off []
+2/t1 -triggered off []
+1/t2 -triggered off []
+2/t2 -triggered off []
diff --git a/tests/functional/platforms/04-host-to-platform-upgrade-fail-inherit.t b/tests/functional/platforms/04-host-to-platform-upgrade-fail-inherit.t
index 6b2362dfd03..8812fefc0de 100644
--- a/tests/functional/platforms/04-host-to-platform-upgrade-fail-inherit.t
+++ b/tests/functional/platforms/04-host-to-platform-upgrade-fail-inherit.t
@@ -38,7 +38,7 @@ workflow_run_fail "${TEST_NAME_BASE}-run" \
cylc play --debug --no-detach "${WORKFLOW_NAME}"
# Grep for inherit-fail to fail later at submit time
-grep_ok "WorkflowConfigError:.*non-valid-child.1" \
+grep_ok "WorkflowConfigError:.*1/non-valid-child" \
"${TEST_NAME_BASE}-run.stderr"
purge
diff --git a/tests/functional/pre-initial/00-simple/reference.log b/tests/functional/pre-initial/00-simple/reference.log
index a0b14207da2..2f053e674b1 100644
--- a/tests/functional/pre-initial/00-simple/reference.log
+++ b/tests/functional/pre-initial/00-simple/reference.log
@@ -1,4 +1,4 @@
-2014-04-24T16:05:37 INFO - Initial point: 20100101T0000Z
-2014-04-24T16:05:37 INFO - Final point: 20100102T0000Z
-2014-04-24T16:05:37 DEBUG - a.20100101T0000Z -triggered off ['a.20091231T0000Z']
-2014-04-24T16:05:43 DEBUG - a.20100102T0000Z -triggered off ['a.20100101T0000Z']
+Initial point: 20100101T0000Z
+Final point: 20100102T0000Z
+20100101T0000Z/a -triggered off ['20091231T0000Z/a']
+20100102T0000Z/a -triggered off ['20100101T0000Z/a']
diff --git a/tests/functional/pre-initial/01-basic/reference.log b/tests/functional/pre-initial/01-basic/reference.log
index 0f654719080..f8e9ebfb9b9 100644
--- a/tests/functional/pre-initial/01-basic/reference.log
+++ b/tests/functional/pre-initial/01-basic/reference.log
@@ -1,6 +1,6 @@
-2014-04-24T16:36:50 INFO - Initial point: 20100101T0000Z
-2014-04-24T16:36:50 INFO - Final point: 20100102T0000Z
-2014-04-24T16:36:50 DEBUG - b.20100101T0000Z -triggered off []
-2014-04-24T16:36:54 DEBUG - b.20100102T0000Z -triggered off []
-2014-04-24T16:36:55 DEBUG - a.20100101T0000Z -triggered off ['a.20091231T0000Z', 'b.20100101T0000Z']
-2014-04-24T16:37:01 DEBUG - a.20100102T0000Z -triggered off ['a.20100101T0000Z', 'b.20100102T0000Z']
+Initial point: 20100101T0000Z
+Final point: 20100102T0000Z
+20100101T0000Z/b -triggered off []
+20100102T0000Z/b -triggered off []
+20100101T0000Z/a -triggered off ['20091231T0000Z/a', '20100101T0000Z/b']
+20100102T0000Z/a -triggered off ['20100101T0000Z/a', '20100102T0000Z/b']
diff --git a/tests/functional/pre-initial/02-advanced/reference.log b/tests/functional/pre-initial/02-advanced/reference.log
index b653e408067..9592b07f619 100644
--- a/tests/functional/pre-initial/02-advanced/reference.log
+++ b/tests/functional/pre-initial/02-advanced/reference.log
@@ -1,17 +1,17 @@
-2014-04-24T16:42:00 INFO - Initial point: 20100101T0000Z
-2014-04-24T16:42:00 INFO - Final point: 20100102T0000Z
-2014-04-24T16:42:00 DEBUG - b.20100101T0000Z -triggered off []
-2014-04-24T16:42:04 DEBUG - b.20100101T0600Z -triggered off []
-2014-04-24T16:42:05 DEBUG - a.20100101T0000Z -triggered off ['a.20091231T1800Z', 'b.20100101T0000Z', 'c.20091231T1800Z']
-2014-04-24T16:42:05 DEBUG - c.20100101T0000Z -triggered off ['a.20091231T1800Z', 'b.20100101T0000Z', 'c.20091231T1800Z']
-2014-04-24T16:42:07 DEBUG - b.20100101T1200Z -triggered off []
-2014-04-24T16:42:11 DEBUG - a.20100101T0600Z -triggered off ['a.20100101T0000Z', 'b.20100101T0600Z', 'c.20100101T0000Z']
-2014-04-24T16:42:11 DEBUG - c.20100101T0600Z -triggered off ['a.20100101T0000Z', 'b.20100101T0600Z', 'c.20100101T0000Z']
-2014-04-24T16:42:13 DEBUG - b.20100101T1800Z -triggered off []
-2014-04-24T16:42:17 DEBUG - a.20100101T1200Z -triggered off ['a.20100101T0600Z', 'b.20100101T1200Z', 'c.20100101T0600Z']
-2014-04-24T16:42:17 DEBUG - c.20100101T1200Z -triggered off ['a.20100101T0600Z', 'b.20100101T1200Z', 'c.20100101T0600Z']
-2014-04-24T16:42:19 DEBUG - b.20100102T0000Z -triggered off []
-2014-04-24T16:42:23 DEBUG - c.20100101T1800Z -triggered off ['a.20100101T1200Z', 'b.20100101T1800Z', 'c.20100101T1200Z']
-2014-04-24T16:42:23 DEBUG - a.20100101T1800Z -triggered off ['a.20100101T1200Z', 'b.20100101T1800Z', 'c.20100101T1200Z']
-2014-04-24T16:42:28 DEBUG - a.20100102T0000Z -triggered off ['a.20100101T1800Z', 'b.20100102T0000Z', 'c.20100101T1800Z']
-2014-04-24T16:42:28 DEBUG - c.20100102T0000Z -triggered off ['a.20100101T1800Z', 'b.20100102T0000Z', 'c.20100101T1800Z']
+Initial point: 20100101T0000Z
+Final point: 20100102T0000Z
+20100101T0000Z/b -triggered off []
+20100101T0600Z/b -triggered off []
+20100101T0000Z/a -triggered off ['20091231T1800Z/a', '20091231T1800Z/c', '20100101T0000Z/b']
+20100101T0000Z/c -triggered off ['20091231T1800Z/a', '20091231T1800Z/c', '20100101T0000Z/b']
+20100101T1200Z/b -triggered off []
+20100101T0600Z/a -triggered off ['20100101T0000Z/a', '20100101T0000Z/c', '20100101T0600Z/b']
+20100101T0600Z/c -triggered off ['20100101T0000Z/a', '20100101T0000Z/c', '20100101T0600Z/b']
+20100101T1800Z/b -triggered off []
+20100101T1200Z/a -triggered off ['20100101T0600Z/a', '20100101T0600Z/c', '20100101T1200Z/b']
+20100101T1200Z/c -triggered off ['20100101T0600Z/a', '20100101T0600Z/c', '20100101T1200Z/b']
+20100102T0000Z/b -triggered off []
+20100101T1800Z/c -triggered off ['20100101T1200Z/a', '20100101T1200Z/c', '20100101T1800Z/b']
+20100101T1800Z/a -triggered off ['20100101T1200Z/a', '20100101T1200Z/c', '20100101T1800Z/b']
+20100102T0000Z/a -triggered off ['20100101T1800Z/a', '20100101T1800Z/c', '20100102T0000Z/b']
+20100102T0000Z/c -triggered off ['20100101T1800Z/a', '20100101T1800Z/c', '20100102T0000Z/b']
diff --git a/tests/functional/pre-initial/03-drop/reference.log b/tests/functional/pre-initial/03-drop/reference.log
index 021795a0379..cecb29f06a0 100644
--- a/tests/functional/pre-initial/03-drop/reference.log
+++ b/tests/functional/pre-initial/03-drop/reference.log
@@ -1,12 +1,12 @@
-2014-04-24T16:32:27 INFO - Initial point: 20100101T0000Z
-2014-04-24T16:32:27 INFO - Final point: 20100102T0000Z
-2014-04-24T16:32:27 DEBUG - a.20100101T0000Z -triggered off ['a.20091231T1800Z', 'b.20091231T1800Z']
-2014-04-24T16:32:33 DEBUG - b.20100101T0000Z -triggered off ['a.20100101T0000Z']
-2014-04-24T16:32:37 DEBUG - a.20100101T0600Z -triggered off ['a.20100101T0000Z', 'b.20100101T0000Z']
-2014-04-24T16:32:42 DEBUG - b.20100101T0600Z -triggered off ['a.20100101T0600Z']
-2014-04-24T16:32:47 DEBUG - a.20100101T1200Z -triggered off ['a.20100101T0600Z', 'b.20100101T0600Z']
-2014-04-24T16:32:51 DEBUG - b.20100101T1200Z -triggered off ['a.20100101T1200Z']
-2014-04-24T16:32:56 DEBUG - a.20100101T1800Z -triggered off ['a.20100101T1200Z', 'b.20100101T1200Z']
-2014-04-24T16:33:02 DEBUG - b.20100101T1800Z -triggered off ['a.20100101T1800Z']
-2014-04-24T16:33:06 DEBUG - a.20100102T0000Z -triggered off ['a.20100101T1800Z', 'b.20100101T1800Z']
-2014-04-24T16:33:10 DEBUG - b.20100102T0000Z -triggered off ['a.20100102T0000Z']
+Initial point: 20100101T0000Z
+Final point: 20100102T0000Z
+20100101T0000Z/a -triggered off ['20091231T1800Z/a', '20091231T1800Z/b']
+20100101T0000Z/b -triggered off ['20100101T0000Z/a']
+20100101T0600Z/a -triggered off ['20100101T0000Z/a', '20100101T0000Z/b']
+20100101T0600Z/b -triggered off ['20100101T0600Z/a']
+20100101T1200Z/a -triggered off ['20100101T0600Z/a', '20100101T0600Z/b']
+20100101T1200Z/b -triggered off ['20100101T1200Z/a']
+20100101T1800Z/a -triggered off ['20100101T1200Z/a', '20100101T1200Z/b']
+20100101T1800Z/b -triggered off ['20100101T1800Z/a']
+20100102T0000Z/a -triggered off ['20100101T1800Z/a', '20100101T1800Z/b']
+20100102T0000Z/b -triggered off ['20100102T0000Z/a']
diff --git a/tests/functional/pre-initial/06-over-bracketed/reference.log b/tests/functional/pre-initial/06-over-bracketed/reference.log
index cf0ea943989..5246592f6c6 100644
--- a/tests/functional/pre-initial/06-over-bracketed/reference.log
+++ b/tests/functional/pre-initial/06-over-bracketed/reference.log
@@ -1,6 +1,6 @@
-2014-05-19T16:58:04 INFO - Initial point: 20131225T1200Z
-2014-05-19T16:58:04 INFO - Final point: 20131225T1200Z
-2014-05-19T16:58:04 DEBUG - c.20131225T1200Z -triggered off []
-2014-05-19T16:58:04 DEBUG - d.20131225T1200Z -triggered off ['a.20131224T1200Z', 'b.20131224T1200Z', 'c.20131224T1200Z']
-2014-05-19T16:58:04 DEBUG - a.20131225T1200Z -triggered off []
-2014-05-19T16:58:04 DEBUG - b.20131225T1200Z -triggered off []
+Initial point: 20131225T1200Z
+Final point: 20131225T1200Z
+20131225T1200Z/c -triggered off []
+20131225T1200Z/d -triggered off ['20131224T1200Z/a', '20131224T1200Z/b', '20131224T1200Z/c']
+20131225T1200Z/a -triggered off []
+20131225T1200Z/b -triggered off []
diff --git a/tests/functional/pre-initial/07-simple-messaging/reference.log b/tests/functional/pre-initial/07-simple-messaging/reference.log
index ec2c8ba64bd..c0ded6d4887 100644
--- a/tests/functional/pre-initial/07-simple-messaging/reference.log
+++ b/tests/functional/pre-initial/07-simple-messaging/reference.log
@@ -1,4 +1,4 @@
-2014/01/02 15:46:52 INFO - Initial point: 20100808T0000Z
-2014/01/02 15:46:52 INFO - Final point: 20100809T0000Z
-2014/01/02 15:46:52 DEBUG - foo.20100808T0000Z -triggered off ['foo.20100807T0000Z']
-2014/01/02 15:46:57 DEBUG - foo.20100809T0000Z -triggered off ['foo.20100808T0000Z']
+Initial point: 20100808T0000Z
+Final point: 20100809T0000Z
+20100808T0000Z/foo -triggered off ['20100807T0000Z/foo']
+20100809T0000Z/foo -triggered off ['20100808T0000Z/foo']
diff --git a/tests/functional/pre-initial/08-conditional-messaging/flow.cylc b/tests/functional/pre-initial/08-conditional-messaging/flow.cylc
index 7b531fe1678..0ac121a8514 100644
--- a/tests/functional/pre-initial/08-conditional-messaging/flow.cylc
+++ b/tests/functional/pre-initial/08-conditional-messaging/flow.cylc
@@ -2,7 +2,7 @@
UTC mode = True
allow implicit tasks = True
[[events]]
- expected task failures = bar.20100809T0000Z
+ expected task failures = 20100809T0000Z/bar
[scheduling]
initial cycle point = 20100808T00
diff --git a/tests/functional/pre-initial/08-conditional-messaging/reference.log b/tests/functional/pre-initial/08-conditional-messaging/reference.log
index 37f3cee1329..92ce8535996 100644
--- a/tests/functional/pre-initial/08-conditional-messaging/reference.log
+++ b/tests/functional/pre-initial/08-conditional-messaging/reference.log
@@ -1,7 +1,7 @@
-2014/01/02 15:42:26 INFO - Initial point: 20100808T0000Z
-2014/01/02 15:42:26 INFO - Final point: 20100809T0000Z
-2014/01/02 15:42:26 DEBUG - bar.20100808T0000Z -triggered off []
-2014/01/02 15:42:30 DEBUG - foo.20100808T0000Z -triggered off ['bar.20100808T0000Z', 'foo.20100807T0000Z']
-2014/01/02 15:42:30 DEBUG - bar.20100809T0000Z -triggered off []
-2014/01/02 15:42:34 DEBUG - foo.20100809T0000Z -triggered off ['foo.20100808T0000Z']
-2014/01/02 15:42:34 DEBUG - handled.20100809T0000Z -triggered off ['bar.20100809T0000Z']
+Initial point: 20100808T0000Z
+Final point: 20100809T0000Z
+20100808T0000Z/bar -triggered off []
+20100808T0000Z/foo -triggered off ['20100807T0000Z/foo', '20100808T0000Z/bar']
+20100809T0000Z/bar -triggered off []
+20100809T0000Z/foo -triggered off ['20100808T0000Z/foo']
+20100809T0000Z/handled -triggered off ['20100809T0000Z/bar']
diff --git a/tests/functional/pre-initial/12-warm-restart.t b/tests/functional/pre-initial/12-warm-restart.t
index 00a0b8e2936..467d0e67683 100644
--- a/tests/functional/pre-initial/12-warm-restart.t
+++ b/tests/functional/pre-initial/12-warm-restart.t
@@ -37,9 +37,9 @@ poll_workflow_running
#-------------------------------------------------------------------------------
# Check pre-reqs
TEST_NAME=${TEST_NAME_BASE}-check-prereq
-run_ok "${TEST_NAME}" cylc show "${WORKFLOW_NAME}" foo.20130101T1200Z --list-prereqs
+run_ok "${TEST_NAME}" cylc show "${WORKFLOW_NAME}//20130101T1200Z/foo" --list-prereqs
cmp_ok "${TEST_NAME}.stdout" <<'__OUT__'
-foo.20130101T0600Z succeeded
+20130101T0600Z/foo succeeded
__OUT__
#-------------------------------------------------------------------------------
# Stop workflow
diff --git a/tests/functional/pre-initial/warm-insert/flow.cylc b/tests/functional/pre-initial/warm-insert/flow.cylc
index b154c26031c..28551b3f0e2 100644
--- a/tests/functional/pre-initial/warm-insert/flow.cylc
+++ b/tests/functional/pre-initial/warm-insert/flow.cylc
@@ -26,6 +26,5 @@
[[foo,bar]]
[[inserter]]
script = """
- cylc trigger --reflow --meta="other" $CYLC_WORKFLOW_ID foo.20100101T1200Z
+ cylc trigger --reflow --meta="other" "$CYLC_WORKFLOW_ID//20100101T1200Z/foo"
"""
-
\ No newline at end of file
diff --git a/tests/functional/pre-initial/warm-insert/reference.log b/tests/functional/pre-initial/warm-insert/reference.log
index ae0b23c6f7c..b766debd91a 100644
--- a/tests/functional/pre-initial/warm-insert/reference.log
+++ b/tests/functional/pre-initial/warm-insert/reference.log
@@ -1,7 +1,7 @@
-2016-08-26T09:19:57Z DEBUG - inserter.20100101T1800Z -triggered off []
-2016-08-26T09:19:57Z DEBUG - foo.20100101T1800Z -triggered off []
-2016-08-26T09:20:04Z DEBUG - bar.20100101T1800Z -triggered off ['foo.20100101T1800Z', 'inserter.20100101T1800Z']
-2016-08-26T09:20:12Z DEBUG - foo.20100102T0000Z -triggered off []
-2016-08-26T09:20:19Z DEBUG - bar.20100102T0000Z -triggered off ['foo.20100102T0000Z']
-2016-08-26T09:20:28Z DEBUG - foo.20100101T1200Z -triggered off []
-2016-08-26T09:20:36Z DEBUG - bar.20100101T1200Z -triggered off ['foo.20100101T1200Z']
+20100101T1800Z/inserter -triggered off []
+20100101T1800Z/foo -triggered off []
+20100101T1800Z/bar -triggered off ['20100101T1800Z/foo', '20100101T1800Z/inserter']
+20100102T0000Z/foo -triggered off []
+20100102T0000Z/bar -triggered off ['20100102T0000Z/foo']
+20100101T1200Z/foo -triggered off []
+20100101T1200Z/bar -triggered off ['20100101T1200Z/foo']
diff --git a/tests/functional/pre-initial/warm-offset/reference.log b/tests/functional/pre-initial/warm-offset/reference.log
index 85197509dfc..f3ade15f86c 100644
--- a/tests/functional/pre-initial/warm-offset/reference.log
+++ b/tests/functional/pre-initial/warm-offset/reference.log
@@ -1,6 +1,6 @@
-2013/09/11 10:39:10 INFO - Initial point: 20130101T0600Z
-2013/09/11 10:39:10 INFO - Final point: 20130102T0000Z
-2013/09/11 10:39:10 DEBUG - foo.20130101T0600Z -triggered off ['foo.20130101T0000Z']
-2013/09/11 10:39:14 DEBUG - foo.20130101T1200Z -triggered off ['foo.20130101T0600Z']
-2013/09/11 10:39:17 DEBUG - foo.20130101T1800Z -triggered off ['foo.20130101T1200Z']
-2013/09/11 10:39:20 DEBUG - foo.20130102T0000Z -triggered off ['foo.20130101T1800Z']
+Initial point: 20130101T0600Z
+Final point: 20130102T0000Z
+20130101T0600Z/foo -triggered off ['20130101T0000Z/foo']
+20130101T1200Z/foo -triggered off ['20130101T0600Z/foo']
+20130101T1800Z/foo -triggered off ['20130101T1200Z/foo']
+20130102T0000Z/foo -triggered off ['20130101T1800Z/foo']
diff --git a/tests/functional/pre-initial/warm-start-iso/reference.log b/tests/functional/pre-initial/warm-start-iso/reference.log
index 10884546025..5b207b46452 100644
--- a/tests/functional/pre-initial/warm-start-iso/reference.log
+++ b/tests/functional/pre-initial/warm-start-iso/reference.log
@@ -1,10 +1,10 @@
-2014-08-04T11:20:42Z INFO - Initial point: 20130101T0000Z
-2014-08-04T11:20:42Z INFO - Start point: 20130102T0000Z
-2014-08-04T11:20:42Z INFO - Final point: 20130103T0000Z
-2014-08-04T11:20:42Z DEBUG - qux.20130102T0000Z -triggered off ['foo.20130101T0000Z', 'qux.20130101T1800Z']
-2014-08-04T11:20:42Z DEBUG - wibble.20130102T0000Z -triggered off []
-2014-08-04T11:20:44Z DEBUG - wibble.20130102T0600Z -triggered off []
-2014-08-04T11:20:45Z DEBUG - qux.20130102T0600Z -triggered off ['foo.20130101T0000Z', 'qux.20130102T0000Z']
-2014-08-04T11:20:48Z DEBUG - qux.20130102T1200Z -triggered off ['foo.20130101T0000Z', 'qux.20130102T0600Z']
-2014-08-04T11:20:51Z DEBUG - qux.20130102T1800Z -triggered off ['foo.20130101T0000Z', 'qux.20130102T1200Z']
-2014-08-04T11:20:55Z DEBUG - qux.20130103T0000Z -triggered off ['foo.20130101T0000Z', 'qux.20130102T1800Z']
+Initial point: 20130101T0000Z
+Start point: 20130102T0000Z
+Final point: 20130103T0000Z
+20130102T0000Z/qux -triggered off ['20130101T0000Z/foo', '20130101T1800Z/qux']
+20130102T0000Z/wibble -triggered off []
+20130102T0600Z/wibble -triggered off []
+20130102T0600Z/qux -triggered off ['20130101T0000Z/foo', '20130102T0000Z/qux']
+20130102T1200Z/qux -triggered off ['20130101T0000Z/foo', '20130102T0600Z/qux']
+20130102T1800Z/qux -triggered off ['20130101T0000Z/foo', '20130102T1200Z/qux']
+20130103T0000Z/qux -triggered off ['20130101T0000Z/foo', '20130102T1800Z/qux']
diff --git a/tests/functional/pre-initial/warm-start/reference.log b/tests/functional/pre-initial/warm-start/reference.log
index 3e5b37d1da9..7b9ef096175 100644
--- a/tests/functional/pre-initial/warm-start/reference.log
+++ b/tests/functional/pre-initial/warm-start/reference.log
@@ -1,7 +1,6 @@
-2013-09-11T10:42:03Z INFO - Initial point: 20130101T0000Z
-2013-09-11T10:42:03Z INFO - Final point: 20130102T0000Z
-2013-09-11T10:42:03Z DEBUG - foo.20130101T0000Z -triggered off ['foo.20121231T1800Z']
-2013-09-11T10:42:07Z DEBUG - foo.20130101T0600Z -triggered off ['foo.20130101T0000Z']
-2013-09-11T10:42:10Z DEBUG - foo.20130101T1200Z -triggered off ['foo.20130101T0600Z']
-2013-09-11T10:42:13Z DEBUG - foo.20130101T1800Z -triggered off ['foo.20130101T1200Z']
-2013-09-11T10:42:16Z DEBUG - foo.20130102T0000Z -triggered off ['foo.20130101T1800Z']
+Final point: 20130102T0000Z
+20130101T0000Z/foo -triggered off ['20121231T1800Z/foo']
+20130101T0600Z/foo -triggered off ['20130101T0000Z/foo']
+20130101T1200Z/foo -triggered off ['20130101T0600Z/foo']
+20130101T1800Z/foo -triggered off ['20130101T1200Z/foo']
+20130102T0000Z/foo -triggered off ['20130101T1800Z/foo']
diff --git a/tests/functional/queues/02-queueorder/reference.log b/tests/functional/queues/02-queueorder/reference.log
index 78f227355fb..563acc2ae89 100644
--- a/tests/functional/queues/02-queueorder/reference.log
+++ b/tests/functional/queues/02-queueorder/reference.log
@@ -1,17 +1,17 @@
-2018-03-13T14:22:38Z INFO - Initial point: 1
-2018-03-13T14:22:38Z INFO - Final point: 1
-2018-03-13T14:22:38Z DEBUG - delay_n1.1 -triggered off []
-2018-03-13T14:22:38Z DEBUG - hold.1 -triggered off []
-2018-03-13T14:22:40Z DEBUG - delay_n2.1 -triggered off ['delay_n1.1']
-2018-03-13T14:22:42Z DEBUG - delay_n3.1 -triggered off ['delay_n2.1']
-2018-03-13T14:22:44Z DEBUG - delay_n4.1 -triggered off ['delay_n3.1']
-2018-03-13T14:22:47Z DEBUG - delay_n5.1 -triggered off ['delay_n4.1']
-2018-03-13T14:22:48Z DEBUG - proc_n1.1 -triggered off ['delay_n1.1']
-2018-03-13T14:22:49Z DEBUG - delay_n6.1 -triggered off ['delay_n5.1']
-2018-03-13T14:22:50Z DEBUG - proc_n2.1 -triggered off ['delay_n2.1']
-2018-03-13T14:22:52Z DEBUG - delay_n7.1 -triggered off ['delay_n6.1']
-2018-03-13T14:22:52Z DEBUG - proc_n3.1 -triggered off ['delay_n3.1']
-2018-03-13T14:22:54Z DEBUG - proc_n4.1 -triggered off ['delay_n4.1']
-2018-03-13T14:22:56Z DEBUG - proc_n5.1 -triggered off ['delay_n5.1']
-2018-03-13T14:22:58Z DEBUG - proc_n6.1 -triggered off ['delay_n6.1']
-2018-03-13T14:23:00Z DEBUG - proc_n7.1 -triggered off ['delay_n7.1']
+Initial point: 1
+Final point: 1
+1/delay_n1 -triggered off []
+1/hold -triggered off []
+1/delay_n2 -triggered off ['1/delay_n1']
+1/delay_n3 -triggered off ['1/delay_n2']
+1/delay_n4 -triggered off ['1/delay_n3']
+1/delay_n5 -triggered off ['1/delay_n4']
+1/proc_n1 -triggered off ['1/delay_n1']
+1/delay_n6 -triggered off ['1/delay_n5']
+1/proc_n2 -triggered off ['1/delay_n2']
+1/delay_n7 -triggered off ['1/delay_n6']
+1/proc_n3 -triggered off ['1/delay_n3']
+1/proc_n4 -triggered off ['1/delay_n4']
+1/proc_n5 -triggered off ['1/delay_n5']
+1/proc_n6 -triggered off ['1/delay_n6']
+1/proc_n7 -triggered off ['1/delay_n7']
diff --git a/tests/functional/queues/qsize/reference.log b/tests/functional/queues/qsize/reference.log
index 5b44928e53e..c6ede8462c9 100644
--- a/tests/functional/queues/qsize/reference.log
+++ b/tests/functional/queues/qsize/reference.log
@@ -1,15 +1,15 @@
-2013/11/07 12:01:39 INFO - Initial point: 1
-2013/11/07 12:01:39 INFO - Final point: 1
-2013/11/07 12:01:39 DEBUG - monitor.1 -triggered off []
-2013/11/07 12:01:42 DEBUG - a.1 -triggered off ['monitor.1']
-2013/11/07 12:01:42 DEBUG - c.1 -triggered off ['monitor.1']
-2013/11/07 12:01:55 DEBUG - b.1 -triggered off ['monitor.1']
-2013/11/07 12:01:55 DEBUG - e.1 -triggered off ['monitor.1']
-2013/11/07 12:02:09 DEBUG - g.1 -triggered off ['monitor.1']
-2013/11/07 12:02:09 DEBUG - f.1 -triggered off ['monitor.1']
-2013/11/07 12:02:22 DEBUG - i.1 -triggered off ['monitor.1']
-2013/11/07 12:02:22 DEBUG - h.1 -triggered off ['monitor.1']
-2013/11/07 12:02:35 DEBUG - k.1 -triggered off ['monitor.1']
-2013/11/07 12:02:35 DEBUG - j.1 -triggered off ['monitor.1']
-2013/11/07 12:02:48 DEBUG - l.1 -triggered off ['monitor.1']
-2013/11/07 12:02:48 DEBUG - d.1 -triggered off ['monitor.1']
+Initial point: 1
+Final point: 1
+1/monitor -triggered off []
+1/a -triggered off ['1/monitor']
+1/c -triggered off ['1/monitor']
+1/b -triggered off ['1/monitor']
+1/e -triggered off ['1/monitor']
+1/g -triggered off ['1/monitor']
+1/f -triggered off ['1/monitor']
+1/i -triggered off ['1/monitor']
+1/h -triggered off ['1/monitor']
+1/k -triggered off ['1/monitor']
+1/j -triggered off ['1/monitor']
+1/l -triggered off ['1/monitor']
+1/d -triggered off ['1/monitor']
diff --git a/tests/functional/recurrence-min/00-basic/reference.log b/tests/functional/recurrence-min/00-basic/reference.log
index 592fe2fb796..8e7f1c25aae 100644
--- a/tests/functional/recurrence-min/00-basic/reference.log
+++ b/tests/functional/recurrence-min/00-basic/reference.log
@@ -1,3 +1,3 @@
-2015-03-12T12:00:09Z INFO - Initial point: 20100101T0300Z
-2015-03-12T12:00:09Z INFO - Final point: None
-2015-03-12T12:00:09Z DEBUG - foo.20100101T0600Z -triggered off []
+Initial point: 20100101T0300Z
+Final point: None
+20100101T0600Z/foo -triggered off []
diff --git a/tests/functional/recurrence-min/01-offset-initial/reference.log b/tests/functional/recurrence-min/01-offset-initial/reference.log
index 58ab8f5056a..44cb0a12a65 100644
--- a/tests/functional/recurrence-min/01-offset-initial/reference.log
+++ b/tests/functional/recurrence-min/01-offset-initial/reference.log
@@ -1,3 +1,3 @@
-2015-03-12T12:01:29Z INFO - Initial point: 20100101T0300Z
-2015-03-12T12:01:29Z INFO - Final point: None
-2015-03-12T12:01:29Z DEBUG - foo.20100101T0400Z -triggered off []
+Initial point: 20100101T0300Z
+Final point: None
+20100101T0400Z/foo -triggered off []
diff --git a/tests/functional/recurrence-min/02-offset-truncated/reference.log b/tests/functional/recurrence-min/02-offset-truncated/reference.log
index 5d4ac0df923..77bf7a5d29c 100644
--- a/tests/functional/recurrence-min/02-offset-truncated/reference.log
+++ b/tests/functional/recurrence-min/02-offset-truncated/reference.log
@@ -1,3 +1,3 @@
-2015-03-12T12:02:58Z INFO - Initial point: 20100101T0300Z
-2015-03-12T12:02:58Z INFO - Final point: None
-2015-03-12T12:02:58Z DEBUG - foo.20100101T0700Z -triggered off []
+Initial point: 20100101T0300Z
+Final point: None
+20100101T0700Z/foo -triggered off []
diff --git a/tests/functional/recurrence-min/03-neg-offset-truncated/reference.log b/tests/functional/recurrence-min/03-neg-offset-truncated/reference.log
index 25521eea6b3..44cb0a12a65 100644
--- a/tests/functional/recurrence-min/03-neg-offset-truncated/reference.log
+++ b/tests/functional/recurrence-min/03-neg-offset-truncated/reference.log
@@ -1,3 +1,3 @@
-2015-03-12T12:06:30Z INFO - Initial point: 20100101T0300Z
-2015-03-12T12:06:30Z INFO - Final point: None
-2015-03-12T12:06:30Z DEBUG - foo.20100101T0400Z -triggered off []
+Initial point: 20100101T0300Z
+Final point: None
+20100101T0400Z/foo -triggered off []
diff --git a/tests/functional/reload/00-simple/reference.log b/tests/functional/reload/00-simple/reference.log
index c9c49a03559..ade8b593f7f 100644
--- a/tests/functional/reload/00-simple/reference.log
+++ b/tests/functional/reload/00-simple/reference.log
@@ -1,5 +1,5 @@
-2013/11/05 11:01:45 INFO - Initial point: 1
-2013/11/05 11:01:45 INFO - Final point: 1
-2013/11/05 11:01:45 DEBUG - a.1 -triggered off []
-2013/11/05 11:01:49 DEBUG - b.1 -triggered off ['a.1']
-2013/11/05 11:01:58 DEBUG - c.1 -triggered off ['b.1']
+Initial point: 1
+Final point: 1
+1/a -triggered off []
+1/b -triggered off ['1/a']
+1/c -triggered off ['1/b']
diff --git a/tests/functional/reload/01-startup/reference.log b/tests/functional/reload/01-startup/reference.log
index 07d35fa13ee..5cf728111a2 100644
--- a/tests/functional/reload/01-startup/reference.log
+++ b/tests/functional/reload/01-startup/reference.log
@@ -1,13 +1,13 @@
Initial point: 20100101T00
Final point: 20100102T00
-start.20100101T00 -triggered off []
-a.20100101T00 -triggered off ['c.20091231T18', 'start.20100101T00']
-b.20100101T00 -triggered off ['a.20100101T00']
-c.20100101T00 -triggered off ['b.20100101T00']
-a.20100101T06 -triggered off ['c.20100101T00']
-b.20100101T06 -triggered off ['a.20100101T06']
-c.20100101T06 -triggered off ['b.20100101T06']
-c.20100101T18 -triggered off []
-a.20100102T00 -triggered off ['c.20100101T18']
-b.20100102T00 -triggered off ['a.20100102T00']
-c.20100102T00 -triggered off ['b.20100102T00']
+20100101T00/start -triggered off []
+20100101T00/a -triggered off ['20091231T18/c', '20100101T00/start']
+20100101T00/b -triggered off ['20100101T00/a']
+20100101T00/c -triggered off ['20100101T00/b']
+20100101T06/a -triggered off ['20100101T00/c']
+20100101T06/b -triggered off ['20100101T06/a']
+20100101T06/c -triggered off ['20100101T06/b']
+20100101T18/c -triggered off []
+20100102T00/a -triggered off ['20100101T18/c']
+20100102T00/b -triggered off ['20100102T00/a']
+20100102T00/c -triggered off ['20100102T00/b']
diff --git a/tests/functional/reload/02-content/reference.log b/tests/functional/reload/02-content/reference.log
index 38933924c55..a1f5f0c4726 100644
--- a/tests/functional/reload/02-content/reference.log
+++ b/tests/functional/reload/02-content/reference.log
@@ -1,4 +1,4 @@
-2013/11/05 10:48:58 INFO - Initial point: 1
-2013/11/05 10:48:58 INFO - Final point: 1
-2013/11/05 10:48:58 DEBUG - reloader.1 -triggered off []
-2013/11/05 10:49:02 DEBUG - foo.1 -triggered off ['reloader.1']
+Initial point: 1
+Final point: 1
+1/reloader -triggered off []
+1/foo -triggered off ['1/reloader']
diff --git a/tests/functional/reload/03-queues/reference.log b/tests/functional/reload/03-queues/reference.log
index 583e6bf3b6b..70d9c8ddabf 100644
--- a/tests/functional/reload/03-queues/reference.log
+++ b/tests/functional/reload/03-queues/reference.log
@@ -1,16 +1,16 @@
-2013/11/18 14:56:41 INFO - Initial point: 1
-2013/11/18 14:56:41 INFO - Final point: 1
-2013/11/18 14:56:41 DEBUG - reloader.1 -triggered off []
-2013/11/18 14:56:44 DEBUG - a.1 -triggered off ['reloader.1']
-2013/11/18 14:56:44 DEBUG - c.1 -triggered off ['reloader.1']
-2013/11/18 14:56:44 DEBUG - b.1 -triggered off ['reloader.1']
-2013/11/18 14:56:44 DEBUG - e.1 -triggered off ['reloader.1']
-2013/11/18 14:56:50 DEBUG - monitor.1 -triggered off ['reloader.1']
-2013/11/18 14:56:57 DEBUG - d.1 -triggered off ['reloader.1']
-2013/11/18 14:56:57 DEBUG - g.1 -triggered off ['reloader.1']
-2013/11/18 14:56:57 DEBUG - f.1 -triggered off ['reloader.1']
-2013/11/18 14:57:11 DEBUG - i.1 -triggered off ['reloader.1']
-2013/11/18 14:57:11 DEBUG - h.1 -triggered off ['reloader.1']
-2013/11/18 14:57:12 DEBUG - k.1 -triggered off ['reloader.1']
-2013/11/18 14:57:24 DEBUG - j.1 -triggered off ['reloader.1']
-2013/11/18 14:57:24 DEBUG - l.1 -triggered off ['reloader.1']
+Initial point: 1
+Final point: 1
+1/reloader -triggered off []
+1/a -triggered off ['1/reloader']
+1/c -triggered off ['1/reloader']
+1/b -triggered off ['1/reloader']
+1/e -triggered off ['1/reloader']
+1/monitor -triggered off ['1/reloader']
+1/d -triggered off ['1/reloader']
+1/g -triggered off ['1/reloader']
+1/f -triggered off ['1/reloader']
+1/i -triggered off ['1/reloader']
+1/h -triggered off ['1/reloader']
+1/k -triggered off ['1/reloader']
+1/j -triggered off ['1/reloader']
+1/l -triggered off ['1/reloader']
diff --git a/tests/functional/reload/04-inheritance/reference.log b/tests/functional/reload/04-inheritance/reference.log
index b6ba2bad0e7..2f0de54d795 100644
--- a/tests/functional/reload/04-inheritance/reference.log
+++ b/tests/functional/reload/04-inheritance/reference.log
@@ -1,4 +1,4 @@
-2013/11/05 11:00:11 INFO - Initial point: 1
-2013/11/05 11:00:11 INFO - Final point: 1
-2013/11/05 11:00:11 DEBUG - reloader.1 -triggered off []
-2013/11/05 11:00:20 DEBUG - inheritor.1 -triggered off ['reloader.1']
+Initial point: 1
+Final point: 1
+1/reloader -triggered off []
+1/inheritor -triggered off ['1/reloader']
diff --git a/tests/functional/reload/05-graphing-simple/reference.log b/tests/functional/reload/05-graphing-simple/reference.log
index d46e7eb2529..9964f993934 100644
--- a/tests/functional/reload/05-graphing-simple/reference.log
+++ b/tests/functional/reload/05-graphing-simple/reference.log
@@ -1,6 +1,6 @@
-2013/11/05 10:59:35 INFO - Initial point: 1
-2013/11/05 10:59:35 INFO - Final point: 1
-2013/11/05 10:59:35 DEBUG - reloader.1 -triggered off []
-2013/11/05 10:59:44 DEBUG - inter.1 -triggered off ['reloader.1']
-2013/11/05 10:59:44 DEBUG - foo.1 -triggered off ['inter.1']
-2013/11/05 10:59:52 DEBUG - bar.1 -triggered off ['foo.1']
+Initial point: 1
+Final point: 1
+1/reloader -triggered off []
+1/inter -triggered off ['1/reloader']
+1/foo -triggered off ['1/inter']
+1/bar -triggered off ['1/foo']
diff --git a/tests/functional/reload/06-graphing-fam/reference.log b/tests/functional/reload/06-graphing-fam/reference.log
index c894fe05e91..30d8db6346e 100644
--- a/tests/functional/reload/06-graphing-fam/reference.log
+++ b/tests/functional/reload/06-graphing-fam/reference.log
@@ -1,12 +1,12 @@
-2013/11/05 10:58:59 INFO - Initial point: 1
-2013/11/05 10:58:59 INFO - Final point: 1
-2013/11/05 10:58:59 DEBUG - reloader.1 -triggered off []
-2013/11/05 10:58:59 DEBUG - inter.1 -triggered off ['reloader.1']
-2013/11/05 10:59:08 DEBUG - a.1 -triggered off ['inter.1']
-2013/11/05 10:59:08 DEBUG - c.1 -triggered off ['inter.1']
-2013/11/05 10:59:08 DEBUG - b.1 -triggered off ['inter.1']
-2013/11/05 10:59:08 DEBUG - d.1 -triggered off ['inter.1']
-2013/11/05 10:59:16 DEBUG - e.1 -triggered off ['a.1', 'b.1', 'c.1', 'd.1']
-2013/11/05 10:59:16 DEBUG - g.1 -triggered off ['a.1', 'b.1', 'c.1', 'd.1']
-2013/11/05 10:59:16 DEBUG - f.1 -triggered off ['a.1', 'b.1', 'c.1', 'd.1']
-2013/11/05 10:59:16 DEBUG - h.1 -triggered off ['a.1', 'b.1', 'c.1', 'd.1']
+Initial point: 1
+Final point: 1
+1/reloader -triggered off []
+1/inter -triggered off ['1/reloader']
+1/a -triggered off ['1/inter']
+1/c -triggered off ['1/inter']
+1/b -triggered off ['1/inter']
+1/d -triggered off ['1/inter']
+1/e -triggered off ['1/a', '1/b', '1/c', '1/d']
+1/g -triggered off ['1/a', '1/b', '1/c', '1/d']
+1/f -triggered off ['1/a', '1/b', '1/c', '1/d']
+1/h -triggered off ['1/a', '1/b', '1/c', '1/d']
diff --git a/tests/functional/reload/07-final-cycle/reference.log b/tests/functional/reload/07-final-cycle/reference.log
index 30d66a78d3c..157e4afbf15 100644
--- a/tests/functional/reload/07-final-cycle/reference.log
+++ b/tests/functional/reload/07-final-cycle/reference.log
@@ -1,6 +1,6 @@
Initial point: 20100101T0000Z
Final point: 20100102T0000Z
-reloader.20100101T0000Z -triggered off []
-a.20100101T0000Z -triggered off ['a.20091231T1800Z', 'reloader.20100101T0000Z']
-a.20100101T0600Z -triggered off ['a.20100101T0000Z']
-a.20100101T1200Z -triggered off ['a.20100101T0600Z']
+20100101T0000Z/reloader -triggered off []
+20100101T0000Z/a -triggered off ['20091231T1800Z/a', '20100101T0000Z/reloader']
+20100101T0600Z/a -triggered off ['20100101T0000Z/a']
+20100101T1200Z/a -triggered off ['20100101T0600Z/a']
diff --git a/tests/functional/reload/08-cycle/reference.log b/tests/functional/reload/08-cycle/reference.log
index 1a9f2558fc9..c72b82eb258 100644
--- a/tests/functional/reload/08-cycle/reference.log
+++ b/tests/functional/reload/08-cycle/reference.log
@@ -1,7 +1,7 @@
Initial point: 20100101T0000Z
Final point: 20100101T1800Z
-reloader.20100101T0000Z -triggered off []
-a.20100101T0000Z -triggered off ['a.20091231T1800Z', 'reloader.20100101T0000Z']
-a.20100101T0600Z -triggered off ['a.20100101T0000Z']
-a.20100101T1200Z -triggered off ['a.20100101T0600Z']
-a.20100101T1800Z -triggered off ['a.20100101T1200Z']
+20100101T0000Z/reloader -triggered off []
+20100101T0000Z/a -triggered off ['20091231T1800Z/a', '20100101T0000Z/reloader']
+20100101T0600Z/a -triggered off ['20100101T0000Z/a']
+20100101T1200Z/a -triggered off ['20100101T0600Z/a']
+20100101T1800Z/a -triggered off ['20100101T1200Z/a']
diff --git a/tests/functional/reload/11-retrying/flow.cylc b/tests/functional/reload/11-retrying/flow.cylc
index 52191a76d40..d5b278b2798 100644
--- a/tests/functional/reload/11-retrying/flow.cylc
+++ b/tests/functional/reload/11-retrying/flow.cylc
@@ -1,28 +1,30 @@
[meta]
title = "test that a reloaded retrying task does retry"
- description = """this requires some state vars to be carried over to the
-new task proxy; ref github #945"""
+ description = """
+ this requires some state vars to be carried over to the
+ new task proxy; ref github #945
+ """
[scheduling]
[[graph]]
R1 = retrier & reloader
[runtime]
[[retrier]]
script = """
-cylc__job__wait_cylc_message_started
-sleep 1
-if ((CYLC_TASK_TRY_NUMBER == 1)); then
- # Kill the job, so task will go into waiting (held)
- cylc kill "${CYLC_WORKFLOW_ID}" 'retrier.1'
- sleep 120 # Does not matter how long as the job will be killed
-fi
+ cylc__job__wait_cylc_message_started
+ sleep 1
+ if ((CYLC_TASK_TRY_NUMBER == 1)); then
+ # Kill the job, so task will go into waiting (held)
+ cylc kill "${CYLC_WORKFLOW_ID}//1/retrier"
+ sleep 120 # Does not matter how long as the job will be killed
+ fi
"""
[[[job]]]
execution retry delays = PT0S
[[reloader]]
script = """
-cylc__job__poll_grep_workflow_log -E 'retrier\.1 running\(held\) .* => waiting\(held\)'
-cylc reload "${CYLC_WORKFLOW_ID}"
-cylc reload "${CYLC_WORKFLOW_ID}"
-cylc__job__poll_grep_workflow_log -F 'Reload completed'
-cylc release "${CYLC_WORKFLOW_ID}" 'retrier.1'
+ cylc__job__poll_grep_workflow_log -E '1/retrier running\(held\) .* => waiting\(held\)'
+ cylc reload "${CYLC_WORKFLOW_ID}"
+ cylc reload "${CYLC_WORKFLOW_ID}"
+ cylc__job__poll_grep_workflow_log -F 'Reload completed'
+ cylc release "${CYLC_WORKFLOW_ID}//1/retrier"
"""
diff --git a/tests/functional/reload/11-retrying/reference.log b/tests/functional/reload/11-retrying/reference.log
index 159fd1d4564..bda2f612bf2 100644
--- a/tests/functional/reload/11-retrying/reference.log
+++ b/tests/functional/reload/11-retrying/reference.log
@@ -1,5 +1,5 @@
Initial point: 1
Final point: 1
-retrier.1 -triggered off []
-reloader.1 -triggered off []
-retrier.1 -triggered off []
+1/retrier -triggered off []
+1/reloader -triggered off []
+1/retrier -triggered off []
diff --git a/tests/functional/reload/12-remove-task/reference.log b/tests/functional/reload/12-remove-task/reference.log
index ffbaf9322f1..332b846626f 100644
--- a/tests/functional/reload/12-remove-task/reference.log
+++ b/tests/functional/reload/12-remove-task/reference.log
@@ -1,5 +1,5 @@
-2014-10-29T15:19:51Z INFO - Initial point: 1
-2014-10-29T15:19:51Z INFO - Final point: 1
-2014-10-29T15:19:51Z DEBUG - reloader.1 -triggered off []
-2014-10-29T15:20:05Z DEBUG - inter.1 -triggered off ['reloader.1']
-2014-10-29T15:20:05Z DEBUG - foo.1 -triggered off ['inter.1']
+Initial point: 1
+Final point: 1
+1/reloader -triggered off []
+1/inter -triggered off ['1/reloader']
+1/foo -triggered off ['1/inter']
diff --git a/tests/functional/reload/13-add-task/reference.log b/tests/functional/reload/13-add-task/reference.log
index e13c9fd8127..e82950a62be 100644
--- a/tests/functional/reload/13-add-task/reference.log
+++ b/tests/functional/reload/13-add-task/reference.log
@@ -1,5 +1,5 @@
-2014-10-31T13:50:55+13 INFO - Initial point: 1
-2014-10-31T13:50:55+13 INFO - Final point: 1
-2014-10-31T13:50:55+13 DEBUG - reloader.1 -triggered off []
-2014-10-31T13:51:08+13 DEBUG - foo.1 -triggered off ['reloader.1']
-2014-10-31T13:51:08+13 DEBUG - add_me.1 -triggered off ['foo.1']
+Initial point: 1
+Final point: 1
+1/reloader -triggered off []
+1/foo -triggered off ['1/reloader']
+1/add_me -triggered off ['1/foo']
diff --git a/tests/functional/reload/14-waiting/flow.cylc b/tests/functional/reload/14-waiting/flow.cylc
index 3cbfe60f8c2..f81ac3533b0 100644
--- a/tests/functional/reload/14-waiting/flow.cylc
+++ b/tests/functional/reload/14-waiting/flow.cylc
@@ -24,7 +24,7 @@ done
[[reloader]]
script = """
cylc reload "${CYLC_WORKFLOW_ID}"
-cylc__job__poll_grep_workflow_log -E 'waiter\.1 .* reloaded task definition'
+cylc__job__poll_grep_workflow_log -E '1/waiter .* reloaded task definition'
rm -f "${CYLC_WORKFLOW_WORK_DIR}/1/sleeping-waiter/file"
rm -f "${CYLC_WORKFLOW_WORK_DIR}/1/starter/file"
"""
diff --git a/tests/functional/reload/14-waiting/reference.log b/tests/functional/reload/14-waiting/reference.log
index eaf0099bdbb..e9cf3b1b2e0 100644
--- a/tests/functional/reload/14-waiting/reference.log
+++ b/tests/functional/reload/14-waiting/reference.log
@@ -1,6 +1,6 @@
-2014-11-13T10:12:31Z INFO - Initial point: 1
-2014-11-13T10:12:31Z INFO - Final point: 1
-2014-11-13T10:12:31Z DEBUG - starter.1 -triggered off []
-2014-11-13T10:12:31Z DEBUG - sleeping-waiter.1 -triggered off []
-2014-11-13T10:12:34Z DEBUG - reloader.1 -triggered off ['sleeping-waiter.1']
-2014-11-13T10:12:40Z DEBUG - waiter.1 -triggered off ['sleeping-waiter.1', 'starter.1']
+Initial point: 1
+Final point: 1
+1/starter -triggered off []
+1/sleeping-waiter -triggered off []
+1/reloader -triggered off ['1/sleeping-waiter']
+1/waiter -triggered off ['1/sleeping-waiter', '1/starter']
diff --git a/tests/functional/reload/16-remove-add-alter-task/reference.log b/tests/functional/reload/16-remove-add-alter-task/reference.log
index 0abd8f98e78..cde339ee931 100644
--- a/tests/functional/reload/16-remove-add-alter-task/reference.log
+++ b/tests/functional/reload/16-remove-add-alter-task/reference.log
@@ -1,5 +1,5 @@
-2016-05-03T09:57:39Z INFO - Initial point: 1
-2016-05-03T09:57:39Z INFO - Final point: 1
-2016-05-03T09:57:39Z DEBUG - reloader.1 -triggered off []
-2016-05-03T09:57:39Z DEBUG - inter.1 -triggered off ['reloader.1']
-2016-05-03T09:58:24Z DEBUG - remove_add_alter_me.1 -triggered off ['inter.1']
+Initial point: 1
+Final point: 1
+1/reloader -triggered off []
+1/inter -triggered off ['1/reloader']
+1/remove_add_alter_me -triggered off ['1/inter']
diff --git a/tests/functional/reload/17-graphing-change.t b/tests/functional/reload/17-graphing-change.t
index d2824653d4c..81aa8b58754 100755
--- a/tests/functional/reload/17-graphing-change.t
+++ b/tests/functional/reload/17-graphing-change.t
@@ -66,8 +66,8 @@ cp "${TEST_SOURCE_DIR}/graphing-change/flow-2.cylc" \
"${RUN_DIR}/${WORKFLOW_NAME}/flow.cylc"
# Spawn a couple of task proxies, to get "task definition removed" message.
-cylc set-outputs --flow=1 "${WORKFLOW_NAME}" foo.1
-cylc set-outputs --flow=1 "${WORKFLOW_NAME}" baz.1
+cylc set-outputs --flow=1 "${WORKFLOW_NAME}//1/foo"
+cylc set-outputs --flow=1 "${WORKFLOW_NAME}//1/baz"
# reload workflow
run_ok "${TEST_NAME_BASE}-swap-reload" cylc reload "${WORKFLOW_NAME}"
poll grep_workflow_log_n_times 'Reload completed' 3
@@ -76,8 +76,8 @@ poll grep_workflow_log_n_times 'Reload completed' 3
grep_ok "Added task: 'one'" "${LOG_FILE}"
grep_ok "Added task: 'add'" "${LOG_FILE}"
grep_ok "Added task: 'boo'" "${LOG_FILE}"
-grep_ok "\\[bar.*\\].*task definition removed" "${LOG_FILE}"
-grep_ok "\\[bol.*\\].*task definition removed" "${LOG_FILE}"
+grep_ok "\\[1/bar.*\\].*task definition removed" "${LOG_FILE}"
+grep_ok "\\[1/bol.*\\].*task definition removed" "${LOG_FILE}"
run_ok "${TEST_NAME_BASE}-stop" \
cylc stop --max-polls=10 --interval=2 "${WORKFLOW_NAME}"
diff --git a/tests/functional/reload/18-broadcast-insert/flow.cylc b/tests/functional/reload/18-broadcast-insert/flow.cylc
index 50766e6c3a4..35f52f9cbb5 100644
--- a/tests/functional/reload/18-broadcast-insert/flow.cylc
+++ b/tests/functional/reload/18-broadcast-insert/flow.cylc
@@ -5,9 +5,12 @@
[runtime]
[[foo]]
script="""
-cylc broadcast "${CYLC_WORKFLOW_ID}" -s '[environment]CYLC_TEST_VAR=1'
-cp -p "${CYLC_WORKFLOW_RUN_DIR}/flow-2.cylc" "${CYLC_WORKFLOW_RUN_DIR}/flow.cylc"
-cylc reload "${CYLC_WORKFLOW_ID}"
-sleep 5
-cylc trigger "${CYLC_WORKFLOW_ID}" 'bar.1'
-"""
+ cylc broadcast "${CYLC_WORKFLOW_ID}" \
+ -s '[environment]CYLC_TEST_VAR=1'
+ cp -p \
+ "${CYLC_WORKFLOW_RUN_DIR}/flow-2.cylc" \
+ "${CYLC_WORKFLOW_RUN_DIR}/flow.cylc"
+ cylc reload "${CYLC_WORKFLOW_ID}"
+ sleep 5
+ cylc trigger "${CYLC_WORKFLOW_ID}//1/bar"
+ """
diff --git a/tests/functional/reload/18-broadcast-insert/reference.log b/tests/functional/reload/18-broadcast-insert/reference.log
index 77198278217..499c919d40d 100644
--- a/tests/functional/reload/18-broadcast-insert/reference.log
+++ b/tests/functional/reload/18-broadcast-insert/reference.log
@@ -1,4 +1,4 @@
-2016-07-08T14:53:12+01 INFO - Initial point: 1
-2016-07-08T14:53:12+01 INFO - Final point: 1
-2016-07-08T14:53:12+01 DEBUG - foo.1 -triggered off []
-2016-07-08T14:53:19+01 DEBUG - bar.1 -triggered off []
+Initial point: 1
+Final point: 1
+1/foo -triggered off []
+1/bar -triggered off []
diff --git a/tests/functional/reload/19-remote-kill/flow.cylc b/tests/functional/reload/19-remote-kill/flow.cylc
index 4a40264b300..2bd548b15f7 100644
--- a/tests/functional/reload/19-remote-kill/flow.cylc
+++ b/tests/functional/reload/19-remote-kill/flow.cylc
@@ -4,7 +4,7 @@
[[events]]
abort on stall timeout = True
stall timeout = PT0S
- expected task failures = foo.1
+ expected task failures = 1/foo
[scheduling]
[[graph]]
@@ -16,8 +16,8 @@
cylc__job__wait_cylc_message_started
cylc reload "${CYLC_WORKFLOW_ID}"
cylc__job__poll_grep_workflow_log -F 'Reload completed'
- cylc kill "${CYLC_WORKFLOW_ID}" 'foo.1'
- cylc__job__poll_grep_workflow_log -E 'foo\.1 failed\(held\) job:01.* job killed'
+ cylc kill "${CYLC_WORKFLOW_ID}//1/foo"
+ cylc__job__poll_grep_workflow_log -E '1/foo failed\(held\) job:01.* job killed'
"""
[[[job]]]
execution time limit = PT1M
diff --git a/tests/functional/reload/19-remote-kill/reference.log b/tests/functional/reload/19-remote-kill/reference.log
index da823349e1a..1a9f846c98d 100644
--- a/tests/functional/reload/19-remote-kill/reference.log
+++ b/tests/functional/reload/19-remote-kill/reference.log
@@ -1,4 +1,4 @@
-2016-07-08T14:53:12+01 INFO - Initial point: 1
-2016-07-08T14:53:12+01 INFO - Final point: 1
-2016-07-08T14:53:12+01 DEBUG - foo.1 -triggered off []
-2016-07-08T14:53:19+01 DEBUG - bar.1 -triggered off ['foo.1']
+Initial point: 1
+Final point: 1
+1/foo -triggered off []
+1/bar -triggered off ['1/foo']
diff --git a/tests/functional/reload/20-stop-point/flow.cylc b/tests/functional/reload/20-stop-point/flow.cylc
index 5a74161ea70..538328c8ee2 100644
--- a/tests/functional/reload/20-stop-point/flow.cylc
+++ b/tests/functional/reload/20-stop-point/flow.cylc
@@ -15,7 +15,7 @@
[runtime]
[[set-stop-point]]
- script = cylc stop "${CYLC_WORKFLOW_ID}" '3'
+ script = cylc stop "${CYLC_WORKFLOW_ID}//3"
[[reload]]
script = """
cylc__job__wait_cylc_message_started
diff --git a/tests/functional/reload/20-stop-point/reference.log b/tests/functional/reload/20-stop-point/reference.log
index 950ddb5dd9e..2822c1470fa 100644
--- a/tests/functional/reload/20-stop-point/reference.log
+++ b/tests/functional/reload/20-stop-point/reference.log
@@ -1,7 +1,7 @@
-INFO - Initial point: 1
-INFO - Final point: 5
-DEBUG - set-stop-point.1 -triggered off []
-DEBUG - reload.1 -triggered off ['set-stop-point.1']
-DEBUG - t1.1 -triggered off ['reload.1', 't1.0']
-DEBUG - t1.2 -triggered off ['t1.1']
-DEBUG - t1.3 -triggered off ['t1.2']
+Initial point: 1
+Final point: 5
+1/set-stop-point -triggered off []
+1/reload -triggered off ['1/set-stop-point']
+1/t1 -triggered off ['0/t1', '1/reload']
+2/t1 -triggered off ['1/t1']
+3/t1 -triggered off ['2/t1']
diff --git a/tests/functional/reload/21-submit-fail/flow.cylc b/tests/functional/reload/21-submit-fail/flow.cylc
index 5a5b5c0a1e1..c1821e1b81f 100644
--- a/tests/functional/reload/21-submit-fail/flow.cylc
+++ b/tests/functional/reload/21-submit-fail/flow.cylc
@@ -3,7 +3,7 @@
[[events]]
abort on stall timeout = True
stall timeout = PT0S
- expected task failures = t1.1
+ expected task failures = 1/t1
[scheduling]
[[graph]]
R1="""
diff --git a/tests/functional/reload/garbage/reference.log b/tests/functional/reload/garbage/reference.log
index 7f5efb47268..a1f5f0c4726 100644
--- a/tests/functional/reload/garbage/reference.log
+++ b/tests/functional/reload/garbage/reference.log
@@ -1,4 +1,4 @@
-2013/11/06 10:27:36 INFO - Initial point: 1
-2013/11/06 10:27:36 INFO - Final point: 1
-2013/11/06 10:27:36 DEBUG - reloader.1 -triggered off []
-2013/11/06 10:27:45 DEBUG - foo.1 -triggered off ['reloader.1']
+Initial point: 1
+Final point: 1
+1/reloader -triggered off []
+1/foo -triggered off ['1/reloader']
diff --git a/tests/functional/reload/runahead/flow.cylc b/tests/functional/reload/runahead/flow.cylc
index cc0d837a789..5f6640ee6c9 100644
--- a/tests/functional/reload/runahead/flow.cylc
+++ b/tests/functional/reload/runahead/flow.cylc
@@ -3,6 +3,7 @@
[[events]]
stall timeout = PT0.2M
abort on stall timeout = True
+
[scheduling]
initial cycle point = 2010-01-01
final cycle point = 2010-01-05
@@ -11,6 +12,7 @@
# oops is stuck waiting task to hold back runahead
R1/T00 = "foo & reloader => oops"
T00/PT6H = "foo => bar"
+
[runtime]
[[foo]]
script = false
@@ -18,7 +20,7 @@
script = true
[[reloader]]
script = """
-cylc__job__poll_grep_workflow_log -E "foo\.${CYLC_TASK_CYCLE_POINT} running .*\(received\)failed"
-perl -pi -e 's/(runahead limit = )P2( # marker)/\1 P4\2/' $CYLC_WORKFLOW_RUN_DIR/flow.cylc
-cylc reload $CYLC_WORKFLOW_ID
-"""
+ cylc__job__poll_grep_workflow_log -E "${CYLC_TASK_CYCLE_POINT}/foo running .*\(received\)failed"
+ perl -pi -e 's/(runahead limit = )P2( # marker)/\1 P4\2/' $CYLC_WORKFLOW_RUN_DIR/flow.cylc
+ cylc reload $CYLC_WORKFLOW_ID
+ """
diff --git a/tests/functional/remote/03-polled-task-started/flow.cylc b/tests/functional/remote/03-polled-task-started/flow.cylc
index d74820c50ed..45bd9ae43c8 100644
--- a/tests/functional/remote/03-polled-task-started/flow.cylc
+++ b/tests/functional/remote/03-polled-task-started/flow.cylc
@@ -2,7 +2,7 @@
[scheduler]
allow implicit tasks = True
[[events]]
- expected task failures = janeway.1
+ expected task failures = 1/janeway
[scheduling]
cycling mode = integer
[[graph]]
diff --git a/tests/functional/remote/03-polled-task-started/reference.log b/tests/functional/remote/03-polled-task-started/reference.log
index 10ad68e1c41..9824d27682e 100644
--- a/tests/functional/remote/03-polled-task-started/reference.log
+++ b/tests/functional/remote/03-polled-task-started/reference.log
@@ -1,5 +1,5 @@
-DEBUG - picard.1 -triggered off []
-DEBUG - worf.1 -triggered off ['picard.1']
-DEBUG - riker.1 -triggered off ['picard.1']
-DEBUG - janeway.1 -triggered off []
-DEBUG - tuvok.1 -triggered off ['janeway.1']
+1/picard -triggered off []
+1/worf -triggered off ['1/picard']
+1/riker -triggered off ['1/picard']
+1/janeway -triggered off []
+1/tuvok -triggered off ['1/janeway']
diff --git a/tests/functional/remote/05-remote-init.t b/tests/functional/remote/05-remote-init.t
index a66a23371df..648c0727b58 100644
--- a/tests/functional/remote/05-remote-init.t
+++ b/tests/functional/remote/05-remote-init.t
@@ -53,8 +53,8 @@ g|0|0|localhost
__SELECT__
grep_ok "WARNING - Incomplete tasks:" "${TEST_NAME_BASE}-run.stderr"
-grep_ok "a.1 did not complete required outputs" "${TEST_NAME_BASE}-run.stderr"
-grep_ok "b.1 did not complete required outputs" "${TEST_NAME_BASE}-run.stderr"
+grep_ok "1/a did not complete required outputs" "${TEST_NAME_BASE}-run.stderr"
+grep_ok "1/b did not complete required outputs" "${TEST_NAME_BASE}-run.stderr"
purge
exit
diff --git a/tests/functional/remote/06-poll.t b/tests/functional/remote/06-poll.t
index 5d7200bb25b..251c62961ca 100644
--- a/tests/functional/remote/06-poll.t
+++ b/tests/functional/remote/06-poll.t
@@ -52,8 +52,8 @@ log_scan \
"$(cylc cat-log -m p "$WORKFLOW_NAME")" \
10 \
1 \
- '\[foo\.1 submitted .* (polled)foo' \
- '\[foo\.1 submitted .* (polled)succeeded'
+ '\[1/foo submitted .* (polled)foo' \
+ '\[1/foo submitted .* (polled)succeeded'
purge
exit
diff --git a/tests/functional/remote/basic/reference.log b/tests/functional/remote/basic/reference.log
index daab7c24b9b..08fe5d5558a 100644
--- a/tests/functional/remote/basic/reference.log
+++ b/tests/functional/remote/basic/reference.log
@@ -1,3 +1,3 @@
-2015-02-03T15:12:56Z INFO - Initial point: 1
-2015-02-03T15:12:56Z INFO - Final point: 1
-2015-02-03T15:12:56Z DEBUG - foo.1 -triggered off []
+Initial point: 1
+Final point: 1
+1/foo -triggered off []
diff --git a/tests/functional/restart/08-stop-after-cycle-point.t b/tests/functional/restart/08-stop-after-cycle-point.t
index ed6e090904c..aaac8d8b30b 100644
--- a/tests/functional/restart/08-stop-after-cycle-point.t
+++ b/tests/functional/restart/08-stop-after-cycle-point.t
@@ -59,7 +59,7 @@ workflow_run_ok "${TEST_NAME_BASE}-restart-db-stopcp" \
dumpdbtables
# Stop point should be removed from DB once reached
cmp_ok stopcp.out < /dev/null
-# Task hello.1974 (after stop point) should be spawned but not submitted
+# Task 1974/hello (after stop point) should be spawned but not submitted
cmp_ok taskpool.out <<'__OUT__'
1974|hello|waiting
__OUT__
diff --git a/tests/functional/restart/08-stop-after-cycle-point/reference.log b/tests/functional/restart/08-stop-after-cycle-point/reference.log
index 5d409627723..dadf3f0c405 100644
--- a/tests/functional/restart/08-stop-after-cycle-point/reference.log
+++ b/tests/functional/restart/08-stop-after-cycle-point/reference.log
@@ -1,4 +1,4 @@
-Initial point: 19700101T0000Z
-Final point: 19700101T0300Z
-hello.19700101T0000Z -triggered off ['hello.19691231T2300Z']
-hello.19700101T0100Z -triggered off ['hello.19700101T0000Z']
+nitial point: 19700101T0000Z
+inal point: 19700101T0300Z
+19700101T0000Z/hello -triggered off ['19691231T2300Z/hello']
+19700101T0100Z/hello -triggered off ['19700101T0000Z/hello']
diff --git a/tests/functional/restart/16-template-vars/reference.log b/tests/functional/restart/16-template-vars/reference.log
index 127ccdd8873..df6f2c7ca76 100644
--- a/tests/functional/restart/16-template-vars/reference.log
+++ b/tests/functional/restart/16-template-vars/reference.log
@@ -1,4 +1,4 @@
-2016-06-30T11:27:42Z INFO - Initial point: 20160101T0000Z
-2016-06-30T11:27:42Z INFO - Final point: 20200101T0000Z
-2016-06-30T11:27:42Z DEBUG - foo.20190101T0000Z -triggered off []
-2016-06-30T11:27:44Z DEBUG - foo.20200101T0000Z -triggered off []
+Initial point: 20160101T0000Z
+Final point: 20200101T0000Z
+20190101T0000Z/foo -triggered off []
+20200101T0000Z/foo -triggered off []
diff --git a/tests/functional/restart/18-template-vars-override/reference.log b/tests/functional/restart/18-template-vars-override/reference.log
index e7e59303de4..d32a8934c83 100644
--- a/tests/functional/restart/18-template-vars-override/reference.log
+++ b/tests/functional/restart/18-template-vars-override/reference.log
@@ -1,6 +1,6 @@
-2016-06-30T11:27:42Z INFO - Initial point: 20160101T0000Z
-2016-06-30T11:27:42Z INFO - Final point: 20220101T0000Z
-2016-06-30T11:27:42Z DEBUG - foo.20190101T0000Z -triggered off []
-2016-06-30T11:27:44Z DEBUG - foo.20200101T0000Z -triggered off []
-2016-06-30T11:27:44Z DEBUG - foo.20210101T0000Z -triggered off []
-2016-06-30T11:27:44Z DEBUG - foo.20220101T0000Z -triggered off []
+Initial point: 20160101T0000Z
+Final point: 20220101T0000Z
+20190101T0000Z/foo -triggered off []
+20200101T0000Z/foo -triggered off []
+20210101T0000Z/foo -triggered off []
+20220101T0000Z/foo -triggered off []
diff --git a/tests/functional/restart/20-event-retry.t b/tests/functional/restart/20-event-retry.t
index d00f9d9c0ca..a3a4e496348 100755
--- a/tests/functional/restart/20-event-retry.t
+++ b/tests/functional/restart/20-event-retry.t
@@ -33,7 +33,7 @@ cmp_ok "${WORKFLOWD}/file" <<'__TEXT__'
2
__TEXT__
grep_ok 'LOADING task action timers' "${WORKFLOWD}/log/workflow/log"
-grep_ok "+ t01\\.1 \[\['event-handler-00', 'succeeded'\], 1\]" "${WORKFLOWD}/log/workflow/log"
+grep_ok "+ 1/t01 \[\['event-handler-00', 'succeeded'\], 1\]" "${WORKFLOWD}/log/workflow/log"
purge
exit
diff --git a/tests/functional/restart/22-hold.t b/tests/functional/restart/22-hold.t
index fb10fd4e4a3..777c50d5313 100755
--- a/tests/functional/restart/22-hold.t
+++ b/tests/functional/restart/22-hold.t
@@ -40,7 +40,7 @@ cmp_ok 'tasks_to_hold-1.out' << __EOF__
__EOF__
workflow_run_ok "${TEST_NAME_BASE}-restart" cylc play "${WORKFLOW_NAME}" --debug --no-detach
-grep_ok 'INFO - + t2\.2016 waiting (held)' "${WORKFLOW_RUN_DIR}/log/workflow/log"
+grep_ok 'INFO - + 2016/t2 waiting (held)' "${WORKFLOW_RUN_DIR}/log/workflow/log"
# Check task pool
sqlite3 "${WORKFLOW_RUN_DIR}/log/db" \
'SELECT * FROM task_pool' >'task_pool-end.out'
diff --git a/tests/functional/restart/22-hold/flow.cylc b/tests/functional/restart/22-hold/flow.cylc
index 8a752db7549..4f2b44bdde8 100644
--- a/tests/functional/restart/22-hold/flow.cylc
+++ b/tests/functional/restart/22-hold/flow.cylc
@@ -17,11 +17,11 @@
[[t1]]
script = """
if [[ "${CYLC_TASK_CYCLE_POINT}" == '2016' ]]; then
- cylc__job__poll_grep_workflow_log -E 't2\.2016 .* spawned'
- cylc hold "${CYLC_WORKFLOW_ID}" t2.2016 t2.2017
+ cylc__job__poll_grep_workflow_log -E '2016/t2 .* spawned'
+ cylc hold "${CYLC_WORKFLOW_ID}//" //2016/t2 //2017/t2
cylc stop "${CYLC_WORKFLOW_ID}"
else
- cylc release "${CYLC_WORKFLOW_ID}" t2.2016 t2.2017
+ cylc release "${CYLC_WORKFLOW_ID}//" //2016/t2 //2017/t2
fi
"""
[[fast]]
diff --git a/tests/functional/restart/23-hold-retry.t b/tests/functional/restart/23-hold-retry.t
index ac66242cb09..b53d9fe6f12 100755
--- a/tests/functional/restart/23-hold-retry.t
+++ b/tests/functional/restart/23-hold-retry.t
@@ -35,9 +35,9 @@ __OUT__
cylc play "${WORKFLOW_NAME}" --debug --no-detach 1>'out' 2>&1 &
WORKFLOW_PID=$!
-poll_grep_workflow_log -F 'INFO - + t1.1 waiting (held)'
+poll_grep_workflow_log -F 'INFO - + 1/t1 waiting (held)'
-run_ok "${TEST_NAME_BASE}-release" cylc release "${WORKFLOW_NAME}" t1.1
+run_ok "${TEST_NAME_BASE}-release" cylc release "${WORKFLOW_NAME}//1/t1"
poll_grep_workflow_log -F 'INFO - DONE'
diff --git a/tests/functional/restart/23-hold-retry/flow.cylc b/tests/functional/restart/23-hold-retry/flow.cylc
index 81c5caa42e1..aca690e275f 100644
--- a/tests/functional/restart/23-hold-retry/flow.cylc
+++ b/tests/functional/restart/23-hold-retry/flow.cylc
@@ -10,11 +10,11 @@
[runtime]
[[t1]]
script = """
-if ((CYLC_TASK_TRY_NUMBER == 1)); then
- cylc stop "${CYLC_WORKFLOW_ID}"
- cylc kill "${CYLC_WORKFLOW_ID}" "${CYLC_TASK_ID}"
- sleep 120 # Should not matter because the job will be killed
-fi
-"""
+ if ((CYLC_TASK_TRY_NUMBER == 1)); then
+ cylc stop "${CYLC_WORKFLOW_ID}"
+ cylc kill "${CYLC_WORKFLOW_ID}//${CYLC_TASK_ID}"
+ sleep 120 # Should not matter because the job will be killed
+ fi
+ """
[[[job]]]
execution retry delays = PT0S
diff --git a/tests/functional/restart/25-hold-workflow.t b/tests/functional/restart/25-hold-workflow.t
index f6b005313bd..058d9e15107 100755
--- a/tests/functional/restart/25-hold-workflow.t
+++ b/tests/functional/restart/25-hold-workflow.t
@@ -39,11 +39,11 @@ cylc play "${WORKFLOW_NAME}" --debug --no-detach 1>"${TEST_NAME_BASE}-restart.ou
CYLC_RESTART_PID=$!
poll_workflow_running
-cylc release "${WORKFLOW_NAME}" 't2.2016'
+cylc release "${WORKFLOW_NAME}//2016/t2"
poll_grep 'CYLC_JOB_EXIT' "${WORKFLOW_RUN_DIR}/log/job/2016/t2/01/job.status"
cylc release --all "${WORKFLOW_NAME}"
-cylc poll "${WORKFLOW_NAME}"
+cylc poll "${WORKFLOW_NAME}//*"
# Ensure workflow has completed
run_ok "${TEST_NAME_BASE}-restart" wait "${CYLC_RESTART_PID}"
diff --git a/tests/functional/restart/26-remote-kill.t b/tests/functional/restart/26-remote-kill.t
index 66aa8226254..13ce44e9349 100755
--- a/tests/functional/restart/26-remote-kill.t
+++ b/tests/functional/restart/26-remote-kill.t
@@ -30,7 +30,7 @@ cmp_ok 't1-status.out' <<<'running'
run_ok "${TEST_NAME_BASE}-restart" cylc play "${WORKFLOW_NAME}"
# Ensure workflow has started
poll_workflow_running
-cylc kill "${WORKFLOW_NAME}" 't1.1'
+cylc kill "${WORKFLOW_NAME}//1/t1"
# Ensure workflow has completed
poll_workflow_stopped
diff --git a/tests/functional/restart/27-broadcast-timeout/reference.log b/tests/functional/restart/27-broadcast-timeout/reference.log
index 952af530a21..f5b07b250ba 100644
--- a/tests/functional/restart/27-broadcast-timeout/reference.log
+++ b/tests/functional/restart/27-broadcast-timeout/reference.log
@@ -1,3 +1,3 @@
-2017-03-02T20:25:55Z INFO - Initial point: 1
-2017-03-02T20:25:55Z INFO - Final point: 1
-2017-03-02T20:25:55Z DEBUG - bar.1 -triggered off ['foo.1']
+Initial point: 1
+Final point: 1
+1/bar -triggered off ['1/foo']
diff --git a/tests/functional/restart/28-execution-timeout.t b/tests/functional/restart/28-execution-timeout.t
index d607a16398a..e0b51fd4304 100755
--- a/tests/functional/restart/28-execution-timeout.t
+++ b/tests/functional/restart/28-execution-timeout.t
@@ -25,9 +25,9 @@ workflow_run_ok "${TEST_NAME_BASE}-run" cylc play "${WORKFLOW_NAME}" --no-detach
workflow_run_ok "${TEST_NAME_BASE}-restart" \
cylc play "${WORKFLOW_NAME}" --no-detach --reference-test
contains_ok "${WORKFLOW_RUN_DIR}/log/job/1/foo/NN/job-activity.log" <<'__LOG__'
-[(('event-handler-00', 'execution timeout'), 1) cmd] echo foo.1 'execution timeout'
+[(('event-handler-00', 'execution timeout'), 1) cmd] echo 1/foo 'execution timeout'
[(('event-handler-00', 'execution timeout'), 1) ret_code] 0
-[(('event-handler-00', 'execution timeout'), 1) out] foo.1 execution timeout
+[(('event-handler-00', 'execution timeout'), 1) out] 1/foo execution timeout
__LOG__
purge
exit
diff --git a/tests/functional/restart/28-execution-timeout/reference.log b/tests/functional/restart/28-execution-timeout/reference.log
index 952af530a21..f5b07b250ba 100644
--- a/tests/functional/restart/28-execution-timeout/reference.log
+++ b/tests/functional/restart/28-execution-timeout/reference.log
@@ -1,3 +1,3 @@
-2017-03-02T20:25:55Z INFO - Initial point: 1
-2017-03-02T20:25:55Z INFO - Final point: 1
-2017-03-02T20:25:55Z DEBUG - bar.1 -triggered off ['foo.1']
+Initial point: 1
+Final point: 1
+1/bar -triggered off ['1/foo']
diff --git a/tests/functional/restart/30-outputs/reference.log b/tests/functional/restart/30-outputs/reference.log
index d3bb47356bc..81f9ff26df7 100644
--- a/tests/functional/restart/30-outputs/reference.log
+++ b/tests/functional/restart/30-outputs/reference.log
@@ -1,3 +1,3 @@
-2017-07-19T14:54:42+01 INFO - Initial point: 1
-2017-07-19T14:54:42+01 INFO - Final point: 1
-2017-07-19T14:54:43+01 DEBUG - t3.1 -triggered off ['t1.1']
+Initial point: 1
+Final point: 1
+1/t3 -triggered off ['1/t1']
diff --git a/tests/functional/restart/32-reload-runahead-no-stop-point/reference.log b/tests/functional/restart/32-reload-runahead-no-stop-point/reference.log
index 76382012786..341200729fc 100644
--- a/tests/functional/restart/32-reload-runahead-no-stop-point/reference.log
+++ b/tests/functional/restart/32-reload-runahead-no-stop-point/reference.log
@@ -1,4 +1,4 @@
2017-07-19T14:54:42+01 INFO - Initial point: 2018
-2017-07-19T14:54:43+01 DEBUG - t1.2018 -triggered off []
-2017-07-19T14:54:43+01 DEBUG - t2.2018 -triggered off ['t1.2018']
-2017-07-19T14:54:43+01 DEBUG - t3.2018 -triggered off ['t2.2018']
+2018/t1 -triggered off []
+2018/t2 -triggered off ['2018/t1']
+2018/t3 -triggered off ['2018/t2']
diff --git a/tests/functional/restart/41-auto-restart-local-jobs.t b/tests/functional/restart/41-auto-restart-local-jobs.t
index 407dd7d451b..d2a7e5fecf4 100644
--- a/tests/functional/restart/41-auto-restart-local-jobs.t
+++ b/tests/functional/restart/41-auto-restart-local-jobs.t
@@ -92,7 +92,7 @@ poll_workflow_restart
# ensure the workflow DOESN'T WAIT for local jobs to complete before stopping
TEST_NAME="${TEST_NAME_BASE}-force-mode"
-cylc trigger "${WORKFLOW_NAME}" bar.1
+cylc trigger "${WORKFLOW_NAME}//1/bar"
cylc workflow-state "${WORKFLOW_NAME}" --task='bar' --status='running' --point=1 \
--interval=1 --max-polls=20 >& $ERR
@@ -110,7 +110,7 @@ log_scan "${TEST_NAME}-stop" "${FILE}" 40 1 \
'This workflow will be shutdown as the workflow host is unable to continue' \
'Workflow shutting down - REQUEST(NOW)' \
'Orphaned task jobs:' \
- '* bar.1 (running)'
+ '* 1/bar (running)'
cylc stop "${WORKFLOW_NAME}" --now --now 2>/dev/null || true
poll_workflow_stopped
diff --git a/tests/functional/restart/45-stop-task.t b/tests/functional/restart/45-stop-task.t
index 77804856f14..a02be2f5501 100644
--- a/tests/functional/restart/45-stop-task.t
+++ b/tests/functional/restart/45-stop-task.t
@@ -30,12 +30,12 @@ set_test_number 10
# Event should look like this:
# Start workflow
-# At t1.1, set stop task to t5.1
-# At t2.1, stop workflow at t2.1
+# At 1/t1, set stop task to 1/t5
+# At 1/t2, stop workflow at 1/t2
# Restart
-# Workflow runs to stop task t5.1, reset stop task.
+# Workflow runs to stop task 1/t5, reset stop task.
# Restart
-# Workflow stops normally at t8.1
+# Workflow stops normally at 1/t8
init_workflow "${TEST_NAME_BASE}" <<'__FLOW_CONFIG__'
[task parameters]
i = 1..8
@@ -52,7 +52,7 @@ init_workflow "${TEST_NAME_BASE}" <<'__FLOW_CONFIG__'
[[t]]
script = true
[[t]]
- script = cylc stop "${CYLC_WORKFLOW_ID}" 't_i5.1'
+ script = cylc stop "${CYLC_WORKFLOW_ID}//1/t_i5"
[[t]]
script = cylc stop "${CYLC_WORKFLOW_ID}"
__FLOW_CONFIG__
@@ -61,7 +61,7 @@ run_ok "${TEST_NAME_BASE}-validate" cylc validate "${WORKFLOW_NAME}"
workflow_run_ok "${TEST_NAME_BASE}-run" cylc play "${WORKFLOW_NAME}" --no-detach
dumpdbtables
-cmp_ok 'stoptask.out' <<<'stop_task|t_i5.1'
+cmp_ok 'stoptask.out' <<<'stop_task|1/t_i5'
cmp_ok 'taskpool.out' <<'__OUT__'
1|t_i3|waiting
__OUT__
diff --git a/tests/functional/restart/50-two-flows/flow.cylc b/tests/functional/restart/50-two-flows/flow.cylc
index 0536767a3a9..99ac60f5ccc 100644
--- a/tests/functional/restart/50-two-flows/flow.cylc
+++ b/tests/functional/restart/50-two-flows/flow.cylc
@@ -14,15 +14,15 @@
[[a]]
script = """
if ((CYLC_TASK_FLOWS == 2)); then
- cylc__job__poll_grep_workflow_log "\[c\.1 .* succeeded"
+ cylc__job__poll_grep_workflow_log "\[1/c .* succeeded"
fi
"""
[[b, d]]
[[c]]
script = """
if ((CYLC_TASK_FLOWS == 1)); then
- cylc trigger --reflow --meta="cheese wizard" $CYLC_WORKFLOW_NAME a.1
- cylc__job__poll_grep_workflow_log "\[a\.1 submitted job:02 flows:2\] => running"
+ cylc trigger --reflow --meta="cheese wizard" "$CYLC_WORKFLOW_NAME//1/a"
+ cylc__job__poll_grep_workflow_log "\[1/a submitted job:02 flows:2\] => running"
cylc stop $CYLC_WORKFLOW_NAME
fi
"""
diff --git a/tests/functional/restart/50-two-flows/reference.log b/tests/functional/restart/50-two-flows/reference.log
index d62d02d8d6a..cfb7e7217ee 100644
--- a/tests/functional/restart/50-two-flows/reference.log
+++ b/tests/functional/restart/50-two-flows/reference.log
@@ -1,6 +1,6 @@
Initial point: 1
Final point: 1
-a.1 -triggered off []
-b.1 -triggered off ['a.1']
-c.1 -triggered off ['b.1']
-a.1 -triggered off []
+1/a -triggered off []
+1/b -triggered off ['1/a']
+1/c -triggered off ['1/b']
+1/a -triggered off []
diff --git a/tests/functional/restart/50-two-flows/reference.restart.log b/tests/functional/restart/50-two-flows/reference.restart.log
index a34a4b194e6..704adbb7831 100644
--- a/tests/functional/restart/50-two-flows/reference.restart.log
+++ b/tests/functional/restart/50-two-flows/reference.restart.log
@@ -1,6 +1,6 @@
Initial point: 1
Final point: 1
-d.1 -triggered off ['c.1']
-b.1 -triggered off ['a.1']
-c.1 -triggered off ['b.1']
-d.1 -triggered off ['c.1']
+1/d -triggered off ['1/c']
+1/b -triggered off ['1/a']
+1/c -triggered off ['1/b']
+1/d -triggered off ['1/c']
diff --git a/tests/functional/restart/53-task-prerequisites.t b/tests/functional/restart/53-task-prerequisites.t
index 3748658550d..93af161a4b9 100644
--- a/tests/functional/restart/53-task-prerequisites.t
+++ b/tests/functional/restart/53-task-prerequisites.t
@@ -42,7 +42,7 @@ __EOF__
workflow_run_fail "${TEST_NAME_BASE}-restart" cylc play "${WORKFLOW_NAME}" --stopcp=3 --no-detach
-# Check bar.2 is still waiting (i.e. prereqs not satisfied):
+# Check 2/bar is still waiting (i.e. prereqs not satisfied):
TEST_NAME="${TEST_NAME_BASE}-db-task-pool"
QUERY='SELECT cycle, name, status FROM task_pool ORDER BY cycle, name;'
run_ok "$TEST_NAME" sqlite3 "$DB_FILE" "$QUERY"
diff --git a/tests/functional/restart/pre-init-2/reference.log b/tests/functional/restart/pre-init-2/reference.log
index f68aa4eff56..6b3f582a872 100644
--- a/tests/functional/restart/pre-init-2/reference.log
+++ b/tests/functional/restart/pre-init-2/reference.log
@@ -1,6 +1,6 @@
-2014/05/10 22:17:20 INFO - Initial point: 20100808T00
-2014/05/10 22:17:20 INFO - Final point: 20100810T00
-2014/05/10 22:17:20 DEBUG - bar.20100809T00 -triggered off ['foo.20100808T00']
-2014/05/10 22:17:20 DEBUG - foo.20100809T00 -triggered off []
-2014/05/10 22:17:25 DEBUG - foo.20100810T00 -triggered off []
-2014/05/10 22:17:35 DEBUG - bar.20100810T00 -triggered off ['foo.20100809T00']
+Initial point: 20100808T00
+Final point: 20100810T00
+20100809T00/bar -triggered off ['20100808T00/foo']
+20100809T00/foo -triggered off []
+20100810T00/foo -triggered off []
+20100810T00/bar -triggered off ['20100809T00/foo']
diff --git a/tests/functional/restart/reload/reference.log b/tests/functional/restart/reload/reference.log
index 6a49bc0414e..74a47a9a898 100644
--- a/tests/functional/restart/reload/reference.log
+++ b/tests/functional/restart/reload/reference.log
@@ -1,5 +1,5 @@
-2014/03/21 11:39:23 INFO - Initial point: 20100808T0000Z
-2014/03/21 11:39:23 INFO - Final point: 20100809T0000Z
-2014/03/21 11:39:24 DEBUG - bar.20100808T0000Z -triggered off ['foo.20100808T0000Z']
-2014/03/21 11:39:24 DEBUG - foo.20100809T0000Z -triggered off ['foo.20100808T0000Z']
-2014/03/21 11:39:28 DEBUG - bar.20100809T0000Z -triggered off ['foo.20100809T0000Z']
+Initial point: 20100808T0000Z
+Final point: 20100809T0000Z
+20100808T0000Z/bar -triggered off ['20100808T0000Z/foo']
+20100809T0000Z/foo -triggered off ['20100808T0000Z/foo']
+20100809T0000Z/bar -triggered off ['20100809T0000Z/foo']
diff --git a/tests/functional/retries/02-xtriggers/reference.log b/tests/functional/retries/02-xtriggers/reference.log
index 8bf75d5d5c6..c12aa15b8ce 100644
--- a/tests/functional/retries/02-xtriggers/reference.log
+++ b/tests/functional/retries/02-xtriggers/reference.log
@@ -1,8 +1,8 @@
Initial point: 1
Final point: 1
-retry.1 -triggered off []
-retry.1 -triggered off []
-retry.1 -triggered off []
-retry.1 -triggered off []
-retry.1 -triggered off []
-test.1 -triggered off ['retry.1']
+1/retry -triggered off []
+1/retry -triggered off []
+1/retry -triggered off []
+1/retry -triggered off []
+1/retry -triggered off []
+1/test -triggered off ['1/retry']
diff --git a/tests/functional/retries/execution/reference.log b/tests/functional/retries/execution/reference.log
index 48cc39e56df..49143cbac59 100644
--- a/tests/functional/retries/execution/reference.log
+++ b/tests/functional/retries/execution/reference.log
@@ -1,6 +1,6 @@
-2013/11/07 14:54:01 INFO - Initial point: 1
-2013/11/07 14:54:01 INFO - Final point: 1
-2013/11/07 14:54:01 DEBUG - foo.1 -triggered off []
-2013/11/07 14:54:10 DEBUG - foo.1 -triggered off []
-2013/11/07 14:54:18 DEBUG - foo.1 -triggered off []
-2013/11/07 14:54:26 DEBUG - foo.1 -triggered off []
+Initial point: 1
+Final point: 1
+1/foo -triggered off []
+1/foo -triggered off []
+1/foo -triggered off []
+1/foo -triggered off []
diff --git a/tests/functional/retries/submission/flow.cylc b/tests/functional/retries/submission/flow.cylc
index 2d36485bfe4..9d650a18b71 100644
--- a/tests/functional/retries/submission/flow.cylc
+++ b/tests/functional/retries/submission/flow.cylc
@@ -4,7 +4,7 @@
stall timeout = PT0S
abort on inactivity timeout = True
inactivity timeout = PT3M
- expected task failures = foo.1
+ expected task failures = 1/foo
[scheduling]
[[graph]]
R1 = "foo:submit-fail => !foo"
diff --git a/tests/functional/retries/submission/reference.log b/tests/functional/retries/submission/reference.log
index 3a872eed200..49143cbac59 100644
--- a/tests/functional/retries/submission/reference.log
+++ b/tests/functional/retries/submission/reference.log
@@ -1,6 +1,6 @@
-2013/11/07 15:57:47 INFO - Initial point: 1
-2013/11/07 15:57:47 INFO - Final point: 1
-2013/11/07 15:57:47 DEBUG - foo.1 -triggered off []
-2013/11/07 15:57:55 DEBUG - foo.1 -triggered off []
-2013/11/07 15:58:02 DEBUG - foo.1 -triggered off []
-2013/11/07 15:58:09 DEBUG - foo.1 -triggered off []
+Initial point: 1
+Final point: 1
+1/foo -triggered off []
+1/foo -triggered off []
+1/foo -triggered off []
+1/foo -triggered off []
diff --git a/tests/functional/runahead/06-release-update.t b/tests/functional/runahead/06-release-update.t
index 3daaca6664a..d52b12272a6 100644
--- a/tests/functional/runahead/06-release-update.t
+++ b/tests/functional/runahead/06-release-update.t
@@ -27,7 +27,7 @@ CYLC_RUN_PID="$!"
poll_workflow_running
YYYY="$(date +%Y)"
NEXT1=$(( YYYY + 1 ))
-poll_grep_workflow_log -E "bar\.${NEXT1} .* spawned"
+poll_grep_workflow_log -E "${NEXT1}/bar .* spawned"
# sleep a little to allow the datastore to update (`cylc dump` sees the
# datastore) TODO can we avoid this flaky sleep somehow?
diff --git a/tests/functional/runahead/default-future/flow.cylc b/tests/functional/runahead/default-future/flow.cylc
index 706993f0ca9..295ed5c3a0c 100644
--- a/tests/functional/runahead/default-future/flow.cylc
+++ b/tests/functional/runahead/default-future/flow.cylc
@@ -27,7 +27,7 @@
[[spawner]]
script = """
# spawn wibble
- cylc set-outputs --flow=1 $CYLC_WORKFLOW_ID foo.20100101T0800Z
+ cylc set-outputs --flow=1 $CYLC_WORKFLOW_ID 20100101T0800Z/foo
"""
[[foo]]
script = false
diff --git a/tests/functional/shutdown/00-cycle/flow.cylc b/tests/functional/shutdown/00-cycle/flow.cylc
index 132c14f045d..11ea3f5d53c 100644
--- a/tests/functional/shutdown/00-cycle/flow.cylc
+++ b/tests/functional/shutdown/00-cycle/flow.cylc
@@ -9,4 +9,4 @@
[[a,c]]
script = "true"
[[stopper]]
- script = "cylc shutdown $CYLC_WORKFLOW_ID 2010-01-01; sleep 5"
+ script = "cylc shutdown $CYLC_WORKFLOW_ID//2010-01-01; sleep 5"
diff --git a/tests/functional/shutdown/00-cycle/reference.log b/tests/functional/shutdown/00-cycle/reference.log
index 44466a07edd..d342a08cfda 100644
--- a/tests/functional/shutdown/00-cycle/reference.log
+++ b/tests/functional/shutdown/00-cycle/reference.log
@@ -1,5 +1,5 @@
Initial point: 20100101T0000Z
Final point: 20100105T0000Z
-a.20100101T0000Z -triggered off ['a.20091231T1800Z', 'c.20091231T1800Z']
-stopper.20100101T0000Z -triggered off ['a.20100101T0000Z']
-c.20100101T0000Z -triggered off ['stopper.20100101T0000Z']
+20100101T0000Z/a -triggered off ['20091231T1800Z/a', '20091231T1800Z/c']
+20100101T0000Z/stopper -triggered off ['20100101T0000Z/a']
+20100101T0000Z/c -triggered off ['20100101T0000Z/stopper']
diff --git a/tests/functional/shutdown/01-task/flow.cylc b/tests/functional/shutdown/01-task/flow.cylc
index ddf7b9d484d..531990e91e5 100644
--- a/tests/functional/shutdown/01-task/flow.cylc
+++ b/tests/functional/shutdown/01-task/flow.cylc
@@ -10,4 +10,4 @@
script = "true"
[[stopper]]
script = """
-cylc shutdown $CYLC_WORKFLOW_ID a.20100101T06; sleep 5"""
+cylc shutdown $CYLC_WORKFLOW_ID 20100101T06/a; sleep 5"""
diff --git a/tests/functional/shutdown/01-task/reference.log b/tests/functional/shutdown/01-task/reference.log
index 0f171b67f63..6c658fc7384 100644
--- a/tests/functional/shutdown/01-task/reference.log
+++ b/tests/functional/shutdown/01-task/reference.log
@@ -1,6 +1,6 @@
-2013-10-31T01:27:58Z INFO - Initial point: 20100101T0000Z
-2013-10-31T01:27:58Z INFO - Final point: 20100105T0000Z
-2013-10-31T01:27:58Z DEBUG - a.20100101T0000Z -triggered off ['c.20091231T1800Z']
-2013-10-31T01:28:06Z DEBUG - stopper.20100101T0000Z -triggered off ['a.20100101T0000Z']
-2013-10-31T01:28:13Z DEBUG - c.20100101T0000Z -triggered off ['stopper.20100101T0000Z']
-2013-10-31T01:28:20Z DEBUG - a.20100101T0600Z -triggered off ['c.20100101T0000Z']
+Initial point: 20100101T0000Z
+Final point: 20100105T0000Z
+20100101T0000Z/a -triggered off ['20091231T1800Z/c']
+20100101T0000Z/stopper -triggered off ['20100101T0000Z/a']
+20100101T0000Z/c -triggered off ['20100101T0000Z/stopper']
+20100101T0600Z/a -triggered off ['20100101T0000Z/c']
diff --git a/tests/functional/shutdown/04-kill/flow.cylc b/tests/functional/shutdown/04-kill/flow.cylc
index cfd0b11b0a3..e8e48857fcd 100644
--- a/tests/functional/shutdown/04-kill/flow.cylc
+++ b/tests/functional/shutdown/04-kill/flow.cylc
@@ -1,6 +1,6 @@
[scheduler]
[[events]]
- expected task failures = t1.1
+ expected task failures = 1/t1
[scheduling]
[[graph]]
@@ -11,7 +11,7 @@
script = sleep 60
[[t2]]
script = """
-cylc shutdown "${CYLC_WORKFLOW_ID}"
-sleep 1
-cylc kill "${CYLC_WORKFLOW_ID}" 't1'
-"""
+ cylc shutdown "${CYLC_WORKFLOW_ID}"
+ sleep 1
+ cylc kill "${CYLC_WORKFLOW_ID}//*/t1"
+ """
diff --git a/tests/functional/shutdown/04-kill/reference.log b/tests/functional/shutdown/04-kill/reference.log
index 8472fb930c8..c5802d782d2 100644
--- a/tests/functional/shutdown/04-kill/reference.log
+++ b/tests/functional/shutdown/04-kill/reference.log
@@ -1,4 +1,4 @@
-2014-08-27T11:46:52+01 INFO - Initial point: 1
-2014-08-27T11:46:52+01 INFO - Final point: 1
-2014-08-27T11:46:52+01 DEBUG - t1.1 -triggered off []
-2014-08-27T11:46:54+01 DEBUG - t2.1 -triggered off ['t1.1']
+Initial point: 1
+Final point: 1
+1/t1 -triggered off []
+1/t2 -triggered off ['1/t1']
diff --git a/tests/functional/shutdown/07-task-fail.t b/tests/functional/shutdown/07-task-fail.t
index ec1115b6b2a..b497b740475 100755
--- a/tests/functional/shutdown/07-task-fail.t
+++ b/tests/functional/shutdown/07-task-fail.t
@@ -28,10 +28,10 @@ LOGD="$RUN_DIR/${WORKFLOW_NAME}/log"
grep_ok "ERROR - Workflow shutting down - AUTOMATIC(ON-TASK-FAILURE)" \
"${LOGD}/workflow/log"
JLOGD="${LOGD}/job/1/t1/01"
-# Check that t1.1 event handler runs
+# Check that 1/t1 event handler runs
run_ok "${TEST_NAME_BASE}-activity-log" \
grep -q -F \
- "[(('event-handler-00', 'failed'), 1) out] Unfortunately t1.1 failed" \
+ "[(('event-handler-00', 'failed'), 1) out] Unfortunately 1/t1 failed" \
"${JLOGD}/job-activity.log"
# Check that t2.1 did not run
exists_fail "${LOGD}/1/t2"
diff --git a/tests/functional/shutdown/08-now1.t b/tests/functional/shutdown/08-now1.t
index 9ae716f6527..c6f2137f0c1 100755
--- a/tests/functional/shutdown/08-now1.t
+++ b/tests/functional/shutdown/08-now1.t
@@ -26,14 +26,14 @@ workflow_run_ok "${TEST_NAME_BASE}-run" cylc play --no-detach "${WORKFLOW_NAME}"
LOGD="$RUN_DIR/${WORKFLOW_NAME}/log"
grep_ok 'INFO - Workflow shutting down - REQUEST(NOW)' "${LOGD}/workflow/log"
JLOGD="${LOGD}/job/1/t1/01"
-# Check that t1.1 event handler runs
+# Check that 1/t1 event handler runs
run_ok "${TEST_NAME_BASE}-activity-log-succeeded" \
grep -q -F \
- "[(('event-handler-00', 'succeeded'), 1) out] Well done t1.1 succeeded" \
+ "[(('event-handler-00', 'succeeded'), 1) out] Well done 1/t1 succeeded" \
"${JLOGD}/job-activity.log"
run_ok "${TEST_NAME_BASE}-activity-log-started" \
grep -q -F \
- "[(('event-handler-00', 'started'), 1) out] Hello t1.1 started" \
+ "[(('event-handler-00', 'started'), 1) out] Hello 1/t1 started" \
"${JLOGD}/job-activity.log"
# Check that t2.1 did not run
exists_fail "${LOGD}/job/1/t2"
diff --git a/tests/functional/shutdown/09-now2.t b/tests/functional/shutdown/09-now2.t
index 297eeb8cd68..4c3b7bec598 100755
--- a/tests/functional/shutdown/09-now2.t
+++ b/tests/functional/shutdown/09-now2.t
@@ -26,20 +26,20 @@ workflow_run_ok "${TEST_NAME_BASE}-run" cylc play --no-detach "${WORKFLOW_NAME}"
LOGD="$RUN_DIR/${WORKFLOW_NAME}/log"
grep_ok 'INFO - Workflow shutting down - REQUEST(NOW-NOW)' "${LOGD}/workflow/log"
grep_ok 'WARNING - Orphaned task jobs' "${LOGD}/workflow/log"
-grep_ok '\* t1.1 (running)' "${LOGD}/workflow/log"
+grep_ok '\* 1/t1 (running)' "${LOGD}/workflow/log"
JLOGD="${LOGD}/job/1/t1/01"
-# Check that t1.1 event handler runs
+# Check that 1/t1 event handler runs
run_fail "${TEST_NAME_BASE}-activity-log-succeeded" \
grep -q -F \
- "[(('event-handler-00', 'succeeded'), 1) out] Well done t1.1 succeeded" \
+ "[(('event-handler-00', 'succeeded'), 1) out] Well done 1/t1 succeeded" \
"${JLOGD}/job-activity.log"
run_fail "${TEST_NAME_BASE}-activity-log-started" \
grep -q -F \
- "[(('event-handler-00', 'started'), 1) out] Hello t1.1 started" \
+ "[(('event-handler-00', 'started'), 1) out] Hello 1/t1 started" \
"${JLOGD}/job-activity.log"
-# Check that t2.1 did not run
+# Check that 1/t2 did not run
exists_fail "${LOGD}/job/1/t2"
-# In SoD the restart does not stall and abort, because t1.1:failed can be removed
+# In SoD the restart does not stall and abort, because 1/t1:failed can be removed
# as handled.
workflow_run_ok "${TEST_NAME_BASE}-restart" cylc play --no-detach "${WORKFLOW_NAME}"
purge
diff --git a/tests/functional/shutdown/21-stop-kill.t b/tests/functional/shutdown/21-stop-kill.t
index 07eb6105deb..ca21a23d0fe 100644
--- a/tests/functional/shutdown/21-stop-kill.t
+++ b/tests/functional/shutdown/21-stop-kill.t
@@ -43,6 +43,6 @@ run_ok "${TEST_NAME_BASE}" cylc play --no-detach "${WORKFLOW_NAME}" --debug
WORKFLOW_LOG="${WORKFLOW_RUN_DIR}/log/workflow/log"
named_grep_ok 'jobs kill succeeded' "jobs-kill ret_code\] 0" "${WORKFLOW_LOG}"
-named_grep_ok 'jobs kill killed foo.1' "jobs-kill out.*1/foo/01" "${WORKFLOW_LOG}"
+named_grep_ok 'jobs kill killed 1/foo' "jobs-kill out.*1/foo/01" "${WORKFLOW_LOG}"
purge
diff --git a/tests/functional/shutdown/22-stop-now.t b/tests/functional/shutdown/22-stop-now.t
index c036caf5b76..16bc7bc26d4 100644
--- a/tests/functional/shutdown/22-stop-now.t
+++ b/tests/functional/shutdown/22-stop-now.t
@@ -44,6 +44,6 @@ WORKFLOW_LOG="${WORKFLOW_RUN_DIR}/log/workflow/log"
log_scan "${TEST_NAME_BASE}-orphaned" "${WORKFLOW_LOG}" 1 1 \
'Orphaned task jobs.*' \
- '.*foo.1'
+ '1/.*foo'
purge
diff --git a/tests/functional/spawn-on-demand/00-no-reflow/flow.cylc b/tests/functional/spawn-on-demand/00-no-reflow/flow.cylc
index f9ea33dfb46..5b506242d28 100644
--- a/tests/functional/spawn-on-demand/00-no-reflow/flow.cylc
+++ b/tests/functional/spawn-on-demand/00-no-reflow/flow.cylc
@@ -10,6 +10,6 @@
[runtime]
[[triggerer]]
script = """
-# Cause only bar.1 to run again.
-cylc trigger ${CYLC_WORKFLOW_ID} bar.1
+ # Cause only 1/bar to run again.
+ cylc trigger "${CYLC_WORKFLOW_ID}//1/bar"
"""
diff --git a/tests/functional/spawn-on-demand/00-no-reflow/reference.log b/tests/functional/spawn-on-demand/00-no-reflow/reference.log
index 5d694634d7a..176e79f124a 100644
--- a/tests/functional/spawn-on-demand/00-no-reflow/reference.log
+++ b/tests/functional/spawn-on-demand/00-no-reflow/reference.log
@@ -1,10 +1,10 @@
Initial point: 1
Final point: 2
-foo.1 -triggered off ['foo.0']
-bar.1 -triggered off ['foo.1']
-foo.2 -triggered off ['foo.1']
-baz.1 -triggered off ['bar.1']
-bar.2 -triggered off ['foo.2']
-triggerer.2 -triggered off ['foo.2']
-bar.1 -triggered off []
-baz.2 -triggered off ['bar.2']
+1/foo -triggered off ['0/foo']
+1/bar -triggered off ['1/foo']
+2/foo -triggered off ['1/foo']
+1/baz -triggered off ['1/bar']
+2/bar -triggered off ['2/foo']
+2/triggerer -triggered off ['2/foo']
+1/bar -triggered off []
+2/baz -triggered off ['2/bar']
diff --git a/tests/functional/spawn-on-demand/01-reflow/flow.cylc b/tests/functional/spawn-on-demand/01-reflow/flow.cylc
index 7cae2411756..61008dc5f1f 100644
--- a/tests/functional/spawn-on-demand/01-reflow/flow.cylc
+++ b/tests/functional/spawn-on-demand/01-reflow/flow.cylc
@@ -11,6 +11,6 @@
[runtime]
[[triggerer]]
script = """
-# Cause both bar.1 and baz.1 to run again.
-cylc trigger --reflow --meta=cheese ${CYLC_WORKFLOW_ID} bar.1
+ # Cause both 1/bar and 1/baz to run again.
+ cylc trigger --reflow --meta=cheese "${CYLC_WORKFLOW_ID}//1/bar"
"""
diff --git a/tests/functional/spawn-on-demand/01-reflow/reference.log b/tests/functional/spawn-on-demand/01-reflow/reference.log
index 1612ec0804f..48550ec827a 100644
--- a/tests/functional/spawn-on-demand/01-reflow/reference.log
+++ b/tests/functional/spawn-on-demand/01-reflow/reference.log
@@ -1,9 +1,9 @@
Initial point: 1
Final point: 2
-foo.1 -triggered off []
-bar.1 -triggered off ['foo.1']
-baz.1 -triggered off ['bar.1']
-foo.2 -triggered off ['foo.1']
-triggerer.2 -triggered off ['foo.2']
-bar.1 -triggered off []
-baz.1 -triggered off ['bar.1']
+1/foo -triggered off []
+1/bar -triggered off ['1/foo']
+1/baz -triggered off ['1/bar']
+2/foo -triggered off ['1/foo']
+2/triggerer -triggered off ['2/foo']
+1/bar -triggered off []
+1/baz -triggered off ['1/bar']
diff --git a/tests/functional/spawn-on-demand/02-merge/flow.cylc b/tests/functional/spawn-on-demand/02-merge/flow.cylc
index e69432fd1a7..922a6749b76 100644
--- a/tests/functional/spawn-on-demand/02-merge/flow.cylc
+++ b/tests/functional/spawn-on-demand/02-merge/flow.cylc
@@ -1,4 +1,4 @@
-# foo.3 triggers a new flow at foo.1 and waits for it to catch up and merge.
+# 3/foo triggers a new flow at 1/foo and waits for it to catch up and merge.
# bar checks for the expected flow names at each cycle point.
[scheduling]
cycling mode = integer
@@ -10,7 +10,7 @@
[[foo]]
script = """
if (( CYLC_TASK_CYCLE_POINT == 3 )); then
- cylc trigger --reflow --meta=other ${CYLC_WORKFLOW_ID} foo.1
+ cylc trigger --reflow --meta=other "${CYLC_WORKFLOW_ID}//1/foo"
cylc__job__poll_grep_workflow_log 'Merged in'
fi
"""
diff --git a/tests/functional/spawn-on-demand/02-merge/reference.log b/tests/functional/spawn-on-demand/02-merge/reference.log
index aafee13a9cb..e150aa34f34 100644
--- a/tests/functional/spawn-on-demand/02-merge/reference.log
+++ b/tests/functional/spawn-on-demand/02-merge/reference.log
@@ -1,12 +1,12 @@
Initial point: 1
Final point: 3
-foo.1 -triggered off ['foo.0']
-foo.2 -triggered off ['foo.1']
-bar.1 -triggered off ['foo.1']
-foo.3 -triggered off ['foo.2']
-bar.2 -triggered off ['foo.2']
-foo.1 -triggered off ['foo.0']
-foo.2 -triggered off ['foo.1']
-bar.1 -triggered off ['foo.1']
-bar.2 -triggered off ['foo.2']
-bar.3 -triggered off ['foo.3']
+1/foo -triggered off ['0/foo']
+2/foo -triggered off ['1/foo']
+1/bar -triggered off ['1/foo']
+3/foo -triggered off ['2/foo']
+2/bar -triggered off ['2/foo']
+1/foo -triggered off ['0/foo']
+2/foo -triggered off ['1/foo']
+1/bar -triggered off ['1/foo']
+2/bar -triggered off ['2/foo']
+3/bar -triggered off ['3/foo']
diff --git a/tests/functional/spawn-on-demand/03-conditional/reference.log b/tests/functional/spawn-on-demand/03-conditional/reference.log
index 287996e785c..b65ed80d93f 100644
--- a/tests/functional/spawn-on-demand/03-conditional/reference.log
+++ b/tests/functional/spawn-on-demand/03-conditional/reference.log
@@ -1,7 +1,7 @@
Initial point: 1
Final point: 1
-delay.1 -triggered off []
-foo.1 -triggered off []
-baz.1 -triggered off ['foo.1']
-qux.1 -triggered off ['baz.1']
-bar.1 -triggered off ['delay.1']
+1/delay -triggered off []
+1/foo -triggered off []
+1/baz -triggered off ['1/foo']
+1/qux -triggered off ['1/baz']
+1/bar -triggered off ['1/delay']
diff --git a/tests/functional/spawn-on-demand/04-branch/reference.log b/tests/functional/spawn-on-demand/04-branch/reference.log
index 8b14d5cdf2c..e84e80f221c 100644
--- a/tests/functional/spawn-on-demand/04-branch/reference.log
+++ b/tests/functional/spawn-on-demand/04-branch/reference.log
@@ -1,5 +1,5 @@
Initial point: 1
Final point: 1
-foo.1 -triggered off []
-fish.1 -triggered off ['foo.1']
-done.1 -triggered off ['fish.1']
+1/foo -triggered off []
+1/fish -triggered off ['1/foo']
+1/done -triggered off ['1/fish']
diff --git a/tests/functional/spawn-on-demand/05-stop-flow/reference.log b/tests/functional/spawn-on-demand/05-stop-flow/reference.log
index 1f455427830..1a9f846c98d 100644
--- a/tests/functional/spawn-on-demand/05-stop-flow/reference.log
+++ b/tests/functional/spawn-on-demand/05-stop-flow/reference.log
@@ -1,4 +1,4 @@
Initial point: 1
Final point: 1
-foo.1 -triggered off []
-bar.1 -triggered off ['foo.1']
+1/foo -triggered off []
+1/bar -triggered off ['1/foo']
diff --git a/tests/functional/spawn-on-demand/06-stop-flow-2/flow.cylc b/tests/functional/spawn-on-demand/06-stop-flow-2/flow.cylc
index 7ff895fe768..d8500639001 100644
--- a/tests/functional/spawn-on-demand/06-stop-flow-2/flow.cylc
+++ b/tests/functional/spawn-on-demand/06-stop-flow-2/flow.cylc
@@ -20,7 +20,7 @@ fi
[[baz]]
script = """
if (( CYLC_TASK_SUBMIT_NUMBER == 1 )); then
- cylc trigger --reflow --meta=other ${CYLC_WORKFLOW_ID} foo.1
- cylc__job__poll_grep_workflow_log -E "bar\.1 running job:02.* => succeeded"
+ cylc trigger --reflow --meta=other "${CYLC_WORKFLOW_ID}//1/foo"
+ cylc__job__poll_grep_workflow_log -E "1/bar running job:02.* => succeeded"
fi
"""
diff --git a/tests/functional/spawn-on-demand/06-stop-flow-2/reference.log b/tests/functional/spawn-on-demand/06-stop-flow-2/reference.log
index d747b2b6068..79c8201a601 100644
--- a/tests/functional/spawn-on-demand/06-stop-flow-2/reference.log
+++ b/tests/functional/spawn-on-demand/06-stop-flow-2/reference.log
@@ -1,8 +1,8 @@
Initial point: 1
Final point: 1
-foo.1 -triggered off []
-bar.1 -triggered off ['foo.1']
-baz.1 -triggered off ['bar.1']
-foo.1 -triggered off []
-bar.1 -triggered off ['foo.1']
-qux.1 -triggered off ['baz.1']
+1/foo -triggered off []
+1/bar -triggered off ['1/foo']
+1/baz -triggered off ['1/bar']
+1/foo -triggered off []
+1/bar -triggered off ['1/foo']
+1/qux -triggered off ['1/baz']
diff --git a/tests/functional/spawn-on-demand/07-abs-triggers/flow.cylc b/tests/functional/spawn-on-demand/07-abs-triggers/flow.cylc
index 2c2a77c4085..8084e5c0abe 100644
--- a/tests/functional/spawn-on-demand/07-abs-triggers/flow.cylc
+++ b/tests/functional/spawn-on-demand/07-abs-triggers/flow.cylc
@@ -14,9 +14,9 @@
[runtime]
[[start]]
script = """
-# Ensure that bar.1,2 are spawned by foo.1,2 and not by start.2
-# (so the scheduler must update their prereqs when start.2 finishes).
-cylc__job__poll_grep_workflow_log -E "bar\.2 .* spawned"
+ # Ensure that 1,2/bar are spawned by 1,2/foo and not by 2/start
+ # (so the scheduler must update their prereqs when 2/start finishes).
+ cylc__job__poll_grep_workflow_log -E "2/bar .* spawned"
"""
[[foo]]
[[bar]]
diff --git a/tests/functional/spawn-on-demand/07-abs-triggers/reference.log b/tests/functional/spawn-on-demand/07-abs-triggers/reference.log
index beccbd94c55..b27f0a18fd1 100644
--- a/tests/functional/spawn-on-demand/07-abs-triggers/reference.log
+++ b/tests/functional/spawn-on-demand/07-abs-triggers/reference.log
@@ -1,9 +1,9 @@
Initial point: 1
Final point: 5
-start.2 -triggered off []
-foo.1 -triggered off []
-foo.2 -triggered off []
-foo.3 -triggered off []
-bar.1 -triggered off ['foo.1', 'start.2']
-bar.2 -triggered off ['foo.2', 'start.2']
-bar.3 -triggered off ['foo.3', 'start.2']
+2/start -triggered off []
+1/foo -triggered off []
+2/foo -triggered off []
+3/foo -triggered off []
+1/bar -triggered off ['1/foo', '2/start']
+2/bar -triggered off ['2/foo', '2/start']
+3/bar -triggered off ['2/start', '3/foo']
diff --git a/tests/functional/spawn-on-demand/08-lost-parents/reference.log b/tests/functional/spawn-on-demand/08-lost-parents/reference.log
index d04a13765dd..e8f6be64551 100644
--- a/tests/functional/spawn-on-demand/08-lost-parents/reference.log
+++ b/tests/functional/spawn-on-demand/08-lost-parents/reference.log
@@ -1,12 +1,12 @@
Initial point: 1
Final point: 6
-dad.1 -triggered off []
-dad.2 -triggered off []
-dad.3 -triggered off []
-child.1 -triggered off ['dad.1']
-child.2 -triggered off ['dad.2']
-child.3 -triggered off ['dad.3']
-mum.5 -triggered off []
-child.4 -triggered off []
-child.5 -triggered off ['mum.5']
-child.6 -triggered off []
+1/dad -triggered off []
+2/dad -triggered off []
+3/dad -triggered off []
+1/child -triggered off ['1/dad']
+2/child -triggered off ['2/dad']
+3/child -triggered off ['3/dad']
+5/mum -triggered off []
+4/child -triggered off []
+5/child -triggered off ['5/mum']
+6/child -triggered off []
diff --git a/tests/functional/spawn-on-demand/09-set-outputs/flow.cylc b/tests/functional/spawn-on-demand/09-set-outputs/flow.cylc
index f4122e049a8..1d1d7e7e061 100644
--- a/tests/functional/spawn-on-demand/09-set-outputs/flow.cylc
+++ b/tests/functional/spawn-on-demand/09-set-outputs/flow.cylc
@@ -35,7 +35,7 @@
[[foo]]
# Hang about until setter is finished.
script = """
- cylc__job__poll_grep_workflow_log -E "setter\.1 .* => succeeded"
+ cylc__job__poll_grep_workflow_log -E "1/setter .* => succeeded"
"""
[[bar]]
script = true
@@ -43,11 +43,11 @@
# (To the rescue).
script = """
# Set foo outputs while it still exists in the pool.
- cylc set-outputs --flow=2 --output=out1 --output=out2 "${CYLC_WORKFLOW_ID}" 1/foo
+ cylc set-outputs --flow=2 --output=out1 --output=out2 "${CYLC_WORKFLOW_ID}//1/foo"
# Set bar outputs after it is gone from the pool.
- cylc__job__poll_grep_workflow_log -E "bar\.1 .*task proxy removed"
- cylc set-outputs --flow=2 --output=out1 --output=out2 "${CYLC_WORKFLOW_ID}" 1/bar
+ cylc__job__poll_grep_workflow_log -E "1/bar .*task proxy removed"
+ cylc set-outputs --flow=2 --output=out1 --output=out2 "${CYLC_WORKFLOW_ID}//1/bar"
"""
[[qux, quw, fux, fuw]]
script = true
diff --git a/tests/functional/spawn-on-demand/09-set-outputs/reference.log b/tests/functional/spawn-on-demand/09-set-outputs/reference.log
index d762d9151e8..2e06a15bd25 100644
--- a/tests/functional/spawn-on-demand/09-set-outputs/reference.log
+++ b/tests/functional/spawn-on-demand/09-set-outputs/reference.log
@@ -1,9 +1,9 @@
Initial point: 1
Final point: 1
-setter.1 -triggered off []
-foo.1 -triggered off []
-bar.1 -triggered off []
-qux.1 -triggered off ['foo.1']
-quw.1 -triggered off ['foo.1']
-fux.1 -triggered off ['bar.1']
-fuw.1 -triggered off ['bar.1']
+1/setter -triggered off []
+1/foo -triggered off []
+1/bar -triggered off []
+1/qux -triggered off ['1/foo']
+1/quw -triggered off ['1/foo']
+1/fux -triggered off ['1/bar']
+1/fuw -triggered off ['1/bar']
diff --git a/tests/functional/spawn-on-demand/10-retrigger/flow.cylc b/tests/functional/spawn-on-demand/10-retrigger/flow.cylc
index 9f226237c00..2bdd4365a07 100644
--- a/tests/functional/spawn-on-demand/10-retrigger/flow.cylc
+++ b/tests/functional/spawn-on-demand/10-retrigger/flow.cylc
@@ -1,6 +1,6 @@
[scheduler]
[[events]]
- expected task failures = oops.1
+ expected task failures = 1/oops
[scheduling]
[[graph]]
R1 = """
@@ -18,7 +18,7 @@
"""
[[triggerer]]
script = """
- cylc__job__poll_grep_workflow_log -E 'oops\.1 running .* \(received\)failed'
- cylc trigger ${CYLC_WORKFLOW_ID} oops.1
+ cylc__job__poll_grep_workflow_log -E '1/oops running .* \(received\)failed'
+ cylc trigger "${CYLC_WORKFLOW_ID}//1/oops"
"""
[[foo, bar]]
diff --git a/tests/functional/spawn-on-demand/10-retrigger/reference.log b/tests/functional/spawn-on-demand/10-retrigger/reference.log
index 1a0556aa260..7c9a0a19599 100644
--- a/tests/functional/spawn-on-demand/10-retrigger/reference.log
+++ b/tests/functional/spawn-on-demand/10-retrigger/reference.log
@@ -1,7 +1,7 @@
Initial point: 1
Final point: 1
-foo.1 -triggered off []
-oops.1 -triggered off ['foo.1']
-triggerer.1 -triggered off ['foo.1']
-oops.1 -triggered off ['foo.1']
-bar.1 -triggered off ['oops.1']
+1/foo -triggered off []
+1/oops -triggered off ['1/foo']
+1/triggerer -triggered off ['1/foo']
+1/oops -triggered off ['1/foo']
+1/bar -triggered off ['1/oops']
diff --git a/tests/functional/spawn-on-demand/11-abs-suicide/flow.cylc b/tests/functional/spawn-on-demand/11-abs-suicide/flow.cylc
index 02e1f59d5c5..b5d74bb0c2b 100644
--- a/tests/functional/spawn-on-demand/11-abs-suicide/flow.cylc
+++ b/tests/functional/spawn-on-demand/11-abs-suicide/flow.cylc
@@ -7,7 +7,7 @@
[[events]]
stall timeout = PT0S
abort on stall timeout = True
- expected task failures = a.1
+ expected task failures = 1/a
[scheduling]
cycling mode = integer
@@ -26,6 +26,6 @@
[[a]]
# Fail after c is spawned out to the runahead limit.
script = """
- cylc__job__poll_grep_workflow_log "spawned c\.5"
+ cylc__job__poll_grep_workflow_log "spawned 5/c"
false
"""
diff --git a/tests/functional/spawn-on-demand/11-abs-suicide/reference.log b/tests/functional/spawn-on-demand/11-abs-suicide/reference.log
index aee3a7467b1..f5eab103f98 100644
--- a/tests/functional/spawn-on-demand/11-abs-suicide/reference.log
+++ b/tests/functional/spawn-on-demand/11-abs-suicide/reference.log
@@ -1,13 +1,13 @@
Initial point: 1
Final point: 5
-a.1 -triggered off []
-b.1 -triggered off []
-b.2 -triggered off []
-b.3 -triggered off []
-b.4 -triggered off []
-b.5 -triggered off []
-x.1 -triggered off ['a.1', 'b.1']
-x.4 -triggered off ['a.1', 'b.4']
-x.2 -triggered off ['a.1', 'b.2']
-x.3 -triggered off ['a.1', 'b.3']
-x.5 -triggered off ['a.1', 'b.5']
+1/a -triggered off []
+1/b -triggered off []
+2/b -triggered off []
+3/b -triggered off []
+4/b -triggered off []
+5/b -triggered off []
+1/x -triggered off ['1/a', '1/b']
+4/x -triggered off ['1/a', '4/b']
+2/x -triggered off ['1/a', '2/b']
+3/x -triggered off ['1/a', '3/b']
+5/x -triggered off ['1/a', '5/b']
diff --git a/tests/functional/spawn-on-demand/11-hold-not-spawned/flow.cylc b/tests/functional/spawn-on-demand/11-hold-not-spawned/flow.cylc
index fd77a4ae2c2..6660aa04406 100644
--- a/tests/functional/spawn-on-demand/11-hold-not-spawned/flow.cylc
+++ b/tests/functional/spawn-on-demand/11-hold-not-spawned/flow.cylc
@@ -9,12 +9,12 @@
[runtime]
[[holder]]
script = """
- cylc hold $CYLC_WORKFLOW_NAME holdee.1
+ cylc hold "$CYLC_WORKFLOW_NAME//1/holdee"
"""
[[holdee]]
script = true
[[stopper]]
script = """
- cylc__job__poll_grep_workflow_log "\[holdee\.1 .* holding \(as requested earlier\)" -E
+ cylc__job__poll_grep_workflow_log "\[1/holdee .* holding \(as requested earlier\)" -E
cylc stop $CYLC_WORKFLOW_NAME
"""
diff --git a/tests/functional/spawn-on-demand/11-hold-not-spawned/reference.log b/tests/functional/spawn-on-demand/11-hold-not-spawned/reference.log
index 993f20ff786..026ca709c94 100644
--- a/tests/functional/spawn-on-demand/11-hold-not-spawned/reference.log
+++ b/tests/functional/spawn-on-demand/11-hold-not-spawned/reference.log
@@ -1,4 +1,4 @@
Initial point: 1
Final point: 1
-holder.1 -triggered off []
-stopper.1 -triggered off ['holder.1']
+1/holder -triggered off []
+1/stopper -triggered off ['1/holder']
diff --git a/tests/functional/spawn-on-demand/12-set-outputs-no-reflow/flow.cylc b/tests/functional/spawn-on-demand/12-set-outputs-no-reflow/flow.cylc
index 146ca413ed8..315007c52fa 100644
--- a/tests/functional/spawn-on-demand/12-set-outputs-no-reflow/flow.cylc
+++ b/tests/functional/spawn-on-demand/12-set-outputs-no-reflow/flow.cylc
@@ -1,4 +1,4 @@
-# Test that `cylc set-outputs` does not cause reflow by default.
+# Test that `cylc set-outputs` does not cause reflow by default
# Task setter should cause bar to run, but not subsequently baz.
[scheduler]
@@ -7,7 +7,7 @@
stall timeout = PT0S
inactivity timeout = PT30S
abort on inactivity timeout = True
- expected task failures = foo.1
+ expected task failures = 1/foo
[scheduling]
[[graph]]
R1 = """
@@ -21,5 +21,5 @@
script = true
[[setter]]
script = """
- cylc set-outputs "${CYLC_WORKFLOW_ID}" 1/foo
+ cylc set-outputs "${CYLC_WORKFLOW_ID}//1/foo"
"""
diff --git a/tests/functional/spawn-on-demand/12-set-outputs-no-reflow/reference.log b/tests/functional/spawn-on-demand/12-set-outputs-no-reflow/reference.log
index 714e8c62c4c..2322cc234da 100644
--- a/tests/functional/spawn-on-demand/12-set-outputs-no-reflow/reference.log
+++ b/tests/functional/spawn-on-demand/12-set-outputs-no-reflow/reference.log
@@ -1,5 +1,5 @@
Initial point: 1
Final point: 1
-foo.1 -triggered off []
-setter.1 -triggered off ['foo.1']
-bar.1 -triggered off ['foo.1']
+1/foo -triggered off []
+1/setter -triggered off ['1/foo']
+1/bar -triggered off ['1/foo']
diff --git a/tests/functional/special/00-sequential/reference.log b/tests/functional/special/00-sequential/reference.log
index a8dfdbf81c8..f5b1ffb7dbe 100644
--- a/tests/functional/special/00-sequential/reference.log
+++ b/tests/functional/special/00-sequential/reference.log
@@ -1,7 +1,7 @@
-2014/01/07 16:58:20 INFO - Initial point: 20100101T00
-2014/01/07 16:58:20 INFO - Final point: 20100101T18
-2014/01/07 16:58:20 DEBUG - monitor.20100101T00 -triggered off []
-2014/01/07 16:58:24 DEBUG - foo.20100101T00 -triggered off ['monitor.20100101T00']
-2014/01/07 16:58:37 DEBUG - foo.20100101T06 -triggered off ['foo.20100101T00']
-2014/01/07 16:58:49 DEBUG - foo.20100101T12 -triggered off ['foo.20100101T06']
-2014/01/07 16:59:01 DEBUG - foo.20100101T18 -triggered off ['foo.20100101T12']
+Initial point: 20100101T00
+Final point: 20100101T18
+20100101T00/monitor -triggered off []
+20100101T00/foo -triggered off ['20100101T00/monitor']
+20100101T06/foo -triggered off ['20100101T00/foo']
+20100101T12/foo -triggered off ['20100101T06/foo']
+20100101T18/foo -triggered off ['20100101T12/foo']
diff --git a/tests/functional/startup/00-state-summary.t b/tests/functional/startup/00-state-summary.t
index 5de22868a13..a4a02208899 100644
--- a/tests/functional/startup/00-state-summary.t
+++ b/tests/functional/startup/00-state-summary.t
@@ -30,7 +30,7 @@ run_ok "${TEST_NAME}" cylc validate "${WORKFLOW_NAME}"
cylc play --no-detach "${WORKFLOW_NAME}" > /dev/null 2>&1
# Restart with a failed task and a succeeded task.
cylc play "${WORKFLOW_NAME}"
-poll_grep_workflow_log -E 'foo\.1 .* \(polled\)failed'
+poll_grep_workflow_log -E '1/foo .* \(polled\)failed'
cylc dump "${WORKFLOW_NAME}" > dump.out
TEST_NAME=${TEST_NAME_BASE}-grep
# State summary should not just say "Initializing..."
diff --git a/tests/functional/startup/01-log-flow-config.t b/tests/functional/startup/01-log-flow-config.t
index 886bacdc72f..f6542c45cda 100644
--- a/tests/functional/startup/01-log-flow-config.t
+++ b/tests/functional/startup/01-log-flow-config.t
@@ -61,11 +61,16 @@ LOGD="${RUN_DIR}/${WORKFLOW_NAME}/log/flow-config"
START_CONFIG="$(ls "${LOGD}/"*-start.cylc)"
REL_CONFIG="$(ls "${LOGD}/"*-reload.cylc)"
RES_CONFIG="$(ls "${LOGD}/"*-restart.cylc)"
+mkdir start_config
+mkdir res_config
+cp "$START_CONFIG" start_config/flow.cylc
+cp "$RES_CONFIG" res_config/flow.cylc
# The generated *-run.cylc and *-reload.cylc should be identical
# The generated *.cylc files should validate
cmp_ok "${START_CONFIG}" "${REL_CONFIG}"
-run_ok "${TEST_NAME_BASE}-validate-start-config" cylc validate "${START_CONFIG}"
-run_ok "${TEST_NAME_BASE}-validate-restart-config" cylc validate "${RES_CONFIG}"
+run_ok "${TEST_NAME_BASE}-validate-start-config" cylc validate ./start_config
+run_ok "${TEST_NAME_BASE}-validate-restart-config" cylc validate ./res_config
+rm -rf start_config res_config
diff -u "${START_CONFIG}" "${RES_CONFIG}" >'diff.out'
contains_ok 'diff.out' <<'__DIFF__'
diff --git a/tests/functional/task-name/00-basic/reference.log b/tests/functional/task-name/00-basic/reference.log
index c0548eadb8c..6c745e556a9 100644
--- a/tests/functional/task-name/00-basic/reference.log
+++ b/tests/functional/task-name/00-basic/reference.log
@@ -1,26 +1,26 @@
Initial point: 20150101T0000Z
Final point: 20200101T0000Z
-t1.20150101T0000Z -triggered off ['t1.20130101T0000Z']
-t1.20160101T0000Z -triggered off ['t1.20140101T0000Z']
-t1.20170101T0000Z -triggered off ['t1.20150101T0000Z']
-t1-a.20150101T0000Z -triggered off ['t1.20150101T0000Z']
-t1-a.20160101T0000Z -triggered off ['t1.20160101T0000Z']
-t1+a.20150101T0000Z -triggered off ['t1-a.20150101T0000Z']
-t1-a.20170101T0000Z -triggered off ['t1.20170101T0000Z']
-t1+a.20160101T0000Z -triggered off ['t1-a.20160101T0000Z']
-t1%a.20150101T0000Z -triggered off ['t1+a.20150101T0000Z']
-t1+a.20170101T0000Z -triggered off ['t1-a.20170101T0000Z']
-t1%a.20160101T0000Z -triggered off ['t1+a.20160101T0000Z']
-t1.20180101T0000Z -triggered off ['t1.20160101T0000Z']
-t1%a.20170101T0000Z -triggered off ['t1+a.20170101T0000Z']
-t1.20190101T0000Z -triggered off ['t1.20170101T0000Z']
-t1-a.20180101T0000Z -triggered off ['t1.20180101T0000Z']
-t1.20200101T0000Z -triggered off ['t1.20180101T0000Z']
-t1-a.20190101T0000Z -triggered off ['t1.20190101T0000Z']
-t1+a.20180101T0000Z -triggered off ['t1-a.20180101T0000Z']
-t1-a.20200101T0000Z -triggered off ['t1.20200101T0000Z']
-t1+a.20190101T0000Z -triggered off ['t1-a.20190101T0000Z']
-t1%a.20180101T0000Z -triggered off ['t1+a.20180101T0000Z']
-t1+a.20200101T0000Z -triggered off ['t1-a.20200101T0000Z']
-t1%a.20190101T0000Z -triggered off ['t1+a.20190101T0000Z']
-t1%a.20200101T0000Z -triggered off ['t1+a.20200101T0000Z']
+20150101T0000Z/t1 -triggered off ['20130101T0000Z/t1']
+20160101T0000Z/t1 -triggered off ['20140101T0000Z/t1']
+20170101T0000Z/t1 -triggered off ['20150101T0000Z/t1']
+20150101T0000Z/t1-a -triggered off ['20150101T0000Z/t1']
+20160101T0000Z/t1-a -triggered off ['20160101T0000Z/t1']
+20150101T0000Z/t1+a -triggered off ['20150101T0000Z/t1-a']
+20170101T0000Z/t1-a -triggered off ['20170101T0000Z/t1']
+20160101T0000Z/t1+a -triggered off ['20160101T0000Z/t1-a']
+20150101T0000Z/t1%a -triggered off ['20150101T0000Z/t1+a']
+20170101T0000Z/t1+a -triggered off ['20170101T0000Z/t1-a']
+20160101T0000Z/t1%a -triggered off ['20160101T0000Z/t1+a']
+20180101T0000Z/t1 -triggered off ['20160101T0000Z/t1']
+20170101T0000Z/t1%a -triggered off ['20170101T0000Z/t1+a']
+20190101T0000Z/t1 -triggered off ['20170101T0000Z/t1']
+20180101T0000Z/t1-a -triggered off ['20180101T0000Z/t1']
+20200101T0000Z/t1 -triggered off ['20180101T0000Z/t1']
+20190101T0000Z/t1-a -triggered off ['20190101T0000Z/t1']
+20180101T0000Z/t1+a -triggered off ['20180101T0000Z/t1-a']
+20200101T0000Z/t1-a -triggered off ['20200101T0000Z/t1']
+20190101T0000Z/t1+a -triggered off ['20190101T0000Z/t1-a']
+20180101T0000Z/t1%a -triggered off ['20180101T0000Z/t1+a']
+20200101T0000Z/t1+a -triggered off ['20200101T0000Z/t1-a']
+20190101T0000Z/t1%a -triggered off ['20190101T0000Z/t1+a']
+20200101T0000Z/t1%a -triggered off ['20200101T0000Z/t1+a']
diff --git a/tests/functional/triggering/00-recovery/flow.cylc b/tests/functional/triggering/00-recovery/flow.cylc
index 145387f10d7..c677aae7930 100644
--- a/tests/functional/triggering/00-recovery/flow.cylc
+++ b/tests/functional/triggering/00-recovery/flow.cylc
@@ -10,7 +10,7 @@
UTC mode = True
allow implicit tasks = True
[[events]]
- expected task failures = model.20110101T1200Z
+ expected task failures = 20110101T1200Z/model
[scheduling]
initial cycle point = 20110101T00
diff --git a/tests/functional/triggering/00-recovery/reference.log b/tests/functional/triggering/00-recovery/reference.log
index b41e2213677..a5f3f3b1928 100644
--- a/tests/functional/triggering/00-recovery/reference.log
+++ b/tests/functional/triggering/00-recovery/reference.log
@@ -1,10 +1,10 @@
-2012/09/12 09:36:00 INFO - Initial point: 20110101T0000Z
-2012/09/12 09:36:00 INFO - Final point: 20110101T1200Z
-2012/09/12 09:36:00 DEBUG - pre.20110101T0000Z -triggered off []
-2012/09/12 09:36:00 DEBUG - pre.20110101T1200Z -triggered off []
-2012/09/12 09:36:01 DEBUG - model.20110101T0000Z -triggered off ['pre.20110101T0000Z']
-2012/09/12 09:36:01 DEBUG - model.20110101T1200Z -triggered off ['pre.20110101T1200Z']
-2012/09/12 09:36:02 DEBUG - post.20110101T0000Z -triggered off ['model.20110101T0000Z']
-2012/09/12 09:36:02 DEBUG - diagnose.20110101T1200Z -triggered off ['model.20110101T1200Z']
-2012/09/12 09:36:02 DEBUG - recover.20110101T1200Z -triggered off ['diagnose.20110101T1200Z']
-2012/09/12 09:36:03 DEBUG - post.20110101T1200Z -triggered off ['recover.20110101T1200Z']
+Initial point: 20110101T0000Z
+Final point: 20110101T1200Z
+20110101T0000Z/pre -triggered off []
+20110101T1200Z/pre -triggered off []
+20110101T0000Z/model -triggered off ['20110101T0000Z/pre']
+20110101T1200Z/model -triggered off ['20110101T1200Z/pre']
+20110101T0000Z/post -triggered off ['20110101T0000Z/model']
+20110101T1200Z/diagnose -triggered off ['20110101T1200Z/model']
+20110101T1200Z/recover -triggered off ['20110101T1200Z/diagnose']
+20110101T1200Z/post -triggered off ['20110101T1200Z/recover']
diff --git a/tests/functional/triggering/00a-recovery/flow.cylc b/tests/functional/triggering/00a-recovery/flow.cylc
index 5f8907c9dc0..fbd9c9db8a9 100644
--- a/tests/functional/triggering/00a-recovery/flow.cylc
+++ b/tests/functional/triggering/00a-recovery/flow.cylc
@@ -13,7 +13,7 @@
UTC mode = True
allow implicit tasks = True
[[events]]
- expected task failures = model.20110101T1200Z
+ expected task failures = 20110101T1200Z/model
[scheduling]
initial cycle point = 20110101T00
diff --git a/tests/functional/triggering/00a-recovery/reference.log b/tests/functional/triggering/00a-recovery/reference.log
index b41e2213677..a5f3f3b1928 100644
--- a/tests/functional/triggering/00a-recovery/reference.log
+++ b/tests/functional/triggering/00a-recovery/reference.log
@@ -1,10 +1,10 @@
-2012/09/12 09:36:00 INFO - Initial point: 20110101T0000Z
-2012/09/12 09:36:00 INFO - Final point: 20110101T1200Z
-2012/09/12 09:36:00 DEBUG - pre.20110101T0000Z -triggered off []
-2012/09/12 09:36:00 DEBUG - pre.20110101T1200Z -triggered off []
-2012/09/12 09:36:01 DEBUG - model.20110101T0000Z -triggered off ['pre.20110101T0000Z']
-2012/09/12 09:36:01 DEBUG - model.20110101T1200Z -triggered off ['pre.20110101T1200Z']
-2012/09/12 09:36:02 DEBUG - post.20110101T0000Z -triggered off ['model.20110101T0000Z']
-2012/09/12 09:36:02 DEBUG - diagnose.20110101T1200Z -triggered off ['model.20110101T1200Z']
-2012/09/12 09:36:02 DEBUG - recover.20110101T1200Z -triggered off ['diagnose.20110101T1200Z']
-2012/09/12 09:36:03 DEBUG - post.20110101T1200Z -triggered off ['recover.20110101T1200Z']
+Initial point: 20110101T0000Z
+Final point: 20110101T1200Z
+20110101T0000Z/pre -triggered off []
+20110101T1200Z/pre -triggered off []
+20110101T0000Z/model -triggered off ['20110101T0000Z/pre']
+20110101T1200Z/model -triggered off ['20110101T1200Z/pre']
+20110101T0000Z/post -triggered off ['20110101T0000Z/model']
+20110101T1200Z/diagnose -triggered off ['20110101T1200Z/model']
+20110101T1200Z/recover -triggered off ['20110101T1200Z/diagnose']
+20110101T1200Z/post -triggered off ['20110101T1200Z/recover']
diff --git a/tests/functional/triggering/01-or-conditional/flow.cylc b/tests/functional/triggering/01-or-conditional/flow.cylc
index 672ac89ba7c..62159c87604 100644
--- a/tests/functional/triggering/01-or-conditional/flow.cylc
+++ b/tests/functional/triggering/01-or-conditional/flow.cylc
@@ -1,6 +1,6 @@
[scheduler]
[[events]]
- expected task failures = b.1, c.1
+ expected task failures = 1/b, 1/c
[scheduling]
[[graph]]
R1 = """
diff --git a/tests/functional/triggering/01-or-conditional/reference.log b/tests/functional/triggering/01-or-conditional/reference.log
index 422c4b012bc..1ae8384bda3 100644
--- a/tests/functional/triggering/01-or-conditional/reference.log
+++ b/tests/functional/triggering/01-or-conditional/reference.log
@@ -1,7 +1,7 @@
Initial point: 1
Final point: 1
-a.1 -triggered off []
-b.1 -triggered off []
-c.1 -triggered off ['a.1']
-d.1 -triggered off ['a.1']
-e.1 -triggered off ['d.1']
+1/a -triggered off []
+1/b -triggered off []
+1/c -triggered off ['1/a']
+1/d -triggered off ['1/a']
+1/e -triggered off ['1/d']
diff --git a/tests/functional/triggering/02-fam-start-all/reference.log b/tests/functional/triggering/02-fam-start-all/reference.log
index 17fa5833369..6f6ac242fe5 100644
--- a/tests/functional/triggering/02-fam-start-all/reference.log
+++ b/tests/functional/triggering/02-fam-start-all/reference.log
@@ -1,6 +1,6 @@
-2013/11/05 15:25:53 INFO - Initial point: 1
-2013/11/05 15:25:53 INFO - Final point: 1
-2013/11/05 15:25:53 DEBUG - a.1 -triggered off []
-2013/11/05 15:25:53 DEBUG - c.1 -triggered off []
-2013/11/05 15:25:53 DEBUG - b.1 -triggered off []
-2013/11/05 15:25:57 DEBUG - foo.1 -triggered off ['a.1', 'b.1', 'c.1']
+Initial point: 1
+Final point: 1
+1/a -triggered off []
+1/c -triggered off []
+1/b -triggered off []
+1/foo -triggered off ['1/a', '1/b', '1/c']
diff --git a/tests/functional/triggering/03-fam-succeed-all/reference.log b/tests/functional/triggering/03-fam-succeed-all/reference.log
index 8d9931e0dbe..6f6ac242fe5 100644
--- a/tests/functional/triggering/03-fam-succeed-all/reference.log
+++ b/tests/functional/triggering/03-fam-succeed-all/reference.log
@@ -1,6 +1,6 @@
-2013/11/05 15:29:45 INFO - Initial point: 1
-2013/11/05 15:29:45 INFO - Final point: 1
-2013/11/05 15:29:45 DEBUG - a.1 -triggered off []
-2013/11/05 15:29:45 DEBUG - c.1 -triggered off []
-2013/11/05 15:29:45 DEBUG - b.1 -triggered off []
-2013/11/05 15:29:49 DEBUG - foo.1 -triggered off ['a.1', 'b.1', 'c.1']
+Initial point: 1
+Final point: 1
+1/a -triggered off []
+1/c -triggered off []
+1/b -triggered off []
+1/foo -triggered off ['1/a', '1/b', '1/c']
diff --git a/tests/functional/triggering/04-fam-fail-all/flow.cylc b/tests/functional/triggering/04-fam-fail-all/flow.cylc
index 9eb93a4e84a..93ce6f42cc4 100644
--- a/tests/functional/triggering/04-fam-fail-all/flow.cylc
+++ b/tests/functional/triggering/04-fam-fail-all/flow.cylc
@@ -1,6 +1,6 @@
[scheduler]
[[events]]
- expected task failures = a.1, b.1, c.1
+ expected task failures = 1/a, 1/b, 1/c
[scheduling]
[[graph]]
diff --git a/tests/functional/triggering/04-fam-fail-all/reference.log b/tests/functional/triggering/04-fam-fail-all/reference.log
index 2a1e68762a7..6f6ac242fe5 100644
--- a/tests/functional/triggering/04-fam-fail-all/reference.log
+++ b/tests/functional/triggering/04-fam-fail-all/reference.log
@@ -1,6 +1,6 @@
-2013/11/05 15:35:27 INFO - Initial point: 1
-2013/11/05 15:35:27 INFO - Final point: 1
-2013/11/05 15:35:27 DEBUG - a.1 -triggered off []
-2013/11/05 15:35:27 DEBUG - c.1 -triggered off []
-2013/11/05 15:35:27 DEBUG - b.1 -triggered off []
-2013/11/05 15:35:31 DEBUG - foo.1 -triggered off ['a.1', 'b.1', 'c.1']
+Initial point: 1
+Final point: 1
+1/a -triggered off []
+1/c -triggered off []
+1/b -triggered off []
+1/foo -triggered off ['1/a', '1/b', '1/c']
diff --git a/tests/functional/triggering/05-fam-finish-all/flow.cylc b/tests/functional/triggering/05-fam-finish-all/flow.cylc
index 4896bac184a..3190a1eed4f 100644
--- a/tests/functional/triggering/05-fam-finish-all/flow.cylc
+++ b/tests/functional/triggering/05-fam-finish-all/flow.cylc
@@ -1,6 +1,6 @@
[scheduler]
[[events]]
- expected task failures = a.1, c.1
+ expected task failures = 1/a, 1/c
[scheduling]
[[graph]]
diff --git a/tests/functional/triggering/05-fam-finish-all/reference.log b/tests/functional/triggering/05-fam-finish-all/reference.log
index 8a0ace8d219..6f6ac242fe5 100644
--- a/tests/functional/triggering/05-fam-finish-all/reference.log
+++ b/tests/functional/triggering/05-fam-finish-all/reference.log
@@ -1,6 +1,6 @@
-2013/11/05 15:38:54 INFO - Initial point: 1
-2013/11/05 15:38:54 INFO - Final point: 1
-2013/11/05 15:38:54 DEBUG - a.1 -triggered off []
-2013/11/05 15:38:54 DEBUG - c.1 -triggered off []
-2013/11/05 15:38:54 DEBUG - b.1 -triggered off []
-2013/11/05 15:38:58 DEBUG - foo.1 -triggered off ['a.1', 'b.1', 'c.1']
+Initial point: 1
+Final point: 1
+1/a -triggered off []
+1/c -triggered off []
+1/b -triggered off []
+1/foo -triggered off ['1/a', '1/b', '1/c']
diff --git a/tests/functional/triggering/06-fam-succeed-any/flow.cylc b/tests/functional/triggering/06-fam-succeed-any/flow.cylc
index 830b3713c27..e3786726f5e 100644
--- a/tests/functional/triggering/06-fam-succeed-any/flow.cylc
+++ b/tests/functional/triggering/06-fam-succeed-any/flow.cylc
@@ -1,6 +1,6 @@
[scheduler]
[[events]]
- expected task failures = a.1, c.1
+ expected task failures = 1/a, 1/c
[scheduling]
[[graph]]
diff --git a/tests/functional/triggering/06-fam-succeed-any/reference.log b/tests/functional/triggering/06-fam-succeed-any/reference.log
index 2a77c6d2b27..79b1eddac34 100644
--- a/tests/functional/triggering/06-fam-succeed-any/reference.log
+++ b/tests/functional/triggering/06-fam-succeed-any/reference.log
@@ -1,7 +1,7 @@
-2013/11/05 15:57:18 INFO - Initial point: 1
-2013/11/05 15:57:18 INFO - Final point: 1
-2013/11/05 15:57:18 DEBUG - a.1 -triggered off []
-2013/11/05 15:57:18 DEBUG - c.1 -triggered off []
-2013/11/05 15:57:18 DEBUG - b.1 -triggered off []
-2013/11/05 15:57:22 DEBUG - foo.1 -triggered off ['b.1']
-2013/11/05 15:57:22 DEBUG - handled.1 -triggered off ['a.1', 'c.1']
+Initial point: 1
+Final point: 1
+1/a -triggered off []
+1/c -triggered off []
+1/b -triggered off []
+1/foo -triggered off ['1/b']
+1/handled -triggered off ['1/a', '1/c']
diff --git a/tests/functional/triggering/07-fam-fail-any/flow.cylc b/tests/functional/triggering/07-fam-fail-any/flow.cylc
index 52d050b9a37..cf50c7000ad 100644
--- a/tests/functional/triggering/07-fam-fail-any/flow.cylc
+++ b/tests/functional/triggering/07-fam-fail-any/flow.cylc
@@ -1,6 +1,6 @@
[scheduler]
[[events]]
- expected task failures = b.1
+ expected task failures = 1/b
[scheduling]
[[graph]]
diff --git a/tests/functional/triggering/07-fam-fail-any/reference.log b/tests/functional/triggering/07-fam-fail-any/reference.log
index 8f440a34a05..86a6bf44b6d 100644
--- a/tests/functional/triggering/07-fam-fail-any/reference.log
+++ b/tests/functional/triggering/07-fam-fail-any/reference.log
@@ -1,6 +1,6 @@
-2013/11/05 16:06:31 INFO - Initial point: 1
-2013/11/05 16:06:31 INFO - Final point: 1
-2013/11/05 16:06:31 DEBUG - a.1 -triggered off []
-2013/11/05 16:06:31 DEBUG - c.1 -triggered off []
-2013/11/05 16:06:31 DEBUG - b.1 -triggered off []
-2013/11/05 16:06:35 DEBUG - foo.1 -triggered off ['b.1']
+Initial point: 1
+Final point: 1
+1/a -triggered off []
+1/c -triggered off []
+1/b -triggered off []
+1/foo -triggered off ['1/b']
diff --git a/tests/functional/triggering/08-fam-finish-any/reference.log b/tests/functional/triggering/08-fam-finish-any/reference.log
index b98488567c8..86a6bf44b6d 100644
--- a/tests/functional/triggering/08-fam-finish-any/reference.log
+++ b/tests/functional/triggering/08-fam-finish-any/reference.log
@@ -1,6 +1,6 @@
-2013/11/05 16:10:08 INFO - Initial point: 1
-2013/11/05 16:10:08 INFO - Final point: 1
-2013/11/05 16:10:08 DEBUG - a.1 -triggered off []
-2013/11/05 16:10:08 DEBUG - c.1 -triggered off []
-2013/11/05 16:10:08 DEBUG - b.1 -triggered off []
-2013/11/05 16:10:12 DEBUG - foo.1 -triggered off ['b.1']
+Initial point: 1
+Final point: 1
+1/a -triggered off []
+1/c -triggered off []
+1/b -triggered off []
+1/foo -triggered off ['1/b']
diff --git a/tests/functional/triggering/09-fail/flow.cylc b/tests/functional/triggering/09-fail/flow.cylc
index 1593b62a7aa..b4048e27ae5 100644
--- a/tests/functional/triggering/09-fail/flow.cylc
+++ b/tests/functional/triggering/09-fail/flow.cylc
@@ -1,6 +1,6 @@
[scheduler]
[[events]]
- expected task failures = foo.1
+ expected task failures = 1/foo
[scheduling]
[[graph]]
diff --git a/tests/functional/triggering/09-fail/reference.log b/tests/functional/triggering/09-fail/reference.log
index cf1c6db922b..1a9f846c98d 100644
--- a/tests/functional/triggering/09-fail/reference.log
+++ b/tests/functional/triggering/09-fail/reference.log
@@ -1,4 +1,4 @@
-2013/11/15 12:10:06 INFO - Initial point: 1
-2013/11/15 12:10:06 INFO - Final point: 1
-2013/11/15 12:10:06 DEBUG - foo.1 -triggered off []
-2013/11/15 12:10:10 DEBUG - bar.1 -triggered off ['foo.1']
+Initial point: 1
+Final point: 1
+1/foo -triggered off []
+1/bar -triggered off ['1/foo']
diff --git a/tests/functional/triggering/10-finish/flow.cylc b/tests/functional/triggering/10-finish/flow.cylc
index 5a9856cc248..53b78fcec1e 100644
--- a/tests/functional/triggering/10-finish/flow.cylc
+++ b/tests/functional/triggering/10-finish/flow.cylc
@@ -1,6 +1,6 @@
[scheduler]
[[events]]
- expected task failures = foo.1
+ expected task failures = 1/foo
[scheduling]
[[graph]]
diff --git a/tests/functional/triggering/10-finish/reference.log b/tests/functional/triggering/10-finish/reference.log
index 6eedd9abca0..875ed03caf9 100644
--- a/tests/functional/triggering/10-finish/reference.log
+++ b/tests/functional/triggering/10-finish/reference.log
@@ -1,6 +1,6 @@
-2013/11/15 12:12:45 INFO - Initial point: 1
-2013/11/15 12:12:45 INFO - Final point: 1
-2013/11/15 12:12:45 DEBUG - baz.1 -triggered off []
-2013/11/15 12:12:45 DEBUG - foo.1 -triggered off []
-2013/11/15 12:12:49 DEBUG - bar.1 -triggered off ['foo.1']
-2013/11/15 12:12:49 DEBUG - qux.1 -triggered off ['baz.1']
+Initial point: 1
+Final point: 1
+1/baz -triggered off []
+1/foo -triggered off []
+1/bar -triggered off ['1/foo']
+1/qux -triggered off ['1/baz']
diff --git a/tests/functional/triggering/11-start/reference.log b/tests/functional/triggering/11-start/reference.log
index 75a1a2f17cc..1a9f846c98d 100644
--- a/tests/functional/triggering/11-start/reference.log
+++ b/tests/functional/triggering/11-start/reference.log
@@ -1,4 +1,4 @@
-2013/11/15 12:14:44 INFO - Initial point: 1
-2013/11/15 12:14:44 INFO - Final point: 1
-2013/11/15 12:14:44 DEBUG - foo.1 -triggered off []
-2013/11/15 12:14:47 DEBUG - bar.1 -triggered off ['foo.1']
+Initial point: 1
+Final point: 1
+1/foo -triggered off []
+1/bar -triggered off ['1/foo']
diff --git a/tests/functional/triggering/12-succeed/reference.log b/tests/functional/triggering/12-succeed/reference.log
index 00a4860a141..1a9f846c98d 100644
--- a/tests/functional/triggering/12-succeed/reference.log
+++ b/tests/functional/triggering/12-succeed/reference.log
@@ -1,4 +1,4 @@
-2013/11/15 12:16:26 INFO - Initial point: 1
-2013/11/15 12:16:26 INFO - Final point: 1
-2013/11/15 12:16:26 DEBUG - foo.1 -triggered off []
-2013/11/15 12:16:30 DEBUG - bar.1 -triggered off ['foo.1']
+Initial point: 1
+Final point: 1
+1/foo -triggered off []
+1/bar -triggered off ['1/foo']
diff --git a/tests/functional/triggering/13-submit/reference.log b/tests/functional/triggering/13-submit/reference.log
index 820baea4432..1a9f846c98d 100644
--- a/tests/functional/triggering/13-submit/reference.log
+++ b/tests/functional/triggering/13-submit/reference.log
@@ -1,4 +1,4 @@
-2013/11/15 12:22:42 INFO - Initial point: 1
-2013/11/15 12:22:42 INFO - Final point: 1
-2013/11/15 12:22:42 DEBUG - foo.1 -triggered off []
-2013/11/15 12:22:45 DEBUG - bar.1 -triggered off ['foo.1']
+Initial point: 1
+Final point: 1
+1/foo -triggered off []
+1/bar -triggered off ['1/foo']
diff --git a/tests/functional/triggering/14-submit-fail/flow.cylc b/tests/functional/triggering/14-submit-fail/flow.cylc
index c604695e7a6..e2e865fa39c 100644
--- a/tests/functional/triggering/14-submit-fail/flow.cylc
+++ b/tests/functional/triggering/14-submit-fail/flow.cylc
@@ -1,6 +1,6 @@
[scheduler]
[[events]]
- expected task failures = foo.1
+ expected task failures = 1/foo
[scheduling]
[[graph]]
diff --git a/tests/functional/triggering/14-submit-fail/reference.log b/tests/functional/triggering/14-submit-fail/reference.log
index 1542ec1f4c2..1a9f846c98d 100644
--- a/tests/functional/triggering/14-submit-fail/reference.log
+++ b/tests/functional/triggering/14-submit-fail/reference.log
@@ -1,4 +1,4 @@
-2013/11/15 12:25:18 INFO - Initial point: 1
-2013/11/15 12:25:18 INFO - Final point: 1
-2013/11/15 12:25:18 DEBUG - foo.1 -triggered off []
-2013/11/15 12:25:20 DEBUG - bar.1 -triggered off ['foo.1']
+Initial point: 1
+Final point: 1
+1/foo -triggered off []
+1/bar -triggered off ['1/foo']
diff --git a/tests/functional/triggering/15-suicide/flow.cylc b/tests/functional/triggering/15-suicide/flow.cylc
index 9e4a45c467b..eed1d934b8c 100644
--- a/tests/functional/triggering/15-suicide/flow.cylc
+++ b/tests/functional/triggering/15-suicide/flow.cylc
@@ -3,7 +3,7 @@
[scheduler]
allow implicit tasks = True
[[events]]
- expected task failures = goodbye.1
+ expected task failures = 1/goodbye
[scheduling]
[[graph]]
diff --git a/tests/functional/triggering/15-suicide/reference.log b/tests/functional/triggering/15-suicide/reference.log
index d53672d5559..c58830189ab 100644
--- a/tests/functional/triggering/15-suicide/reference.log
+++ b/tests/functional/triggering/15-suicide/reference.log
@@ -1,5 +1,5 @@
-2014/01/08 10:04:17 INFO - Initial point: 1
-2014/01/08 10:04:17 INFO - Final point: 1
-2014/01/08 10:04:17 DEBUG - hello.1 -triggered off []
-2014/01/08 10:04:30 DEBUG - goodbye.1 -triggered off ['hello.1']
-2014/01/08 10:04:44 DEBUG - really_goodbye.1 -triggered off ['goodbye.1']
+Initial point: 1
+Final point: 1
+1/hello -triggered off []
+1/goodbye -triggered off ['1/hello']
+1/really_goodbye -triggered off ['1/goodbye']
diff --git a/tests/functional/triggering/16-fam-expansion.t b/tests/functional/triggering/16-fam-expansion.t
index e1c2b88b6fb..4b48161588c 100644
--- a/tests/functional/triggering/16-fam-expansion.t
+++ b/tests/functional/triggering/16-fam-expansion.t
@@ -32,12 +32,12 @@ workflow_run_ok "${TEST_NAME}" \
#-------------------------------------------------------------------------------
contains_ok "$SHOW_OUT" <<'__SHOW_DUMP__'
+ (((1 | 0) & (3 | 2) & (5 | 4)) & (0 | 2 | 4))
- + 0 = foo1.1 failed
- - 1 = foo1.1 succeeded
- + 2 = foo2.1 failed
- - 3 = foo2.1 succeeded
- + 4 = foo3.1 failed
- - 5 = foo3.1 succeeded
+ + 0 = 1/foo1 failed
+ - 1 = 1/foo1 succeeded
+ + 2 = 1/foo2 failed
+ - 3 = 1/foo2 succeeded
+ + 4 = 1/foo3 failed
+ - 5 = 1/foo3 succeeded
__SHOW_DUMP__
#-------------------------------------------------------------------------------
purge
diff --git a/tests/functional/triggering/17-suicide-multi/reference.log b/tests/functional/triggering/17-suicide-multi/reference.log
index ec75da6dad3..19a6da47b19 100644
--- a/tests/functional/triggering/17-suicide-multi/reference.log
+++ b/tests/functional/triggering/17-suicide-multi/reference.log
@@ -1,11 +1,11 @@
-2017-12-27T14:42:10Z INFO - Initial point: 1
-2017-12-27T14:42:10Z INFO - Final point: 3
-2017-12-27T14:42:10Z DEBUG - showdown.1 -triggered off ['fin.0']
-2017-12-27T14:42:13Z DEBUG - ugly.1 -triggered off ['showdown.1']
-2017-12-27T14:42:16Z DEBUG - fin.1 -triggered off ['ugly.1']
-2017-12-27T14:42:19Z DEBUG - showdown.2 -triggered off ['fin.1']
-2017-12-27T14:42:22Z DEBUG - bad.2 -triggered off ['showdown.2']
-2017-12-27T14:42:25Z DEBUG - fin.2 -triggered off ['bad.2']
-2017-12-27T14:42:28Z DEBUG - showdown.3 -triggered off ['fin.2']
-2017-12-27T14:42:32Z DEBUG - good.3 -triggered off ['showdown.3']
-2017-12-27T14:42:35Z DEBUG - fin.3 -triggered off ['good.3']
+Initial point: 1
+Final point: 3
+1/showdown -triggered off ['0/fin']
+1/ugly -triggered off ['1/showdown']
+1/fin -triggered off ['1/ugly']
+2/showdown -triggered off ['1/fin']
+2/bad -triggered off ['2/showdown']
+2/fin -triggered off ['2/bad']
+3/showdown -triggered off ['2/fin']
+3/good -triggered off ['3/showdown']
+3/fin -triggered off ['3/good']
diff --git a/tests/functional/triggering/19-and-suicide/flow.cylc b/tests/functional/triggering/19-and-suicide/flow.cylc
index 2335c54c0f3..cf7ae49d129 100644
--- a/tests/functional/triggering/19-and-suicide/flow.cylc
+++ b/tests/functional/triggering/19-and-suicide/flow.cylc
@@ -5,7 +5,7 @@
[[events]]
abort on stall timeout = True
stall timeout = PT0S
- expected task failures = t1.1
+ expected task failures = 1/t1
[scheduling]
[[graph]]
R1 = """
@@ -15,8 +15,8 @@
[runtime]
[[t0]]
# https://github.com/cylc/cylc-flow/issues/2655
- # "t2.1" should not suicide on "t1.1:failed"
- script = cylc__job__poll_grep_workflow_log -E 't1\.1 .* \(received\)failed'
+ # "1/t2" should not suicide on "1/t1:failed"
+ script = cylc__job__poll_grep_workflow_log -E '1/t1 .* \(received\)failed'
[[t1]]
script = false
[[t2]]
diff --git a/tests/functional/triggering/19-and-suicide/reference.log b/tests/functional/triggering/19-and-suicide/reference.log
index 75dc65ec503..0ec8135dd57 100644
--- a/tests/functional/triggering/19-and-suicide/reference.log
+++ b/tests/functional/triggering/19-and-suicide/reference.log
@@ -1,5 +1,5 @@
-2018-05-08T15:09:34Z INFO - Initial point: 1
-2018-05-08T15:09:34Z INFO - Final point: 1
-2018-05-08T15:09:34Z DEBUG - t0.1 -triggered off []
-2018-05-08T15:09:34Z DEBUG - t1.1 -triggered off []
-2018-05-08T15:09:47Z DEBUG - t2.1 -triggered off ['t0.1']
+Initial point: 1
+Final point: 1
+1/t0 -triggered off []
+1/t1 -triggered off []
+1/t2 -triggered off ['1/t0']
diff --git a/tests/functional/triggering/20-and-outputs-suicide/reference.log b/tests/functional/triggering/20-and-outputs-suicide/reference.log
index 2d41c0ec0d3..acaca0277d6 100644
--- a/tests/functional/triggering/20-and-outputs-suicide/reference.log
+++ b/tests/functional/triggering/20-and-outputs-suicide/reference.log
@@ -1,14 +1,14 @@
Initial point: 1
Final point: 3
-showdown.1 -triggered off ['fin.0']
-bad.1 -triggered off ['showdown.1']
-ugly.1 -triggered off ['showdown.1']
-fin.1 -triggered off ['bad.1', 'ugly.1']
-showdown.2 -triggered off ['fin.1']
-good.2 -triggered off ['showdown.2']
-ugly.2 -triggered off ['showdown.2']
-fin.2 -triggered off ['good.2', 'ugly.2']
-showdown.3 -triggered off ['fin.2']
-bad.3 -triggered off ['showdown.3']
-good.3 -triggered off ['showdown.3']
-fin.3 -triggered off ['bad.3', 'good.3']
+1/showdown -triggered off ['0/fin']
+1/bad -triggered off ['1/showdown']
+1/ugly -triggered off ['1/showdown']
+1/fin -triggered off ['1/bad', '1/ugly']
+2/showdown -triggered off ['1/fin']
+2/good -triggered off ['2/showdown']
+2/ugly -triggered off ['2/showdown']
+2/fin -triggered off ['2/good', '2/ugly']
+3/showdown -triggered off ['2/fin']
+3/bad -triggered off ['3/showdown']
+3/good -triggered off ['3/showdown']
+3/fin -triggered off ['3/bad', '3/good']
diff --git a/tests/functional/triggering/fam-expansion/flow.cylc b/tests/functional/triggering/fam-expansion/flow.cylc
index 778f948ad78..1c34f6dc4f9 100644
--- a/tests/functional/triggering/fam-expansion/flow.cylc
+++ b/tests/functional/triggering/fam-expansion/flow.cylc
@@ -8,4 +8,4 @@
[[foo1,foo2,foo3]]
inherit = FOO
[[bar]]
- script = "cylc show ${CYLC_WORKFLOW_ID} bar.1 > {{SHOW_OUT}}"
+ script = cylc show "${CYLC_WORKFLOW_ID}//1/bar" > {{SHOW_OUT}}
diff --git a/tests/functional/validate/00-multi/reference.log b/tests/functional/validate/00-multi/reference.log
index 7712e92f2eb..08fe5d5558a 100644
--- a/tests/functional/validate/00-multi/reference.log
+++ b/tests/functional/validate/00-multi/reference.log
@@ -1,3 +1,3 @@
-2013/04/30 09:18:53 INFO - Initial point: 1
-2013/04/30 09:18:53 INFO - Final point: 1
-2013/04/30 09:18:54 DEBUG - foo.1 -triggered off []
+Initial point: 1
+Final point: 1
+1/foo -triggered off []
diff --git a/tests/functional/validate/01-periodical/reference.log b/tests/functional/validate/01-periodical/reference.log
index d797d59afd3..6057d2d6399 100644
--- a/tests/functional/validate/01-periodical/reference.log
+++ b/tests/functional/validate/01-periodical/reference.log
@@ -1,6 +1,6 @@
-2013/08/19 15:29:00 INFO - Initial point: 2010010100
-2013/08/19 15:29:00 INFO - Final point: 2010010200
-2013/08/19 15:29:00 DEBUG - monthly.2010010100 -triggered off []
-2013/08/19 15:29:00 DEBUG - yearly.2010010100 -triggered off []
-2013/08/19 15:29:00 DEBUG - daily.2010010100 -triggered off []
-2013/08/19 15:29:04 DEBUG - daily.2010010200 -triggered off []
+Initial point: 2010010100
+Final point: 2010010200
+2010010100/monthly -triggered off []
+2010010100/yearly -triggered off []
+2010010100/daily -triggered off []
+2010010200/daily -triggered off []
diff --git a/tests/functional/validate/09-include-missing.t b/tests/functional/validate/09-include-missing.t
index 30c3df5b4f2..76eba530389 100755
--- a/tests/functional/validate/09-include-missing.t
+++ b/tests/functional/validate/09-include-missing.t
@@ -21,7 +21,7 @@
set_test_number 2
echo '%include foo.cylc' >flow.cylc
echo '%include bar.cylc' >foo.cylc
-run_fail "${TEST_NAME_BASE}" cylc validate flow.cylc
+run_fail "${TEST_NAME_BASE}" cylc validate .
cmp_ok "${TEST_NAME_BASE}.stderr" <<__ERR__
IncludeFileNotFoundError: bar.cylc via foo.cylc from $PWD/flow.cylc
__ERR__
diff --git a/tests/functional/validate/10-bad-recurrence.t b/tests/functional/validate/10-bad-recurrence.t
index 07e1382fa0c..f72dd031461 100755
--- a/tests/functional/validate/10-bad-recurrence.t
+++ b/tests/functional/validate/10-bad-recurrence.t
@@ -34,7 +34,7 @@ cat >'flow.cylc' <<'__WORKFLOW__'
[[foo]]
script = true
__WORKFLOW__
-run_fail "${TEST_NAME}" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME}" cylc validate .
cmp_ok "${TEST_NAME}.stderr" <<'__ERR__'
WorkflowConfigError: Cannot process recurrence R/T00/PT5D (initial cycle point=20140101T0000+01) (final cycle point=20140201T0000+01)
__ERR__
@@ -51,7 +51,7 @@ cat >'flow.cylc' <<'__WORKFLOW__'
[[root]]
script = true
__WORKFLOW__
-run_fail "${TEST_NAME}" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME}" cylc validate .
cmp_ok "${TEST_NAME}.stderr" <<'__ERR__'
WorkflowConfigError: Cannot process recurrence R1/P0D (initial cycle point=20140101T0000Z) (final cycle point=None) This workflow requires a final cycle point.
__ERR__
@@ -71,7 +71,7 @@ cat >'flow.cylc' <<'__WORKFLOW__'
[[foo]]
script = true
__WORKFLOW__
-run_fail "${TEST_NAME}" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME}" cylc validate .
cmp_ok "${TEST_NAME}.stderr" <<'__ERR__'
WorkflowConfigError: Cannot process recurrence R/00/P5D (initial cycle point=20140101T0000+01) (final cycle point=20140201T0000+01) '00': 2 digit centuries not allowed. Did you mean T-digit-digit e.g. 'T00'?
__ERR__
@@ -85,7 +85,7 @@ cat >'flow.cylc' <<'__WORKFLOW__'
[[graph]]
0,6,12 = "foo"
__WORKFLOW__
-run_fail "${TEST_NAME}" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME}" cylc validate .
cmp_ok "${TEST_NAME}.stderr" <<'__ERR__'
WorkflowConfigError: Cannot process recurrence 0 (initial cycle point=20100101T0000+01) (final cycle point=None) '0': not a valid cylc-shorthand or full ISO 8601 date representation
__ERR__
@@ -99,7 +99,7 @@ cat >'flow.cylc' <<'__WORKFLOW__'
[[graph]]
R1 = foo
__WORKFLOW__
-run_fail "${TEST_NAME}" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME}" cylc validate .
cmp_ok "${TEST_NAME}.stderr" <<'__ERR__'
WorkflowConfigError: Cannot process recurrence R1 (initial cycle point=2010010101) (final cycle point=None) '2010010101': not a valid cylc-shorthand or full ISO 8601 date representation
__ERR__
diff --git a/tests/functional/validate/17-fail-old-syntax-6.t b/tests/functional/validate/17-fail-old-syntax-6.t
index 9c2612f664c..f17762a89ca 100755
--- a/tests/functional/validate/17-fail-old-syntax-6.t
+++ b/tests/functional/validate/17-fail-old-syntax-6.t
@@ -29,7 +29,7 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
__FLOW_CONFIG__
#-------------------------------------------------------------------------------
TEST_NAME="${TEST_NAME_BASE}"
-run_fail "${TEST_NAME}" cylc validate -v 'flow.cylc'
+run_fail "${TEST_NAME}" cylc validate -v .
grep_ok 'WorkflowConfigError: Cannot process recurrence 12' "${TEST_NAME}.stderr"
#-------------------------------------------------------------------------------
exit
diff --git a/tests/functional/validate/21-fail-no-graph-2.t b/tests/functional/validate/21-fail-no-graph-2.t
index 50a8ce89ced..d4f77b5d602 100755
--- a/tests/functional/validate/21-fail-no-graph-2.t
+++ b/tests/functional/validate/21-fail-no-graph-2.t
@@ -26,7 +26,7 @@ cat > flow.cylc <<__END__
[[graph]]
R1 = ""
__END__
-run_fail "${TEST_NAME}" cylc validate -v flow.cylc
+run_fail "${TEST_NAME}" cylc validate -v .
grep_ok "No workflow dependency graph defined." "${TEST_NAME}.stderr"
#-------------------------------------------------------------------------------
TEST_NAME=${TEST_NAME_BASE}-no-graph
@@ -35,5 +35,5 @@ cat > flow.cylc <<__END__
initial cycle point = 2015
[[graph]]
__END__
-run_fail "${TEST_NAME}" cylc validate -v flow.cylc
+run_fail "${TEST_NAME}" cylc validate -v .
grep_ok "No workflow dependency graph defined." "${TEST_NAME}.stderr"
diff --git a/tests/functional/validate/31-fail-not-integer.t b/tests/functional/validate/31-fail-not-integer.t
index 106250132c5..a2d7369232a 100755
--- a/tests/functional/validate/31-fail-not-integer.t
+++ b/tests/functional/validate/31-fail-not-integer.t
@@ -33,7 +33,7 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
__FLOW_CONFIG__
#-------------------------------------------------------------------------------
TEST_NAME="${TEST_NAME_BASE}"
-run_fail "${TEST_NAME}" cylc validate -v 'flow.cylc'
+run_fail "${TEST_NAME}" cylc validate -v .
grep_ok "WorkflowConfigError: Cannot process recurrence 1" "${TEST_NAME}.stderr"
#-------------------------------------------------------------------------------
exit
diff --git a/tests/functional/validate/40-jinja2-template-syntax-error-main.t b/tests/functional/validate/40-jinja2-template-syntax-error-main.t
index 5e09eeaa06d..97cb6654339 100755
--- a/tests/functional/validate/40-jinja2-template-syntax-error-main.t
+++ b/tests/functional/validate/40-jinja2-template-syntax-error-main.t
@@ -22,7 +22,7 @@ set_test_number 2
install_workflow "${TEST_NAME_BASE}" "${TEST_NAME_BASE}"
#-------------------------------------------------------------------------------
TEST_NAME="${TEST_NAME_BASE}-val"
-run_fail "${TEST_NAME}" cylc validate flow.cylc
+run_fail "${TEST_NAME}" cylc validate .
cmp_ok "${TEST_NAME}.stderr" <<'__ERROR__'
Jinja2Error: Encountered unknown tag 'end'.
Jinja was looking for the following tags: 'elif' or 'else' or 'endif'.
diff --git a/tests/functional/validate/41-jinja2-template-syntax-error-cylc-include.t b/tests/functional/validate/41-jinja2-template-syntax-error-cylc-include.t
index 3adbf75585a..592a523a3c7 100755
--- a/tests/functional/validate/41-jinja2-template-syntax-error-cylc-include.t
+++ b/tests/functional/validate/41-jinja2-template-syntax-error-cylc-include.t
@@ -22,7 +22,7 @@ set_test_number 2
install_workflow "${TEST_NAME_BASE}" "${TEST_NAME_BASE}"
#-------------------------------------------------------------------------------
TEST_NAME="${TEST_NAME_BASE}-val"
-run_fail "${TEST_NAME}" cylc validate flow.cylc
+run_fail "${TEST_NAME}" cylc validate .
cmp_ok "${TEST_NAME}.stderr" <<'__ERROR__'
Jinja2Error: Encountered unknown tag 'end'.
Jinja was looking for the following tags: 'elif' or 'else' or 'endif'.
diff --git a/tests/functional/validate/42-jinja2-template-syntax-error-jinja-include.t b/tests/functional/validate/42-jinja2-template-syntax-error-jinja-include.t
index 99e64a643b8..019ef6b0078 100755
--- a/tests/functional/validate/42-jinja2-template-syntax-error-jinja-include.t
+++ b/tests/functional/validate/42-jinja2-template-syntax-error-jinja-include.t
@@ -22,7 +22,7 @@ set_test_number 2
install_workflow "${TEST_NAME_BASE}" "${TEST_NAME_BASE}"
#-------------------------------------------------------------------------------
TEST_NAME="${TEST_NAME_BASE}-val"
-run_fail "${TEST_NAME}" cylc validate flow.cylc
+run_fail "${TEST_NAME}" cylc validate .
cmp_ok "${TEST_NAME}.stderr" <<'__ERROR__'
Jinja2Error: Encountered unknown tag 'end'.
Error in file "flow-includeme.cylc"
diff --git a/tests/functional/validate/43-jinja2-template-error-main.t b/tests/functional/validate/43-jinja2-template-error-main.t
index 2c5f96043b8..49d0763b879 100755
--- a/tests/functional/validate/43-jinja2-template-error-main.t
+++ b/tests/functional/validate/43-jinja2-template-error-main.t
@@ -30,7 +30,7 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
[[foo]]
script = sleep 1
__FLOW_CONFIG__
-run_fail "${TEST_NAME_BASE}" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME_BASE}" cylc validate .
cmp_ok "${TEST_NAME_BASE}.stderr" <<'__ERROR__'
Jinja2Error: You can only sort by either "key" or "value"
Context lines:
diff --git a/tests/functional/validate/44-jinja2-template-not-found.t b/tests/functional/validate/44-jinja2-template-not-found.t
index 9e6d9fca0c8..a1259ba4524 100755
--- a/tests/functional/validate/44-jinja2-template-not-found.t
+++ b/tests/functional/validate/44-jinja2-template-not-found.t
@@ -22,7 +22,7 @@ set_test_number 2
install_workflow "${TEST_NAME_BASE}" "${TEST_NAME_BASE}"
#-------------------------------------------------------------------------------
TEST_NAME="${TEST_NAME_BASE}-val"
-run_fail "${TEST_NAME}" cylc validate flow.cylc
+run_fail "${TEST_NAME}" cylc validate .
cmp_ok "${TEST_NAME}.stderr" <<'__ERROR__'
Jinja2Error: flow-foo.cylc
Context lines:
diff --git a/tests/functional/validate/45-jinja2-type-error.t b/tests/functional/validate/45-jinja2-type-error.t
index e1cf2f3e5ad..ce764e628ed 100755
--- a/tests/functional/validate/45-jinja2-type-error.t
+++ b/tests/functional/validate/45-jinja2-type-error.t
@@ -29,7 +29,7 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
R1 = foo
{{ 1 / 'foo' }}
__FLOW_CONFIG__
-run_fail "${TEST_NAME}" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME}" cylc validate .
cmp_ok "${TEST_NAME}.stderr" <<'__ERROR__'
Jinja2Error: unsupported operand type(s) for /: 'int' and 'str'
Context lines:
@@ -44,7 +44,7 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
{% set foo = [1, 2] %}
{% set a, b, c = foo %}
__FLOW_CONFIG__
-run_fail "${TEST_NAME}" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME}" cylc validate .
cmp_ok "${TEST_NAME}.stderr" <<'__ERROR__'
Jinja2Error: not enough values to unpack (expected 3, got 2)
Context lines:
diff --git a/tests/functional/validate/49-jinja2-undefined-error.t b/tests/functional/validate/49-jinja2-undefined-error.t
index f86d265d8dc..c08c7777a25 100755
--- a/tests/functional/validate/49-jinja2-undefined-error.t
+++ b/tests/functional/validate/49-jinja2-undefined-error.t
@@ -22,7 +22,7 @@ set_test_number 2
install_workflow "${TEST_NAME_BASE}" "${TEST_NAME_BASE}"
#-------------------------------------------------------------------------------
TEST_NAME="${TEST_NAME_BASE}-val"
-run_fail "${TEST_NAME}" cylc validate flow.cylc
+run_fail "${TEST_NAME}" cylc validate .
cmp_ok "${TEST_NAME}.stderr" <<'__ERROR__'
Jinja2Error: 'UNDEFINED_WHATEVER' is undefined
Context lines:
diff --git a/tests/functional/validate/50-hyphen-fam.t b/tests/functional/validate/50-hyphen-fam.t
index 25be87d6d7e..d74a35a6335 100755
--- a/tests/functional/validate/50-hyphen-fam.t
+++ b/tests/functional/validate/50-hyphen-fam.t
@@ -30,7 +30,7 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
inherit = foo
__FLOW_CONFIG__
-run_ok "${TEST_NAME_BASE}" cylc validate 'flow.cylc'
+run_ok "${TEST_NAME_BASE}" cylc validate .
cat >'flow.cylc' <<'__FLOW_CONFIG__'
[scheduling]
@@ -42,5 +42,5 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
inherit = foo
__FLOW_CONFIG__
-run_ok "${TEST_NAME_BASE}" cylc validate 'flow.cylc'
+run_ok "${TEST_NAME_BASE}" cylc validate .
exit
diff --git a/tests/functional/validate/51-zero-interval.t b/tests/functional/validate/51-zero-interval.t
index 846871a9a41..dfa1058ff79 100755
--- a/tests/functional/validate/51-zero-interval.t
+++ b/tests/functional/validate/51-zero-interval.t
@@ -32,7 +32,7 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
script = true
__FLOW_CONFIG__
-run_fail "${TEST_NAME_BASE}" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME_BASE}" cylc validate .
cmp_ok "${TEST_NAME_BASE}.stderr" <<'__ERR__'
SequenceDegenerateError: R/20100101T0000Z/P0Y, point format CCYYMMDDThhmmZ: equal adjacent points: 20100101T0000Z => 20100101T0000Z.
__ERR__
diff --git a/tests/functional/validate/52-null-timeout.t b/tests/functional/validate/52-null-timeout.t
index 23c59a01946..cc96daac148 100755
--- a/tests/functional/validate/52-null-timeout.t
+++ b/tests/functional/validate/52-null-timeout.t
@@ -31,6 +31,6 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
execution timeout =
__FLOW_CONFIG__
-run_ok "${TEST_NAME_BASE}" cylc validate 'flow.cylc'
+run_ok "${TEST_NAME_BASE}" cylc validate .
exit
diff --git a/tests/functional/validate/54-self-suicide.t b/tests/functional/validate/54-self-suicide.t
index 0677acadd42..ce3648f3f13 100755
--- a/tests/functional/validate/54-self-suicide.t
+++ b/tests/functional/validate/54-self-suicide.t
@@ -38,15 +38,15 @@ run_ok "${TEST_NAME}" cylc validate "${WORKFLOW_NAME}"
TEST_NAME=${TEST_NAME_BASE}-graph-check
run_ok "${TEST_NAME}" cylc graph --reference "${WORKFLOW_NAME}"
cmp_ok "${TEST_NAME}.stdout" <<'__OUT__'
-edge "bar.1" "baz.1"
-edge "foo.1" "bar.1"
-edge "foo.1" "qux.1"
-edge "qux.1" "baz.1"
+edge "1/bar" "1/baz"
+edge "1/foo" "1/bar"
+edge "1/foo" "1/qux"
+edge "1/qux" "1/baz"
graph
-node "bar.1" "bar\n1"
-node "baz.1" "baz\n1"
-node "foo.1" "foo\n1"
-node "qux.1" "qux\n1"
+node "1/bar" "bar\n1"
+node "1/baz" "baz\n1"
+node "1/foo" "foo\n1"
+node "1/qux" "qux\n1"
stop
__OUT__
#-------------------------------------------------------------------------------
diff --git a/tests/functional/validate/55-hyphen-finish.t b/tests/functional/validate/55-hyphen-finish.t
index 9936d544c25..34c390a33e2 100755
--- a/tests/functional/validate/55-hyphen-finish.t
+++ b/tests/functional/validate/55-hyphen-finish.t
@@ -30,6 +30,6 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
script = true
__FLOW_CONFIG__
-run_ok "${TEST_NAME_BASE}" cylc validate 'flow.cylc'
+run_ok "${TEST_NAME_BASE}" cylc validate .
exit
diff --git a/tests/functional/validate/56-succeed-sub.t b/tests/functional/validate/56-succeed-sub.t
index 40eabf33edd..7ca4503a915 100755
--- a/tests/functional/validate/56-succeed-sub.t
+++ b/tests/functional/validate/56-succeed-sub.t
@@ -33,6 +33,6 @@ R1 = foo:fail? | (foo? & bar:fail) => something
script = true
__FLOW_CONFIG__
-run_ok "${TEST_NAME_BASE}" cylc validate 'flow.cylc'
+run_ok "${TEST_NAME_BASE}" cylc validate .
exit
diff --git a/tests/functional/validate/57-offset-no-offset.t b/tests/functional/validate/57-offset-no-offset.t
index b2679b4c7ec..9f310ba89d7 100755
--- a/tests/functional/validate/57-offset-no-offset.t
+++ b/tests/functional/validate/57-offset-no-offset.t
@@ -33,6 +33,6 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
script = true
__FLOW_CONFIG__
-run_ok "${TEST_NAME_BASE}" cylc validate 'flow.cylc'
+run_ok "${TEST_NAME_BASE}" cylc validate .
exit
diff --git a/tests/functional/validate/58-icp-quoted-now.t b/tests/functional/validate/58-icp-quoted-now.t
index 69899281d14..7d8a56ef60a 100755
--- a/tests/functional/validate/58-icp-quoted-now.t
+++ b/tests/functional/validate/58-icp-quoted-now.t
@@ -33,6 +33,6 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
script = true
__FLOW_CONFIG__
-run_ok "${TEST_NAME_BASE}" cylc validate 'flow.cylc'
+run_ok "${TEST_NAME_BASE}" cylc validate .
exit
diff --git a/tests/functional/validate/61-include-missing-quote.t b/tests/functional/validate/61-include-missing-quote.t
index 690a6152a5f..28301676aef 100755
--- a/tests/functional/validate/61-include-missing-quote.t
+++ b/tests/functional/validate/61-include-missing-quote.t
@@ -25,7 +25,7 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
%include 'foo.cylc
__FLOW_CONFIG__
-run_fail "${TEST_NAME_BASE}" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME_BASE}" cylc validate .
cmp_ok "${TEST_NAME_BASE}.stderr" <<__ERR__
FileParseError: mismatched quotes (in $PWD/flow.cylc):
%include 'foo.cylc
diff --git a/tests/functional/validate/64-circular.t b/tests/functional/validate/64-circular.t
index 8775d96c34e..bfbff40c9b9 100755
--- a/tests/functional/validate/64-circular.t
+++ b/tests/functional/validate/64-circular.t
@@ -28,7 +28,7 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
R1 = a => a
__FLOW_CONFIG__
-run_fail "${TEST_NAME_BASE}-simple-1" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME_BASE}-simple-1" cylc validate .
contains_ok "${TEST_NAME_BASE}-simple-1.stderr" <<'__ERR__'
WorkflowConfigError: self-edge detected: a:succeeded => a
__ERR__
@@ -41,9 +41,9 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
R1 = a => b => c => d => a => z
__FLOW_CONFIG__
-run_fail "${TEST_NAME_BASE}-simple-2" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME_BASE}-simple-2" cylc validate .
contains_ok "${TEST_NAME_BASE}-simple-2.stderr" <<'__ERR__'
-WorkflowConfigError: circular edges detected: d.1 => a.1 a.1 => b.1 b.1 => c.1 c.1 => d.1
+WorkflowConfigError: circular edges detected: 1/d => 1/a 1/a => 1/b 1/b => 1/c 1/c => 1/d
__ERR__
cat >'flow.cylc' <<'__FLOW_CONFIG__'
@@ -58,7 +58,7 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
inherit = FAM
__FLOW_CONFIG__
-run_fail "${TEST_NAME_BASE}-simple-fam" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME_BASE}-simple-fam" cylc validate .
contains_ok "${TEST_NAME_BASE}-simple-fam.stderr" <<'__ERR__'
WorkflowConfigError: self-edge detected: f:succeeded => f
__ERR__
@@ -77,9 +77,9 @@ a[+P1Y] => a
'''
__FLOW_CONFIG__
-run_fail "${TEST_NAME_BASE}-intercycle-1" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME_BASE}-intercycle-1" cylc validate .
contains_ok "${TEST_NAME_BASE}-intercycle-1.stderr" <<'__ERR__'
-WorkflowConfigError: circular edges detected: a.2002 => a.2001 a.2001 => a.2002 a.2003 => a.2002 a.2002 => a.2003
+WorkflowConfigError: circular edges detected: 2002/a => 2001/a 2001/a => 2002/a 2003/a => 2002/a 2002/a => 2003/a
__ERR__
cat >'flow.cylc' <<'__FLOW_CONFIG__'
@@ -93,9 +93,9 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
8/P1 = baz => foo
__FLOW_CONFIG__
-run_fail "${TEST_NAME_BASE}-intercycle-2" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME_BASE}-intercycle-2" cylc validate .
contains_ok "${TEST_NAME_BASE}-intercycle-2.stderr" <<'__ERR__'
-WorkflowConfigError: circular edges detected: foo.8 => bar.8 bar.8 => baz.8 baz.8 => foo.8
+WorkflowConfigError: circular edges detected: 8/foo => 8/bar 8/bar => 8/baz 8/baz => 8/foo
__ERR__
cat >'flow.cylc' <<'__FLOW_CONFIG__'
@@ -111,9 +111,9 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
"""
__FLOW_CONFIG__
-run_fail "${TEST_NAME_BASE}-param-1" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME_BASE}-param-1" cylc validate .
contains_ok "${TEST_NAME_BASE}-param-1.stderr" <<'__ERR__'
-WorkflowConfigError: circular edges detected: fool_foo2.1 => fool_foo1.1 fool_foo1.1 => fool_foo2.1
+WorkflowConfigError: circular edges detected: 1/fool_foo2 => 1/fool_foo1 1/fool_foo1 => 1/fool_foo2
__ERR__
cat >'flow.cylc' <<'__FLOW_CONFIG__'
@@ -127,6 +127,6 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
2/P3 = bar => foo
__FLOW_CONFIG__
-run_ok "${TEST_NAME_BASE}-param-2" cylc validate 'flow.cylc'
+run_ok "${TEST_NAME_BASE}-param-2" cylc validate .
exit
diff --git a/tests/functional/validate/65-bad-task-event-handler-tmpl.t b/tests/functional/validate/65-bad-task-event-handler-tmpl.t
index 5b022fc148e..af835eb839e 100755
--- a/tests/functional/validate/65-bad-task-event-handler-tmpl.t
+++ b/tests/functional/validate/65-bad-task-event-handler-tmpl.t
@@ -31,7 +31,7 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
[[[events]]]
failed handlers = echo %(id)s, echo %(rubbish)s
__FLOW_CONFIG__
-run_fail "${TEST_NAME}" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME}" cylc validate .
cmp_ok "${TEST_NAME}.stderr" <<'__ERR__'
WorkflowConfigError: bad task event handler template t1: echo %(rubbish)s: KeyError('rubbish')
__ERR__
@@ -47,7 +47,7 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
[[[events]]]
failed handlers = echo %(ids
__FLOW_CONFIG__
-run_fail "${TEST_NAME}" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME}" cylc validate .
cmp_ok "${TEST_NAME}.stderr" <<'__ERR__'
WorkflowConfigError: bad task event handler template t1: echo %(ids: ValueError('incomplete format key')
__ERR__
diff --git a/tests/functional/validate/66-fail-consec-spaces.t b/tests/functional/validate/66-fail-consec-spaces.t
index f18d06d5f31..17556c0e686 100755
--- a/tests/functional/validate/66-fail-consec-spaces.t
+++ b/tests/functional/validate/66-fail-consec-spaces.t
@@ -33,7 +33,7 @@ cat > flow.cylc <<__END__
[[[directives]]]
-l select=1:ncpus=24:mem=20GB # ERROR!
__END__
-run_fail "${TEST_NAME}" cylc validate flow.cylc
+run_fail "${TEST_NAME}" cylc validate .
cmp_ok "${TEST_NAME}.stderr" <<__END__
IllegalItemError: [runtime][task1][directives]-l select - (consecutive spaces)
__END__
diff --git a/tests/functional/validate/67-relative-icp.t b/tests/functional/validate/67-relative-icp.t
index f96df1ed74e..f9c9d5d70e3 100755
--- a/tests/functional/validate/67-relative-icp.t
+++ b/tests/functional/validate/67-relative-icp.t
@@ -34,7 +34,7 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
script = true
__FLOW_CONFIG__
-run_ok "${TEST_NAME_BASE}" cylc graph --reference 'flow.cylc'
-grep_ok "t1.20171231T1200Z" "${TEST_NAME_BASE}.stdout"
+run_ok "${TEST_NAME_BASE}" cylc graph --reference .
+grep_ok "20171231T1200Z/t1" "${TEST_NAME_BASE}.stdout"
exit
diff --git a/tests/functional/validate/68-trailing_whitespace.t b/tests/functional/validate/68-trailing_whitespace.t
index ca9527e737d..c1709b9a324 100644
--- a/tests/functional/validate/68-trailing_whitespace.t
+++ b/tests/functional/validate/68-trailing_whitespace.t
@@ -40,14 +40,14 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
"""
__FLOW_CONFIG__
-run_fail "${TEST_NAME_BASE}-simple-fail" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME_BASE}-simple-fail" cylc validate .
cmp_ok "${TEST_NAME_BASE}-simple-fail.stderr" <<'__ERR__'
FileParseError: Syntax error line 9: Whitespace after the line continuation character (\).
__ERR__
# Test example with correct syntax
sed -i 's/\\ /\\/' 'flow.cylc'
-run_ok "${TEST_NAME_BASE}-simple-pass" cylc validate 'flow.cylc'
+run_ok "${TEST_NAME_BASE}-simple-pass" cylc validate .
exit
diff --git a/tests/functional/validate/69-bare-clock-xtrigger.t b/tests/functional/validate/69-bare-clock-xtrigger.t
index 59b6d05b9a3..4408a064dba 100644
--- a/tests/functional/validate/69-bare-clock-xtrigger.t
+++ b/tests/functional/validate/69-bare-clock-xtrigger.t
@@ -29,4 +29,4 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
T00 = "@wall_clock => foo"
__FLOW_CONFIG__
-run_ok "${TEST_NAME_BASE}-val" cylc validate 'flow.cylc'
+run_ok "${TEST_NAME_BASE}-val" cylc validate .
diff --git a/tests/functional/validate/70-no-clock-int-cycle.t b/tests/functional/validate/70-no-clock-int-cycle.t
index 7fd5d2b10ed..c0e0684ee2c 100644
--- a/tests/functional/validate/70-no-clock-int-cycle.t
+++ b/tests/functional/validate/70-no-clock-int-cycle.t
@@ -22,16 +22,16 @@ set_test_number 2
cat >'flow.cylc' <<'__FLOW_CONFIG__'
[scheduling]
- cycling mode = integer
- initial cycle point = 1
- final cycle point = 2
- [[xtriggers]]
- c1 = wall_clock(offset=P0Y)
- [[graph]]
- R/^/P1 = "@c1 & foo[-P1] => foo"
+ cycling mode = integer
+ initial cycle point = 1
+ final cycle point = 2
+ [[xtriggers]]
+ c1 = wall_clock(offset=P0Y)
+ [[graph]]
+ R/^/P1 = "@c1 & foo[-P1] => foo"
__FLOW_CONFIG__
-run_fail "${TEST_NAME_BASE}-val" cylc validate 'flow.cylc'
+run_fail "${TEST_NAME_BASE}-val" cylc validate '.'
contains_ok "${TEST_NAME_BASE}-val.stderr" <<'__END__'
WorkflowConfigError: Clock xtriggers require datetime cycling: c1 = wall_clock(offset=P0Y)
diff --git a/tests/functional/validate/71-task-proxy-sequence-bounds-err.t b/tests/functional/validate/71-task-proxy-sequence-bounds-err.t
index 3f36ca88032..06ead10ffab 100755
--- a/tests/functional/validate/71-task-proxy-sequence-bounds-err.t
+++ b/tests/functional/validate/71-task-proxy-sequence-bounds-err.t
@@ -33,7 +33,7 @@ cat > flow.cylc <<__END__
__END__
TEST_NAME="${TEST_NAME_BASE}-single"
-run_ok "$TEST_NAME" cylc validate 'flow.cylc'
+run_ok "$TEST_NAME" cylc validate .
cmp_ok "${TEST_NAME}.stderr" <<'__ERR__'
WARNING - R1/P0Y/19990101T0000Z: sequence out of bounds for initial cycle point 20000101T0000Z
__ERR__
@@ -51,7 +51,7 @@ cat > flow.cylc <<__END__
__END__
TEST_NAME="${TEST_NAME_BASE}-multiple"
-run_ok "$TEST_NAME" cylc validate 'flow.cylc'
+run_ok "$TEST_NAME" cylc validate .
contains_ok "${TEST_NAME}.stderr" <<__ERR__
WARNING - multiple sequences out of bounds for initial cycle point 20000101T0000Z:
${LOG_INDENT}R1/P0Y/19960101T0000Z, R1/P0Y/19970101T0000Z, R1/P0Y/19980101T0000Z,
diff --git a/tests/functional/validate/73-xtrigger-names.t b/tests/functional/validate/73-xtrigger-names.t
index ee0597b59d2..b0244f90988 100644
--- a/tests/functional/validate/73-xtrigger-names.t
+++ b/tests/functional/validate/73-xtrigger-names.t
@@ -33,7 +33,7 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
[runtime]
[[bar]]
__FLOW_CONFIG__
-run_ok "${TEST_NAME}-valid" cylc validate flow.cylc
+run_ok "${TEST_NAME}-valid" cylc validate .
# test an invalid xtrigger
cat >'flow.cylc' <<'__FLOW_CONFIG__'
@@ -47,7 +47,7 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
[[bar]]
__FLOW_CONFIG__
-run_fail "${TEST_NAME}-invalid" cylc validate flow.cylc
+run_fail "${TEST_NAME}-invalid" cylc validate .
grep_ok 'Invalid xtrigger name' "${TEST_NAME}-invalid.stderr"
exit
diff --git a/tests/functional/validate/74-templatevar-types.t b/tests/functional/validate/74-templatevar-types.t
index 29536075f05..215ad1ce316 100644
--- a/tests/functional/validate/74-templatevar-types.t
+++ b/tests/functional/validate/74-templatevar-types.t
@@ -33,14 +33,14 @@ cat >'flow.cylc' <<'__FLOW_CONFIG__'
[[graph]]
R1 = foo
__FLOW_CONFIG__
-run_fail "${TEST_NAME}-valid" cylc validate flow.cylc
-run_fail "${TEST_NAME}-valid" cylc validate flow.cylc -s 'ICP="2000"'
-run_ok "${TEST_NAME}-valid" cylc validate flow.cylc -s 'ICP=2000'
+run_fail "${TEST_NAME}-valid" cylc validate .
+run_fail "${TEST_NAME}-valid" cylc validate . -s 'ICP="2000"'
+run_ok "${TEST_NAME}-valid" cylc validate . -s 'ICP=2000'
cat >'template' <<'__TEMPLATE__'
ICP=2000
__TEMPLATE__
-run_fail "${TEST_NAME}-valid" cylc validate flow.cylc
-run_ok "${TEST_NAME}-valid" cylc validate flow.cylc --set-file=template
+run_fail "${TEST_NAME}-valid" cylc validate .
+run_ok "${TEST_NAME}-valid" cylc validate . --set-file=template
exit
diff --git a/tests/functional/workflow-host-self-id/00-address/reference.log b/tests/functional/workflow-host-self-id/00-address/reference.log
index 136d09102af..7afe901c28f 100644
--- a/tests/functional/workflow-host-self-id/00-address/reference.log
+++ b/tests/functional/workflow-host-self-id/00-address/reference.log
@@ -1,3 +1,3 @@
-2014-12-02T15:30:32Z INFO - Initial point: 1
-2014-12-02T15:30:32Z INFO - Final point: 1
-2014-12-02T15:30:32Z DEBUG - t1.1 -triggered off []
+Initial point: 1
+Final point: 1
+1/t1 -triggered off []
diff --git a/tests/functional/workflow-state/message/reference.log b/tests/functional/workflow-state/message/reference.log
index cfd22eb6553..aba0719327d 100644
--- a/tests/functional/workflow-state/message/reference.log
+++ b/tests/functional/workflow-state/message/reference.log
@@ -1,4 +1,4 @@
-2017-01-26T12:14:50Z INFO - Initial point: 20100101T0000Z
-2017-01-26T12:14:50Z INFO - Final point: None
-2017-01-26T12:14:50Z DEBUG - t1.20100101T0000Z -triggered off []
-2017-01-26T12:14:53Z DEBUG - t2.20100101T0000Z -triggered off ['t1.20100101T0000Z']
+Initial point: 20100101T0000Z
+Final point: None
+20100101T0000Z/t1 -triggered off []
+20100101T0000Z/t2 -triggered off ['20100101T0000Z/t1']
diff --git a/tests/functional/workflow-state/options/reference.log b/tests/functional/workflow-state/options/reference.log
index 96a3d7feea5..c4a1a78ce49 100644
--- a/tests/functional/workflow-state/options/reference.log
+++ b/tests/functional/workflow-state/options/reference.log
@@ -1,8 +1,8 @@
Initial point: 20100101T0000Z
Final point: 20100103T0000Z
-foo.20100101T0000Z -triggered off ['foo.20091231T0000Z']
-foo.20100102T0000Z -triggered off ['foo.20100101T0000Z']
-foo.20100103T0000Z -triggered off ['foo.20100102T0000Z']
-env_polling.20100102T0000Z -triggered off ['foo.20100102T0000Z']
-offset_polling.20100102T0000Z -triggered off ['foo.20100102T0000Z']
-offset_polling2.20100102T0000Z -triggered off ['foo.20100103T0000Z']
+20100101T0000Z/foo -triggered off ['20091231T0000Z/foo']
+20100102T0000Z/foo -triggered off ['20100101T0000Z/foo']
+20100103T0000Z/foo -triggered off ['20100102T0000Z/foo']
+20100102T0000Z/env_polling -triggered off ['20100102T0000Z/foo']
+20100102T0000Z/offset_polling -triggered off ['20100102T0000Z/foo']
+20100102T0000Z/offset_polling2 -triggered off ['20100103T0000Z/foo']
diff --git a/tests/functional/workflow-state/polling/reference.log b/tests/functional/workflow-state/polling/reference.log
index 2412df43150..a06a3c18a42 100644
--- a/tests/functional/workflow-state/polling/reference.log
+++ b/tests/functional/workflow-state/polling/reference.log
@@ -1,6 +1,6 @@
-2018-10-30T13:14:12+13 INFO - Initial point: 1
-2018-10-30T13:14:12+13 INFO - Final point: 1
-2018-10-30T13:14:12+13 DEBUG - l-good.1 -triggered off []
-2018-10-30T13:14:12+13 DEBUG - lbad.1 -triggered off []
-2018-10-30T13:14:12+13 DEBUG - l-mess.1 -triggered off []
-2018-10-30T13:14:17+13 DEBUG - done.1 -triggered off ['l-mess.1']
+Initial point: 1
+Final point: 1
+1/l-good -triggered off []
+1/lbad -triggered off []
+1/l-mess -triggered off []
+1/done -triggered off ['1/l-mess']
diff --git a/tests/functional/workflow-state/template_ref/reference.log b/tests/functional/workflow-state/template_ref/reference.log
index 1d5b623ef56..97101910d54 100644
--- a/tests/functional/workflow-state/template_ref/reference.log
+++ b/tests/functional/workflow-state/template_ref/reference.log
@@ -1,4 +1,4 @@
-2015-11-02T15:06:04Z INFO - Initial point: 2010
-2015-11-02T15:06:04Z INFO - Final point: 2011
-2015-11-02T15:06:04Z DEBUG - foo.2010 -triggered off []
-2015-11-02T15:06:06Z DEBUG - foo.2011 -triggered off []
+Initial point: 2010
+Final point: 2011
+2010/foo -triggered off []
+2011/foo -triggered off []
diff --git a/tests/functional/xtriggers/02-persistence.t b/tests/functional/xtriggers/02-persistence.t
index ee042a5e955..1cc9d18ffee 100644
--- a/tests/functional/xtriggers/02-persistence.t
+++ b/tests/functional/xtriggers/02-persistence.t
@@ -43,8 +43,8 @@ TEST_NAME="${TEST_NAME_BASE}-run"
workflow_run_ok "${TEST_NAME}" cylc play --no-detach --debug "${WORKFLOW_NAME}"
# Check the broadcast result of xtrigger.
-cylc cat-log "${WORKFLOW_NAME}" 'foo.2010' >'foo.2010.out'
-grep_ok 'NAME is bob' 'foo.2010.out'
+cylc cat-log "${WORKFLOW_NAME}//2010/foo" >'2010.foo.out'
+grep_ok 'NAME is bob' '2010.foo.out'
# Replace the xtrigger function with one that will fail if called again.
cp "${WORKFLOW_RUN_DIR}/faker_fail.py" 'lib/python/faker.py'
@@ -57,7 +57,7 @@ TEST_NAME="${TEST_NAME_BASE}-restart"
workflow_run_ok "${TEST_NAME}" cylc play --no-detach "${WORKFLOW_NAME}"
# Check the broadcast result has persisted from first run.
-cylc cat-log "${WORKFLOW_NAME}" 'foo.2011' >'foo.2011.out'
-grep_ok 'NAME is bob' 'foo.2011.out'
+cylc cat-log "${WORKFLOW_NAME}//2011/foo" >'2011.foo.out'
+grep_ok 'NAME is bob' '2011.foo.out'
purge
diff --git a/tests/functional/xtriggers/03-sequence.t b/tests/functional/xtriggers/03-sequence.t
index e6253179271..f45af9b1caf 100644
--- a/tests/functional/xtriggers/03-sequence.t
+++ b/tests/functional/xtriggers/03-sequence.t
@@ -44,17 +44,17 @@ init_workflow "${TEST_NAME_BASE}" << '__FLOW_CONFIG__'
[[foo]]
__FLOW_CONFIG__
-run_ok "${TEST_NAME_BASE}-val" cylc validate 'flow.cylc'
+run_ok "${TEST_NAME_BASE}-val" cylc validate "${WORKFLOW_NAME}"
# Run workflow; it will stall waiting on the never-satisfied xtriggers.
cylc play "${WORKFLOW_NAME}"
-poll_grep_workflow_log -E 'start\.2025 .* => succeeded'
+poll_grep_workflow_log -E '2025/start .* => succeeded'
-cylc show "${WORKFLOW_NAME}" foo.2026 | grep -E '^ - xtrigger' > foo.2026.log
+cylc show "${WORKFLOW_NAME}//2026/foo" | grep -E '^ - xtrigger' > 2026.foo.log
-# foo.2026 should get only xtrigger e2.
-cmp_ok foo.2026.log - <<__END__
+# 2026/foo should get only xtrigger e2.
+cmp_ok 2026.foo.log - <<__END__
- xtrigger "e2 = echo(name=alice)"
__END__
diff --git a/tests/integration/graphql/test_root.py b/tests/integration/graphql/test_root.py
new file mode 100644
index 00000000000..f8afaa277aa
--- /dev/null
+++ b/tests/integration/graphql/test_root.py
@@ -0,0 +1,82 @@
+# THIS FILE IS PART OF THE CYLC WORKFLOW ENGINE.
+# Copyright (C) NIWA & British Crown (Met Office) & Contributors.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+import pytest
+
+from cylc.flow.network.client import WorkflowRuntimeClient
+
+
+@pytest.mark.asyncio
+@pytest.fixture(scope='module')
+async def harness(mod_flow, mod_scheduler, mod_run):
+ reg = mod_flow({
+ 'scheduling': {
+ 'graph': {
+ 'R1': '''
+ a
+ b
+ ''',
+ },
+ },
+ 'runtime': {
+ 'A1': {
+ 'inherit': 'A2'
+ },
+ 'A2': {
+ },
+ 'a': {
+ 'inherit': 'A1'
+ },
+ 'b': {},
+ },
+ })
+ schd = mod_scheduler(reg)
+ async with mod_run(schd):
+ client = WorkflowRuntimeClient(reg)
+
+ async def _query(query_string):
+ nonlocal client
+ return await client.async_request(
+ 'graphql',
+ {
+ 'request_string': 'query { %s } ' % query_string,
+ }
+ )
+ yield schd, client, _query
+
+
+@pytest.mark.asyncio
+async def test_workflows(harness):
+ """It should return True if running."""
+ schd, client, query = harness
+ ret = await query('workflows(ids: ["%s"]) { id }' % schd.workflow)
+ assert ret == {
+ 'workflows': [
+ {'id': f'~{schd.owner}/{schd.workflow}'}
+ ]
+ }
+
+
+@pytest.mark.asyncio
+async def test_jobs(harness):
+ """It should return True if running."""
+ schd, client, query = harness
+ ret = await query('workflows(ids: ["%s"]) { id }' % schd.workflow)
+ assert ret == {
+ 'workflows': [
+ {'id': f'~{schd.owner}/{schd.workflow}'}
+ ]
+ }
diff --git a/tests/integration/test_data_store_mgr.py b/tests/integration/test_data_store_mgr.py
index 613b4723830..bb790998f8a 100644
--- a/tests/integration/test_data_store_mgr.py
+++ b/tests/integration/test_data_store_mgr.py
@@ -17,7 +17,6 @@
import pytest
from typing import TYPE_CHECKING
-from cylc.flow import ID_DELIM
from cylc.flow.data_store_mgr import (
FAMILY_PROXIES,
JOBS,
@@ -43,7 +42,7 @@ def job_config(schd):
return {
'owner': schd.owner,
'submit_num': 3,
- 'task_id': 'foo.1',
+ 'task_id': '1/foo',
'job_runner_name': 'background',
'env-script': None,
'err-script': None,
@@ -78,17 +77,14 @@ def job_db_row():
]
-def ext_id(schd):
- return (
- f'{schd.owner}{ID_DELIM}{schd.workflow}{ID_DELIM}'
- f'1{ID_DELIM}foo{ID_DELIM}3'
- )
-
-
def int_id(_):
return '1/foo/03'
+def ext_id(schd):
+ return f'~{schd.owner}/{schd.workflow}//{int_id(None)}'
+
+
@pytest.mark.asyncio
@pytest.fixture(scope='module')
async def harness(mod_flow, mod_scheduler, mod_run):
diff --git a/tests/integration/test_graphql.py b/tests/integration/test_graphql.py
new file mode 100644
index 00000000000..bb4c8c7014f
--- /dev/null
+++ b/tests/integration/test_graphql.py
@@ -0,0 +1,358 @@
+# THIS FILE IS PART OF THE CYLC WORKFLOW ENGINE.
+# Copyright (C) NIWA & British Crown (Met Office) & Contributors.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+"""Test the top-level (root) GraphQL queries."""
+
+import pytest
+from typing import TYPE_CHECKING
+
+from cylc.flow.id import Tokens
+from cylc.flow.network.client import WorkflowRuntimeClient
+
+if TYPE_CHECKING:
+ from cylc.flow.scheduler import Scheduler
+
+
+# NOTE: These tests mutate the data store, so running them in isolation may
+# see failures when they actually pass if you run the whole file
+
+
+def job_config(schd):
+ return {
+ 'owner': schd.owner,
+ 'submit_num': 1,
+ 'task_id': '1/foo',
+ 'job_runner_name': 'background',
+ 'env-script': None,
+ 'err-script': None,
+ 'exit-script': None,
+ 'execution_time_limit': None,
+ 'init-script': None,
+ 'post-script': None,
+ 'pre-script': None,
+ 'script': 'sleep 5; echo "I come in peace"',
+ 'work_d': None,
+ 'directives': {},
+ 'environment': {},
+ 'param_var': {},
+ 'logfiles': [],
+ 'platform': {'name': 'platform'},
+ }
+
+
+@pytest.fixture
+def job_db_row():
+ return [
+ '1',
+ 'foo',
+ 'running',
+ 4,
+ '2020-04-03T13:40:18+13:00',
+ '2020-04-03T13:40:20+13:00',
+ '2020-04-03T13:40:30+13:00',
+ 'background',
+ '20542',
+ 'localhost',
+ ]
+
+
+@pytest.mark.asyncio
+@pytest.fixture(scope='module')
+async def harness(mod_flow, mod_scheduler, mod_run):
+ flow_def = {
+ 'scheduler': {
+ 'allow implicit tasks': True
+ },
+ 'scheduling': {
+ 'graph': {
+ 'R1': 'a => b & c => d'
+ }
+ },
+ 'runtime': {
+ 'A': {
+ },
+ 'B': {
+ 'inherit': 'A',
+ },
+ 'b': {
+ 'inherit': 'B',
+ },
+ },
+ }
+ reg: str = mod_flow(flow_def)
+ schd: 'Scheduler' = mod_scheduler(reg)
+ async with mod_run(schd):
+ client = WorkflowRuntimeClient(reg)
+ schd.pool.hold_tasks('*')
+ schd.resume_workflow()
+ # Think this is needed to save the data state at first start (?)
+ # Fails without it.. and a test needs to overwrite schd data with this.
+ # data = schd.data_store_mgr.data[schd.data_store_mgr.workflow_id]
+
+ workflow_tokens = Tokens(
+ user=schd.owner,
+ workflow=schd.workflow,
+ )
+
+ yield schd, client, workflow_tokens
+
+
+@pytest.mark.asyncio
+async def test_workflows(harness):
+ schd, client, w_tokens = harness
+ ret = await client.async_request(
+ 'graphql',
+ {'request_string': 'query { workflows { id } }'}
+ )
+ assert ret == {
+ 'workflows': [
+ {
+ 'id': f'{w_tokens}'
+ }
+ ]
+ }
+
+
+@pytest.mark.asyncio
+async def test_tasks(harness):
+ schd, client, w_tokens = harness
+
+ # query "tasks"
+ ret = await client.async_request(
+ 'graphql',
+ {'request_string': 'query { tasks { id } }'}
+ )
+ ids = [
+ w_tokens.duplicate(cycle=f'$namespace|{namespace}').id
+ for namespace in ('a', 'b', 'c', 'd')
+ ]
+ ret['tasks'].sort(key=lambda x: x['id'])
+ assert ret == {
+ 'tasks': [
+ {'id': id_}
+ for id_ in ids
+ ]
+ }
+
+ # query "task"
+ for id_ in ids:
+ ret = await client.async_request(
+ 'graphql',
+ {'request_string': 'query { task(id: "%s") { id } }' % id_}
+ )
+ assert ret == {
+ 'task': {'id': id_}
+ }
+
+
+@pytest.mark.asyncio
+async def test_families(harness):
+ schd, client, w_tokens = harness
+
+ # query "tasks"
+ ret = await client.async_request(
+ 'graphql',
+ {'request_string': 'query { families { id } }'}
+ )
+ ids = [
+ w_tokens.duplicate(
+ cycle=f'$namespace|{namespace}'
+ ).id
+ for namespace in ('A', 'B', 'root')
+ ]
+ ret['families'].sort(key=lambda x: x['id'])
+ assert ret == {
+ 'families': [
+ {'id': id_}
+ for id_ in ids
+ ]
+ }
+
+ # query "task"
+ for id_ in ids:
+ ret = await client.async_request(
+ 'graphql',
+ {'request_string': 'query { family(id: "%s") { id } }' % id_}
+ )
+ assert ret == {
+ 'family': {'id': id_}
+ }
+
+
+@pytest.mark.asyncio
+async def test_task_proxies(harness):
+ schd, client, w_tokens = harness
+
+ # query "tasks"
+ ret = await client.async_request(
+ 'graphql',
+ {'request_string': 'query { taskProxies { id } }'}
+ )
+ ids = [
+ w_tokens.duplicate(
+ cycle='1',
+ task=namespace,
+ ).id
+ # NOTE: task "d" is not in the n=1 window yet
+ for namespace in ('a', 'b', 'c')
+ ]
+ ret['taskProxies'].sort(key=lambda x: x['id'])
+ assert ret == {
+ 'taskProxies': [
+ {'id': id_}
+ for id_ in ids
+ ]
+ }
+
+ # query "task"
+ ret = await client.async_request(
+ 'graphql',
+ {'request_string': 'query { taskProxy(id: "%s") { id } }' % ids[0]}
+ )
+ assert ret == {
+ 'taskProxy': {'id': ids[0]}
+ }
+
+
+@pytest.mark.asyncio
+async def test_family_proxies(harness):
+ schd, client, w_tokens = harness
+
+ # query "familys"
+ ret = await client.async_request(
+ 'graphql',
+ {'request_string': 'query { familyProxies { id } }'}
+ )
+ ids = [
+ w_tokens.duplicate(
+ cycle='1',
+ task=namespace,
+ ).id
+ # NOTE: family "d" is not in the n=1 window yet
+ for namespace in ('A', 'B', 'root')
+ ]
+ ret['familyProxies'].sort(key=lambda x: x['id'])
+ assert ret == {
+ 'familyProxies': [
+ {'id': id_}
+ for id_ in ids
+ ]
+ }
+
+ # query "family"
+ for id_ in ids:
+ ret = await client.async_request(
+ 'graphql',
+ {'request_string': 'query { familyProxy(id: "%s") { id } }' % id_}
+ )
+ assert ret == {
+ 'familyProxy': {'id': id_}
+ }
+
+
+@pytest.mark.asyncio
+async def test_edges(harness):
+ schd, client, w_tokens = harness
+
+ t_tokens = [
+ w_tokens.duplicate(
+ cycle='1',
+ task=namespace,
+ )
+ # NOTE: task "d" is not in the n=1 window yet
+ for namespace in ('a', 'b', 'c')
+ ]
+ edges = [
+ (t_tokens[0], t_tokens[1]),
+ (t_tokens[0], t_tokens[2]),
+ ]
+ e_ids = sorted([
+ w_tokens.duplicate(
+ cycle=(
+ '$edge'
+ f'|{left.relative_id}'
+ f'|{right.relative_id}'
+ )
+ ).id
+ for left, right in edges
+ ])
+
+ # query "edges"
+ ret = await client.async_request(
+ 'graphql',
+ {'request_string': 'query { edges { id } }'}
+ )
+ assert ret == {
+ 'edges': [
+ {'id': id_}
+ for id_ in e_ids
+ ]
+ }
+
+ # query "nodesEdges"
+ ret = await client.async_request(
+ 'graphql',
+ {'request_string': 'query { nodesEdges { nodes {id}\nedges {id} } }'}
+ )
+ ret['nodesEdges']['nodes'].sort(key=lambda x: x['id'])
+ ret['nodesEdges']['edges'].sort(key=lambda x: x['id'])
+ assert ret == {
+ 'nodesEdges': {
+ 'nodes': [
+ {'id': tokens.id}
+ for tokens in t_tokens
+ ],
+ 'edges': [
+ {'id': id_}
+ for id_ in e_ids
+ ],
+ },
+ }
+
+
+@pytest.mark.asyncio
+async def test_jobs(harness):
+ schd, client, w_tokens = harness
+
+ # add a job
+ schd.data_store_mgr.insert_job('a', '1', 'submitted', job_config(schd))
+ schd.data_store_mgr.update_data_structure()
+ j_tokens = w_tokens.duplicate(
+ cycle='1',
+ task='a',
+ job='01',
+ )
+ j_id = j_tokens.id
+
+ # query "jobs"
+ ret = await client.async_request(
+ 'graphql',
+ {'request_string': 'query { jobs { id } }'}
+ )
+ assert ret == {
+ 'jobs': [
+ {'id': f'{j_id}'}
+ ]
+ }
+
+ # query "job"
+ ret = await client.async_request(
+ 'graphql',
+ {'request_string': 'query { job(id: "%s") { id } }' % j_id}
+ )
+ assert ret == {
+ 'job': {'id': f'{j_id}'}
+ }
diff --git a/tests/integration/test_id_cli.py b/tests/integration/test_id_cli.py
new file mode 100644
index 00000000000..7d18275b7ba
--- /dev/null
+++ b/tests/integration/test_id_cli.py
@@ -0,0 +1,112 @@
+# THIS FILE IS PART OF THE CYLC WORKFLOW ENGINE.
+# Copyright (C) NIWA & British Crown (Met Office) & Contributors.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+"""Some integration tests running on live workflows to test filtering properly.
+"""
+
+import pytest
+
+from cylc.flow.pathutil import get_cylc_run_dir
+from cylc.flow.id_cli import parse_ids_async
+
+
+@pytest.fixture(scope='module')
+async def harness(
+ mod_run,
+ mod_scheduler,
+ mod_flow,
+ mod_one_conf,
+ mod_test_dir,
+):
+ """Create three workflows, two running, one stopped."""
+ reg_prefix = mod_test_dir.relative_to(get_cylc_run_dir())
+ # abc:running
+ reg1 = mod_flow(mod_one_conf, name='abc')
+ schd1 = mod_scheduler(reg1)
+ # def:running
+ reg2 = mod_flow(mod_one_conf, name='def')
+ schd2 = mod_scheduler(reg2)
+ # ghi:stopped
+ reg3 = mod_flow(mod_one_conf, name='ghi')
+ async with mod_run(schd1):
+ async with mod_run(schd2):
+ yield reg_prefix, reg1, reg2, reg3
+
+
+@pytest.mark.asyncio
+async def test_glob_wildcard(harness):
+ """It should search for workflows using globs."""
+ reg_prefix, reg1, reg2, reg3 = harness
+ # '*' should return all workflows
+ workflows, _ = await parse_ids_async(
+ f'{reg_prefix / "*"}',
+ constraint='workflows',
+ match_workflows=True,
+ )
+ assert sorted(workflows) == sorted([reg1, reg2])
+ workflows, _ = await parse_ids_async(
+ f'{reg_prefix / "z*"}',
+ constraint='workflows',
+ match_workflows=True,
+ )
+ assert sorted(workflows) == sorted([])
+
+
+@pytest.mark.asyncio
+async def test_glob_pattern(harness):
+ """It should support fnmatch syntax including square brackets."""
+ # [a]* should match workflows starting with "a"
+ reg_prefix, reg1, reg2, reg3 = harness
+ workflows, _ = await parse_ids_async(
+ f'{reg_prefix / "[a]*"}',
+ constraint='workflows',
+ match_workflows=True,
+ )
+ assert sorted(workflows) == sorted([reg1])
+ workflows, _ = await parse_ids_async(
+ f'{reg_prefix / "[z]*"}',
+ constraint='workflows',
+ match_workflows=True,
+ )
+ assert sorted(workflows) == sorted([])
+
+
+@pytest.mark.asyncio
+async def test_state_filter(harness):
+ """It should filter by workflow state."""
+ reg_prefix, reg1, reg2, reg3 = harness
+ # '*' should return all workflows
+ workflows, _ = await parse_ids_async(
+ f'{reg_prefix / "*"}',
+ constraint='workflows',
+ match_workflows=True,
+ match_active=None,
+ )
+ assert sorted(workflows) == sorted([reg1, reg2, reg3])
+ workflows, _ = await parse_ids_async(
+ f'{reg_prefix / "*"}',
+ constraint='workflows',
+ match_workflows=True,
+ match_active=True,
+ )
+ assert sorted(workflows) == sorted([reg1, reg2])
+ workflows, _ = await parse_ids_async(
+ f'{reg_prefix / "*"}',
+ constraint='workflows',
+ match_workflows=True,
+ match_active=False,
+ )
+ assert sorted(workflows) == sorted([reg3])
diff --git a/tests/integration/test_resolvers.py b/tests/integration/test_resolvers.py
index 7da75d865b2..82eb4ecd8d5 100644
--- a/tests/integration/test_resolvers.py
+++ b/tests/integration/test_resolvers.py
@@ -18,9 +18,9 @@
import pytest
from unittest.mock import Mock
-from cylc.flow.data_store_mgr import ID_DELIM, EDGES, TASK_PROXIES
+from cylc.flow.data_store_mgr import EDGES, TASK_PROXIES
+from cylc.flow.id import Tokens
from cylc.flow.network.resolvers import Resolvers
-from cylc.flow.network.schema import parse_node_id
from cylc.flow.scheduler import Scheduler
@@ -96,7 +96,11 @@ async def mock_flow(
@pytest.mark.asyncio
async def test_get_workflows(mock_flow, flow_args):
"""Test method returning workflow messages satisfying filter args."""
- flow_args['workflows'].append((mock_flow.owner, mock_flow.name, None))
+ flow_args['workflows'].append({
+ 'user': mock_flow.owner,
+ 'workflow': mock_flow.name,
+ 'workflow_sel': None,
+ })
flow_msgs = await mock_flow.resolvers.get_workflows(flow_args)
assert len(flow_msgs) == 1
@@ -105,13 +109,17 @@ async def test_get_workflows(mock_flow, flow_args):
async def test_get_nodes_all(mock_flow, node_args):
"""Test method returning workflow(s) node message satisfying filter args.
"""
- node_args['workflows'].append((mock_flow.owner, mock_flow.name, None))
+ node_args['workflows'].append({
+ 'user': mock_flow.owner,
+ 'workflow': mock_flow.name,
+ 'workflow_sel': None,
+ })
node_args['states'].append('failed')
nodes = await mock_flow.resolvers.get_nodes_all(TASK_PROXIES, node_args)
assert len(nodes) == 0
node_args['ghosts'] = True
node_args['states'] = []
- node_args['ids'].append(parse_node_id(mock_flow.node_ids[0], TASK_PROXIES))
+ node_args['ids'].append(Tokens(mock_flow.node_ids[0]))
nodes = [
n for n in await mock_flow.resolvers.get_nodes_all(
TASK_PROXIES, node_args)
@@ -124,7 +132,11 @@ async def test_get_nodes_all(mock_flow, node_args):
async def test_get_nodes_by_ids(mock_flow, node_args):
"""Test method returning workflow(s) node messages
who's ID is a match to any given."""
- node_args['workflows'].append((mock_flow.owner, mock_flow.name, None))
+ node_args['workflows'].append({
+ 'user': mock_flow.owner,
+ 'workflow': mock_flow.name,
+ 'workflow_sel': None
+ })
nodes = await mock_flow.resolvers.get_nodes_by_ids(TASK_PROXIES, node_args)
assert len(nodes) == 0
@@ -144,8 +156,17 @@ async def test_get_nodes_by_ids(mock_flow, node_args):
async def test_get_node_by_id(mock_flow, node_args):
"""Test method returning a workflow node message
who's ID is a match to that given."""
- node_args['id'] = f'me{ID_DELIM}mine{ID_DELIM}20500808T00{ID_DELIM}jin'
- node_args['workflows'].append((mock_flow.owner, mock_flow.name, None))
+ node_args['id'] = Tokens(
+ user='me',
+ workflow='mine',
+ cycle='20500808T00',
+ task='jin',
+ ).id
+ node_args['workflows'].append({
+ 'user': mock_flow.owner,
+ 'workflow': mock_flow.name,
+ 'workflow_sel': None
+ })
node = await mock_flow.resolvers.get_node_by_id(TASK_PROXIES, node_args)
assert node is None
node_args['id'] = mock_flow.node_ids[0]
@@ -182,7 +203,11 @@ async def test_get_edges_by_ids(mock_flow, node_args):
@pytest.mark.asyncio
async def test_mutator(mock_flow, flow_args):
"""Test the mutation method."""
- flow_args['workflows'].append((mock_flow.owner, mock_flow.name, None))
+ flow_args['workflows'].append({
+ 'user': mock_flow.owner,
+ 'workflow': mock_flow.name,
+ 'workflow_sel': None
+ })
args = {}
response = await mock_flow.resolvers.mutator(
None,
@@ -196,8 +221,12 @@ async def test_mutator(mock_flow, flow_args):
@pytest.mark.asyncio
async def test_nodes_mutator(mock_flow, flow_args):
"""Test the nodes mutation method."""
- flow_args['workflows'].append((mock_flow.owner, mock_flow.name, None))
- ids = [parse_node_id(n, TASK_PROXIES) for n in mock_flow.node_ids]
+ flow_args['workflows'].append({
+ 'user': mock_flow.owner,
+ 'workflow': mock_flow.name,
+ 'workflow_sel': None,
+ })
+ ids = [Tokens(n) for n in mock_flow.node_ids]
response = await mock_flow.resolvers.nodes_mutator(
None, 'force_trigger_tasks', ids, flow_args,
{"reflow": False, "flow_descr": ""}
diff --git a/tests/integration/test_task_pool.py b/tests/integration/test_task_pool.py
index 32d0865f346..792114a845c 100644
--- a/tests/integration/test_task_pool.py
+++ b/tests/integration/test_task_pool.py
@@ -38,7 +38,7 @@
'runahead limit': 'P4',
'graph': {
'P1': 'foo & bar',
- 'R1/2': 'foo[1] => pub' # pub.2 doesn't spawn at start
+ 'R1/2': 'foo[1] => pub' # 2/pub doesn't spawn at start
}
},
'runtime': {
@@ -53,7 +53,7 @@ def get_task_ids(
) -> List[str]:
"""Helper function to return sorted task identities ("{name}.{point}")
from a list of (name, point) tuples."""
- return sorted(f'{name}.{point}' for name, point in name_point_list)
+ return sorted(f'{point}/{name}' for name, point in name_point_list)
def assert_expected_log(
@@ -119,47 +119,47 @@ async def example_flow(
'items, expected_task_ids, expected_bad_items, expected_warnings',
[
param(
- ['foo'], ['foo.1', 'foo.2', 'foo.3', 'foo.4', 'foo.5'], [], [],
+ ['*/foo'], ['1/foo', '2/foo', '3/foo', '4/foo', '5/foo'], [], [],
id="Basic"
),
param(
- ['*.1'],
- ['foo.1', 'bar.1'], [], [],
+ ['1/*'],
+ ['1/foo', '1/bar'], [], [],
id="Name glob"
),
param(
- ['FAM.1'], ['bar.1'], [], [],
+ ['1/FAM'], ['1/bar'], [], [],
id="Family name"
),
param(
- ['foo.*'], ['foo.1', 'foo.2', 'foo.3', 'foo.4', 'foo.5'], [], [],
+ ['*/foo'], ['1/foo', '2/foo', '3/foo', '4/foo', '5/foo'], [], [],
id="Point glob"
),
param(
['*:waiting'],
- ['foo.1', 'bar.1', 'foo.2', 'bar.2', 'foo.3', 'bar.3', 'foo.4',
- 'bar.4', 'foo.5', 'bar.5'], [], [],
+ ['1/foo', '1/bar', '2/foo', '2/bar', '3/foo', '3/bar', '4/foo',
+ '4/bar', '5/foo', '5/bar'], [], [],
id="Task state"
),
param(
- ['foo.8'], [], ['foo.8'], ["No active tasks matching: foo.8"],
+ ['8/foo'], [], ['8/foo'], ["No active tasks matching: 8/foo"],
id="Task not yet spawned"
),
param(
- ['foo.1', 'bar.8'], ['foo.1'], ['bar.8'],
- ["No active tasks matching: bar.8"],
+ ['1/foo', '8/bar'], ['1/foo'], ['8/bar'],
+ ["No active tasks matching: 8/bar"],
id="Multiple items"
),
param(
- ['grogu.1', 'grogu.*'], [], ['grogu.1', 'grogu.*'],
- ["No active tasks matching: grogu.1",
- "No active tasks matching: grogu.*"],
+ ['1/grogu', '*/grogu'], [], ['1/grogu', '*/grogu'],
+ ["No active tasks matching: 1/grogu",
+ "No active tasks matching: */grogu"],
id="No such task"
),
param(
- [],
- ['foo.1', 'bar.1', 'foo.2', 'bar.2', 'foo.3', 'bar.3', 'foo.4',
- 'bar.4', 'foo.5', 'bar.5'], [], [],
+ ['*'],
+ ['1/foo', '1/bar', '2/foo', '2/bar', '3/foo', '3/bar', '4/foo',
+ '4/bar', '5/foo', '5/bar'], [], [],
id="No items given - get all tasks"
)
]
@@ -180,13 +180,13 @@ async def test_filter_task_proxies(
Params:
items: Arg passed to filter_task_proxies().
expected_task_ids: IDs of the TaskProxys that are expected to be
- returned, of the form "{name}.{point}".
+ returned, of the form "{point}/{name}"/
expected_bad_items: Expected to be returned.
expected_warnings: Expected to be logged.
"""
caplog.set_level(logging.WARNING, CYLC_LOG)
task_pool = mod_example_flow.pool
- itasks, bad_items = task_pool.filter_task_proxies(items)
+ itasks, _, bad_items = task_pool.filter_task_proxies(items)
task_ids = [itask.identity for itask in itasks]
assert sorted(task_ids) == sorted(expected_task_ids)
assert sorted(bad_items) == sorted(expected_bad_items)
@@ -198,42 +198,38 @@ async def test_filter_task_proxies(
'items, expected_task_ids, expected_warnings',
[
param(
- ['foo.4'], ['foo.4'], [],
+ ['4/foo'], ['4/foo'], [],
id="Basic"
),
param(
- ['foo'], [], ["foo - task to spawn must have a cycle point"],
- id="No cycle point given"
- ),
- param(
- ['*.2'], ['foo.2', 'bar.2', 'pub.2'], [],
+ ['2/*'], ['2/foo', '2/bar', '2/pub'], [],
id="Name glob"
),
param(
- ['FAM.2'], ['bar.2'], [],
+ ['2/FAM'], ['2/bar'], [],
id="Family name"
),
param(
- ['foo.*'], [], ["No matching tasks found: foo.*"],
+ ['*/foo'], [], ["No matching tasks found: */foo"],
id="Point glob not allowed"
),
param(
- ['grogu.1'], [], ["No matching tasks found: grogu.1"],
+ ['1/grogu'], [], ["No matching tasks found: 1/grogu"],
id="No such task"
),
param(
- ['foo.4', 'bar.2', 'grogu.1'], ['foo.4', 'bar.2'],
- ["No matching tasks found: grogu.1"],
+ ['4/foo', '2/bar', '1/grogu'], ['4/foo', '2/bar'],
+ ["No matching tasks found: 1/grogu"],
id="Multiple items"
),
param(
- ['foo.20', 'pub.1'], [],
+ ['20/foo', '1/pub'], [],
["Invalid cycle point for task: foo, 20",
"Invalid cycle point for task: pub, 1"],
id="Task not in graph at given cycle point"
),
param(
- ['foo.1:badger'], ['foo.1'], [],
+ ['1/foo:badger'], ['1/foo'], [],
id="Task state is ignored"
),
param([], [], [], id="No items given")
@@ -254,7 +250,7 @@ async def test_match_taskdefs(
items: Arg passed to match_taskdefs().
ignore_state: Arg passed to match_taskdefs().
expected_task_ids: Expected IDs of the tasks in the dict that gets
- returned, of the form "{name}.{point}".
+ returned, of the form "{point}/{name}".
expected_warnings: Expected to be logged.
"""
caplog.set_level(logging.WARNING, CYLC_LOG)
@@ -272,37 +268,31 @@ async def test_match_taskdefs(
'items, expected_tasks_to_hold_ids, expected_warnings',
[
param(
- ['foo.1', 'foo.2'], ['foo.1', 'foo.2'], [],
+ ['1/foo', '2/foo'], ['1/foo', '2/foo'], [],
id="Active & future tasks"
),
param(
- ['*.1', '*.2'], ['foo.1', 'bar.1'],
- ["No active tasks matching: *.2"],
+ ['1/*', '2/*'], ['1/foo', '1/bar'],
+ ["No active tasks matching: 2/*"],
id="Name globs hold active tasks only"
),
param(
- ['FAM.1', 'FAM.2'], ['bar.1'],
- ["No active tasks in the family 'FAM' matching: FAM.2"],
+ ['1/FAM', '2/FAM'], ['1/bar'],
+ ["No active tasks in the family 'FAM' matching: 2/FAM"],
id="Family names hold active tasks only"
),
param(
- ['foo.*', 'bar', 'pub', 'grogu.*'], ['foo.1', 'bar.1'],
- ["No active instances of task: pub",
- "No active tasks matching: grogu.*"],
- id="Point globs/point omitted hold active tasks only"
- ),
- param(
- ['grogu.1', 'foo.H', 'foo.20', 'pub.1'], [],
+ ['1/grogu', 'H/foo', '20/foo', '1/pub'], [],
["No matching tasks found: grogu",
- "foo.H - invalid cycle point: H",
+ "H/foo - invalid cycle point: H",
"Invalid cycle point for task: foo, 20",
"Invalid cycle point for task: pub, 1"],
id="Non-existent task name or invalid cycle point"
),
param(
- ['foo:waiting', 'foo.1:failed', 'bar.2:waiting'], ['foo.1'],
- ["No active tasks matching: foo.1:failed",
- "No active tasks matching: bar.2:waiting"],
+ ['1/foo:waiting', '1/foo:failed', '2/bar:waiting'], ['1/foo'],
+ ["No active tasks matching: 1/foo:failed",
+ "No active tasks matching: 2/bar:waiting"],
id="Specifying task state works for active tasks, not future tasks"
)
]
@@ -322,7 +312,7 @@ async def test_hold_tasks(
Params:
items: Arg passed to hold_tasks().
expected_tasks_to_hold_ids: Expected IDs of the tasks that get put in
- the TaskPool.tasks_to_hold set, of the form "{name}.{point}".
+ the TaskPool.tasks_to_hold set, of the form "{point}/{name}"/
expected_warnings: Expected to be logged.
"""
expected_tasks_to_hold_ids = sorted(expected_tasks_to_hold_ids)
@@ -349,8 +339,8 @@ async def test_release_held_tasks(
) -> None:
"""Test TaskPool.release_held_tasks().
- For a workflow with held active tasks foo.1 & bar.1, and held future task
- pub.2.
+ For a workflow with held active tasks 1/foo & 1/bar, and held future task
+ 2/pub.
We skip testing the matching logic here because it would be slow using the
function-scoped example_flow fixture, and it would repeat what is covered
@@ -358,21 +348,21 @@ async def test_release_held_tasks(
"""
# Setup
task_pool = example_flow.pool
- task_pool.hold_tasks(['foo.1', 'bar.1', 'pub.2'])
+ task_pool.hold_tasks(['1/foo', '1/bar', '2/pub'])
for itask in task_pool.get_all_tasks():
assert itask.state.is_held is True
- expected_tasks_to_hold_ids = sorted(['foo.1', 'bar.1', 'pub.2'])
+ expected_tasks_to_hold_ids = sorted(['1/foo', '1/bar', '2/pub'])
assert get_task_ids(task_pool.tasks_to_hold) == expected_tasks_to_hold_ids
db_tasks_to_hold = db_select(example_flow, True, 'tasks_to_hold')
assert get_task_ids(db_tasks_to_hold) == expected_tasks_to_hold_ids
# Test
- task_pool.release_held_tasks(['foo.1', 'pub.2'])
+ task_pool.release_held_tasks(['1/foo', '2/pub'])
for itask in task_pool.get_all_tasks():
- hold_expected = itask.identity == 'bar.1'
+ hold_expected = itask.identity == '1/bar'
assert itask.state.is_held is hold_expected
- expected_tasks_to_hold_ids = sorted(['bar.1'])
+ expected_tasks_to_hold_ids = sorted(['1/bar'])
assert get_task_ids(task_pool.tasks_to_hold) == expected_tasks_to_hold_ids
db_tasks_to_hold = db_select(example_flow, True, 'tasks_to_hold')
@@ -383,7 +373,7 @@ async def test_release_held_tasks(
@pytest.mark.parametrize(
'hold_after_point, expected_held_task_ids',
[
- (0, ['foo.1', 'bar.1']),
+ (0, ['1/foo', '1/bar']),
(1, [])
]
)
diff --git a/tests/unit/conftest.py b/tests/unit/conftest.py
index dff78510c68..f7d398cc637 100644
--- a/tests/unit/conftest.py
+++ b/tests/unit/conftest.py
@@ -29,7 +29,11 @@
)
from cylc.flow.data_store_mgr import DataStoreMgr
from cylc.flow.scheduler import Scheduler
-from cylc.flow.workflow_files import WorkflowFiles
+from cylc.flow.workflow_files import (
+ WorkflowFiles,
+ link_runN,
+ unlink_runN,
+)
from cylc.flow.xtrigger_mgr import XtriggerManager
@@ -57,11 +61,11 @@ def _monkeymock(pypath: str, **kwargs: Any) -> Mock:
return _monkeymock
-def tmp_run_dir(tmp_path: Path, monkeypatch: pytest.MonkeyPatch):
+def _tmp_run_dir(tmp_path: Path, monkeypatch: pytest.MonkeyPatch):
"""Fixture that patches the cylc-run dir to the tests's
{tmp_path}/cylc-run, and optionally creates a workflow run dir inside.
- (Actually the fixture is below, this is the re-usable meat of it.)
+ Adds the runN symlink automatically if the workflow ID ends with /run__.
Args:
reg: Workflow name.
@@ -81,6 +85,8 @@ def _tmp_run_dir(
installed: bool = False,
named: bool = False
) -> Path:
+ nonlocal tmp_path
+ nonlocal monkeypatch
cylc_run_dir = tmp_path / 'cylc-run'
cylc_run_dir.mkdir(exist_ok=True)
monkeypatch.setattr('cylc.flow.pathutil._CYLC_RUN_DIR', cylc_run_dir)
@@ -89,6 +95,9 @@ def _tmp_run_dir(
run_dir.mkdir(parents=True, exist_ok=True)
(run_dir / WorkflowFiles.FLOW_FILE).touch(exist_ok=True)
(run_dir / WorkflowFiles.Service.DIRNAME).mkdir(exist_ok=True)
+ if run_dir.name.startswith('run'):
+ unlink_runN(run_dir.parent)
+ link_runN(run_dir)
if installed:
if named:
if len(Path(reg).parts) < 2:
@@ -104,10 +113,9 @@ def _tmp_run_dir(
return _tmp_run_dir
-@pytest.fixture(name='tmp_run_dir')
-def tmp_run_dir_fixture(tmp_path: Path, monkeypatch: pytest.MonkeyPatch):
- # This is the actual tmp_run_dir fixture
- return tmp_run_dir(tmp_path, monkeypatch)
+@pytest.fixture
+def tmp_run_dir(tmp_path: Path, monkeypatch: pytest.MonkeyPatch):
+ return _tmp_run_dir(tmp_path, monkeypatch)
@pytest.fixture(scope='module')
@@ -115,7 +123,7 @@ def mod_tmp_run_dir(tmp_path_factory: pytest.TempPathFactory):
"""Module-scoped version of tmp_run_dir()"""
tmp_path = tmp_path_factory.getbasetemp()
with pytest.MonkeyPatch.context() as mp:
- return tmp_run_dir(tmp_path, mp)
+ return _tmp_run_dir(tmp_path, mp)
def tmp_src_dir(tmp_path: Path):
diff --git a/tests/unit/job_runner_handlers/test_loadleveler.py b/tests/unit/job_runner_handlers/test_loadleveler.py
index 1f84c1c286b..9c9c1402dda 100644
--- a/tests/unit/job_runner_handlers/test_loadleveler.py
+++ b/tests/unit/job_runner_handlers/test_loadleveler.py
@@ -29,7 +29,7 @@
'execution_time_limit': 180,
'job_file_path': 'cylc-run/chop/log/job/1/axe/01/job',
'workflow_name': 'chop',
- 'task_id': 'axe.1',
+ 'task_id': '1/axe',
},
[
'# @ job_name = chop.axe.1',
@@ -50,7 +50,7 @@
'execution_time_limit': 180,
'job_file_path': 'cylc-run/chop/log/job/1/axe/01/job',
'workflow_name': 'chop',
- 'task_id': 'axe.1',
+ 'task_id': '1/axe',
},
[
'# @ job_name = chop.axe.1',
diff --git a/tests/unit/job_runner_handlers/test_lsf.py b/tests/unit/job_runner_handlers/test_lsf.py
index dc6b2057b1a..df20a146a98 100644
--- a/tests/unit/job_runner_handlers/test_lsf.py
+++ b/tests/unit/job_runner_handlers/test_lsf.py
@@ -28,7 +28,7 @@
'execution_time_limit': 180,
'job_file_path': 'cylc-run/chop/log/job/1/axe/01/job',
'workflow_name': 'chop',
- 'task_id': 'axe.1',
+ 'task_id': '1/axe',
},
[
'#BSUB -J axe.1.chop',
@@ -47,7 +47,7 @@
'execution_time_limit': 200,
'job_file_path': 'cylc-run/chop/log/job/1/axe/01/job',
'workflow_name': 'chop',
- 'task_id': 'axe.1',
+ 'task_id': '1/axe',
},
[
'#BSUB -J axe.1.chop',
diff --git a/tests/unit/job_runner_handlers/test_moab.py b/tests/unit/job_runner_handlers/test_moab.py
index db6098d29b9..e54e03c7914 100644
--- a/tests/unit/job_runner_handlers/test_moab.py
+++ b/tests/unit/job_runner_handlers/test_moab.py
@@ -28,7 +28,7 @@
'execution_time_limit': 180,
'job_file_path': 'cylc-run/chop/log/job/1/axe/01/job',
'workflow_name': 'chop',
- 'task_id': 'axe.1',
+ 'task_id': '1/axe',
},
[
'#PBS -N axe.1.chop',
@@ -47,7 +47,7 @@
'execution_time_limit': 180,
'job_file_path': 'cylc-run/chop/log/job/1/axe/01/job',
'workflow_name': 'chop',
- 'task_id': 'axe.1',
+ 'task_id': '1/axe',
},
[
'#PBS -N axe.1.chop',
diff --git a/tests/unit/job_runner_handlers/test_pbs.py b/tests/unit/job_runner_handlers/test_pbs.py
index 00fdd2c9959..0c65e6192f2 100644
--- a/tests/unit/job_runner_handlers/test_pbs.py
+++ b/tests/unit/job_runner_handlers/test_pbs.py
@@ -28,7 +28,7 @@
'execution_time_limit': 180,
'job_file_path': 'cylc-run/chop/log/job/1/axe/01/job',
'workflow_name': 'chop',
- 'task_id': 'axe.1',
+ 'task_id': '1/axe',
'platform': {
'job runner': 'pbs',
'job name length maximum': 100
@@ -47,7 +47,7 @@
'execution_time_limit': 180,
'job_file_path': 'cylc-run/chop/log/job/1/axe/01/job',
'workflow_name': 'chop',
- 'task_id': 'axe.1',
+ 'task_id': '1/axe',
'platform': {
'job runner': 'pbs',
'job name length maximum': 6
@@ -70,7 +70,7 @@
'execution_time_limit': 180,
'job_file_path': 'cylc-run/chop/log/job/1/axe/01/job',
'workflow_name': 'chop',
- 'task_id': 'axe.1',
+ 'task_id': '1/axe',
'platform': {
'job runner': 'pbs',
'job name length maximum': 100
diff --git a/tests/unit/job_runner_handlers/test_slurm.py b/tests/unit/job_runner_handlers/test_slurm.py
index a4544bae7e2..3ba22fee358 100644
--- a/tests/unit/job_runner_handlers/test_slurm.py
+++ b/tests/unit/job_runner_handlers/test_slurm.py
@@ -28,7 +28,7 @@
'execution_time_limit': 180,
'job_file_path': 'cylc-run/chop/log/job/1/axe/01/job',
'workflow_name': 'chop',
- 'task_id': 'axe.1',
+ 'task_id': '1/axe',
},
[
'#SBATCH --job-name=axe.1.chop',
@@ -51,7 +51,7 @@
'cylc-run/chop/log/job/1/axe%40HEAD/01/job'
),
'workflow_name': 'chop',
- 'task_id': 'axe%40HEAD.1',
+ 'task_id': '1/axe%40HEAD',
},
[
'#SBATCH --job-name=axe%40HEAD.1.chop',
@@ -76,7 +76,7 @@
'execution_time_limit': 200,
'job_file_path': 'cylc-run/chop/log/job/1/axe/01/job',
'workflow_name': 'chop',
- 'task_id': 'axe.1',
+ 'task_id': '1/axe',
},
[
'#SBATCH --job-name=axe.1.chop',
@@ -104,7 +104,7 @@
'execution_time_limit': 200,
'job_file_path': 'cylc-run/chop/log/job/1/axe/01/job',
'workflow_name': 'chop',
- 'task_id': 'axe.1',
+ 'task_id': '1/axe',
},
[
'#SBATCH --job-name=axe.1.chop',
diff --git a/tests/unit/job_runner_handlers/test_slurm_packjob.py b/tests/unit/job_runner_handlers/test_slurm_packjob.py
index 17c0cfc1e42..d59764a0dd1 100644
--- a/tests/unit/job_runner_handlers/test_slurm_packjob.py
+++ b/tests/unit/job_runner_handlers/test_slurm_packjob.py
@@ -33,7 +33,7 @@
'execution_time_limit': 200,
'job_file_path': 'cylc-run/chop/log/job/1/axe/01/job',
'workflow_name': 'chop',
- 'task_id': 'axe.1',
+ 'task_id': '1/axe',
},
[
'#SBATCH --job-name=axe.1.chop',
diff --git a/tests/unit/scripts/test_clean.py b/tests/unit/scripts/test_clean.py
new file mode 100644
index 00000000000..ee8fdf1b17c
--- /dev/null
+++ b/tests/unit/scripts/test_clean.py
@@ -0,0 +1,93 @@
+#!/usr/bin/env python3
+
+# THIS FILE IS PART OF THE CYLC WORKFLOW ENGINE.
+# Copyright (C) NIWA & British Crown (Met Office) & Contributors.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+from types import SimpleNamespace
+
+import pytest
+
+from cylc.flow.scripts.clean import scan, run
+
+
+@pytest.mark.asyncio
+async def test_scan(tmp_run_dir):
+ """It should scan the filesystem to expand partial IDs."""
+ # regular workflows pass straight through
+ tmp_run_dir('foo')
+ workflows, multi_mode = await scan(['foo'], False)
+ assert workflows == ['foo']
+ assert multi_mode is False
+
+ # hierarchies, however, get expanded
+ tmp_run_dir('bar/run1')
+ workflows, multi_mode = await scan(['bar'], False)
+ assert workflows == ['bar/run1']
+ assert multi_mode is True # because an expansion has happened
+
+ tmp_run_dir('bar/run2')
+ workflows, multi_mode = await scan(['bar'], False)
+ assert workflows == ['bar/run1', 'bar/run2']
+ assert multi_mode is True
+
+
+@pytest.fixture
+def mute(monkeypatch):
+ """Stop cylc clean from doing anything and log all init_clean calls."""
+ items = []
+
+ def _clean(id_, *_):
+ nonlocal items
+ items.append(id_)
+
+ monkeypatch.setattr('cylc.flow.scripts.clean.init_clean', _clean)
+ monkeypatch.setattr('cylc.flow.scripts.clean.prompt', lambda x: None)
+
+ return items
+
+
+@pytest.mark.asyncio
+async def test_multi(tmp_run_dir, mute):
+ """It supports cleaning multiple workflows."""
+ # cli opts
+ opts = SimpleNamespace()
+ opts.force = False
+
+ # create three dummy workflows
+ tmp_run_dir('bar/pub/beer')
+ tmp_run_dir('baz/run1')
+ tmp_run_dir('foo')
+
+ # an explicit workflow ID goes straight through
+ mute[:] = []
+ await run('foo', opts=opts)
+ assert mute == ['foo']
+
+ # a partial hierarchical ID gets expanded to all workflows contained
+ # in the hierarchy (note runs are a special case of hierarchical ID)
+ mute[:] = []
+ await run('bar', opts=opts)
+ assert mute == ['bar/pub/beer']
+
+ # test a mixture of explicit and partial IDs
+ mute[:] = []
+ await run('bar', 'baz', 'foo', opts=opts)
+ assert mute == ['bar/pub/beer', 'baz/run1', 'foo']
+
+ # test a glob
+ mute[:] = []
+ await run('*', opts=opts)
+ assert mute == ['bar/pub/beer', 'baz/run1', 'foo']
diff --git a/tests/unit/scripts/test_hold.py b/tests/unit/scripts/test_hold.py
index f4456f77531..51c5bdbe652 100644
--- a/tests/unit/scripts/test_hold.py
+++ b/tests/unit/scripts/test_hold.py
@@ -33,10 +33,16 @@
[
(Opts(), ['*'], None),
(Opts(hold_point_string='2'), [], None),
- (Opts(hold_point_string='2'), ['*'],
- (UserInputError, "Cannot combine --after with TASK_GLOB")),
- (Opts(), [],
- (UserInputError, "Missing arguments: TASK_GLOB")),
+ (
+ Opts(hold_point_string='2'),
+ ['*'],
+ (UserInputError, "Cannot combine --after with Cylc/Task ID")
+ ),
+ (
+ Opts(),
+ [],
+ (UserInputError, "Must define Cycles/Tasks")
+ ),
]
)
def test_validate(
diff --git a/tests/unit/scripts/test_release.py b/tests/unit/scripts/test_release.py
index 860b3dd4f26..9880dc98959 100644
--- a/tests/unit/scripts/test_release.py
+++ b/tests/unit/scripts/test_release.py
@@ -33,10 +33,16 @@
[
(Opts(), ['*'], None),
(Opts(release_all=True), [], None),
- (Opts(release_all=True), ['*'],
- (UserInputError, "Cannot combine --all with TASK_GLOB")),
- (Opts(), [],
- (UserInputError, "Missing arguments: TASK_GLOB")),
+ (
+ Opts(release_all=True),
+ ['*'],
+ (UserInputError, "Cannot combine --all with Cycle/Task IDs")
+ ),
+ (
+ Opts(),
+ [],
+ (UserInputError, "Must define Cycles/Tasks")
+ ),
]
)
def test_validate(
diff --git a/tests/unit/test_config.py b/tests/unit/test_config.py
index 1459b3716fa..d9b5eaf6a57 100644
--- a/tests/unit/test_config.py
+++ b/tests/unit/test_config.py
@@ -411,13 +411,13 @@ def test_process_icp(
),
(
None,
- ['foo.20090802T0615+0530', 'bar.20090802T0515+0530'],
+ ['20090802T0615+0530/foo', '20090802T0515+0530/bar'],
'20090802T0515+0530',
None
),
(
'20210120T1700+0530',
- ['foo.20090802T0615+0530'],
+ ['20090802T0615+0530/foo'],
None,
(
UserInputError,
diff --git a/tests/unit/test_data_store_mgr.py b/tests/unit/test_data_store_mgr.py
index 04a0a173aa9..d9472812d62 100644
--- a/tests/unit/test_data_store_mgr.py
+++ b/tests/unit/test_data_store_mgr.py
@@ -19,7 +19,6 @@
from cylc.flow.data_store_mgr import (
task_mean_elapsed_time,
- parse_job_item,
apply_delta,
WORKFLOW,
DELTAS_MAP,
@@ -42,23 +41,6 @@ def test_task_mean_elapsed_time():
assert result == 5.0
-def test_parse_job_item():
- """Test internal id parsing method."""
- point, name, sub_num = parse_job_item(int_id())
- tpoint, tname, tsub_num = int_id().split('/', 2)
- assert (point, name, sub_num) == (tpoint, tname, int(tsub_num))
- tpoint, tname, tsub_num = parse_job_item(f'{point}/{name}')
- assert name, None == (point, (tpoint, tname, tsub_num))
- tpoint, tname, tsub_num = parse_job_item(f'{name}.{point}.{sub_num}')
- assert name, sub_num == (point, (tpoint, tname, tsub_num))
- tpoint, tname, tsub_num = parse_job_item(f'{name}.{point}.NotNumber')
- assert name, None == (point, (tpoint, tname, tsub_num))
- tpoint, tname, tsub_num = parse_job_item(f'{name}.{point}')
- assert name, None == (point, (tpoint, tname, tsub_num))
- tpoint, tname, tsub_num = parse_job_item(f'{name}')
- assert name, None == (None, (tpoint, tname, tsub_num))
-
-
def test_apply_delta():
"""Test delta application.
diff --git a/tests/unit/test_id.py b/tests/unit/test_id.py
new file mode 100644
index 00000000000..1ca11a1f126
--- /dev/null
+++ b/tests/unit/test_id.py
@@ -0,0 +1,349 @@
+# THIS FILE IS PART OF THE CYLC SUITE ENGINE.
+# Copyright (C) NIWA & British Crown (Met Office) & Contributors.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+"""Test the Cylc universal identifier system."""
+
+import pytest
+
+from cylc.flow.id import (
+ LEGACY_CYCLE_SLASH_TASK,
+ LEGACY_TASK_DOT_CYCLE,
+ RELATIVE_ID,
+ Tokens,
+ UNIVERSAL_ID,
+)
+
+
+@pytest.mark.parametrize(
+ 'identifier',
+ [
+ '',
+ '~',
+ '~user//cycle'
+ '~flow:state',
+ 'flow:flow_sel:flow_sel',
+ ]
+)
+def test_univseral_id_illegal(identifier):
+ """Test illegal formats of the universal identifier."""
+ assert UNIVERSAL_ID.match(identifier) is None
+
+
+@pytest.mark.parametrize(
+ 'identifier',
+ [
+ '~user',
+ '~user/',
+ '~user/workflow',
+ '~user/workflow//',
+ '~user/workflow:workflow_sel',
+ '~user/workflow:workflow_sel//',
+ '~user/workflow:workflow_sel//cycle',
+ '~user/workflow:workflow_sel//cycle/',
+ '~user/workflow:workflow_sel//cycle:cycle_sel',
+ '~user/workflow:workflow_sel//cycle:cycle_sel/',
+ '~user/workflow:workflow_sel//cycle:cycle_sel/task',
+ '~user/workflow:workflow_sel//cycle:cycle_sel/task/',
+ '~user/workflow:workflow_sel//cycle:cycle_sel/task:task_sel',
+ '~user/workflow:workflow_sel//cycle:cycle_sel/task:task_sel/',
+ '~user/workflow:workflow_sel//cycle:cycle_sel/task:task_sel/job',
+ (
+ '~user/workflow:workflow_sel//cycle:cycle_sel/task:task_sel/job'
+ ':job_sel'
+ ),
+ 'workflow',
+ 'workflow//',
+ 'workflow:workflow_sel',
+ 'workflow:workflow_sel//',
+ 'workflow:workflow_sel//cycle',
+ 'workflow:workflow_sel//cycle/',
+ 'workflow:workflow_sel//cycle:cycle_sel',
+ 'workflow:workflow_sel//cycle:cycle_sel/',
+ 'workflow:workflow_sel//cycle:cycle_sel/task',
+ 'workflow:workflow_sel//cycle:cycle_sel/task/',
+ 'workflow:workflow_sel//cycle:cycle_sel/task:task_sel',
+ 'workflow:workflow_sel//cycle:cycle_sel/task:task_sel/',
+ 'workflow:workflow_sel//cycle:cycle_sel/task:task_sel/job',
+ 'workflow:workflow_sel//cycle:cycle_sel/task:task_sel/job:job_sel'
+ ]
+)
+def test_universal_id_matches(identifier):
+ """test every legal format of the universal identifier."""
+ # fmt: off
+ expected_tokens = {
+ 'user':
+ 'user' if 'user' in identifier else None,
+ 'workflow':
+ 'workflow' if 'workflow' in identifier else None,
+ 'workflow_sel':
+ 'workflow_sel' if 'workflow_sel' in identifier else None,
+ 'cycle':
+ 'cycle' if 'cycle' in identifier else None,
+ 'cycle_sel':
+ 'cycle_sel' if 'cycle_sel' in identifier else None,
+ 'task':
+ 'task' if 'task' in identifier else None,
+ 'task_sel':
+ 'task_sel' if 'task_sel' in identifier else None,
+ 'job':
+ 'job' if 'job' in identifier else None,
+ 'job_sel':
+ 'job_sel' if 'job_sel' in identifier else None
+ }
+ # fmt: on
+ match = UNIVERSAL_ID.match(identifier)
+ assert match
+ assert match.groupdict() == expected_tokens
+
+
+@pytest.mark.parametrize(
+ 'identifier',
+ [
+ '~user/a/b/c',
+ '~user/a/b/c//',
+ '~user/a/b/c:workflow_sel',
+ '~user/a/b/c:workflow_sel//',
+ '~user/a/b/c:workflow_sel//cycle',
+ '~user/a/b/c:workflow_sel//cycle/',
+ '~user/a/b/c:workflow_sel//cycle:cycle_sel',
+ '~user/a/b/c:workflow_sel//cycle:cycle_sel/',
+ '~user/a/b/c:workflow_sel//cycle:cycle_sel/task',
+ '~user/a/b/c:workflow_sel//cycle:cycle_sel/task/',
+ '~user/a/b/c:workflow_sel//cycle:cycle_sel/task:task_sel',
+ '~user/a/b/c:workflow_sel//cycle:cycle_sel/task:task_sel/',
+ '~user/a/b/c:workflow_sel//cycle:cycle_sel/task:task_sel/job',
+ (
+ '~user/a/b/c:workflow_sel//cycle:cycle_sel/task:task_sel/job'
+ ':job_sel'
+ ),
+ 'a/b/c',
+ 'a/b/c//',
+ 'a/b/c:workflow_sel',
+ 'a/b/c:workflow_sel//',
+ 'a/b/c:workflow_sel//cycle',
+ 'a/b/c:workflow_sel//cycle/',
+ 'a/b/c:workflow_sel//cycle:cycle_sel',
+ 'a/b/c:workflow_sel//cycle:cycle_sel/',
+ 'a/b/c:workflow_sel//cycle:cycle_sel/task',
+ 'a/b/c:workflow_sel//cycle:cycle_sel/task/',
+ 'a/b/c:workflow_sel//cycle:cycle_sel/task:task_sel',
+ 'a/b/c:workflow_sel//cycle:cycle_sel/task:task_sel/',
+ 'a/b/c:workflow_sel//cycle:cycle_sel/task:task_sel/job',
+ 'a/b/c:workflow_sel//cycle:cycle_sel/task:task_sel/job:job_sel'
+ ]
+)
+def test_universal_id_matches_hierarchical(identifier):
+ """Test the UID with hierarchical workflow IDs."""
+ # fmt: off
+ expected_tokens = {
+ 'user':
+ 'user' if 'user' in identifier else None,
+ 'workflow':
+ 'a/b/c', # the hierarchical workflow ID
+ 'workflow_sel':
+ 'workflow_sel' if 'workflow_sel' in identifier else None,
+ 'cycle':
+ 'cycle' if 'cycle' in identifier else None,
+ 'cycle_sel':
+ 'cycle_sel' if 'cycle_sel' in identifier else None,
+ 'task':
+ 'task' if 'task' in identifier else None,
+ 'task_sel':
+ 'task_sel' if 'task_sel' in identifier else None,
+ 'job':
+ 'job' if 'job' in identifier else None,
+ 'job_sel':
+ 'job_sel' if 'job_sel' in identifier else None
+ }
+ # fmt: on
+ match = UNIVERSAL_ID.match(identifier)
+ assert match
+ assert match.groupdict() == expected_tokens
+
+
+@pytest.mark.parametrize(
+ 'identifier',
+ [
+ '',
+ '~',
+ ':',
+ 'workflow//cycle',
+ 'task:task_sel:task_sel',
+ 'cycle/task'
+ '//',
+ '//~',
+ '//:',
+ '//workflow//cycle',
+ '//task:task_sel:task_sel'
+ ]
+)
+def test_relative_id_illegal(identifier):
+ """Test illegal formats of the universal identifier."""
+ assert RELATIVE_ID.match(identifier) is None
+
+
+@pytest.mark.parametrize(
+ 'identifier',
+ [
+ '//cycle',
+ '//cycle/',
+ '//cycle:cycle_sel',
+ '//cycle:cycle_sel/',
+ '//cycle:cycle_sel/task',
+ '//cycle:cycle_sel/task/',
+ '//cycle:cycle_sel/task:task_sel',
+ '//cycle:cycle_sel/task:task_sel/',
+ '//cycle:cycle_sel/task:task_sel/job',
+ '//cycle:cycle_sel/task:task_sel/job:job_sel',
+ ]
+)
+def test_relative_id_matches(identifier):
+ """test every legal format of the relative identifier."""
+ expected_tokens = {
+ 'cycle': 'cycle' if 'cycle' in identifier else None,
+ 'cycle_sel': 'cycle_sel' if 'cycle_sel' in identifier else None,
+ 'task': 'task' if 'task' in identifier else None,
+ 'task_sel': 'task_sel' if 'task_sel' in identifier else None,
+ 'job': 'job' if 'job' in identifier else None,
+ 'job_sel': 'job_sel' if 'job_sel' in identifier else None
+ }
+ match = RELATIVE_ID.match(identifier)
+ assert match
+ assert match.groupdict() == expected_tokens
+
+
+@pytest.mark.parametrize(
+ 'identifier',
+ [
+ '',
+ '~',
+ '/',
+ ':',
+ 'task.cycle', # the first digit of the cycle should be a number
+ '//task.123', # don't match the new format
+ 'task.cycle/job',
+ 'task:task_sel.123' # selector should suffix the cycle
+ ]
+)
+def test_legacy_task_dot_cycle_illegal(identifier):
+ """Test illegal formats of the legacy task.cycle identifier."""
+ assert LEGACY_TASK_DOT_CYCLE.match(identifier) is None
+
+
+@pytest.mark.parametrize(
+ 'identifier,expected_tokens',
+ [
+ (
+ 'task.1', # integer cycles can be one character long
+ {'task': 'task', 'cycle': '1', 'task_sel': None}
+ ),
+ (
+ 't.a.s.k.123',
+ {'task': 't.a.s.k', 'cycle': '123', 'task_sel': None}
+ ),
+ (
+ 'task.123:task_sel',
+ {'task': 'task', 'cycle': '123', 'task_sel': 'task_sel'}
+ ),
+ ]
+)
+def test_legacy_task_dot_cycle_matches(identifier, expected_tokens):
+ match = LEGACY_TASK_DOT_CYCLE.match(identifier)
+ assert match
+ assert match.groupdict() == expected_tokens
+
+
+@pytest.mark.parametrize(
+ 'identifier',
+ [
+ '',
+ '~',
+ '/',
+ ':',
+ 'cycle/task', # the first digit of the cycle should be a number
+ '//123/task', # don't match the new format
+ 'cycle/task/job'
+ ]
+)
+def test_legacy_cycle_slash_task_illegal(identifier):
+ """Test illegal formats of the legacy cycle/task identifier."""
+ assert LEGACY_CYCLE_SLASH_TASK.match(identifier) is None
+
+
+@pytest.mark.parametrize(
+ 'identifier,expected_tokens',
+ [
+ (
+ '123/task',
+ {'task': 'task', 'cycle': '123', 'task_sel': None}
+ ),
+ (
+ '123/t.a.s.k',
+ {'task': 't.a.s.k', 'cycle': '123', 'task_sel': None}
+ ),
+ (
+ '123/task:task_sel',
+ {'task': 'task', 'cycle': '123', 'task_sel': 'task_sel'}
+ )
+ ]
+)
+def test_legacy_cycle_slash_task_matches(identifier, expected_tokens):
+ match = LEGACY_CYCLE_SLASH_TASK.match(identifier)
+ assert match
+ assert match.groupdict() == expected_tokens
+
+
+def test_tokens():
+ # tested mainly in doctests
+
+ Tokens('a')
+ with pytest.raises(ValueError):
+ Tokens('a', 'b')
+
+ Tokens(cycle='a')
+ with pytest.raises(ValueError):
+ Tokens(foo='a')
+
+ Tokens()['cycle'] = 'a'
+ with pytest.raises(ValueError):
+ Tokens()['foo'] = 'a'
+
+ assert Tokens('a') == Tokens('a')
+ assert Tokens('a') != Tokens('b')
+ assert Tokens('a', relative=True) == Tokens('a', relative=True)
+ assert Tokens('a', relative=True) != Tokens('b', relative=True)
+ assert Tokens() != Tokens('a')
+ assert Tokens(workflow='a') == Tokens('a')
+
+ tokens = Tokens('a//b')
+ tokens.update({'cycle': 'c', 'task': 'd'})
+ assert tokens == Tokens('a//c/d')
+ with pytest.raises(ValueError):
+ tokens.update({'foo': 'c'})
+
+
+def test_no_look_behind():
+ """Ensure the UID pattern does not use lookbehinds.
+
+ Ideally this pattern should be work for both cylc-flow and
+ cylc-ui.
+
+ 2022-01-11:
+ * Lookbehind support is at ~75%
+ * https://caniuse.com/js-regexp-lookbehind
+
+ """
+ assert '?<=' not in UNIVERSAL_ID.pattern
+ assert '?.
+
+import os
+from pathlib import Path
+import pytest
+
+from cylc.flow.async_util import pipe
+from cylc.flow.exceptions import UserInputError, WorkflowFilesError
+from cylc.flow.id import detokenise, tokenise, Tokens
+from cylc.flow.id_cli import (
+ _expand_workflow_tokens,
+ _parse_src_path,
+ _validate_constraint,
+ _validate_workflow_ids,
+ _validate_number,
+ parse_ids_async,
+)
+from cylc.flow.pathutil import get_cylc_run_dir
+from cylc.flow.workflow_files import WorkflowFiles
+
+
+@pytest.fixture(scope='module')
+def abc_src_dir(tmp_path_factory):
+ """Src dir containing three workflows, a, b & c."""
+ cwd_before = Path.cwd()
+ tmp_path = tmp_path_factory.getbasetemp()
+ os.chdir(tmp_path)
+ for name in ('a', 'b', 'c'):
+ Path(tmp_path, name).mkdir()
+ Path(tmp_path, name, WorkflowFiles.FLOW_FILE).touch()
+ yield tmp_path
+ os.chdir(cwd_before)
+
+
+@pytest.mark.asyncio
+@pytest.mark.parametrize(
+ 'ids_in,ids_out',
+ [
+ (('a//',), ['a']),
+ (('a//', 'a//'), ['a']),
+ (('a//', 'b//'), ['a', 'b']),
+ ]
+)
+async def test_parse_ids_workflows(ids_in, ids_out):
+ """It should parse workflows & tasks."""
+ workflows, _ = await parse_ids_async(*ids_in, constraint='workflows')
+ assert list(workflows) == ids_out
+ assert list(workflows.values()) == [[] for _ in workflows]
+
+
+@pytest.mark.asyncio
+@pytest.mark.parametrize(
+ 'ids_in,ids_out',
+ [
+ (('./a',), ['a']),
+ ]
+)
+async def test_parse_ids_workflows_src(ids_in, ids_out, abc_src_dir):
+ """It should parse src workflows."""
+ workflows, _ = await parse_ids_async(
+ *ids_in,
+ src=True,
+ constraint='workflows',
+ )
+ assert list(workflows) == ids_out
+ assert list(workflows.values()) == [[] for _ in workflows]
+
+
+@pytest.mark.asyncio
+@pytest.mark.parametrize(
+ 'ids_in,ids_out',
+ [
+ (
+ ('a//i',),
+ {'a': ['//i']},
+ ),
+ (
+ ('a//i', 'a//j'),
+ {'a': ['//i', '//j']},
+ ),
+ (
+ ('a//i', 'b//i'),
+ {'a': ['//i'], 'b': ['//i']},
+ ),
+ (
+ ('a//', '//i', 'b//', '//i'),
+ {'a': ['//i'], 'b': ['//i']},
+ ),
+ ]
+)
+async def test_parse_ids_tasks(ids_in, ids_out):
+ """It should parse workflow tasks in two formats."""
+ workflows, _ = await parse_ids_async(*ids_in, constraint='tasks')
+ assert {
+ workflow_id: [detokenise(tokens) for tokens in tokens_list]
+ for workflow_id, tokens_list in workflows.items()
+ } == ids_out
+
+
+@pytest.mark.asyncio
+@pytest.mark.parametrize(
+ 'ids_in,ids_out',
+ [
+ (
+ ('./a', '//i'),
+ {'a': ['//i']}
+ ),
+ (
+ ('./a', '//i', '//j', '//k'),
+ {'a': ['//i', '//j', '//k']}
+ ),
+ ]
+)
+async def test_parse_ids_tasks_src(ids_in, ids_out, abc_src_dir):
+ """It should parse workflow tasks for src workflows."""
+ workflows, _ = await parse_ids_async(*ids_in, constraint='tasks', src=True)
+ assert {
+ workflow_id: [detokenise(tokens) for tokens in tokens_list]
+ for workflow_id, tokens_list in workflows.items()
+ } == ids_out
+
+
+@pytest.mark.asyncio
+@pytest.mark.parametrize(
+ 'ids_in,ids_out',
+ [
+ (('a//',), {'a': []}),
+ (
+ ('a//', 'b//', 'c//'),
+ {'a': [], 'b': [], 'c': []}
+ ),
+ (('a//i',), {'a': ['//i']}),
+ (('a//', '//i'), {'a': ['//i']}),
+ (
+ ('a//', '//i', '//j', '//k'),
+ {'a': ['//i', '//j', '//k']},
+ ),
+ (('a//', '//i', 'b//'), {'a': ['//i'], 'b': []}),
+ ]
+)
+async def test_parse_ids_mixed(ids_in, ids_out):
+ """It should parse mixed workflows & tasks."""
+ workflows, _ = await parse_ids_async(*ids_in, constraint='mixed')
+ assert {
+ workflow_id: [detokenise(tokens) for tokens in tokens_list]
+ for workflow_id, tokens_list in workflows.items()
+ } == ids_out
+
+
+@pytest.mark.asyncio
+@pytest.mark.parametrize(
+ 'ids_in,ids_out',
+ [
+ (('./a',), {'a': []}),
+ (('./a', '//i'), {'a': ['//i']}),
+ (('./a', '//i', '//j', '//k'), {'a': ['//i', '//j', '//k']}),
+ ]
+)
+async def test_parse_ids_mixed_src(ids_in, ids_out, abc_src_dir):
+ """It should parse mixed workflows & tasks from src workflows."""
+ workflows, _ = await parse_ids_async(*ids_in, constraint='mixed', src=True)
+ assert {
+ workflow_id: [detokenise(tokens) for tokens in tokens_list]
+ for workflow_id, tokens_list in workflows.items()
+ } == ids_out
+
+
+@pytest.mark.asyncio
+@pytest.mark.parametrize(
+ 'ids_in,errors',
+ [
+ (('a//',), False),
+ (('a//', 'b//'), False),
+ (('a//', 'b//', 'c//'), True),
+ ]
+)
+async def test_parse_ids_max_workflows(ids_in, errors):
+ """It should validate input against the max_workflows constraint."""
+ try:
+ await parse_ids_async(*ids_in, constraint='workflows', max_workflows=2)
+ except UserInputError:
+ if not errors:
+ raise
+ else:
+ if errors:
+ raise Exception('Should have raised UserInputError')
+
+
+@pytest.mark.asyncio
+@pytest.mark.parametrize(
+ 'ids_in,errors',
+ [
+ (('a//', '//i'), False),
+ (('a//', '//i', '//j'), False),
+ (('a//', '//i', '//j', '//k'), True),
+ ]
+)
+async def test_parse_ids_max_tasks(ids_in, errors):
+ """It should validate input against the max_tasks constraint."""
+ try:
+ await parse_ids_async(*ids_in, constraint='tasks', max_tasks=2)
+ except UserInputError:
+ if not errors:
+ raise
+ else:
+ if errors:
+ raise Exception('Should have raised UserInputError')
+
+
+@pytest.mark.asyncio
+async def test_parse_ids_infer_run_name(tmp_run_dir):
+ """It should infer the run name for auto-numbered installations."""
+ # it doesn't do anything for a named run
+ tmp_run_dir('foo/bar', named=True, installed=True)
+ workflows, *_ = await parse_ids_async('foo//', constraint='workflows')
+ assert list(workflows) == ['foo']
+
+ # it correctly identifies the latest run
+ tmp_run_dir('bar/run1')
+ workflows, *_ = await parse_ids_async('bar//', constraint='workflows')
+ assert list(workflows) == ['bar/run1']
+ tmp_run_dir('bar/run2')
+ workflows, *_ = await parse_ids_async('bar//', constraint='workflows')
+ assert list(workflows) == ['bar/run2']
+
+ # it leaves the ID alone if infer_latest_runs = False
+ workflows, *_ = await parse_ids_async(
+ 'bar//',
+ constraint='workflows',
+ infer_latest_runs=False,
+ )
+ assert list(workflows) == ['bar']
+
+
+@pytest.fixture
+def patch_expand_workflow_tokens(monkeypatch):
+ """Define the output of scan events."""
+
+ def _patch_expand_workflow_tokens(_ids):
+
+ async def _expand_workflow_tokens_impl(tokens, match_active=True):
+ nonlocal _ids
+ for id_ in _ids:
+ yield tokens.duplicate(workflow=id_)
+
+ monkeypatch.setattr(
+ 'cylc.flow.id_cli._expand_workflow_tokens_impl',
+ _expand_workflow_tokens_impl,
+ )
+
+ _patch_expand_workflow_tokens(['xxx'])
+ return _patch_expand_workflow_tokens
+
+
+@pytest.mark.asyncio
+@pytest.mark.parametrize(
+ 'ids_in,ids_out,multi_mode',
+ [
+ # multi mode should be True if multiple workflows are defined
+ (['a//'], ['a'], False),
+ (['a//', 'b//'], ['a', 'b'], True),
+ # or if pattern matching is used, irrespective of the number of matches
+ (['*//'], ['xxx'], True),
+ ]
+)
+async def test_parse_ids_multi_mode(
+ patch_expand_workflow_tokens,
+ ids_in,
+ ids_out,
+ multi_mode,
+):
+ """It should glob for workflows.
+
+ Note:
+ More advanced tests for this in the integration tests.
+
+ """
+ workflows, _multi_mode = await parse_ids_async(
+ *ids_in,
+ constraint='workflows',
+ match_workflows=True,
+ )
+ assert list(workflows) == ids_out
+ assert _multi_mode == multi_mode
+
+
+@pytest.fixture
+def src_dir(tmp_path):
+ """A src dir containing a workflow called "a"."""
+ cwd_before = Path.cwd()
+ src_dir = (tmp_path / 'a')
+ src_dir.mkdir()
+ src_file = src_dir / 'flow.cylc'
+ src_file.touch()
+ os.chdir(tmp_path)
+ yield src_dir
+ os.chdir(cwd_before)
+
+
+def test_parse_src_path(src_dir, monkeypatch):
+ """It should locate src dirs."""
+ # valid absolute path
+ workflow_id, src_path, src_file_path = _parse_src_path(
+ str(src_dir.resolve())
+ )
+ assert workflow_id == 'a'
+ assert src_path == src_dir
+ assert src_file_path == src_dir / 'flow.cylc'
+
+ # broken absolute path
+ with pytest.raises(UserInputError):
+ workflow_id, src_path, src_file_path = _parse_src_path(
+ str(src_dir.resolve()) + 'xyz'
+ )
+
+ # valid relative path
+ workflow_id, src_path, src_file_path = _parse_src_path('./a')
+ assert workflow_id == 'a'
+ assert src_path == src_dir
+ assert src_file_path == src_dir / 'flow.cylc'
+
+ # broken relative path
+ with pytest.raises(UserInputError):
+ _parse_src_path('./xxx')
+
+ # relative '.' (invalid)
+ with pytest.raises(WorkflowFilesError) as exc_ctx:
+ workflow_id, src_path, src_file_path = _parse_src_path('.')
+ assert 'No flow.cylc or suite.rc in .' in str(exc_ctx.value)
+
+ # move into the src dir
+ monkeypatch.chdir(src_dir)
+
+ # relative '.' (valid)
+ workflow_id, src_path, src_file_path = _parse_src_path('.')
+ assert workflow_id == 'a'
+ assert src_path == src_dir
+ assert src_file_path == src_dir / 'flow.cylc'
+
+ # relative './'
+ workflow_id, src_path, src_file_path = _parse_src_path('./flow.cylc')
+ assert workflow_id == 'a'
+ assert src_path == src_dir
+ assert src_file_path == src_dir / 'flow.cylc'
+
+
+@pytest.mark.asyncio
+async def test_parse_ids_src_path(src_dir):
+ workflows, src_path = await parse_ids_async(
+ './a',
+ src=True,
+ constraint='workflows',
+ )
+ assert workflows == {'a': []}
+
+
+@pytest.mark.asyncio
+@pytest.mark.parametrize(
+ 'ids_in,error_msg',
+ [
+ (
+ ['/home/me/whatever'],
+ 'Invalid Cylc identifier: /home/me/whatever',
+ ),
+ (
+ ['foo/..'],
+ 'cannot be a path that points to the cylc-run directory or above',
+ ),
+ (
+ ['foo/'],
+ 'Invalid Cylc identifier',
+ ),
+ (
+ ['~alice/foo'],
+ "Operating on others users' workflows is not supported",
+ ),
+ ]
+)
+async def test_parse_ids_invalid_ids(ids_in, error_msg):
+ """It should error for invalid IDs."""
+ with pytest.raises(Exception) as exc_ctx:
+ await parse_ids_async(
+ *ids_in,
+ constraint='workflows',
+ )
+ assert error_msg in str(exc_ctx.value)
+
+
+@pytest.mark.asyncio
+async def test_parse_ids_file(tmp_run_dir):
+ """It should reject IDs that are paths to files."""
+ tmp_path = tmp_run_dir('x')
+ tmp_file = tmp_path / 'tmpfile'
+ tmp_file.touch()
+ (tmp_path / WorkflowFiles.FLOW_FILE).touch()
+ # using a directory should work
+ await parse_ids_async(
+ str(tmp_path.relative_to(get_cylc_run_dir())),
+ constraint='workflows',
+ )
+ with pytest.raises(Exception) as exc_ctx:
+ # using a file should not
+ await parse_ids_async(
+ str(tmp_file.relative_to(get_cylc_run_dir())),
+ constraint='workflows',
+ )
+ assert 'Workflow ID cannot be a file' in str(exc_ctx.value)
+
+
+@pytest.mark.asyncio
+async def test_parse_ids_constraint():
+ """It should validate input against the constraint."""
+ # constraint: workflows
+ await parse_ids_async('a//', constraint='workflows')
+ with pytest.raises(UserInputError):
+ await parse_ids_async('a//b', constraint='workflows')
+ # constraint: tasks
+ await parse_ids_async('a//b', constraint='tasks')
+ with pytest.raises(UserInputError):
+ await parse_ids_async('a//', constraint='tasks')
+ # constraint: mixed
+ await parse_ids_async('a//', constraint='mixed')
+ await parse_ids_async('a//b', constraint='mixed')
+ # constraint: invalid
+ with pytest.raises(ValueError):
+ await parse_ids_async('foo', constraint='bar')
+
+
+@pytest.mark.asyncio
+async def test_parse_ids_src_run(abc_src_dir, tmp_run_dir):
+ """It should locate the flow file when src=True."""
+ # locate flow file for a src workflow
+ workflows, flow_file_path = await parse_ids_async(
+ './a',
+ src=True,
+ constraint='workflows',
+ )
+ assert list(workflows) == ['a']
+ assert flow_file_path == abc_src_dir / 'a' / WorkflowFiles.FLOW_FILE
+
+ # locate flow file for a run workflow
+ run_dir = tmp_run_dir('b')
+ workflows, flow_file_path = await parse_ids_async(
+ 'b',
+ src=True,
+ constraint='workflows',
+ )
+ assert list(workflows) == ['b']
+ assert flow_file_path == run_dir / WorkflowFiles.FLOW_FILE
+
+
+def test_validate_constraint():
+ """It should validate tokens against the constraint."""
+ # constraint=workflows
+ _validate_constraint(Tokens(workflow='a'), constraint='workflows')
+ with pytest.raises(UserInputError):
+ _validate_constraint(Tokens(cycle='a'), constraint='workflows')
+ with pytest.raises(UserInputError):
+ _validate_constraint(Tokens(), constraint='workflows')
+ # constraint=tasks
+ _validate_constraint(Tokens(cycle='a'), constraint='tasks')
+ with pytest.raises(UserInputError):
+ _validate_constraint(Tokens(workflow='a'), constraint='tasks')
+ with pytest.raises(UserInputError):
+ _validate_constraint(Tokens(), constraint='tasks')
+ # constraint=mixed
+ _validate_constraint(Tokens(workflow='a'), constraint='mixed')
+ _validate_constraint(Tokens(cycle='a'), constraint='mixed')
+ with pytest.raises(UserInputError):
+ _validate_constraint(Tokens(), constraint='mixed')
+
+
+def test_validate_workflow_ids(tmp_run_dir):
+ _validate_workflow_ids(Tokens('workflow'), src_path='')
+ with pytest.raises(UserInputError):
+ _validate_workflow_ids(Tokens('~alice/workflow'), src_path='')
+ run_dir = tmp_run_dir('b')
+ with pytest.raises(UserInputError):
+ _validate_workflow_ids(
+ Tokens('workflow'),
+ src_path=run_dir / 'flow.cylc',
+ )
+
+
+def test_validate_number():
+ _validate_number(Tokens('a'), max_workflows=1)
+ with pytest.raises(UserInputError):
+ _validate_number(Tokens('a'), Tokens('b'), max_workflows=1)
+ t1 = Tokens(cycle='1')
+ t2 = Tokens(cycle='2')
+ _validate_number(t1, max_tasks=1)
+ with pytest.raises(UserInputError):
+ _validate_number(t1, t2, max_tasks=1)
+
+
+@pytest.fixture
+def no_scan(monkeypatch):
+ """Disable the filesystem part of scan."""
+
+ @pipe
+ async def _scan():
+ # something that looks like scan but doesn't do anything
+ yield
+
+ monkeypatch.setattr('cylc.flow.id_cli.scan', _scan)
+
+
+@pytest.mark.asyncio
+async def test_expand_workflow_tokens_impl_selector(no_scan):
+ """It should reject filters it can't handle."""
+ tokens = tokenise('~user/*')
+ await _expand_workflow_tokens([tokens])
+ tokens['workflow_sel'] = 'stopped'
+ with pytest.raises(UserInputError):
+ await _expand_workflow_tokens([tokens])
diff --git a/tests/unit/test_id_match.py b/tests/unit/test_id_match.py
new file mode 100644
index 00000000000..5497908d593
--- /dev/null
+++ b/tests/unit/test_id_match.py
@@ -0,0 +1,297 @@
+# THIS FILE IS PART OF THE CYLC WORKFLOW ENGINE.
+# Copyright (C) NIWA & British Crown (Met Office) & Contributors.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+from types import SimpleNamespace
+
+import pytest
+
+from cylc.flow.id import IDTokens, Tokens
+from cylc.flow.id_match import filter_ids
+from cylc.flow.task_pool import Pool
+
+
+@pytest.fixture
+def task_pool():
+ def _task_proxy(id_, hier):
+ tokens = Tokens(id_, relative=True)
+ itask = SimpleNamespace()
+ itask.id_ = id_
+ itask.point = int(tokens['cycle'])
+ itask.state = SimpleNamespace()
+ itask.state.status = tokens['task_sel']
+ itask.tdef = SimpleNamespace()
+ itask.tdef.name = tokens['task']
+ if tokens['task'] in hier:
+ hier = hier[tokens['task']]
+ else:
+ hier = []
+ hier.append('root')
+ itask.tdef.namespace_hierarchy = hier
+ return itask
+
+ def _task_pool(pool, hier) -> 'Pool':
+ return {
+ cycle: {
+ id_.split(':')[0]: _task_proxy(id_, hier)
+ for id_ in ids
+ }
+ for cycle, ids in pool.items()
+ }
+
+ return _task_pool
+
+
+@pytest.mark.parametrize(
+ 'ids,matched,not_matched',
+ [
+ (
+ ['1'],
+ ['1/a:x', '1/b:x', '1/c:x'],
+ []
+ ),
+ (
+ ['2'],
+ [],
+ ['2']
+ ),
+ (
+ ['*'],
+ ['1/a:x', '1/b:x', '1/c:x'],
+ []
+ ),
+ (
+ ['1/*'],
+ ['1/a:x', '1/b:x', '1/c:x'],
+ []
+ ),
+ (
+ ['2/*'],
+ [],
+ ['2/*']
+ ),
+ (
+ ['*/*'],
+ ['1/a:x', '1/b:x', '1/c:x'],
+ []
+ ),
+ (
+ ['*/a'],
+ ['1/a:x'],
+ []
+ ),
+ (
+ ['*/z'],
+ [],
+ ['*/z']
+ ),
+ (
+ ['*/*:x'],
+ ['1/a:x', '1/b:x', '1/c:x'],
+ [],
+ ),
+ (
+ ['*/*:y'],
+ [],
+ ['*/*:y'],
+ ),
+ ]
+)
+def test_filter_ids_task_mode(task_pool, ids, matched, not_matched):
+ """Ensure tasks are returned in task mode."""
+ pool = task_pool(
+ {
+ 1: ['1/a:x', '1/b:x', '1/c:x']
+ },
+ {}
+ )
+
+ _matched, _not_matched = filter_ids([pool], ids)
+ assert [itask.id_ for itask in _matched] == matched
+ assert _not_matched == not_matched
+
+
+@pytest.mark.parametrize(
+ 'ids,matched,not_matched',
+ [
+ (
+ ['1/a'],
+ [1],
+ [],
+ ),
+ (
+ ['1/*'],
+ [1],
+ [],
+ ),
+ (
+ ['1/*:x'],
+ [1],
+ [],
+ ),
+ (
+ ['1/*:y'],
+ [],
+ ['1/*:y'],
+ ),
+ (
+ ['*/*:x'],
+ [1],
+ [],
+ ),
+ (
+ ['1/z'],
+ [],
+ ['1/z'],
+ ),
+ (
+ ['1'],
+ [1],
+ [],
+ ),
+ (
+ ['3'],
+ [],
+ ['3'],
+ ),
+ ]
+)
+def test_filter_ids_cycle_mode(task_pool, ids, matched, not_matched):
+ """Ensure cycle poinds are returned in cycle mode."""
+ pool = task_pool(
+ {
+ 1: ['1/a:x', '1/b:x'],
+ 2: ['1/a:x'],
+ 3: [],
+ },
+ {}
+ )
+
+ _matched, _not_matched = filter_ids([pool], ids, out=IDTokens.Cycle)
+ assert _matched == matched
+ assert _not_matched == not_matched
+
+
+def test_filter_ids_invalid(caplog):
+ """Ensure invalid IDs are handled elegantly."""
+ matched, not_matched = filter_ids([{}], ['#'])
+ assert matched == []
+ assert not_matched == ['#']
+ assert caplog.record_tuples == [
+ ('cylc', 30, 'No active tasks matching: #'),
+ ]
+ caplog.clear()
+ matched, not_matched = filter_ids([{}], ['#'], warn=False)
+ assert caplog.record_tuples == []
+
+
+def test_filter_ids_pattern_match_off(task_pool):
+ """Ensure filtering works when pattern matching is turned off."""
+ pool = task_pool(
+ {
+ 1: ['1/a:x'],
+ },
+ {}
+ )
+
+ _matched, _not_matched = filter_ids(
+ [pool],
+ ['1/a'],
+ out=IDTokens.Task,
+ pattern_match=False,
+ )
+ assert [itask.id_ for itask in _matched] == ['1/a:x']
+ assert _not_matched == []
+
+
+def test_filter_ids_toggle_pattern_matching(task_pool, caplog):
+ """Ensure pattern matching can be toggled on and off."""
+ pool = task_pool(
+ {
+ 1: ['1/a:x'],
+ },
+ {}
+ )
+
+ ids = ['*/*']
+
+ # ensure pattern matching works
+ _matched, _not_matched = filter_ids(
+ [pool],
+ ids,
+ out=IDTokens.Task,
+ pattern_match=True,
+ )
+ assert [itask.id_ for itask in _matched] == ['1/a:x']
+ assert _not_matched == []
+
+ # ensure pattern matching can be disabled
+ caplog.clear()
+ _matched, _not_matched = filter_ids(
+ [pool],
+ ids,
+ out=IDTokens.Task,
+ pattern_match=False,
+ )
+ assert [itask.id_ for itask in _matched] == []
+ assert _not_matched == ['*/*']
+
+ # ensure the ID is logged
+ assert len(caplog.record_tuples) == 1
+ assert '*/*' in caplog.record_tuples[0][2]
+
+
+@pytest.mark.parametrize(
+ 'ids,matched,not_matched',
+ [
+ (['1/A'], ['1/a:x'], []),
+ (['1/B'], ['1/b1:x', '1/b2:x'], []),
+ (['1/C'], [], ['1/C']),
+ (['1/root'], ['1/a:x', '1/b1:x', '1/b2:x'], []),
+ ]
+)
+def test_filter_ids_namespace_hierarchy(task_pool, ids, matched, not_matched):
+ """Ensure matching includes namespaces."""
+ pool = task_pool(
+ {
+ 1: ['1/a:x', '1/b1:x', '1/b2:x']
+ },
+ {
+ 'a': ['A'],
+ 'b1': ['B'],
+ 'b2': ['B'],
+ },
+ )
+
+ _matched, _not_matched = filter_ids(
+ [pool],
+ ids,
+ pattern_match=False,
+ )
+
+ assert [itask.id_ for itask in _matched] == matched
+ assert _not_matched == not_matched
+
+
+def test_filter_ids_out_format():
+ filter_ids({}, [], out=IDTokens.Cycle)
+ with pytest.raises(ValueError):
+ filter_ids({}, [], out=IDTokens.Job)
+
+
+def test_filter_ids_log_errors(caplog):
+ _, _not_matched = filter_ids({}, ['/////'])
+ assert _not_matched == ['/////']
+ assert caplog.record_tuples == [('cylc', 30, 'Invalid ID: /////')]
diff --git a/tests/unit/test_job_file.py b/tests/unit/test_job_file.py
index 8a66f38c256..2d654d0c1aa 100644
--- a/tests/unit/test_job_file.py
+++ b/tests/unit/test_job_file.py
@@ -82,7 +82,7 @@ def test_write(fixture_get_platform):
)
job_conf = {
"platform": platform,
- "task_id": "baa",
+ "task_id": "1/baa",
"workflow_name": "farm_noises",
"work_d": "farm_noises/work_d",
"uuid_str": "neigh",
@@ -117,7 +117,7 @@ def test_write(fixture_get_platform):
"""Test the header is correctly written"""
expected = ('#!/bin/bash -l\n#\n# ++++ THIS IS A CYLC TASK JOB SCRIPT '
- '++++\n# Workflow: farm_noises\n# Task: baa\n# Job '
+ '++++\n# Workflow: farm_noises\n# Task: 1/baa\n# Job '
'log directory: 1/baa/01\n# Job submit method: '
'background\n# Job submit command template: woof\n#'
' Execution time limit: moo')
@@ -130,7 +130,7 @@ def test_write(fixture_get_platform):
"job runner": "background",
"execution_time_limit": "moo",
"workflow_name": "farm_noises",
- "task_id": "baa",
+ "task_id": "1/baa",
"job_d": "1/baa/01"
}
@@ -151,12 +151,12 @@ def test_write(fixture_get_platform):
"directives": {"moo": "foo",
"cluck": "bar"},
"workflow_name": "farm_noises",
- "task_id": "baa",
+ "task_id": "1/baa",
"job_d": "1/test_task_id/01",
"job_file_path": "directory/job",
"execution_time_limit": 60
},
- ('\n\n# DIRECTIVES:\n# @ job_name = farm_noises.baa'
+ ('\n\n# DIRECTIVES:\n# @ job_name = farm_noises.baa.1'
'\n# @ output = directory/job.out\n# @ error = directory/'
'job.err\n# @ wall_clock_limit = 120,60\n# @ moo = foo'
'\n# @ cluck = bar\n# @ queue')
@@ -170,14 +170,17 @@ def test_write(fixture_get_platform):
},
"directives": {},
"workflow_name": "farm_noises",
- "task_id": "baa",
+ "task_id": "1/baa",
"job_d": "1/test_task_id/01",
"job_file_path": "directory/job",
"execution_time_limit": 60
},
- ('\n\n# DIRECTIVES:\n#SBATCH --job-name=baa.farm_noises\n#SBATCH '
- '--output=directory/job.out\n#SBATCH --error=directory/'
- 'job.err\n#SBATCH --time=1:00')
+ (
+ '\n\n# DIRECTIVES:\n#SBATCH '
+ '--job-name=baa.1.farm_noises\n#SBATCH '
+ '--output=directory/job.out\n#SBATCH --error=directory/'
+ 'job.err\n#SBATCH --time=1:00'
+ )
),
( # Check pbs max job name length
@@ -189,7 +192,7 @@ def test_write(fixture_get_platform):
},
"directives": {},
"workflow_name": "farm_noises",
- "task_id": "baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "task_id": "1/baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"job_d": "1/test_task_id/01",
"job_file_path": "directory/job",
"execution_time_limit": 60
@@ -208,13 +211,13 @@ def test_write(fixture_get_platform):
"-q": "queuename",
"-l": "s_vmem=1G,s_cpu=60"},
"workflow_name": "farm_noises",
- "task_id": "baa",
+ "task_id": "1/baa",
"job_d": "1/test_task_id/01",
"job_file_path": "$HOME/directory/job",
"execution_time_limit": 1000
},
- ('\n\n# DIRECTIVES:\n#$ -N farm_noises.baa\n#$ -o directory/'
+ ('\n\n# DIRECTIVES:\n#$ -N farm_noises.baa.1\n#$ -o directory/'
'job.out\n#$ -e directory/job.err\n#$ -l h_rt=0:16:40\n#$ -V\n#'
'$ -q queuename\n#$ -l s_vmem=1G,s_cpu=60'
)
@@ -478,7 +481,7 @@ def test_homeless_platform(fixture_get_platform):
"platform": fixture_get_platform({
'global init-script': 'some-script'
}),
- "task_id": "a",
+ "task_id": "1/a",
"workflow_name": "b",
"work_d": "c/d",
"uuid_str": "e",
diff --git a/tests/unit/test_task_pool.py b/tests/unit/test_task_pool.py
index 8b1fa7b71f3..763e078d6a6 100644
--- a/tests/unit/test_task_pool.py
+++ b/tests/unit/test_task_pool.py
@@ -13,22 +13,3 @@
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-
-import pytest
-from typing import Optional, Tuple
-
-from cylc.flow.task_pool import TaskPool
-
-
-@pytest.mark.parametrize(
- 'item, expected',
- [('foo', (None, 'foo', None)),
- ('foo.*', ('*', 'foo', None)),
- ('foo.*:failed', ('*', 'foo', 'failed')),
- ('foo:failed', (None, 'foo', 'failed')),
- ('3/foo:failed', ('3', 'foo', 'failed'))]
-)
-def test_parse_task_item(
- item: str, expected: Tuple[Optional[str], str, Optional[str]]
-) -> None:
- assert TaskPool._parse_task_item(item) == expected
diff --git a/tests/unit/test_workflow_files.py b/tests/unit/test_workflow_files.py
index c36483a5546..a6addaaef4c 100644
--- a/tests/unit/test_workflow_files.py
+++ b/tests/unit/test_workflow_files.py
@@ -56,7 +56,6 @@
is_forbidden,
is_installed,
parse_cli_sym_dirs,
- parse_reg,
reinstall_workflow,
search_install_source_dirs,
validate_workflow_name
@@ -336,266 +335,6 @@ def test_infer_latest_run__bad(
assert str(exc.value) == err_msg
-@pytest.fixture(scope='module')
-def setup__test_parse_reg(mod_tmp_run_dir: Callable):
- """Setup for test_parse_reg().
-
- Returns dict of template vars tmp_path, cylc_run_dir and cwd.
- """
- cylc_run_dir: Path = mod_tmp_run_dir()
- numbered_workflow = cylc_run_dir / 'numbered' / 'workflow'
- (numbered_workflow / 'run1').mkdir(parents=True)
- (numbered_workflow / 'run1' / 'flow.cylc').touch()
- (numbered_workflow / 'runN').symlink_to('run1')
- non_numbered_workflow = cylc_run_dir / 'non_numbered' / 'workflow'
- non_numbered_workflow.mkdir(parents=True)
- (non_numbered_workflow / 'flow.cylc').touch()
- (cylc_run_dir / 'empty').mkdir()
- tmp_path = cylc_run_dir.parent
- (tmp_path / 'random_file.cylc').touch()
- mock_cwd = tmp_path / 'mock-cwd'
- mock_cwd.mkdir()
- (mock_cwd / 'flow.cylc').touch()
-
- def _setup__test_parse_reg() -> Dict[str, Path]:
- return {
- 'cylc_run_dir': cylc_run_dir,
- 'tmp_path': tmp_path,
- 'cwd': mock_cwd
- }
-
- orig_cwd = os.getcwd()
- os.chdir(mock_cwd)
- yield _setup__test_parse_reg
- os.chdir(orig_cwd)
-
-
-@pytest.mark.parametrize('src', [True, False])
-@pytest.mark.parametrize(
- 'reg, expected_reg, expected_path',
- [
- pytest.param(
- 'numbered/workflow',
- 'numbered/workflow/run1',
- '{cylc_run_dir}/numbered/workflow/run1',
- id="numbered workflow"
- ),
- pytest.param(
- 'numbered/workflow/runN',
- 'numbered/workflow/run1',
- '{cylc_run_dir}/numbered/workflow/run1',
- id="numbered workflow targeted by runN"
- ),
- pytest.param(
- 'non_numbered/workflow',
- 'non_numbered/workflow',
- '{cylc_run_dir}/non_numbered/workflow',
- id="non-numbered workflow"
- ),
- ]
-)
-def test_parse_reg__ok(
- src: bool,
- reg: str,
- expected_reg: str,
- expected_path: str,
- setup__test_parse_reg: Callable
-) -> None:
- """Test parse_reg() with relative reg.
-
- Params:
- src: Arg passed to parse_reg().
- reg: Arg passed to parse_reg().
- expected_reg: Expected reg returned for both src=True|False.
- expected_path: Expected path returned for src=False (for src=True,
- flow.cylc will be appended).
- """
- paths: dict = setup__test_parse_reg()
- expected_reg = expected_reg.format(**paths)
- expected_path: Path = Path(expected_path.format(**paths))
- if src:
- expected_path = expected_path / WorkflowFiles.FLOW_FILE
- assert parse_reg(reg, src) == (expected_reg, expected_path)
-
-
-@pytest.mark.parametrize(
- 'args, expected_reg, expected_path, expected_err_msg',
- [
- pytest.param(
- ('non_exist', False),
- 'non_exist',
- '{cylc_run_dir}/non_exist',
- None,
- id="non-existent workflow, src=False"
- ),
- pytest.param(
- ('non_exist', True),
- None,
- None,
- "No flow.cylc or suite.rc in ",
- id="non-existent workflow, src=True"
- ),
- pytest.param(
- ('empty', True),
- None,
- None,
- "No flow.cylc or suite.rc in ",
- id="empty run dir, src=True"
- ),
- pytest.param(
- ('.', False),
- None,
- None,
- "invalid workflow name",
- id="dot for cwd, src=False"
- ),
- pytest.param(
- ('.', True),
- '{cwd}',
- '{cwd}/flow.cylc',
- None,
- id="dot for cwd, src=True"
- ),
- pytest.param(
- ('non_numbered/workflow/flow.cylc', False),
- None,
- None,
- "Workflow name must refer to a directory",
- id="reg refers to a file, src=False"
- ),
- pytest.param(
- ('non_numbered/workflow/flow.cylc', True),
- 'non_numbered/workflow',
- '{cylc_run_dir}/non_numbered/workflow/flow.cylc',
- None,
- id="reg refers to a file, src=True"
- ),
- pytest.param(
- ('{cylc_run_dir}/non_numbered/workflow', False),
- None,
- None,
- "workflow name cannot be an absolute path",
- id="reg is absolute path, src=False"
- ),
- pytest.param(
- ('{cylc_run_dir}/non_numbered/workflow', True),
- 'non_numbered/workflow',
- '{cylc_run_dir}/non_numbered/workflow/flow.cylc',
- None,
- id="reg is absolute path, src=True"
- ),
- pytest.param(
- ('{tmp_path}/random_file.cylc', True),
- '{tmp_path}',
- '{tmp_path}/random_file.cylc',
- None,
- id="reg is absolute path not in ~/cylc-run, src=True"
- ),
- pytest.param(
- ('foo/../../random_file.cylc', False),
- None,
- None,
- "cannot be a path that points to the cylc-run directory or above",
- id="reg points to path above, src=False"
- ),
- pytest.param(
- ('foo/../../random_file.cylc', True),
- '{tmp_path}',
- '{tmp_path}/random_file.cylc',
- None,
- id="reg points to path above, src=True"
- ),
- ]
-)
-def test_parse_reg__various(
- args: Tuple[str, bool],
- expected_reg: Optional[str],
- expected_path: Optional[str],
- expected_err_msg: Optional[str],
- setup__test_parse_reg: Callable
-) -> None:
- """Test parse_reg() with various combinations of reg and src.
-
- Params:
- args: Args passed to parse_reg().
- expected_reg: Expected reg returned.
- expected_path: Expected path returned.
- expected_err_msg: If an exception is expected, text that is expected
- to be contained in the message.
- """
- paths: Dict[str, Path] = setup__test_parse_reg()
- reg, src = args
- reg = reg.format(**paths)
-
- if expected_err_msg:
- with pytest.raises(WorkflowFilesError) as exc_info:
- parse_reg(reg, src)
- assert expected_err_msg in str(exc_info.value)
- else:
- assert expected_reg is not None
- assert expected_path is not None
- expected_reg = expected_reg.format(**paths)
- expected_path = expected_path.format(**paths)
- assert parse_reg(reg, src) == (expected_reg, Path(expected_path))
-
-
-@pytest.mark.parametrize(
- 'reg_includes_flow_file', [True, False]
-)
-@pytest.mark.parametrize(
- 'reg, clash_msg_expected',
- [('darmok/jalad', True),
- ('./darmok/jalad', False)]
-)
-def test_parse_reg__clash(
- reg: str,
- clash_msg_expected: bool,
- reg_includes_flow_file: bool,
- tmp_run_dir: Callable, tmp_path: Path, monkeypatch: pytest.MonkeyPatch,
- caplog: pytest.LogCaptureFixture
-) -> None:
- """Test parse_reg() with src=True and a reg that exists both under cwd
- and ~/cylc-run
-
- Params:
- reg: Workflow reg arg.
- clash_msg_expected: Whether the reg clash message should get logged.
- reg_includes_flow_file: Whether to add '/flow.cylc' on the end of the
- reg arg passed to parse_reg().
- """
- caplog.set_level(logging.WARNING, CYLC_LOG)
- FLOW_FILE = WorkflowFiles.FLOW_FILE
- run_dir: Path = tmp_run_dir(reg)
- cwd = tmp_path / 'mock-cwd'
- (cwd / reg).mkdir(parents=True)
- (cwd / reg / FLOW_FILE).touch()
- monkeypatch.chdir(cwd)
-
- reg_arg = os.path.join(reg, FLOW_FILE) if reg_includes_flow_file else reg
- if reg.startswith(f"{os.curdir}{os.sep}"):
- reg = reg[2:]
- # The workflow file relative to cwd should take precedence
- assert parse_reg(reg_arg, src=True) == (
- str(cwd / reg),
- cwd / reg / FLOW_FILE
- )
- # If reg doesn't begin with './', it should warn that it also found a
- # workflow in ~/cylc-run but didn't use it
- if clash_msg_expected:
- expected_warning = REG_CLASH_MSG.format(
- os.path.join(reg, FLOW_FILE),
- run_dir.relative_to(tmp_path / 'cylc-run') / FLOW_FILE
- )
- assert expected_warning in caplog.messages
- else:
- assert caplog.record_tuples == []
- caplog.clear()
- # Now test that no warning when cwd == ~/cylc-run
- monkeypatch.chdir(tmp_path / 'cylc-run')
- assert parse_reg(reg_arg, src=True) == (reg, run_dir / FLOW_FILE)
- assert caplog.record_tuples == []
-
-
@pytest.mark.parametrize(
'reg, stopped, err, err_msg',
[
@@ -754,89 +493,6 @@ def mock_err(*args, **kwargs):
assert "Cannot remove running workflow" in str(exc.value)
-@pytest.mark.asyncio
-def test_init_clean__runN(
- monkeymock: MonkeyMock, tmp_run_dir: Callable
-):
- """Test that init_clean() resolves the runN symlink"""
- # Setup
- run_dir: Path = tmp_run_dir('coruscant/run2')
- (run_dir.parent / 'runN').symlink_to(run_dir.name)
- tmp_run_dir('coruscant/run1')
- mock_clean = monkeymock('cylc.flow.workflow_files.clean', spec=clean)
- mock_remote_clean = monkeymock('cylc.flow.workflow_files.remote_clean')
- # Test
- # runN should be resolved
- init_clean('coruscant/runN', opts=CleanOptions())
- mock_clean.assert_called_once_with('coruscant/run2', run_dir, None)
- assert mock_remote_clean.called is False
- # It should not infer run number if runN not explicitly given
- with pytest.raises(WorkflowFilesError) as exc_info:
- init_clean('coruscant', opts=CleanOptions())
- assert "contains the following workflows" in str(exc_info.value)
-
-
-@pytest.mark.asyncio
-@pytest.mark.parametrize('number_of_runs', [1, 2])
-@pytest.mark.parametrize(
- 'force_opt',
- [pytest.param(False, id="normal"),
- pytest.param(True, id="--force")]
-)
-def test_init_clean__multiple_runs(
- force_opt: bool,
- number_of_runs: int,
- tmp_run_dir: Callable, monkeymock: MonkeyMock,
- caplog: pytest.LogCaptureFixture
-) -> None:
- """Test init_clean() for workflow dirs that contain 1 or more run dirs."""
- # -- Setup --
- caplog.set_level(logging.WARNING, CYLC_LOG)
- for n in range(1, number_of_runs + 1):
- last_run_dir: Path = tmp_run_dir(f'foo/run{n}', named=True)
- workflow_dir = last_run_dir.parent # Path to cylc-run/foo
- mock_clean = monkeymock(
- 'cylc.flow.workflow_files.clean', spec=workflow_files.clean
- )
- opts = CleanOptions(force=force_opt)
- # -- Test --
- if number_of_runs > 1:
- if force_opt:
- # It should call clean() with 'foo' and log a warning
- init_clean('foo', opts)
- mock_clean.assert_called_once_with('foo', workflow_dir, None)
- msg = caplog.text
- else:
- # It should raise
- with pytest.raises(WorkflowFilesError) as exc_info:
- init_clean('foo', opts)
- msg = str(exc_info.value)
- assert "contains the following workflows" in msg
- else:
- # It should call clean() with 'foo/run1' followed by 'foo'
- init_clean('foo', opts)
- assert mock_clean.call_args_list == [
- mock.call('foo/run1', last_run_dir, None),
- mock.call('foo', workflow_dir, None)
- ]
-
-
-@pytest.mark.asyncio
-def test_init_clean__parent_rm_dirs(
- tmp_run_dir: Callable, monkeymock: MonkeyMock,
-):
- """Test that init_clean() called on a parent dir containing 1 run dir,
- with the --rm dirs option, only cleans in the run dir."""
- # Setup
- run_dir: Path = tmp_run_dir('naboo/run1')
- for p in (run_dir, run_dir.parent):
- (p / 'jarjar').mkdir()
- # Test
- init_clean('naboo', opts=CleanOptions(rm_dirs=['jarjar']))
- assert (run_dir / 'jarjar').exists() is False
- assert (run_dir.parent / 'jarjar').exists() is True
-
-
@pytest.mark.asyncio
@pytest.mark.parametrize(
'rm_dirs, expected_clean, expected_remote_clean',
diff --git a/tests/unit/tui/test_util.py b/tests/unit/tui/test_util.py
index 3d36899b973..075c528c42d 100644
--- a/tests/unit/tui/test_util.py
+++ b/tests/unit/tui/test_util.py
@@ -192,55 +192,55 @@ def test_compute_tree():
'id': 'workflow id',
'cyclePoints': [
{
- 'id': '1|family-suffix',
+ 'id': '1/family-suffix',
'cyclePoint': '1'
}
],
'familyProxies': [
{ # top level family
'name': 'FOO',
- 'id': '1|FOO',
+ 'id': '1/FOO',
'cyclePoint': '1',
- 'firstParent': {'name': 'root', 'id': '1|root'}
+ 'firstParent': {'name': 'root', 'id': '1/root'}
},
{ # nested family
'name': 'FOOT',
- 'id': '1|FOOT',
+ 'id': '1/FOOT',
'cyclePoint': '1',
- 'firstParent': {'name': 'FOO', 'id': '1|FOO'}
+ 'firstParent': {'name': 'FOO', 'id': '1/FOO'}
},
],
'taskProxies': [
{ # top level task
'name': 'pub',
- 'id': '1|pub',
- 'firstParent': {'name': 'root', 'id': '1|root'},
+ 'id': '1/pub',
+ 'firstParent': {'name': 'root', 'id': '1/root'},
'cyclePoint': '1',
'jobs': []
},
{ # child task (belongs to family)
'name': 'fan',
- 'id': '1|fan',
- 'firstParent': {'name': 'fan', 'id': '1|fan'},
+ 'id': '1/fan',
+ 'firstParent': {'name': 'fan', 'id': '1/fan'},
'cyclePoint': '1',
'jobs': []
},
{ # nested child task (belongs to incestuous family)
'name': 'fool',
- 'id': '1|fool',
- 'firstParent': {'name': 'FOOT', 'id': '1|FOOT'},
+ 'id': '1/fool',
+ 'firstParent': {'name': 'FOOT', 'id': '1/FOOT'},
'cyclePoint': '1',
'jobs': []
},
{ # a task which has jobs
'name': 'worker',
- 'id': '1|worker',
- 'firstParent': {'name': 'root', 'id': '1|root'},
+ 'id': '1/worker',
+ 'firstParent': {'name': 'root', 'id': '1/root'},
'cyclePoint': '1',
'jobs': [
- {'id': 'job3', 'submitNum': '3'},
- {'id': 'job2', 'submitNum': '2'},
- {'id': 'job1', 'submitNum': '1'}
+ {'id': '1/worker/03', 'submitNum': '3'},
+ {'id': '1/worker/02', 'submitNum': '2'},
+ {'id': '1/worker/01', 'submitNum': '1'}
]
}
]
@@ -272,15 +272,15 @@ def test_compute_tree():
for node in cycle['children']
] == [
# test alphabetical sorting
- '1|FOO',
- '1|pub',
- '1|worker'
+ '1/FOO',
+ '1/pub',
+ '1/worker'
]
# test family node
family = cycle['children'][0]
assert family['type_'] == 'family'
- assert family['id_'] == '1|FOO'
+ assert family['id_'] == '1/FOO'
assert list(family['data']) == [
'name',
'id',
@@ -292,7 +292,7 @@ def test_compute_tree():
# test nested family
nested_family = family['children'][0]
assert nested_family['type_'] == 'family'
- assert nested_family['id_'] == '1|FOOT'
+ assert nested_family['id_'] == '1/FOOT'
assert list(nested_family['data']) == [
'name',
'id',
@@ -304,7 +304,7 @@ def test_compute_tree():
# test task
task = nested_family['children'][0]
assert task['type_'] == 'task'
- assert task['id_'] == '1|fool'
+ assert task['id_'] == '1/fool'
assert list(task['data']) == [
'name',
'id',
@@ -320,15 +320,15 @@ def test_compute_tree():
job['id_']
for job in task['children']
] == [
- 'job3',
- 'job2',
- 'job1'
+ '1/worker/03',
+ '1/worker/02',
+ '1/worker/01'
]
# test job
job = task['children'][0]
assert job['type_'] == 'job'
- assert job['id_'] == 'job3'
+ assert job['id_'] == '1/worker/03'
assert list(job['data']) == [
'id',
'submitNum'
@@ -338,7 +338,7 @@ def test_compute_tree():
# test job info
job_info = job['children'][0]
assert job_info['type_'] == 'job_info'
- assert job_info['id_'] == 'job3_info'
+ assert job_info['id_'] == '1/worker/03_info'
assert list(job_info['data']) == [
'id',
'submitNum'