anchor.diff:      var future = fileSha1Hex(entity)
           .then((String sha1) {
             if(sha1 == targetSha) {
  -            return [];
  +            return null;
             } else {
  -            return ['content does not match: $entity'];
  +            return 'content does not match: $entity';
             }
           });
   
  -    return _streamFromIterableFuture(future);
  +    return _oneOrNoneOnNull(future);
     }
   
     static Stream<String> validateDirectoryFromMap(FileSystemEntity entity,
  
positive.code:   return completer.future;
  }
  
  // TODO: move to bot?
  Stream _streamFromIterableFuture(Future<Iterable> future) {
    final controller = new StreamController();
  
    future
      .then((Iterable values) {
        for(var value in values) {
          controller.add(value);
        }
      })
      .catchError((error, stack) {
        controller.addError(error, stack);
      })
      .whenComplete(() {
        controller.close();
      });
  
    return controller.stream;
  }
  
  String _getStringSha1(String content) {
    final bytes = UTF8.encode(content);
  
negative.code:       return _exists(entity)
            .then((bool exists) {
              if(exists) {
                return null;
              }
              return "$entity does not exist on disk";
            });
      }
  
      return new Future.value(
          "Expected $entity to be $entityType, but it is $entType");
    }
  
    static Future<bool> _exists(FileSystemEntity entity) {
  