theonedev/onedev · error · NotAcceptableException

Pull request submitter cannot be reviewer

Error message

Pull request submitter cannot be reviewer

What it means

The TOD endpoint validates that no requested reviewer equals the pull request's submitter; otherwise it throws a JAX-RS NotAcceptableException (HTTP 406). OneDev forbids the submitter from reviewing their own pull request, so adding them as a reviewer is rejected outright.

Source

Thrown at server-core/src/main/java/io/onedev/server/ai/TodResource.java:1171

        var title = (String) data.remove("title");
        if (title == null)
            throw new NotAcceptableException("Title is required");

        request.setTitle(title);

        var description = (String) data.remove("description");
        if (description != null)
            request.setDescription(description);

        @SuppressWarnings("unchecked")
        var reviewerNames = (List<String>) data.remove("reviewers");
        if (reviewerNames != null) {
            for (var reviewerName : reviewerNames) {
                User reviewer = userService.findByName(reviewerName);
                if (reviewer == null)
                    throw new NotFoundException("Reviewer not found: " + reviewerName);
                if (reviewer.equals(request.getSubmitter()))
                    throw new NotAcceptableException("Pull request submitter cannot be reviewer");

                if (request.getReview(reviewer) == null) {
                    PullRequestReview review = new PullRequestReview();
                    review.setRequest(request);
                    review.setUser(reviewer);
                    request.getReviews().add(review);
                }
            }
        }

        @SuppressWarnings("unchecked")
        var assigneeNames = (List<String>) data.remove("assignees");
        if (assigneeNames != null) {
            for (var assigneeName : assigneeNames) {
                User assignee = userService.findByName(assigneeName);
                if (assignee == null)
                    throw new NotFoundException("Assignee not found: " + assigneeName);
                PullRequestAssignment assignment = new PullRequestAssignment();

View on GitHub (pinned to d44925c47c)

Solutions

  1. Remove the submitter's name from the 'reviewers' list before submitting.
  2. If you need the submitter notified, use assignment/comments or explicit mentions instead of a review.
  3. Filter reviewers against request.getSubmitter() client-side when building the request.

Example fix

// before
reviewers.add(submitter.getName());
// after
if (!reviewer.equals(request.getSubmitter())) reviewers.add(reviewerName);
Defensive patterns

Strategy: validation

Validate before calling

reviewers.removeIf(name -> Objects.equals(userService.findByName(name), request.getSubmitter()));

Try / catch

try {
    callEditEndpoint(data);
} catch (NotAcceptableException e) {
    if (e.getMessage().contains("submitter cannot be reviewer")) {
        // remove submitter from reviewers and retry once
    } else throw e;
}

Prevention

When it happens

Trigger: POST to the TodResource edit-pull-request endpoint whose 'reviewers' list contains the login name of the same user who submitted the pull request (request.getSubmitter()).

Common situations: AI-generated plan picking all project participants including the submitter; developer adding themselves to the reviewer list; script copying the author into reviewers.

Understand the failure class

Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.

Related errors


AI-assisted analysis of theonedev/onedev@d44925c47c (2026-09-06). Data as JSON: /api/errors/11a6dd155dd26c38. Report an issue: GitHub.