theonedev/onedev · error · NotFoundException

Reviewer not found:

Error message

Reviewer not found: 

What it means

OneDev's AI TOD (pull-request creation/edit) endpoint resolves each name in the 'reviewers' array via userService.findByName(). If a name does not match any existing user, it throws a JAX-RS NotFoundException (HTTP 404) with the offending name appended. The whole request aborts before any review objects are created.

Solutions

  1. Verify each name in the 'reviewers' list matches an existing OneDev user login name exactly (check admin > user list).
  2. Remove or correct the non-existent reviewer names and resubmit the request.
  3. Pre-resolve names via the user API before submitting to filter invalid ones.

Example fix

// before
data.put("reviewers", List.of("Alice Smith"));
// after
data.put("reviewers", List.of("asmith")); // exact login name
Defensive patterns

Strategy: validation

Validate before calling

for (var name : (List<String>) data.getOrDefault("reviewers", List.of())) {
    if (userService.findByName(name) == null)
        throw new IllegalArgumentException("Unknown reviewer: " + name);
}

Try / catch

try {
    callEditEndpoint(data);
} catch (NotFoundException e) {
    if (e.getMessage().startsWith("Reviewer not found")) {
        // strip the bad name from data.get("reviewers") and retry
    } else throw e;
}

Prevention

When it happens

Trigger: POST to the TodResource pull-request edit endpoint with data containing a 'reviewers' list where any entry is not an exact existing username (e.g. reviewers=["alice","bob123"] when no user 'bob123' exists).

Common situations: Typo in reviewer name; AI agent hallucinating a username; reviewer was renamed or deleted since the plan was generated; using email/display name instead of login name.

Understand the failure class

Background: "User not found", "Invalid user", and "does not exist": what missing-user lookup errors mean across Rocket.Chat, LiteLLM, Phabricator, rustfs, and pnpm — this error's family across 10 libraries.

Related errors


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

Appendix: source

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

        request.getUpdates().add(update);

        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)

View on GitHub (pinned to d44925c47c)