{"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/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/system/compose.rs#L1108-L1144","documentation":"mise's compose integration validates the compose project_name from configuration. Project names must start with an ASCII lowercase letter or digit and contain only lowercase letters, digits, dashes, and underscores, matching Docker Compose naming rules. The library throws this error when a configured project name violates those character constraints.","triggerScenarios":"A compose project_name in mise.toml starts with a dash/underscore, contains uppercase letters, spaces, dots, slashes, or other symbols, or is empty/invalid at the first character.","commonSituations":"Users copy a Docker Compose project name like 'MyProject' or 'my.project' from docker-compose usage; camelCase names or names with spaces/periods from other tools are pasted into mise.toml.","solutions":["Rename the project_name to use only lowercase letters, digits, dashes, and underscores","Ensure the first character is a lowercase letter or digit","Remove uppercase letters, dots, spaces, and other punctuation from the name"],"exampleFix":"// before (mise.toml)\n[compose]\nproject_name = \"My.Project\"\n// after\n[compose]\nproject_name = \"my-project\"","handlingStrategy":"validation","validationCode":"fn valid_project_name(name: &str) -> bool {\n    name.chars().next().is_some_and(|c| c.is_ascii_lowercase() || c.is_ascii_digit())\n        && name.chars().all(|c| c.is_ascii_lowercase() || c.is_ascii_digit() || c == '-' || c == '_')\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep project names lowercase-kebab-case by convention","Never reuse names containing dots or uppercase from other tools","Check the first character is alphanumeric before saving config"],"tags":["validation","config","compose","naming"],"backgroundTag":"invalid-config-value","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}