anchor.diff:      case gen_event:delete_handler(error_logger, error_logger, []) of
           {error, module_not_found} -> ok;
           {error_logger, _} -> remove_error_handler(N-1)
  +    end.
  +
  +%% Timeout is a period to wait before giving up
  +wait_until_user_started(0) ->
  +    ?ABORT("Timeout exceeded waiting for `user` to register itself~n", []),
  +    erlang:error(timeout);
  +wait_until_user_started(Timeout) ->
  +    case whereis(user) of
  +        %% if user is not yet registered wait a tenth of a second and try again
  +        undefined -> timer:sleep(100), wait_until_user_started(Timeout - 100);
  +        _ -> ok
       end.
positive.code: 
  shell(_Config, _AppFile) ->
      true = code:add_pathz(rebar_utils:ebin_dir()),
      %% terminate the current user
      ok = supervisor:terminate_child(kernel_sup, user),
      %% start a new shell (this also starts a new user under the correct group)
      user_drv:start(),
      %% enable error_logger's tty output
      ok = error_logger:swap_handler(tty),
      %% disable the simple error_logger (which may have been added multiple
  
negative.code: 
  info(help, shell) ->
      ?CONSOLE(
          "Start a shell with project and deps preloaded similar to~n"
          "'erl -pa ebin -pa deps/*/ebin'.~n",
          []
      ).
  
  remove_error_handler(0) ->
      ?WARN("Unable to remove simple error_logger handler~n", []);
  