anchor.diff:      end,
     case Status of
       ok -> explore(UpdatedState);
  -    none ->
  -      LogState = log_trace(UpdatedState),
  -      RacesDetectedState = plan_more_interleavings(LogState),
  -      {HasMore, NewState} = has_more_to_explore(RacesDetectedState),
  -      case HasMore of
  -        true -> explore(NewState);
  -        false -> ok
  -      end;
  +    none -> UpdatedState;
       {crash, Class, Reason, Stack} ->
         FatalCrashState =
           add_error(fatal, discard_last_trace_state(UpdatedState)),
  
positive.code: %%% This list corresponds more or less to "E" in the various DPOR
  %%% papers (representing the execution trace).
  
  %%% The logic of the exploration goes through `explore/1`, which is
  %%% fairly clean: as long as there are more processes that can be
  %%% executed and yield events, `get_next_event/1` will be returning
  %%% `ok`, after executing one of them and doing all necessary updates
  %%% to the state (adding new `#trace_state`s, etc).  If
  %%% `get_next_event/1` returns `none`, we are at the end of an
  %%% interleaving (either due to no more enabled processes or due to
  %%% "sleep set blocking") and can do race analysis and report any
  %%% errors found in the interleaving.  Race analysis is contained in
  %%% `plan_more_interleavings/1`, reporting whether the current
  %%% interleaving was buggy is contained in `log_trace/1` and resetting
  %%% most parts to continue exploration is contained in
  %%% `has_more_to_explore/1`.
  
  %%% Focusing on `plan_more_interleavings`, it is composed out of two
  %%% steps: first (`assign_happens_before/3`) we assign a
  
negative.code:       },
    concuerror_logger:plan(Logger),
    ?time(Logger, "Exploration start"),
    Ret = explore_scheduling(InitialState),
    concuerror_callback:cleanup_processes(Processes),
    Ret.
  
  %%------------------------------------------------------------------------------
  
  explore_scheduling(State) ->
    UpdatedState = explore(State),
    LogState = log_trace(UpdatedState),
    RacesDetectedState = plan_more_interleavings(LogState),
    {HasMore, NewState} = has_more_to_explore(RacesDetectedState),
    case HasMore of
      true -> explore_scheduling(NewState);
      false -> ok
    end.
  
  explore(State) ->
    {Status, UpdatedState} =
  