{"record":{"id":"0b6acb6d03f35dd8","repo":"jdx/mise","slug":"managed-path-notifies-unconfigured-bootstrap-0b6acb","errorCode":null,"errorMessage":"managed path '{}' notifies unconfigured bootstrap service '{}'","messagePattern":"managed path '(.+?)' notifies unconfigured bootstrap service '(.+?)'","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/services_non_linux.rs","lineNumber":176,"sourceCode":"        .iter()\n        .map(|service| service.name.as_str())\n        .collect::<IndexSet<_>>();\n    for (resource, notification) in files\n        .iter()\n        .flat_map(|file| {\n            file.notify\n                .iter()\n                .map(move |notification| (file.path.as_path(), notification))\n        })\n        .chain(directories.iter().flat_map(|directory| {\n            directory\n                .notify\n                .iter()\n                .map(move |notification| (directory.path.as_path(), notification))\n        }))\n    {\n        if !configured.contains(notification.as_str()) {\n            bail!(\n                \"managed path '{}' notifies unconfigured bootstrap service '{}'\",\n                resource.display(),\n                notification\n            );\n        }\n    }\n    Ok(())\n}\n\npub(crate) fn apply_privileged_plan_from_stdin() -> Result<()> {\n    bail!(\"bootstrap system services are only supported on Linux\")\n}\n\nfn reject_configured(config: &Config) -> Result<Vec<ServiceRequest>> {\n    let configured = config.bootstrap_config_maps().any(|config_files| {\n        config_files.values().any(|cf| {\n            cf.bootstrap_config()\n                .is_some_and(|bootstrap| !bootstrap.services.is_empty())","sourceCodeStart":158,"sourceCodeEnd":194,"githubUrl":"https://github.com/jdx/mise/blob/6f52dcdf99e282ef7a7db68c81301fa4618d0f79/src/system/services_non_linux.rs#L158-L194","documentation":"This is the non-Linux counterpart of the notify-reference validation: every `notify` on a managed path (`[[bootstrap.files]]` / `[[bootstrap.directories]]`) must name a service declared under `[bootstrap.services]`. The check runs even on macOS/Windows so a broken reference never silently drops a reload/restart intent.","triggerScenarios":"Loading mise config on a non-Linux system where a `[[bootstrap.files]]` or `[[bootstrap.directories]]` block has `notify = [\"x\"]` but no matching `[bootstrap.services.x]` table exists anywhere in the composed config.","commonSituations":"A shared/committed mise.toml carries Linux bootstrap config; a colleague on macOS hits the dangling notify after the services block was moved into an OS-specific file that is not loaded on their platform.","solutions":["Add the matching `[bootstrap.services.<name>]` declaration wherever the notify target is expected to exist","Fix or remove the notify entry that references the undeclared service","Move Linux-only bootstrap config (files + services together) into an OS-specific config file such as `mise.linux.toml` so non-Linux machines never load half of it"],"exampleFix":"# before\n[[bootstrap.files]]\npath = \"/etc/myapp/app.conf\"\nnotify = [\"myapp\"]\n# no [bootstrap.services.myapp] anywhere\n\n# after\n[[bootstrap.files]]\npath = \"/etc/myapp/app.conf\"\nnotify = [\"myapp\"]\n\n[bootstrap.services.myapp]\nstate = \"running\"","handlingStrategy":"validation","validationCode":"jq -r '[.bootstrap.services // {} | keys[]] as $s | (.bootstrap.files // []) + (.bootstrap.directories // []) | .notify[]? | select(. as $n | $s | index($n) | not) | \"dangling notify: \\(.)\"' mise.toml","typeGuard":null,"tryCatchPattern":null,"preventionTips":["On mixed-OS teams, put the whole bootstrap section (files + services) in `mise.linux.toml`, never split across OS-visible files","CI-lint notify targets on every platform the repo supports"],"tags":["mise","bootstrap","config","notify","non-linux","validation"],"backgroundTag":"unresolved-config-reference","analyzedSha":"6f52dcdf99e282ef7a7db68c81301fa4618d0f79","analyzedAt":"2026-08-22T10:14:23.840Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}