{"record":{"id":"9cf70a4df17c44e2","repo":"jdx/mise","slug":"bootstrap-compose-project-name-wait-timeout-mu","errorCode":null,"errorMessage":"bootstrap compose project '{name}' wait_timeout must be greater than zero","messagePattern":"bootstrap compose project '(.+?)' wait_timeout must be greater than zero","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/compose.rs","lineNumber":338,"sourceCode":"                config.project_dir.display()\n            );\n        }\n        validate_project_name(config.project_name.as_deref())?;\n        validate_values(\"profile\", &config.profiles)?;\n        validate_values(\"service\", &config.services)?;\n        validate_values(\"oneshot service\", &config.oneshot)?;\n        validate_command(\"command\", &config.command)?;\n        validate_command(\"engine_command\", &config.engine_command)?;\n        if config.state == ComposeState::Absent && !config.services.is_empty() {\n            bail!(\n                \"bootstrap compose project '{name}' services cannot be combined with state = \\\"absent\\\" because compose down removes the entire project\"\n            );\n        }\n        if !config.wait && config.wait_timeout.is_some() {\n            bail!(\"bootstrap compose project '{name}' wait_timeout requires wait = true\");\n        }\n        if config.wait_timeout == Some(0) {\n            bail!(\"bootstrap compose project '{name}' wait_timeout must be greater than zero\");\n        }\n        if config.state != ComposeState::Absent\n            && (config.down_volumes || config.down_images.is_some())\n        {\n            bail!(\n                \"bootstrap compose project '{name}' down_volumes and down_images require state = \\\"absent\\\"\"\n            );\n        }\n        if config.state != ComposeState::Running && config.renew_anonymous_volumes {\n            bail!(\n                \"bootstrap compose project '{name}' renew_anonymous_volumes requires state = \\\"running\\\"\"\n            );\n        }\n        let explicit_dependencies = config\n            .depends_on\n            .iter()\n            .map(|dependency| parse_dependency(dependency))\n            .collect::<Result<Vec<_>>>()?;","sourceCodeStart":320,"sourceCodeEnd":356,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/system/compose.rs#L320-L356","documentation":"Thrown during TOML validation when `wait_timeout = 0` is configured for a bootstrap compose project. A zero timeout would make the wait abort immediately and is almost certainly a mistake, so the library rejects it and requires a strictly positive duration.","triggerScenarios":"Setting `wait_timeout = 0` in a `[system.compose.<name>]` block while `wait = true`. Raised from `from_toml_with_origin` at parse time.","commonSituations":"Placeholder value never filled in; computing the timeout from a variable that defaults to 0; misunderstanding that 0 means 'no timeout' (it does not here).","solutions":["Set `wait_timeout` to a positive number of seconds, e.g. `wait_timeout = 30`","Remove `wait_timeout` entirely to use the library default"],"exampleFix":"# before\n[system.compose.myproj]\nwait = true\nwait_timeout = 0\n# after\n[system.compose.myproj]\nwait = true\nwait_timeout = 30","handlingStrategy":"validation","validationCode":"if cfg.wait_timeout == Some(0) {\n    return Err(\"wait_timeout must be greater than zero\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never use 0 as 'infinite timeout'; omit the key instead","Sanity-check generated config values before writing TOML"],"tags":["config","validation","docker-compose"],"backgroundTag":"value-out-of-range","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"}