anchor.diff:                      #atm_parallel_box_schema_draft{
                           id = <<"pb1">>,
                           tasks = [
  -                            ?ECHO_ATM_TASK_SCHEMA_DRAFT(<<"task1">>, <<"st_2">>),
  -                            ?ECHO_ATM_TASK_SCHEMA_DRAFT(<<"task2">>, <<"st_3">>)
  +                            ?ECHO_ATM_TASK_SCHEMA_DRAFT(<<"task1">>, <<"task1_dst_store">>),
  +                            ?ECHO_ATM_TASK_SCHEMA_DRAFT(<<"task2">>, <<"task2_dst_store">>)
                           ]
                       },
                       #atm_parallel_box_schema_draft{
                           id = <<"pb2">>,
  -                        tasks = [?ECHO_ATM_TASK_SCHEMA_DRAFT(<<"task3">>, <<"st_4">>)]
  +                        tasks = [?ECHO_ATM_TASK_SCHEMA_DRAFT(<<"task3">>, <<"task3_dst_store">>)]
                       }
                   ],
  -                store_iterator_spec = #atm_store_iterator_spec_draft{store_schema_id = <<"st_1">>},
  +                store_iterator_spec = #atm_store_iterator_spec_draft{store_schema_id = <<"iterated_store">>},
   
                   % Check that cancelled executions are not retried automatically
                   max_retries = ?RAND_INT(3, 6)
  
positive.code:                         % - task3 transitions to 'cancelled' as definitely no item was scheduled for it.
                          before_step_hook = fun atm_workflow_execution_test_utils:cancel_workflow_execution/1,
                          before_step_exp_state_diff = [
                              {all_tasks, {1, 1}, stopping_due_to, cancel},  %% TODO expectation per task ?
                              {lane_run, {1, 1}, stopping},
                              workflow_stopping
                          ]
                      },
                      handle_task_execution_stopped = #atm_step_mock_spec{
                          % Assert not all items were processed by tasks
                          %% TODO refactor hook
                          before_step_hook = fun(AtmMockCallCtx = #atm_mock_call_ctx{
                              workflow_execution_exp_state = ExpState,
                              call_args = [_AtmWorkflowExecutionId, _AtmWorkflowExecutionEnv, AtmTaskExecutionId]
                          }) ->
                              ExpTaskStats = atm_workflow_execution_exp_state_builder:get_task_stats(
                                  AtmTaskExecutionId, ExpState
                              ),
                              ExpItemsProcessed = element(3, ExpTaskStats),
                              % cancel blocks scheduling execution of leftover items
                              ?assert(ExpItemsProcessed < ItemCount),
  
                              DstAtmStoreSchemaId = case atm_workflow_execution_exp_state_builder:get_task_schema_id(
                                  AtmTaskExecutionId, ExpState
                              ) of
                                  <<"task1">> -> <<"st_2">>;
                                  <<"task2">> -> <<"st_3">>;
                                  <<"task3">> -> <<"st_4">>
                              end,
                              % assert all processed items were mapped to destination store
                              #{<<"items">> := StDstItems} = atm_workflow_execution_test_utils:browse_store(
                                  DstAtmStoreSchemaId, AtmMockCallCtx
                              ),
                              ?assertEqual(ExpItemsProcessed, length(StDstItems))
                          end,
  
negative.code:                     },
                      handle_lane_execution_stopped = #atm_step_mock_spec{after_step_exp_state_diff = no_diff}
                  },
                  ?UNSCHEDULED_LANE_RUN_TEST_SPEC({2, 1}, {prepare_lane, after_step, {1, 1}})
              ],
              handle_workflow_execution_stopped = #atm_step_mock_spec{
                  after_step_exp_state_diff = [
  