docs: public CompletableFuture<Revision> addRepo(Author author, String projectName, String repoName,
                                                 PerRolePermissions permission) {
          requireNonNull(author, "author");
          requireNonNull(projectName, "projectName");
          requireNonNull(repoName, "repoName");
          requireNonNull(permission, "permission");
  
          final JsonPointer path = JsonPointer.compile("/repos" + encodeSegment(repoName));
          final RepositoryMetadata newRepositoryMetadata = new RepositoryMetadata(repoName,
                                                                                  UserAndTimestamp.of(author),
                                                                                  permission);
          final Change<JsonNode> change =
                  Change.ofJsonPatch(METADATA_JSON,
                                     asJsonArray(new TestAbsenceOperation(path),
                                                 new AddOperation(path,
                                                                  Jackson.valueToTree(newRepositoryMetadata))));
          final String commitSummary =
                  "Add a repo '" + newRepositoryMetadata.id() + "' to the project " + projectName;
          return metadataRepo.push(projectName, Project.REPO_DOGMA, author, commitSummary, change)
                             .handle((revision, cause) -> {
                                 if (cause != null) {
                                     if (Exceptions.peel(cause) instanceof ChangeConflictException) {
                                         throw new RepositoryExistsException(repoName);
                                     } else {
                                         return Exceptions.throwUnsafely(cause);
                                     }
                                 }
                                 return revision;
                             });
      }