anchor.diff:  
     /// Runs [builder] with [primaryInputs] as inputs.
     Stream<AssetId> _runBuilder(int phaseNumber, Builder builder,
  -      Iterable<AssetId> primaryInputs, Set<AssetId> groupOutputs) async* {
  +      Iterable<AssetId> primaryInputs) async* {
       for (var input in primaryInputs) {
         var builderOutputs = expectedOutputs(builder, input);
   
  
positive.code:       // 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;
        }
        var reader = new SinglePhaseReader(_reader, _assetGraph, phaseNumber);
        var writer = new AssetWriterSpy(_writer);
        await runBuilder(builder, [input], reader, writer, _resolvers,
  
negative.code:       // Yield the outputs.
        for (var output in writer.assetsWritten) {
          (_assetGraph.get(output) as GeneratedAssetNode).wasOutput = true;
          yield output;
        }
      }
  