{"record":{"id":"f240df552c7a8ef3","repo":"jdx/mise","slug":"bootstrap-compose-project-name-wait-timeout-re","errorCode":null,"errorMessage":"bootstrap compose project '{name}' wait_timeout requires wait = true","messagePattern":"bootstrap compose project '(.+?)' wait_timeout requires wait = true","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/compose.rs","lineNumber":335,"sourceCode":"        if !config.project_dir.is_absolute() {\n            bail!(\n                \"bootstrap compose project '{name}' project_dir must be absolute: {}\",\n                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","sourceCodeStart":317,"sourceCodeEnd":353,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/system/compose.rs#L317-L353","documentation":"This error is thrown during TOML validation of a bootstrap compose project when `wait_timeout` is set but `wait = true` is not. The timeout only makes sense when mise is asked to wait for services to become healthy during `compose up`; without `wait`, the timeout would be silently ignored, so the library rejects the config instead. It is a fail-fast config consistency check.","triggerScenarios":"Defining a `[system.compose.<name>]` bootstrap entry with `wait_timeout = <n>` while omitting `wait = true` (or leaving it at its default of false). Raised from `from_toml_with_origin` at parse time.","commonSituations":"Users copy an example that sets a healthcheck wait timeout but omit the `wait` flag; toggling `wait` off while leaving the timeout in place after previously enabling it.","solutions":["Add `wait = true` to the compose project block","Remove the `wait_timeout` key if you do not want to wait for service health"],"exampleFix":"# before\n[system.compose.myproj]\nservices = [\"db\"]\nwait_timeout = 30\n# after\n[system.compose.myproj]\nservices = [\"db\"]\nwait = true\nwait_timeout = 30","handlingStrategy":"validation","validationCode":"// validate before committing config\nif let Some(t) = cfg.wait_timeout {\n    assert!(cfg.wait, \"wait_timeout requires wait = true\");\n    assert!(t > 0, \"wait_timeout must be > 0\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always set wait = true together with wait_timeout","Remove timeout keys when disabling wait","Validate compose config blocks in CI before use"],"tags":["config","validation","docker-compose"],"backgroundTag":"conflicting-config-options","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"}