{"record":{"id":"10f5267a31c34c72","repo":"xai-org/x-algorithm","slug":"typename-typename-does-not-match-typenameregex","errorCode":null,"errorMessage":"TypeName '$typename' does not match $typeNameRegex.","messagePattern":"TypeName '\\$typename' does not match \\$typeNameRegex\\.","errorType":"validation","errorClass":"ConfigFailure","httpStatus":null,"severity":"error","filePath":"botmaker/src/scala/com/twitter/botmaker/runtime/config/ServiceConfigs.scala","lineNumber":105,"sourceCode":"    if (endpoint != \"ScribeClient\"\n      && endpointRegex.findFirstIn(endpoint).isEmpty) {\n      throw ConfigFailure(\n        s\"Endpoint '$endpoint' does not match $endpointRegex.\"\n      )\n    }\n  }\n\n  def validateDataset(dataset: String): Unit = {\n    if (datasetRegex.findFirstIn(dataset).isEmpty) {\n      throw ConfigFailure(\n        s\"Dataset '$dataset' does not match $datasetRegex.\"\n      )\n    }\n  }\n\n  def validateTypeName(typename: String): Unit = {\n    if (typeNameRegex.findFirstIn(typename).isEmpty) {\n      throw ConfigFailure(\n        s\"TypeName '$typename' does not match $typeNameRegex.\"\n      )\n    }\n  }\n\n  def validateTeamName(teamName: String): Unit = {\n    if (teamNameRegex.findFirstIn(teamName).isEmpty) {\n      throw ConfigFailure(\n        s\"Team name '$teamName' does not match $teamNameRegex.\"\n      )\n    }\n  }\n\n  def validateClassName(className: String): Unit = {\n    ClassCache.forName(className)\n  }\n\n  override def addConfig(","sourceCodeStart":87,"sourceCodeEnd":123,"githubUrl":"https://github.com/xai-org/x-algorithm/blob/24c60942c5c5fdad3a6addffb4c6e6d2f228f04f/botmaker/src/scala/com/twitter/botmaker/runtime/config/ServiceConfigs.scala#L87-L123","documentation":"Type names in BotMaker configs must match typeNameRegex, defined in ServiceConfigs as ^[A-Z][a-zA-Z0-9_]*$ (UpperCamelCase alphanumerics/underscore). validateTypeName throws ConfigFailure when a generated or declared type name violates this.","triggerScenarios":"Registering a config containing a type whose name does not start with an uppercase letter or contains characters outside [a-zA-Z0-9_] — e.g. \"contentScan\", \"Content-Scan\", \"2ndType\", or an empty name.","commonSituations":"Autogenerating type names from lowercase dataset/field names without capitalizing; pluralization or prefixing logic producing leading digits or symbols.","solutions":["Capitalize and sanitize: name must match ^[A-Z][a-zA-Z0-9_]*$","Apply a toUpperCamelCase converter to generated type names before registration","Unit-test the name generator against typeNameRegex"],"exampleFix":"// before\ntypeName(\"content_scan_v2\")\n\n// after\ntypeName(\"ContentScanV2\")","handlingStrategy":"type-guard","validationCode":"TYPE_NAME_RE = re.compile(r'^[A-Z][a-zA-Z0-9_]*$')\ndef validTypeName(n): return bool(TYPE_NAME_RE.match(n))","typeGuard":"def isValidTypeName(name: str) -> bool:\n    return bool(re.match(r'^[A-Z][a-zA-Z0-9_]*$', name))","tryCatchPattern":null,"preventionTips":["Capitalize generated type names via toUpperCamelCase","Test generators against the regex"],"tags":["botmaker","scala","naming-convention","config-validation"],"backgroundTag":"identifier-validation-failed","analyzedSha":"24c60942c5c5fdad3a6addffb4c6e6d2f228f04f","analyzedAt":"2026-08-28T11:40:14.686Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}