anchor.diff:    prefixParts.add(entry.transform.transformer);
   
     // Mention the primary input of the transform unless the message seems to.
  -  if (!messageMentions(
  -      path.joinAll(path.url.split(entry.transform.primaryId.path)))) {
  +  if (!messageMentionsAsset(entry.transform.primaryId)) {
       prefixParts.add("on ${entry.transform.primaryId}");
     }
   
     // If the relevant asset isn't the primary input, mention it unless the
     // message already does.
     if (entry.assetId != entry.transform.primaryId &&
  -      !messageMentions(path.joinAll(path.url.split(entry.assetId.path)))) {
  +      !messageMentionsAsset(entry.assetId)) {
       prefixParts.add("with input ${entry.assetId}");
     }
   
  
positive.code:   /// but slower [listDir].
    Future _updateSources(Package package) {
      return Future.wait(getPublicDirectories(package.name).map((dirPath) {
        var dir = path.join(package.dir, dirPath);
        if (!dirExists(dir)) return new Future.value();
  
        return new Directory(dir).list(recursive: true, followLinks: true)
  
negative.code:           if (event.path.endsWith(".dart.precompiled.js")) return;
  
            var id = new AssetId(package.name,
                p.relative(event.path, from: package.dir));
            if (event.type == ChangeType.REMOVE) {
              barback.removeSources([id]);
            } else {
  