{"record":{"id":"f36c6d5f21f8cc51","repo":"jdx/mise","slug":"invalid-compose-project-name-name-use-lowerca","errorCode":null,"errorMessage":"invalid compose project_name '{name}': use lowercase letters, digits, dashes, and underscores","messagePattern":"invalid compose project_name '(.+?)': use lowercase letters, digits, dashes, and underscores","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/compose.rs","lineNumber":1126,"sourceCode":"    Ok(std::iter::once(resolved.to_string_lossy().to_string())\n        .chain(args.iter().cloned())\n        .collect())\n}\n\nfn validate_project_name(name: Option<&str>) -> Result<()> {\n    let Some(name) = name else {\n        return Ok(());\n    };\n    if name.is_empty()\n        || !name\n            .chars()\n            .next()\n            .is_some_and(|character| character.is_ascii_lowercase() || character.is_ascii_digit())\n        || !name.chars().all(|character| {\n            character.is_ascii_lowercase() || character.is_ascii_digit() || \"-_\".contains(character)\n        })\n    {\n        bail!(\n            \"invalid compose project_name '{name}': use lowercase letters, digits, dashes, and underscores\"\n        );\n    }\n    Ok(())\n}\n\nfn parse_dependency(value: &str) -> Result<ResourceId> {\n    let Some((kind, name)) = value.split_once(':') else {\n        bail!(\"invalid compose dependency '{value}': expected '<kind>:<name>'\");\n    };\n    if name.is_empty()\n        || !matches!(\n            kind,\n            \"package\" | \"file\" | \"directory\" | \"service\" | \"user\" | \"group\"\n        )\n    {\n        bail!(\n            \"invalid compose dependency '{value}': supported kinds are package, file, directory, service, user, and group\"","sourceCodeStart":1108,"sourceCodeEnd":1144,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/system/compose.rs#L1108-L1144","documentation":"Compose project names must follow Docker's naming rules; this validator requires a non-empty name starting with a lowercase ASCII letter or digit and containing only lowercase letters, digits, dashes, and underscores. Any other name is rejected before it reaches compose.","triggerScenarios":"Setting `project_name` in a compose-based config with uppercase letters, spaces, dots, slashes, or a leading dash/underscore/digit-less start.","commonSituations":"Using a directory name containing uppercase or dots as the project name, copy-pasting a name with spaces, or deriving the name from a path.","solutions":["Rename the project using only [a-z0-9_-] and ensure the first character is a lowercase letter or digit","Replace invalid characters (e.g. spaces, dots, uppercase) with dashes or underscores","Let the tool derive the name from a compliant directory name instead of overriding it"],"exampleFix":"// before\nproject_name = \"My Project.v2\"\n// after\nproject_name = \"my-project-v2\"","handlingStrategy":"validation","validationCode":"fn valid_project_name(name: &str) -> bool {\n    !name.is_empty()\n        && name.chars().next().map(|c| c.is_ascii_lowercase() || c.is_ascii_digit()).unwrap_or(false)\n        && name.chars().all(|c| c.is_ascii_lowercase() || c.is_ascii_digit() || c == '-' || c == '_')\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Derive project names from directory names after lowercasing and replacing invalid chars","Never embed spaces, dots, or uppercase in project_name","Add a lint/pre-commit check validating project names"],"tags":["validation","naming","docker-compose"],"backgroundTag":"invalid-identifier-format","analyzedSha":"533346cc374382b41ec5ff70536252b2e96e725c","analyzedAt":"2026-09-17T13:35:38.149Z","contentChangedAt":"2026-09-17T13:35:38.149Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}