jdx/mise · error
managed path '{}' notifies unconfigured bootstrap service '{
Error message
managed path '{}' notifies unconfigured bootstrap service '{}' What it means
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.
Source
Thrown at src/system/services_non_linux.rs:176
.iter()
.map(|service| service.name.as_str())
.collect::<IndexSet<_>>();
for (resource, notification) in files
.iter()
.flat_map(|file| {
file.notify
.iter()
.map(move |notification| (file.path.as_path(), notification))
})
.chain(directories.iter().flat_map(|directory| {
directory
.notify
.iter()
.map(move |notification| (directory.path.as_path(), notification))
}))
{
if !configured.contains(notification.as_str()) {
bail!(
"managed path '{}' notifies unconfigured bootstrap service '{}'",
resource.display(),
notification
);
}
}
Ok(())
}
pub(crate) fn apply_privileged_plan_from_stdin() -> Result<()> {
bail!("bootstrap system services are only supported on Linux")
}
fn reject_configured(config: &Config) -> Result<Vec<ServiceRequest>> {
let configured = config.bootstrap_config_maps().any(|config_files| {
config_files.values().any(|cf| {
cf.bootstrap_config()
.is_some_and(|bootstrap| !bootstrap.services.is_empty())View on GitHub (pinned to 6f52dcdf99)
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
Example fix
# before [[bootstrap.files]] path = "/etc/myapp/app.conf" notify = ["myapp"] # no [bootstrap.services.myapp] anywhere # after [[bootstrap.files]] path = "/etc/myapp/app.conf" notify = ["myapp"] [bootstrap.services.myapp] state = "running"
Defensive patterns
Strategy: validation
Validate before calling
jq -r '[.bootstrap.services // {} | keys[]] as $s | (.bootstrap.files // []) + (.bootstrap.directories // []) | .notify[]? | select(. as $n | $s | index($n) | not) | "dangling notify: \(.)"' mise.toml Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- managed path '{}' notifies unconfigured bootstrap service '{
- invalid bootstrap secret name '{name}': use ASCII letters, d
- bootstrap service '{name}' cannot be both masked and running
- bootstrap service '{name}' cannot be both masked and enabled
- mise oci does not support [bootstrap.macos.*] defaults (foun
AI-assisted analysis of jdx/mise@6f52dcdf99 (2026-08-22).
Data as JSON: /api/errors/0b6acb6d03f35dd8.
Report an issue: GitHub.