anchor.diff:        // Skip the build step if none of the outputs need updating.
         var skipBuild = !builderOutputs.any((output) =>
             (_assetGraph.get(output) as GeneratedAssetNode).needsUpdate);
  -      if (skipBuild) {
  -        // If we skip the build, we still need to add the ids as outputs for
  -        // any files which were output last time, so they can be used by
  -        // subsequent phases.
  -        for (var output in builderOutputs) {
  -          if ((_assetGraph.get(output) as GeneratedAssetNode).wasOutput) {
  -            groupOutputs.add(output);
  -          }
  -        }
  -        continue;
  -      }
  +      if (skipBuild) continue;
  +
         var reader = new SinglePhaseReader(_reader, _assetGraph, phaseNumber);
         var writer = new AssetWriterSpy(_writer);
         await runBuilder(builder, [input], reader, writer, _resolvers,
  
positive.code:       // Yield the outputs.
        for (var output in writer.assetsWritten) {
          (_assetGraph.get(output) as GeneratedAssetNode).wasOutput = true;
          groupOutputs.add(output);
          yield output;
        }
      }
  
negative.code:     var phaseNumber = 0;
      for (var action in _buildActions) {
        phaseNumber++;
        var inputs = _matchingInputs(action.inputSet, phaseNumber);
        await for (var output
            in _runBuilder(phaseNumber, action.builder, inputs)) {
          outputs.add(output);
        }
      }
  