anchor.diff:      filter_out_not_failed_items_in_t1_fun = FilterOutNotFailedItemsFun,
       build_t1_exp_error_log_content_fun = BuildT1ExpErrorLogContentFun
   }) ->
  -    AtmLaneRunTestSpec = #atm_lane_run_execution_test_spec{
  -        process_task_result_for_item = #atm_step_mock_spec{
  -            after_step_exp_state_diff = fun(MockCallCtx) ->
  -                job_failure_expect_task_items_processed(
  -                    TestcaseId, FilterOutNotFailedItemsFun, MockCallCtx
  -                )
  -            end
  -        },
  -        handle_task_execution_ended = #atm_step_mock_spec{
  -            after_step_exp_state_diff = fun(MockCallCtx) ->
  -                job_failure_expect_task_execution_ended(
  -                    TestcaseId, BuildT1ExpErrorLogContentFun, MockCallCtx
  -                )
  -            end
  +    BuildAtmLaneRunTestSpecFun = fun({AtmLaneSelector, RunNum} = AtmLaneRunSelector, IsLastExpLaneRun) ->
  +        #atm_lane_run_execution_test_spec{
  +            selector = AtmLaneRunSelector,
  +            process_task_result_for_item = #atm_step_mock_spec{
  +                after_step_exp_state_diff = fun(MockCallCtx) ->
  +                    job_failure_expect_task_items_processed(
  +                        TestcaseId, FilterOutNotFailedItemsFun, MockCallCtx
  +                    )
  +                end
  +            },
  +            handle_task_execution_ended = #atm_step_mock_spec{
  +                after_step_exp_state_diff = fun(MockCallCtx) ->
  +                    job_failure_expect_task_execution_ended(
  +                        TestcaseId, BuildT1ExpErrorLogContentFun, MockCallCtx
  +                    )
  +                end
  +            },
  +            handle_lane_execution_ended = #atm_step_mock_spec{
  +                after_step_exp_state_diff = fun(AtmMockCallCtx = #atm_mock_call_ctx{
  +                    workflow_execution_exp_state = ExpState0
  +                }) ->
  +                    % Assert all items from prev lane run exception store were processed
  +                    check_iterated_items(TestcaseId, AtmLaneRunSelector, AtmMockCallCtx),
  +                    check_exception_store_content(TestcaseId, AtmLaneRunSelector, AtmMockCallCtx),
  +
  +                    ExpState1 = atm_workflow_execution_exp_state_builder:expect_lane_run_failed(
  +                        AtmLaneRunSelector, true, ExpState0
  +                    ),
  +                    {true, case IsLastExpLaneRun of
  +                        true ->
  +                            ExpState1;
  +                        false ->
  +                            atm_workflow_execution_exp_state_builder:expect_lane_run_automatic_retry_scheduled(
  +                                {AtmLaneSelector, RunNum + 1}, ExpState1
  +                            )
  +                    end}
  +                end
  +            }
           }
  -    },
  +    end,
   
       atm_workflow_execution_test_runner:run(#atm_workflow_execution_test_spec{
           provider = ?PROVIDER_SELECTOR,
  
positive.code: 
  
  %% @private
  -spec record_failed_item_batch_for_t1(
      term(),
      atm_workflow_execution_exp_state_builder:task_selector(),
  
negative.code:     ok.
  get_all_failed_item_batches_for_t1(TestcaseId, TaskSelector) ->
      Key = {TestcaseId, TaskSelector, failed_item_batch},
      node_cache:get(Key, []).
  
  
  %% @private
  -spec record_items_processed(term(), atm_lane_execution:lane_run_selector(), [automation:item()]) ->
      ok.
  record_items_processed(TestcaseId, AtmLaneRunSelector, ItemsProcessed) ->
      Key = {TestcaseId, AtmLaneRunSelector, items_processed},
      node_cache:put(Key, ItemsProcessed ++ node_cache:get(Key, [])).
  
  
  %% @private
  -spec get_all_processed_items(term(), atm_lane_execution:lane_run_selector()) ->
      [automation:id()].
  get_all_processed_items(TestcaseId, AtmLaneRunSelector) ->
      Key = {TestcaseId, AtmLaneRunSelector, items_processed},
      node_cache:get(Key, []).
  
  
  