anchor.diff:    }
   
     @override
  -  Future init({bool doCheckout: true}) {
  -    if (!recursive) return initCurrentProject(doCheckout);
  -
  -    Future doInit(JefeProject project) =>
  -        project.lifecycle.init(doCheckout: doCheckout, recursive: false);
  -
  -    return executeTask('Initialising for development',
  -        () => _project.processDepthFirst(doInit));
  -  }
  -
  -  Future initCurrentProject(bool doCheckout) {
  -    return executeTask(
  -        'Initialising for development for project ${_project.name}', () async {
  -      await _git.fetch();
  -      await _gitFeature.init();
  -
  -      final currentFeatureNameOpt = await _gitFeature.currentFeatureName();
  -
  -      if (currentFeatureNameOpt is Some) {
  -        final currentFeatureName = currentFeatureNameOpt.get();
  -        _log.info('Detected existing feature - $currentFeatureName');
  -        await startNewFeature(currentFeatureName);
  -      } else {
  -        if (doCheckout) await _git.checkout(_gitFeature.developBranchName);
  -      }
  -    });
  +  Future init({bool doCheckout: true}) async {
  +    await spc.git.fetch();
  +    await spc.gitFeature.init();
  +
  +    final currentFeatureNameOpt = await spc.gitFeature.currentFeatureName();
  +
  +    if (currentFeatureNameOpt is Some) {
  +      final currentFeatureName = currentFeatureNameOpt.get();
  +      _log.info('Detected existing feature - $currentFeatureName');
  +      await startNewFeature(currentFeatureName);
  +    } else {
  +      if (doCheckout) await spc.git.checkout(spc.gitFeature.developBranchName);
  +    }
     }
   
     Future<ProjectVersions> getCurrentProjectVersions(
         ReleaseType type, bool autoUpdateHostedVersions) async {
       final currentProjectVersions = await project.projectVersions;
   
  -    _log.fine('${project.name}: $currentProjectVersions');
  +    _log.fine('${_project.name}: $currentProjectVersions');
   
       final Option<Version> releaseVersionOpt = await _getReleaseVersion(
  -        currentProjectVersions, autoUpdateHostedVersions, type, project);
  +        currentProjectVersions, autoUpdateHostedVersions, type);
   
       return new ProjectVersions(currentProjectVersions, releaseVersionOpt);
     }
   
  -  Future<Option<Version>> _getReleaseVersion(
  -      ProjectVersions2 currentVersions,
  -      bool autoUpdateHostedVersions,
  -      ReleaseType type,
  -      JefeProject project) async {
  +  Future<Option<Version>> _getReleaseVersion(ProjectVersions2 currentVersions,
  +      bool autoUpdateHostedVersions, ReleaseType type) async {
       final hasBeenPublished = currentVersions.hasBeenPublished;
       final isHosted = currentVersions.isHosted;
       final currentPubspecVersion = currentVersions.pubspecVersion;
  
positive.code:           return new Some(currentPubspecVersion);
          } else {
            _log.warning(() =>
                "Project ${project.name} is hosted but has never been tagged in git. "
                "Can't tell if there are unpublished changes. "
                "Will not release as pubspec version is not greater than hosted version");
            return const None();
  
negative.code:     implements ProjectLifecycle {
    ProjectLifecycleMultiProjectImpl(JefeProjectGraph graph) : super(graph);
  
    @override
    Future completeFeature({String featureName, bool doPush: false}) {
      return executeTask('complete development of feature $featureName',
  