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

  1. Add the matching `[bootstrap.services.<name>]` declaration wherever the notify target is expected to exist
  2. Fix or remove the notify entry that references the undeclared service
  3. 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

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


AI-assisted analysis of jdx/mise@6f52dcdf99 (2026-08-22). Data as JSON: /api/errors/0b6acb6d03f35dd8. Report an issue: GitHub.