{"record":{"id":"9724c86da8b2c5cd","repo":"jdx/mise","slug":"invalid-compose-dependency-value-expected-k","errorCode":null,"errorMessage":"invalid compose dependency '{value}': expected '<kind>:<name>'","messagePattern":"invalid compose dependency '(.+?)': expected '<kind>:<name>'","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/compose.rs","lineNumber":1135,"sourceCode":"    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\"\n        );\n    }\n    Ok(ResourceId::new(kind, name))\n}\n\nfn validate_values(kind: &str, values: &[String]) -> Result<()> {\n    if let Some(value) = values\n        .iter()\n        .find(|value| value.is_empty() || value.starts_with('-') || value.contains('\\0'))","sourceCodeStart":1117,"sourceCodeEnd":1153,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/system/compose.rs#L1117-L1153","documentation":"Syntax validation in compose dependency parsing (parse_dependency): the dependency string lacked the required '<kind>:<name>' form — no colon separator, or an empty/invalid kind or name. Fires when a compose config declares dependencies like 'service' instead of 'service:name'.","triggerScenarios":"A dependency string is written without a colon, e.g. 'api' or 'serviceapi', or using the wrong separator such as '=' or whitespace instead of ':'.","commonSituations":"Users list dependency names bare (like package names in other tools) instead of namespaced kinds; typos drop the colon; config copied from non-compose dependency formats.","solutions":["Add a colon with a supported kind prefix, e.g. 'service:api' or 'package:ripgrep'","Check for typos that replaced ':' with '=' or space","Quote the value in TOML so colons and dashes parse cleanly"],"exampleFix":"// before\n[[compose.dependencies]]\nvalue = \"api\"\n// after\n[[compose.dependencies]]\nvalue = \"service:api\"","handlingStrategy":"validation","validationCode":"fn valid_dependency(v: &str) -> bool {\n    let (kind, name) = match v.split_once(':') { Some(p) => p, None => return false };\n    !name.is_empty() && matches!(kind, \"package\"|\"file\"|\"directory\"|\"service\"|\"user\"|\"group\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always write dependencies as kind:name","Use shell/TOML quoting around values with colons","Lint config before running mise"],"tags":["validation","config","compose","format"],"backgroundTag":"invalid-argument-format","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"}