{"record":{"id":"25a78c8e037f4486","repo":"jdx/mise","slug":"bootstrap-compose-project-name-renew-anonymous","errorCode":null,"errorMessage":"bootstrap compose project '{name}' renew_anonymous_volumes requires state = \"running\"","messagePattern":"bootstrap compose project '(.+?)' renew_anonymous_volumes requires state = \"running\"","errorType":"validation","errorClass":"eyre::Report","httpStatus":null,"severity":"error","filePath":"src/system/compose.rs","lineNumber":305,"sourceCode":"            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<_>>>()?;\n        let services = dedupe(config.services);\n        let oneshot: IndexSet<String> = dedupe(config.oneshot).into_iter().collect();\n        if !services.is_empty() && oneshot.iter().any(|service| !services.contains(service)) {\n            bail!(\n                \"bootstrap compose project '{name}' oneshot services must also appear in services\"\n            );\n        }\n        let files = resolve_paths(&config.project_dir, config.files);\n        let env_files = resolve_paths(&config.project_dir, config.env_files);\n        let path_dependencies = std::iter::once(ResourceId::new(","sourceCodeStart":287,"sourceCodeEnd":323,"githubUrl":"https://github.com/jdx/mise/blob/9dcfcaa0dc8747a2577d3270b69bb9d8313b2807/src/system/compose.rs#L287-L323","documentation":"`renew_anonymous_volumes` maps to `docker compose up --renew-anon-volumes`, an up-time flag that recreates containers' anonymous volumes. It is meaningless for a project being removed, so `ComposeRequest::from_toml` rejects it unless `state = \"running\"`.","triggerScenarios":"A compose table sets `renew_anonymous_volumes = true` while `state` is `\"present\"`/`\"absent\"` (anything other than `\"running\"`).","commonSituations":"Adding the flag to force fresh volumes while debugging, but the table's state was changed (or copied from a teardown block); misunderstanding 'present' as 'running'.","solutions":["Set `state = \"running\"` on the table that uses `renew_anonymous_volumes`.","Or remove the flag if you do not need anonymous-volume recreation on every converge."],"exampleFix":"# before\n[bootstrap.compose.web]\nproject_dir = \"/srv/web\"\nstate = \"absent\"\nrenew_anonymous_volumes = true\n\n# after\n[bootstrap.compose.web]\nproject_dir = \"/srv/web\"\nstate = \"running\"\nrenew_anonymous_volumes = true","handlingStrategy":"validation","validationCode":"if cfg.renew_anonymous_volumes {\n    assert!(cfg.state == ComposeState::Running,\n        \"renew_anonymous_volumes requires state = running\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Remember renew_anonymous_volumes is an `up` flag; only running-state converge can apply it.","Use it deliberately (it recreates anonymous volumes), not as a leftover debug flag."],"tags":["mise","bootstrap","compose","config","conflicting-options","docker-up"],"backgroundTag":"conflicting-config-options","analyzedSha":"9dcfcaa0dc8747a2577d3270b69bb9d8313b2807","analyzedAt":"2026-08-17T14:28:50.624Z","schemaVersion":2},"datasetVersion":"2026-08-21T13:17:26.733Z"}