{"record":{"id":"102c67c2a05750a7","repo":"Crosstalk-Solutions/project-nomad","slug":"name-is-required","errorCode":null,"errorMessage":"name is required.","messagePattern":"name is required\\.","errorType":"http","errorClass":null,"httpStatus":400,"severity":"warning","filePath":"admin/app/controllers/rag_controller.ts","lineNumber":116,"sourceCode":"    const oldName = sanitizeCollectionName(request.input('oldName', null))\n    const newName = sanitizeCollectionName(request.input('newName', null))\n\n    if (!oldName || !newName) {\n      return response.status(400).json({ error: 'oldName and newName are required.' })\n    }\n\n    const result = await this.ragService.renameKnowledgeCollection(oldName, newName)\n    if (!result.success) {\n      return response.status(500).json({ error: result.message })\n    }\n    return response.status(200).json({ message: result.message })\n  }\n\n  public async deleteKnowledgeCollection({ request, response }: HttpContext) {\n    const name = sanitizeCollectionName(request.input('name', null))\n\n    if (!name) {\n      return response.status(400).json({ error: 'name is required.' })\n    }\n\n    const result = await this.ragService.deleteKnowledgeCollection(name)\n    if (!result.success) {\n      return response.status(500).json({ error: result.message })\n    }\n    return response.status(200).json({ message: result.message })\n  }\n\n  public async getFileWarnings({ response }: HttpContext) {\n    const result = await this.ragService.computeFileWarnings()\n    return response.status(200).json(result)\n  }\n\n  public async deleteFile({ request, response }: HttpContext) {\n    const { source } = await request.validateUsing(deleteFileSchema)\n    const result = await this.ragService.deleteFileBySource(source)\n    if (!result.success) {","sourceCodeStart":98,"sourceCodeEnd":134,"githubUrl":"https://github.com/Crosstalk-Solutions/project-nomad/blob/0bd1c6f4f9888d577fe232de06ac144bb8337131/admin/app/controllers/rag_controller.ts#L98-L134","documentation":"400 validation error: the delete-collection endpoint requires a non-empty name that passes sanitizeCollectionName.","triggerScenarios":"POST/DELETE to delete knowledge collection without name, with empty/whitespace string, or a name that sanitizes to null.","commonSituations":"Delete button invoked with an unset selected row; whitespace or special-character collection name; missing JSON body.","solutions":["Include a non-empty name in the request body.","Confirm exact field name is 'name'.","Guard the delete action in the UI until a collection is selected."],"exampleFix":"// before\nbody: JSON.stringify({})\n// after\nbody: JSON.stringify({ name: 'my-collection' })","handlingStrategy":"validation","validationCode":"if (!name || !name.trim()) throw new BadRequest('name is required')","typeGuard":"const hasName = (b: unknown): b is { name: string } => typeof (b as any)?.name === 'string' && (b as any).name.trim() !== ''","tryCatchPattern":null,"preventionTips":["Require a selected collection before enabling delete"],"tags":["validation","request-body","adonisjs","rag"],"backgroundTag":"missing-required-request-field","analyzedSha":"0bd1c6f4f9888d577fe232de06ac144bb8337131","analyzedAt":"2026-08-27T05:34:15.424Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}