anchor.diff:    Future preReleaseCurrentProject(
             ReleaseType type, bool autoUpdateHostedVersions) =>
         executeTask('Pre release checks for project ${_project.name}', () async {
  -        await _project.git.assertWorkingTreeClean();
  -        await _project.gitFeature.assertNoActiveReleases();
  -        await _project.git
  -            .assertOnBranch(_project.gitFeature.developBranchName);
  -        await _project.git.fetch();
  -        await _project.git.updateFromRemote('master');
  -        await _project.git
  -            .updateFromRemote(_project.gitFeature.developBranchName);
  -        await _project.git.merge('master');
  +        await _git.assertWorkingTreeClean();
  +        await _gitFeature.assertNoActiveReleases();
  +        await _git.assertOnBranch(_gitFeature.developBranchName);
  +        await _git.fetch();
  +        await _git.updateFromRemote('master');
  +        await _git.updateFromRemote(_gitFeature.developBranchName);
  +        await _git.merge('master');
           await checkReleaseVersions(
               type: type, autoUpdateHostedVersions: autoUpdateHostedVersions);
  -        await _project.pub.test();
  +        await _pub.test();
         });
   
     Future checkReleaseVersions(
  
positive.code: 
          _log.fine('new release version $releaseVersion');
  
          await _project.gitFeature.releaseStart(releaseVersion.toString());
  
          if (releaseVersion != projectVersions.pubspecVersion) {
            await _project
  
negative.code: 
  import 'package:git/git.dart';
  import 'package:jefe/src/git/git.dart';
  import 'package:jefe/src/project/git_commands.dart';
  import 'package:jefe/src/project/git_feature.dart';
  import 'package:jefe/src/project/jefe_project.dart';
  import 'package:jefe/src/project/project.dart';
  import 'package:jefe/src/project/project_lifecycle.dart';
  import 'package:jefe/src/project/pub_commands.dart';
  import 'package:jefe/src/project/pubspec_commands.dart';
  import 'package:jefe/src/project/release_type.dart';
  import 'package:jefe/src/project_commands/project_command.dart'
      show executeTask;
  import 'package:logging/logging.dart';
  import 'package:option/option.dart';
  import 'package:pub_semver/pub_semver.dart';
  //import 'package:jefe/src/project_commands/project_command_executor.dart';
  //import 'package:jefe/src/project_commands/project_lifecycle.dart';
  
  
  Logger _log = new Logger('jefe.project.commands.git.feature.impl');
  
  const String featureStartCommitPrefix = 'set up project for new feature';
  
  class ProjectLifecycleImpl implements ProjectLifecycle {
    final JefeProject _project;
    ProjectLifecycleImpl(this._project);
  
    GitCommands get _git => _project.git;
    GitFeatureCommands get _gitFeature => _project.gitFeature;
    PubCommands get _pub => _project.pub;
  
    @override
    Future startNewFeature(String featureName,
        {bool doPush: false, bool recursive: true}) {
      return executeTask('set up project for new feature "$featureName"',
          () async {
        await _git.assertWorkingTreeClean();
        await _gitFeature.featureStart(featureName);
        await _project.pubspecCommands.setToPathDependencies();
        await _pub.get();
        await _git.commit('$featureStartCommitPrefix $featureName');
        if (doPush) await _git.push();
      });
    }
  
    // TODO: return to this approach once the concurrency support is implemented
  