{"record":{"id":"7b1f78ac9fa5e57d","repo":"HKUDS/DeepTutor","slug":"knowledge-base-name-cannot-contain-control-charact","errorCode":null,"errorMessage":"Knowledge base name cannot contain control characters","messagePattern":"Knowledge base name cannot contain control characters","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"deeptutor/knowledge/naming.py","lineNumber":30,"sourceCode":"\ndef validate_knowledge_base_name(name: str) -> str:\n    \"\"\"Validate and normalize a user-facing knowledge-base name.\n\n    Names may contain Unicode letters, spaces, dots, hyphens, underscores, and\n    common punctuation, but must not contain filesystem or URL-reserved\n    separators that would break KB directories or API route paths.\n    \"\"\"\n    normalized = unicodedata.normalize(\"NFC\", str(name or \"\")).strip()\n    if not normalized:\n        raise ValueError(\"Knowledge base name is required\")\n    if normalized in {\".\", \"..\"}:\n        raise ValueError(\"Knowledge base name cannot be '.' or '..'\")\n    if len(normalized) > _MAX_KB_NAME_LENGTH:\n        raise ValueError(\n            f\"Knowledge base name is too long; maximum length is {_MAX_KB_NAME_LENGTH}\"\n        )\n    if _CONTROL_CHARS.search(normalized):\n        raise ValueError(\"Knowledge base name cannot contain control characters\")\n\n    forbidden = sorted(ch for ch in _FORBIDDEN_CHARS if ch in normalized)\n    if forbidden:\n        joined = \" \".join(forbidden)\n        raise ValueError(\n            \"Knowledge base name contains reserved characters: \"\n            f\"{joined}. Avoid path or URL separators such as /, \\\\, ?, #, and %.\"\n        )\n\n    return normalized\n","sourceCodeStart":12,"sourceCodeEnd":41,"githubUrl":"https://github.com/HKUDS/DeepTutor/blob/3e82f130422a813cdd73c10b21a44e9325f5821a/deeptutor/knowledge/naming.py#L12-L41","documentation":"Error \"Knowledge base name cannot contain control characters\" thrown in HKUDS/DeepTutor.","triggerScenarios":"Thrown at deeptutor/knowledge/naming.py:30 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"3e82f130422a813cdd73c10b21a44e9325f5821a","analyzedAt":"2026-08-27T06:57:25.364Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}