{"record":{"id":"f5d1ab417b3ba18e","repo":"theonedev/onedev","slug":"title-is-required-f5d1ab","errorCode":null,"errorMessage":"Title is required","messagePattern":"Title is required","errorType":"http","errorClass":"NotAcceptableException","httpStatus":406,"severity":"error","filePath":"server-core/src/main/java/io/onedev/server/ai/TodResource.java","lineNumber":1155,"sourceCode":"\n        // Pre-populate baseCommitHash + initial update so title/description can\n        // be generated from commits below; openNew(...) will keep them as-is.\n        ObjectId baseCommitId = gitService.getMergeBase(\n                target.getProject(), target.getObjectId(),\n                source.getProject(), source.getObjectId());\n        if (baseCommitId == null)\n            throw new NotAcceptableException(\"No common base for source and target branches\");\n        request.setBaseCommitHash(baseCommitId.name());\n\n        PullRequestUpdate update = new PullRequestUpdate();\n        update.setRequest(request);\n        update.setHeadCommitHash(source.getObjectName());\n        update.setTargetHeadCommitHash(target.getObjectName());\n        request.getUpdates().add(update);\n\n        var title = (String) data.remove(\"title\");\n        if (title == null)\n            throw new NotAcceptableException(\"Title is required\");\n\n        request.setTitle(title);\n\n        var description = (String) data.remove(\"description\");\n        if (description != null)\n            request.setDescription(description);\n\n        @SuppressWarnings(\"unchecked\")\n        var reviewerNames = (List<String>) data.remove(\"reviewers\");\n        if (reviewerNames != null) {\n            for (var reviewerName : reviewerNames) {\n                User reviewer = userService.findByName(reviewerName);\n                if (reviewer == null)\n                    throw new NotFoundException(\"Reviewer not found: \" + reviewerName);\n                if (reviewer.equals(request.getSubmitter()))\n                    throw new NotAcceptableException(\"Pull request submitter cannot be reviewer\");\n\n                if (request.getReview(reviewer) == null) {","sourceCodeStart":1137,"sourceCodeEnd":1173,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/ai/TodResource.java#L1137-L1173","documentation":"Validation during PR creation: the 'title' field was blank/missing after normalizePullRequestData. Title is mandatory for a pull request record, so a validation error is thrown before openNew persists anything. Fix: provide a non-empty title (or let the caller's default title generation fill it).","triggerScenarios":"Thrown at server-core/src/main/java/io/onedev/server/ai/TodResource.java:1155 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Include a non-empty 'title' in the request data.","Derive the title from the commit subject if appropriate before calling the endpoint."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}