diff --git a/changes/issue3619.yaml b/changes/issue3619.yaml
new file mode 100644
index 0000000000..8b23031c28
--- /dev/null
+++ b/changes/issue3619.yaml
@@ -0,0 +1,2 @@
+enhancement:
+  - "Checkpoint all iterations of Looped tasks - [#3619](https://github.com/PrefectHQ/prefect/issues/3619)"
diff --git a/changes/pr3624.yaml b/changes/pr3624.yaml
new file mode 100644
index 0000000000..8b156975eb
--- /dev/null
+++ b/changes/pr3624.yaml
@@ -0,0 +1,2 @@
+fix:
+  - "Fix breaking change in flow registration with old server versions - [#3624](https://github.com/PrefectHQ/prefect/pull/3624)"
diff --git a/src/prefect/client/client.py b/src/prefect/client/client.py
index 11e81be590..9c6bfdffcf 100644
--- a/src/prefect/client/client.py
+++ b/src/prefect/client/client.py
@@ -795,17 +795,20 @@ class Client:
 
         if compressed:
             serialized_flow = compress(serialized_flow)
+
+        inputs = dict(
+            project_id=(project[0].id if project else None),
+            serialized_flow=serialized_flow,
+            set_schedule_active=set_schedule_active,
+            version_group_id=version_group_id,
+        )
+        # Add newly added inputs only when set for backwards compatibility
+        if idempotency_key is not None:
+            inputs.update(idempotency_key=idempotency_key)
+
         res = self.graphql(
             create_mutation,
-            variables=dict(
-                input=dict(
-                    project_id=(project[0].id if project else None),
-                    serialized_flow=serialized_flow,
-                    set_schedule_active=set_schedule_active,
-                    version_group_id=version_group_id,
-                    idempotency_key=idempotency_key,
-                )
-            ),
+            variables=dict(input=inputs),
             retry_on_api_error=False,
         )  # type: Any
 
diff --git a/src/prefect/engine/task_runner.py b/src/prefect/engine/task_runner.py
index 03f4faa235..056df601db 100644
--- a/src/prefect/engine/task_runner.py
+++ b/src/prefect/engine/task_runner.py
@@ -827,6 +827,7 @@ class TaskRunner(Runner):
 
         value = None
         raw_inputs = {k: r.value for k, r in inputs.items()}
+        new_state = None
         try:
             self.logger.debug(
                 "Task '{name}': Calling task.run() method...".format(
@@ -859,11 +860,10 @@ class TaskRunner(Runner):
         except signals.LOOP as exc:
             new_state = exc.state
             assert isinstance(new_state, Looped)
-            new_state.result = self.result.from_value(value=new_state.result)
+            value = new_state.result
             new_state.message = exc.state.message or "Task is looping ({})".format(
                 new_state.loop_count
             )
-            return new_state
 
         # checkpoint tasks if a result is present, except for when the user has opted out by
         # disabling checkpointing
@@ -884,6 +884,10 @@ class TaskRunner(Runner):
         else:
             result = self.result.from_value(value=value)
 
+        if new_state is not None:
+            new_state.result = result
+            return new_state
+
         state = Success(result=result, message="Task run succeeded.")
         return state
 

diff --git a/tests/engine/test_task_runner.py b/tests/engine/test_task_runner.py
index f6f4551a13..841623656d 100644
--- a/tests/engine/test_task_runner.py
+++ b/tests/engine/test_task_runner.py
@@ -2165,7 +2165,7 @@ class TestLooping:
         assert state.result == 3
 
     @pytest.mark.parametrize("checkpoint", [True, None])
-    def test_looping_only_checkpoints_the_final_result(self, checkpoint):
+    def test_looping_checkpoints_all_iterations(self, checkpoint):
         class Handler(ResultHandler):
             data = []
 
@@ -2189,7 +2189,7 @@ class TestLooping:
         state = TaskRunner(my_task).run(context={"checkpointing": True})
         assert state.is_successful()
         assert state.result == 3
-        assert handler.data == [3]
+        assert handler.data == [1, 2, 3]
 
     def test_looping_works_with_retries(self):
         @prefect.task(max_retries=2, retry_delay=timedelta(seconds=0))

Templated results are overwritten on raised LOOP
## Opened from the [Prefect Public Slack Community](https://join.slack.com/t/prefect-public/shared_invite/enQtNzE5OTU3OTQwNzc1LTQ5M2FkZmQzZjI0ODg1ZTBmOTc0ZjVjYWFjMWExZDAyYzBmYjVmMTE1NTQ1Y2IxZTllOTc4MmI3NzYxMDlhYWU)

**me1548**: Hey, I’m trying to use the `LOOP` and write the results on each iteration as documented <https://docs.prefect.io/core/advanced_tutorials/using-results.html#looping|here>. However, it doesn’t seem to work. It only writes the last iteration.


```
@task()
def log_output(result):
    logger = prefect.context.get('logger')
    <http://logger.info|logger.info>(result)


@task(result=LocalResult(dir='./results', location='test-{task_loop_count}.prefect'))
def loop_test():
    loop_payload = prefect.context.get("task_loop_result", {})

    n = loop_payload.get("n", 1)
    print(n)

    if n &gt; 5:
        return n

    raise LOOP(f'Iteration {n}', result=dict(n=n+1))


with Flow("Postgres -&gt; BigQuery") as flow:
    x = loop_test()
    log_output(x)
```

_See output logging and diagnostics in thread_

**me1548**: 
```
[2020-11-05 07:11:07] INFO - prefect.FlowRunner | Beginning Flow run for 'Postgres -&gt; BigQuery'
[2020-11-05 07:11:07] DEBUG - prefect.FlowRunner | Using executor type LocalExecutor
[2020-11-05 07:11:07] DEBUG - prefect.FlowRunner | Flow 'Postgres -&gt; BigQuery': Handling state change from Scheduled to Running
[2020-11-05 07:11:07] INFO - prefect.TaskRunner | Task 'loop_test': Starting task run...
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'loop_test': Handling state change from Pending to Running
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'loop_test': Calling task.run() method...
1
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'loop_test': Handling state change from Running to Looped
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'loop_test': Handling state change from Pending to Running
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'loop_test': Calling task.run() method...
2
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'loop_test': Handling state change from Running to Looped
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'loop_test': Handling state change from Pending to Running
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'loop_test': Calling task.run() method...
3
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'loop_test': Handling state change from Running to Looped
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'loop_test': Handling state change from Pending to Running
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'loop_test': Calling task.run() method...
4
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'loop_test': Handling state change from Running to Looped
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'loop_test': Handling state change from Pending to Running
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'loop_test': Calling task.run() method...
5
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'loop_test': Handling state change from Running to Looped
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'loop_test': Handling state change from Pending to Running
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'loop_test': Calling task.run() method...
6
[2020-11-05 07:11:07] DEBUG - prefect.LocalResult | Starting to upload result to test-6.prefect...
[2020-11-05 07:11:07] DEBUG - prefect.LocalResult | Finished uploading result to /Users/joell/joell.dev/Scraper/scraper-next/prefect-sync/results/test-6.prefect...
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'loop_test': Handling state change from Running to Success
[2020-11-05 07:11:07] INFO - prefect.TaskRunner | Task 'loop_test': Finished task run for task with final state: 'Success'
[2020-11-05 07:11:07] INFO - prefect.TaskRunner | Task 'log_output': Starting task run...
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'log_output': Handling state change from Pending to Running
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'log_output': Calling task.run() method...
[2020-11-05 07:11:07] INFO - prefect.log_output | 6
[2020-11-05 07:11:07] DEBUG - prefect.TaskRunner | Task 'log_output': Handling state change from Running to Success
[2020-11-05 07:11:07] INFO - prefect.TaskRunner | Task 'log_output': Finished task run for task with final state: 'Success'
[2020-11-05 07:11:07] INFO - prefect.FlowRunner | Flow run SUCCESS: all reference tasks succeeded
[2020-11-05 07:11:07] DEBUG - prefect.FlowRunner | Flow 'Postgres -&gt; BigQuery': Handling state change from Running to Success
{
  "config_overrides": {},
  "env_vars": [
    "PREFECT__LOGGING__LEVEL",
    "PREFECT__CONTEXT__SECRETS__POSTGRES",
    "PREFECT__CONTEXT__SECRETS__GCP_CREDENTIALS",
    "PREFECT__FLOWS__CHECKPOINTING"
  ],
  "flow_information": {
    "environment": {
      "executor": true,
      "labels": true,
      "logger": true,
      "metadata": {
        "image": true
      },
      "on_exit": false,
      "on_start": false,
      "type": "LocalEnvironment"
    },
    "result": {
      "type": "LocalResult"
    },
    "schedule": {},
    "storage": {
      "_flows": {
        "Postgres -&gt; BigQuery": true
      },
      "_labels": false,
      "add_default_labels": true,
      "directory": true,
      "flows": {
        "Postgres -&gt; BigQuery": true
      },
      "path": false,
      "result": true,
      "secrets": false,
      "stored_as_script": false,
      "type": "Local"
    },
    "task_count": 2
  },
  "system_information": {
    "platform": "macOS-10.15.7-x86_64-i386-64bit",
    "prefect_backend": "server",
    "prefect_version": "0.13.13",
    "python_version": "3.8.6"
  }
}
```


**znicholasbrown**: Hi <@U01DW286KGC> - thanks for reporting this - I can confirm each iteration of the loop is overwriting the previous result as <https://docs.prefect.io/core/advanced_tutorials/using-results.html#looping|described here>, despite a templated location being present (this holds true for strings and callables on the location kwarg).

**znicholasbrown**: <@ULVA73B9P> open "Templated results are overwritten on raised LOOP"

Original thread can be found [here](https://prefect-community.slack.com/archives/CL09KU1K7/p1604560491067100?thread_ts=1604560491.067100&cid=CL09KU1K7).


tests/engine/test_task_runner.py::TestLooping::test_looping_checkpoints_all_iterations[True] tests/engine/test_task_runner.py::TestLooping::test_looping_checkpoints_all_iterations[None]
tests/engine/test_task_runner.py::test_task_runner_has_logger tests/engine/test_task_runner.py::test_task_that_succeeds_is_marked_success tests/engine/test_task_runner.py::test_task_that_raises_success_is_marked_success tests/engine/test_task_runner.py::test_task_that_has_an_error_is_marked_fail tests/engine/test_task_runner.py::test_task_that_raises_fail_is_marked_fail tests/engine/test_task_runner.py::test_task_that_fails_gets_retried_up_to_max_retry_time tests/engine/test_task_runner.py::test_task_that_raises_retry_has_start_time_recognized tests/engine/test_task_runner.py::test_task_that_raises_retry_with_naive_datetime_is_assumed_UTC tests/engine/test_task_runner.py::test_task_that_raises_retry_gets_retried_even_if_max_retries_is_set tests/engine/test_task_runner.py::test_task_that_raises_skip_gets_skipped tests/engine/test_task_runner.py::test_task_that_has_upstream_skip_gets_skipped_with_informative_message tests/engine/test_task_runner.py::test_task_that_is_running_doesnt_run tests/engine/test_task_runner.py::test_running_task_that_already_has_finished_state_doesnt_run tests/engine/test_task_runner.py::test_task_runner_preserves_error_type tests/engine/test_task_runner.py::test_task_runner_raise_on_exception_when_task_errors tests/engine/test_task_runner.py::test_task_runner_does_not_raise_when_task_signals tests/engine/test_task_runner.py::test_task_runner_does_not_raise_on_exception_when_endrun_raised_by_mapping tests/engine/test_task_runner.py::test_task_runner_does_not_raise_on_exception_when_endrun_raised_by_state[state0] tests/engine/test_task_runner.py::test_task_runner_does_not_raise_on_exception_when_endrun_raised_by_state[state1] tests/engine/test_task_runner.py::test_task_runner_accepts_dictionary_of_edges tests/engine/test_task_runner.py::test_timeout_actually_stops_execution tests/engine/test_task_runner.py::test_task_runner_can_handle_timeouts_by_default tests/engine/test_task_runner.py::test_task_runner_handles_secrets tests/engine/test_task_runner.py::test_task_that_starts_failed_doesnt_get_retried tests/engine/test_task_runner.py::test_runner_checks_hashed_inputs_correctly tests/engine/test_task_runner.py::TestContext::test_task_runner_inits_with_current_context tests/engine/test_task_runner.py::TestInitializeRun::test_states_without_run_count[state0] tests/engine/test_task_runner.py::TestInitializeRun::test_states_without_run_count[state1] tests/engine/test_task_runner.py::TestInitializeRun::test_states_without_run_count[state2] tests/engine/test_task_runner.py::TestInitializeRun::test_states_without_run_count[state3] tests/engine/test_task_runner.py::TestInitializeRun::test_states_without_run_count[state4] tests/engine/test_task_runner.py::TestInitializeRun::test_states_without_run_count[state5] tests/engine/test_task_runner.py::TestInitializeRun::test_states_with_run_count[state0] tests/engine/test_task_runner.py::TestInitializeRun::test_states_with_run_count[state1] tests/engine/test_task_runner.py::TestInitializeRun::test_states_with_run_count[state2] tests/engine/test_task_runner.py::TestInitializeRun::test_states_with_run_count[state3] tests/engine/test_task_runner.py::TestInitializeRun::test_task_runner_puts_resume_in_context_if_state_is_resume tests/engine/test_task_runner.py::TestInitializeRun::test_task_runner_puts_checkpointing_in_context tests/engine/test_task_runner.py::TestInitializeRun::test_task_runner_puts_tags_in_context tests/engine/test_task_runner.py::TestInitializeRun::test_task_runner_doesnt_put_resume_in_context_if_state_is_not_resume[state0] tests/engine/test_task_runner.py::TestInitializeRun::test_task_runner_doesnt_put_resume_in_context_if_state_is_not_resume[state1] tests/engine/test_task_runner.py::TestInitializeRun::test_task_runner_doesnt_put_resume_in_context_if_state_is_not_resume[state2] tests/engine/test_task_runner.py::TestInitializeRun::test_task_runner_doesnt_put_resume_in_context_if_state_is_not_resume[state3] tests/engine/test_task_runner.py::TestInitializeRun::test_task_runner_doesnt_put_resume_in_context_if_state_is_not_resume[state4] tests/engine/test_task_runner.py::TestInitializeRun::test_task_runner_doesnt_put_resume_in_context_if_state_is_not_resume[state5] tests/engine/test_task_runner.py::TestInitializeRun::test_unwrap_submitted_states tests/engine/test_task_runner.py::TestInitializeRun::test_unwrap_queued_states tests/engine/test_task_runner.py::TestInitializeRun::test_unwrap_nested_meta_states tests/engine/test_task_runner.py::TestCheckUpstreamFinished::test_with_empty tests/engine/test_task_runner.py::TestCheckUpstreamFinished::test_with_two_finished tests/engine/test_task_runner.py::TestCheckUpstreamFinished::test_raises_with_one_unfinished tests/engine/test_task_runner.py::TestCheckUpstreamFinished::test_raises_if_mapped_upstream_retrying tests/engine/test_task_runner.py::TestCheckUpstreamFinished::test_doesnt_raise_if_mapped_upstream_complete tests/engine/test_task_runner.py::TestCheckUpstreamSkipped::test_empty tests/engine/test_task_runner.py::TestCheckUpstreamSkipped::test_unskipped_states tests/engine/test_task_runner.py::TestCheckUpstreamSkipped::test_raises_with_skipped tests/engine/test_task_runner.py::TestCheckUpstreamSkipped::test_doesnt_raise_with_skipped_and_flag_set tests/engine/test_task_runner.py::TestCheckUpstreamSkipped::test_raises_if_single_mapped_upstream_skipped tests/engine/test_task_runner.py::TestCheckUpstreamSkipped::test_doesnt_raise_if_single_mapped_upstream_skipped_and_edge_is_mapped tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_all_successful_pass tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_all_successful_fail tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_all_successful_empty tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_all_failed_pass tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_all_failed_fail tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_all_failed_empty tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_any_successful_pass tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_any_successful_fail tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_any_successful_empty tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_any_failed_pass tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_any_failed_fail tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_any_failed_empty tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_all_finished_pass tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_all_finished_fail tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_all_finished_empty tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_manual_only tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_manual_only_empty tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_manual_passes_when_context_is_resume tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_custom_trigger_function_raise tests/engine/test_task_runner.py::TestCheckTaskTrigger::test_custom_trigger_returns_false tests/engine/test_task_runner.py::TestCheckTaskReady::test_ready_states[state0] tests/engine/test_task_runner.py::TestCheckTaskReady::test_ready_states[state1] tests/engine/test_task_runner.py::TestCheckTaskReady::test_ready_states[state2] tests/engine/test_task_runner.py::TestCheckTaskReady::test_ready_states[state3] tests/engine/test_task_runner.py::TestCheckTaskReady::test_ready_states[state4] tests/engine/test_task_runner.py::TestCheckTaskReady::test_not_ready_doesnt_run[state0] tests/engine/test_task_runner.py::TestCheckTaskReady::test_not_ready_doesnt_run[state1] tests/engine/test_task_runner.py::TestCheckTaskReady::test_not_ready_doesnt_run[state2] tests/engine/test_task_runner.py::TestCheckTaskReady::test_not_ready_doesnt_run[state3] tests/engine/test_task_runner.py::TestCheckTaskReady::test_not_ready_doesnt_run[state4] tests/engine/test_task_runner.py::TestGetTaskInputs::test_get_empty_inputs tests/engine/test_task_runner.py::TestGetTaskInputs::test_get_unkeyed_inputs tests/engine/test_task_runner.py::TestGetTaskInputs::test_get_inputs_from_upstream tests/engine/test_task_runner.py::TestGetTaskInputs::test_get_inputs_from_upstream_with_non_key_edges tests/engine/test_task_runner.py::TestGetTaskInputs::test_get_inputs_from_upstream_failed tests/engine/test_task_runner.py::TestGetTaskInputs::test_get_inputs_from_upstream_mapped tests/engine/test_task_runner.py::TestCheckTaskCached::test_not_cached[state0] tests/engine/test_task_runner.py::TestCheckTaskCached::test_not_cached[state1] tests/engine/test_task_runner.py::TestCheckTaskCached::test_not_cached[state2] tests/engine/test_task_runner.py::TestCheckTaskCached::test_cached_same_inputs tests/engine/test_task_runner.py::TestCheckTaskCached::test_cached_different_inputs tests/engine/test_task_runner.py::TestCheckTaskCached::test_cached_duration tests/engine/test_task_runner.py::TestCheckTaskCached::test_cached_duration_fail tests/engine/test_task_runner.py::TestCheckTaskCached::test_reads_result_from_context_if_cached_valid tests/engine/test_task_runner.py::TestCheckTaskCached::test_state_kwarg_is_prioritized_over_context_caches tests/engine/test_task_runner.py::TestCheckTaskCached::test_reads_result_from_context_with_cache_key_if_cached_valid tests/engine/test_task_runner.py::TestCheckTaskCached::test_all_of_run_context_is_available_to_custom_cache_validators tests/engine/test_task_runner.py::TestSetTaskRunning::test_pending[state0] tests/engine/test_task_runner.py::TestSetTaskRunning::test_inputs_are_cached[state0] tests/engine/test_task_runner.py::TestSetTaskRunning::test_not_pending[state0] tests/engine/test_task_runner.py::TestSetTaskRunning::test_not_pending[state1] tests/engine/test_task_runner.py::TestSetTaskRunning::test_not_pending[state2] tests/engine/test_task_runner.py::TestSetTaskRunning::test_not_pending[state3] tests/engine/test_task_runner.py::TestRunTaskStep::test_running_state tests/engine/test_task_runner.py::TestRunTaskStep::test_not_running_state[state0] tests/engine/test_task_runner.py::TestRunTaskStep::test_not_running_state[state1] tests/engine/test_task_runner.py::TestRunTaskStep::test_not_running_state[state2] tests/engine/test_task_runner.py::TestRunTaskStep::test_not_running_state[state3] tests/engine/test_task_runner.py::TestRunTaskStep::test_raise_success_signal tests/engine/test_task_runner.py::TestRunTaskStep::test_raise_fail_signal tests/engine/test_task_runner.py::TestRunTaskStep::test_raise_loop_signal tests/engine/test_task_runner.py::TestRunTaskStep::test_raise_loop_signal_with_custom_message tests/engine/test_task_runner.py::TestRunTaskStep::test_raise_skip_signal tests/engine/test_task_runner.py::TestRunTaskStep::test_raise_pause_signal tests/engine/test_task_runner.py::TestRunTaskStep::test_run_with_error tests/engine/test_task_runner.py::TestRunTaskStep::test_inputs tests/engine/test_task_runner.py::TestRunTaskStep::test_invalid_inputs tests/engine/test_task_runner.py::TestRunTaskStep::test_returns_success_with_hydrated_result_obj tests/engine/test_task_runner.py::TestRunTaskStep::test_returns_success_with_correct_result_type tests/engine/test_task_runner.py::TestRunTaskStep::test_success_state_without_checkpoint tests/engine/test_task_runner.py::TestRunTaskStep::test_success_state_with_checkpointing_in_config[True] tests/engine/test_task_runner.py::TestRunTaskStep::test_success_state_with_checkpointing_in_config[None] tests/engine/test_task_runner.py::TestRunTaskStep::test_result_formatting_with_checkpointing tests/engine/test_task_runner.py::TestRunTaskStep::test_result_formatting_with_custom_formatter tests/engine/test_task_runner.py::TestRunTaskStep::test_result_formatting_with_templated_inputs tests/engine/test_task_runner.py::TestRunTaskStep::test_result_formatting_with_templated_inputs_inputs_take_precedence tests/engine/test_task_runner.py::TestRunTaskStep::test_result_formatting_with_input_named_value tests/engine/test_task_runner.py::TestRunTaskStep::test_success_state_with_checkpointing_in_context[True] tests/engine/test_task_runner.py::TestRunTaskStep::test_success_state_with_checkpointing_in_context[None] tests/engine/test_task_runner.py::TestRunTaskStep::test_success_state_is_checkpointed_if_result_handler_present[True] tests/engine/test_task_runner.py::TestRunTaskStep::test_success_state_is_checkpointed_if_result_handler_present[None] tests/engine/test_task_runner.py::TestRunTaskStep::test_success_state_for_parameter tests/engine/test_task_runner.py::TestRunTaskStep::test_success_state_with_bad_result_results_in_failed_state[True] tests/engine/test_task_runner.py::TestRunTaskStep::test_success_state_with_bad_result_results_in_failed_state[None] tests/engine/test_task_runner.py::TestRunTaskStep::test_success_state_with_bad_result_and_checkpointing_disabled tests/engine/test_task_runner.py::TestCheckRetryStep::test_non_failed_states[state0] tests/engine/test_task_runner.py::TestCheckRetryStep::test_non_failed_states[state1] tests/engine/test_task_runner.py::TestCheckRetryStep::test_non_failed_states[state2] tests/engine/test_task_runner.py::TestCheckRetryStep::test_non_failed_states[state3] tests/engine/test_task_runner.py::TestCheckRetryStep::test_non_failed_states[state4] tests/engine/test_task_runner.py::TestCheckRetryStep::test_failed_zero_max_retry tests/engine/test_task_runner.py::TestCheckRetryStep::test_failed_one_max_retry tests/engine/test_task_runner.py::TestCheckRetryStep::test_failed_one_max_retry_second_run tests/engine/test_task_runner.py::TestCheckRetryStep::test_failed_retry_caches_inputs tests/engine/test_task_runner.py::TestCheckRetryStep::test_retrying_when_run_count_greater_than_max_retries tests/engine/test_task_runner.py::TestCheckRetryStep::test_retrying_with_start_time tests/engine/test_task_runner.py::TestCheckRetryStep::test_retrying_when_state_has_explicit_run_count_set tests/engine/test_task_runner.py::TestCacheResultStep::test_non_success_states_with_results[state0] tests/engine/test_task_runner.py::TestCacheResultStep::test_non_success_states_with_results[state1] tests/engine/test_task_runner.py::TestCacheResultStep::test_non_success_states_with_results[state2] tests/engine/test_task_runner.py::TestCacheResultStep::test_non_success_states_with_results[state3] tests/engine/test_task_runner.py::TestCacheResultStep::test_non_success_states_with_results[state4] tests/engine/test_task_runner.py::TestCacheResultStep::test_non_success_states[state0] tests/engine/test_task_runner.py::TestCacheResultStep::test_non_success_states[state1] tests/engine/test_task_runner.py::TestCacheResultStep::test_non_success_states[state2] tests/engine/test_task_runner.py::TestCacheResultStep::test_non_success_states[state3] tests/engine/test_task_runner.py::TestCacheResultStep::test_success_state_with_no_cache_for[all_inputs] tests/engine/test_task_runner.py::TestCacheResultStep::test_success_state_with_no_cache_for[all_parameters] tests/engine/test_task_runner.py::TestCacheResultStep::test_success_state_with_no_cache_for[duration_only] tests/engine/test_task_runner.py::TestCacheResultStep::test_success_state_with_no_cache_for[partial_inputs_only] tests/engine/test_task_runner.py::TestCacheResultStep::test_success_state_with_no_cache_for[partial_parameters_only] tests/engine/test_task_runner.py::TestCacheResultStep::test_success_state_with_cache_for tests/engine/test_task_runner.py::TestTargetExistsStep::test_check_target[state0] tests/engine/test_task_runner.py::TestTargetExistsStep::test_check_target[state1] tests/engine/test_task_runner.py::TestTargetExistsStep::test_check_target[state2] tests/engine/test_task_runner.py::TestTargetExistsStep::test_check_target[state3] tests/engine/test_task_runner.py::TestTargetExistsStep::test_check_target[state4] tests/engine/test_task_runner.py::TestTargetExistsStep::test_check_target_calls_state_handlers tests/engine/test_task_runner.py::TestTargetExistsStep::test_check_target_not_exists[state0] tests/engine/test_task_runner.py::TestTargetExistsStep::test_check_target_not_exists[state1] tests/engine/test_task_runner.py::TestTargetExistsStep::test_check_target_not_exists[state2] tests/engine/test_task_runner.py::TestTargetExistsStep::test_check_target_not_exists[state3] tests/engine/test_task_runner.py::TestTargetExistsStep::test_check_target_not_exists[state4] tests/engine/test_task_runner.py::TestTargetExistsStep::test_check_target_exists tests/engine/test_task_runner.py::TestTargetExistsStep::test_check_target_exists_multiple_checks tests/engine/test_task_runner.py::TestTargetExistsStep::test_check_target_uses_callable tests/engine/test_task_runner.py::TestTargetExistsStep::test_check_target_callable_uses_context tests/engine/test_task_runner.py::TestTargetExistsStep::test_target_respects_multiple_flow_runs tests/engine/test_task_runner.py::TestTargetExistsStep::test_target_with_callable_uses_run_context tests/engine/test_task_runner.py::TestTargetExistsStep::test_target_with_callable_uses_task_inputs tests/engine/test_task_runner.py::TestCheckScheduledStep::test_non_scheduled_states[state0] tests/engine/test_task_runner.py::TestCheckScheduledStep::test_non_scheduled_states[state1] tests/engine/test_task_runner.py::TestCheckScheduledStep::test_non_scheduled_states[state2] tests/engine/test_task_runner.py::TestCheckScheduledStep::test_non_scheduled_states[state3] tests/engine/test_task_runner.py::TestCheckScheduledStep::test_non_scheduled_states[state4] tests/engine/test_task_runner.py::TestCheckScheduledStep::test_scheduled_states_with_default_start_time[state0] tests/engine/test_task_runner.py::TestCheckScheduledStep::test_scheduled_states_with_default_start_time[state1] tests/engine/test_task_runner.py::TestCheckScheduledStep::test_scheduled_states_with_none_start_time[state0] tests/engine/test_task_runner.py::TestCheckScheduledStep::test_scheduled_states_with_future_start_time[state0] tests/engine/test_task_runner.py::TestCheckScheduledStep::test_scheduled_states_with_future_start_time[state1] tests/engine/test_task_runner.py::TestCheckScheduledStep::test_scheduled_states_with_future_start_time[state2] tests/engine/test_task_runner.py::TestCheckScheduledStep::test_scheduled_states_with_past_start_time[state0] tests/engine/test_task_runner.py::TestCheckScheduledStep::test_scheduled_states_with_past_start_time[state1] tests/engine/test_task_runner.py::TestTaskStateHandlers::test_task_handlers_are_called tests/engine/test_task_runner.py::TestTaskStateHandlers::test_task_on_failure_is_not_called tests/engine/test_task_runner.py::TestTaskStateHandlers::test_task_on_failure_is_called tests/engine/test_task_runner.py::TestTaskStateHandlers::test_task_on_trigger_failure_is_called tests/engine/test_task_runner.py::TestTaskStateHandlers::test_task_handlers_are_called_on_retry tests/engine/test_task_runner.py::TestTaskStateHandlers::test_task_handlers_can_return_none tests/engine/test_task_runner.py::TestTaskStateHandlers::test_task_handlers_are_called_on_failure tests/engine/test_task_runner.py::TestTaskStateHandlers::test_task_handlers_respect_signals tests/engine/test_task_runner.py::TestTaskStateHandlers::test_task_handlers_handle_retry_signals tests/engine/test_task_runner.py::TestTaskStateHandlers::test_multiple_task_handlers_are_called tests/engine/test_task_runner.py::TestTaskStateHandlers::test_multiple_task_handlers_are_called_in_sequence tests/engine/test_task_runner.py::TestTaskStateHandlers::test_task_handler_that_doesnt_return_state_or_none tests/engine/test_task_runner.py::TestTaskStateHandlers::test_task_handler_errors_are_logged tests/engine/test_task_runner.py::TestTaskRunnerStateHandlers::test_task_runner_handlers_are_called tests/engine/test_task_runner.py::TestTaskRunnerStateHandlers::test_task_runner_handlers_are_called_on_retry tests/engine/test_task_runner.py::TestTaskRunnerStateHandlers::test_task_runner_handlers_are_called_on_triggerfailed tests/engine/test_task_runner.py::TestTaskRunnerStateHandlers::test_task_runner_handlers_are_called_on_mapped_parent tests/engine/test_task_runner.py::TestTaskRunnerStateHandlers::test_multiple_task_runner_handlers_are_called tests/engine/test_task_runner.py::TestTaskRunnerStateHandlers::test_multiple_task_runner_handlers_are_called_in_sequence tests/engine/test_task_runner.py::TestTaskRunnerStateHandlers::test_task_runner_handler_that_doesnt_return_state_or_none tests/engine/test_task_runner.py::TestTaskRunnerStateHandlers::test_task_handler_that_raises_signal_is_trapped tests/engine/test_task_runner.py::TestTaskRunnerStateHandlers::test_task_handler_that_has_error_is_trapped tests/engine/test_task_runner.py::TestCheckTaskReadyToMapStep::test_run_mapped_returns_mapped[state0] tests/engine/test_task_runner.py::TestCheckTaskReadyToMapStep::test_run_mapped_returns_mapped[state1] tests/engine/test_task_runner.py::TestCheckTaskReadyToMapStep::test_run_mapped_returns_mapped[state2] tests/engine/test_task_runner.py::TestCheckTaskReadyToMapStep::test_run_mapped_returns_failed_if_no_success_upstream tests/engine/test_task_runner.py::TestCheckTaskReadyToMapStep::test_run_mapped_sets_n_map_states tests/engine/test_task_runner.py::TestCheckTaskReadyToMapStep::test_run_mapped_handles_upstream_mapped_states tests/engine/test_task_runner.py::test_task_runner_skips_upstream_check_for_parent_mapped_task tests/engine/test_task_runner.py::test_task_runner_converts_pause_signal_to_paused_state_for_manual_only_triggers tests/engine/test_task_runner.py::test_task_runner_passes_manual_only_trigger_when_resume_state_is_passed tests/engine/test_task_runner.py::test_task_runner_converts_pause_signal_to_paused_state_for_internally_raised_pauses tests/engine/test_task_runner.py::test_task_runner_bypasses_pause_when_requested tests/engine/test_task_runner.py::test_mapped_tasks_parents_and_children_respond_to_individual_triggers tests/engine/test_task_runner.py::test_mapped_tasks_parent_regenerates_child_pipeline tests/engine/test_task_runner.py::test_retry_has_updated_metadata tests/engine/test_task_runner.py::test_pending_raised_from_endrun_has_updated_metadata tests/engine/test_task_runner.py::test_failures_arent_checkpointed[True] tests/engine/test_task_runner.py::test_failures_arent_checkpointed[None] tests/engine/test_task_runner.py::test_skips_arent_checkpointed[True] tests/engine/test_task_runner.py::test_skips_arent_checkpointed[None] tests/engine/test_task_runner.py::test_task_runner_provides_logger tests/engine/test_task_runner.py::TestLooping::test_looping_works tests/engine/test_task_runner.py::TestLooping::test_looping_calls_state_handlers_appropriately tests/engine/test_task_runner.py::TestLooping::test_looping_doesnt_aggressively_log_task_starting tests/engine/test_task_runner.py::TestLooping::test_looping_doesnt_aggressively_log_task_finished tests/engine/test_task_runner.py::TestLooping::test_looping_accumulates tests/engine/test_task_runner.py::TestLooping::test_looping_works_with_retries tests/engine/test_task_runner.py::TestLooping::test_loop_results_work_with_retries tests/engine/test_task_runner.py::test_task_tags_are_attached_to_all_states tests/engine/test_task_runner.py::test_task_runner_logs_stdout tests/engine/test_task_runner.py::test_task_runner_logs_stdout_disabled tests/engine/test_task_runner.py::test_task_runner_logs_map_index_for_mapped_tasks