jdx/mise · error

managed path ' ' notifies user-scope bootstrap service ' '…

Error message

managed path '{}' notifies user-scope bootstrap service '{}'; notifications apply to system services only

What it means

Managed-path `notify` entries can only trigger systemd notifications for system-scope services. mise validates that no managed path notifies a user-scope bootstrap service, since user services are not reachable through the system notification mechanism.

Solutions

  1. Remove the notification from the managed path's `notify` list
  2. Or change the service to `scope = "system"` if a system service is intended
  3. Point the notification at a system-scope service instead

Example fix

# before
[[tasks]]
notify = ["myapp"]  # myapp is scope = "user"
# after: change scope
[services.myapp]
scope = "system"
Defensive patterns

Strategy: validation

Validate before calling

grep -rn 'notify' mise.toml | while read -r n; do check the referenced service's scope is "system"; done

Prevention

When it happens

Trigger: `validate_notifications` walks managed resources with `notify` entries and finds a notification naming a service present in `user_services` — e.g. `[services.myapp] scope = "user"` while a managed file declares `notify = ["myapp"]`.

Common situations: Adding a notify reference to a service without checking its scope; converting a service from system to user scope while notifications remain; shared config where the service scope differs between machines.

Understand the failure class

Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.

Related errors


AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17). Data as JSON: /api/errors/5b23a23916af96e3. Report an issue: GitHub.

Appendix: source

Thrown at src/system/services_common.rs:310

        .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 user_services.iter().any(|name| name == notification) {
            bail!(
                "managed path '{}' notifies user-scope bootstrap service '{}'; notifications apply to system services only",
                resource.display(),
                notification
            );
        }
        if !configured.contains(notification.as_str()) {
            bail!(
                "managed path '{}' notifies unconfigured bootstrap service '{}'",
                resource.display(),
                notification
            );
        }
    }
    Ok(())
}

fn default_true() -> bool {
    true

View on GitHub (pinned to 533346cc37)