anchor.diff:    _ensureDir(outPackages);
   
     // Copy all the files we didn't process
  -  var futures = [];
     var dirs = options.packageDirs;
  -  for (var package in _polymerPackageDependencies) {
  -    for (var relpath in _listPackageDir(package, 'lib', options)) {
  +
  +  return Future.forEach(_polymerPackageDependencies, (package) {
  +    return Future.forEach(_listPackageDir(package, 'lib', options), (relpath) {
         var inpath = path.join(dirs[package], relpath);
         var outpath = path.join(outPackages, package, relpath.substring(4));
  -      futures.add(_copyFile(inpath, outpath));
  -    }
  -  }
  -  return Future.wait(futures);
  +      return _copyFile(inpath, outpath);
  +    });
  +  });
   }
   
   /** Ensure [dirpath] exists. */
  
positive.code:   var currentPackage = options.currentPackage;
    var transformTests = options.transformTests;
    var outPackages = path.join(options.outDir, 'packages');
    for (var asset in assets) {
      var id = asset.id;
      var dir = _firstDir(id.path);
      if (dir == null) continue;
  
      var filepath;
      if (dir == 'lib') {
  
negative.code:       filepath = path.join(options.outDir, _toSystemPath(id.path));
      } else {
        // TODO(sigmund): do something about other assets?
        return null;
      }
  
      return _writeAsset(filepath, asset);
    });
  }
  
  /**
  