jdx/mise · error

cannot order missing bootstrap resource

Error message

cannot order missing bootstrap resource '{resource}'

What it means

BootstrapPlan::add_ordering records an `order_after` edge controlling phase ordering. Like add_dependency, it validates the target resource exists; ordering against an undeclared id bails with this error. It exists to keep the ordering graph closed over declared resources.

Solutions

  1. Check the ordering entry's resource id against the declared ids in your bootstrap config.
  2. Fix the typo or declare the missing resource.
  3. Remove the ordering entry if the predecessor no longer exists.
  4. Re-run the bootstrap plan to verify ordering resolves.

Example fix

# before
[[bootstrap.resources]]
id = "dotfiles"
order_after = ["pakages"]  # typo
# after
[[bootstrap.resources]]
id = "dotfiles"
order_after = ["packages"]
Defensive patterns

Strategy: validation

Validate before calling

# Verify every order_after id is declared
for dep in $(grep -oP '(?<=order_after = \[")[^"]+' mise.toml); do
  grep -q "id = \"$dep\"" mise.toml || echo "missing resource: $dep"
done

Prevention

When it happens

Trigger: `mise bootstrap` planning where an ordering directive references a resource id that was never inserted into the plan (typo or removed resource).

Common situations: Reordering phases after renaming ids; declaring an order_after pointing at a resource defined in a config file that isn't loaded; manual edits to bootstrap config order entries.

Understand the failure class

Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.

Related errors


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

Appendix: source

Thrown at src/system/resources.rs:254

        };
        if !resource.depends_on.contains(&dependency) {
            resource.depends_on.push(dependency);
        }
        Ok(())
    }

    pub(crate) fn output(&self) -> Result<BootstrapPlanOutput<'_>> {
        let resources = self.ordered()?;
        let mut summary = PlanSummary::default();
        for resource in &resources {
            summary.add(resource.action);
        }
        Ok(BootstrapPlanOutput { resources, summary })
    }

    fn add_ordering(&mut self, resource: &ResourceId, predecessor: ResourceId) -> Result<()> {
        let Some(resource) = self.resources.get_mut(resource) else {
            bail!("cannot order missing bootstrap resource '{resource}'");
        };
        if !resource.order_after.contains(&predecessor) {
            resource.order_after.push(predecessor);
        }
        Ok(())
    }

    fn ordered(&self) -> Result<Vec<&ResourcePlan>> {
        let mut incoming = self
            .resources
            .keys()
            .cloned()
            .map(|id| (id, 0_usize))
            .collect::<IndexMap<_, _>>();
        let mut outgoing: HashMap<ResourceId, Vec<ResourceId>> = HashMap::new();

        for resource in self.resources.values() {
            for dependency in resource.depends_on.iter().chain(&resource.order_after) {

View on GitHub (pinned to 533346cc37)