{"record":{"id":"4e85e7badde2475a","repo":"xai-org/x-algorithm","slug":"team-name-teamname-does-not-match-teamnamerege","errorCode":null,"errorMessage":"Team name '$teamName' does not match $teamNameRegex.","messagePattern":"Team name '\\$teamName' does not match \\$teamNameRegex\\.","errorType":"validation","errorClass":"ConfigFailure","httpStatus":null,"severity":"error","filePath":"botmaker/src/scala/com/twitter/botmaker/runtime/config/ServiceConfigs.scala","lineNumber":113,"sourceCode":"  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(\n    configName: String,\n    configType: Type,\n    description: String,\n    configValue: AnyRef\n  ): Unit = synchronized {\n    unique(configValue, configName)\n    container.put(configName, (configType, description, configValue))\n  }","sourceCodeStart":95,"sourceCodeEnd":131,"githubUrl":"https://github.com/xai-org/x-algorithm/blob/24c60942c5c5fdad3a6addffb4c6e6d2f228f04f/botmaker/src/scala/com/twitter/botmaker/runtime/config/ServiceConfigs.scala#L95-L131","documentation":"Team/owner names in BotMaker configs must match teamNameRegex, defined as ^[a-z][a-z0-9\\-]*$ (lowercase, may contain digits and hyphens, must start with a lowercase letter). validateTeamName throws ConfigFailure for any team string violating this.","triggerScenarios":"Setting the owning team to a value that is not lowercase-leading — e.g. \"ContentTeam\", \"_infra\", \"trust & safety\", or empty string.","commonSituations":"Using team display names or LDAP group names with spaces/uppercase instead of the lowercase slug; migrating configs where the team field was optional and left blank.","solutions":["Use the lowercase hyphenated team slug, e.g. \"content-trust\"","Pull from a canonical team registry rather than free-typing the name","Validate the team field at config authoring time (lint rule)"],"exampleFix":"// before\nteam(\"Content Integrity Team\")\n\n// after\nteam(\"content-integrity\")","handlingStrategy":"type-guard","validationCode":"TEAM_RE = re.compile(r'^[a-z][a-z0-9\\-]*$')\ndef validTeam(t): return bool(TEAM_RE.match(t))","typeGuard":"def isValidTeam(name: str) -> bool:\n    return bool(re.match(r'^[a-z][a-z0-9\\-]*$', name))","tryCatchPattern":null,"preventionTips":["Use canonical lowercase team slugs from a registry","Disallow free-text team fields"],"tags":["botmaker","scala","naming-convention","team-owner","config-validation"],"backgroundTag":"identifier-validation-failed","analyzedSha":"24c60942c5c5fdad3a6addffb4c6e6d2f228f04f","analyzedAt":"2026-08-28T11:40:14.686Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}