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
- Remove the submitter's name from the 'reviewers' list before submitting.
- If you need the submitter notified, use assignment/comments or explicit mentions instead of a review.
- 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
- Filter the submitter out of any reviewer list derived from participants.
- Encode the submitter-exclusion rule in the tool that generates the reviewer list.
- Document the constraint wherever the reviewer-selection API is exposed.
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
- State is required
- Issue ${issueReference} is not in current project
- Reviewer not found:
- Assignee not found:
- No permission to read code of source project:
AI-assisted analysis of theonedev/onedev@d44925c47c (2026-09-06).
Data as JSON: /api/errors/11a6dd155dd26c38.
Report an issue: GitHub.