jdx/mise · error
bootstrap resource ' ' requires group ' ', but that group…
Error message
bootstrap resource '{resource}' requires group '{group}', but that group is absent What it means
Mirror of the owner check: a bootstrap resource declares a group, and group planning resolved it to AccountState::Absent. The planner refuses to depend on a group that will not exist after the plan runs.
Solutions
- Mark the group Present (or remove its Absent declaration)
- Reassign the resource's group to an existing Present group
- Remove the group field if the default group suffices
Example fix
// before
group("app-team", state: "absent")
directory(group: "app-team")
// after
directory(group: "app-new-team") Defensive patterns
Strategy: validation
Validate before calling
const groups = new Map(accountResources.filter(r => r.kind === 'group').map(r => [r.name, r.state]));
for (const res of resources) if (res.group && groups.get(res.group) === 'absent') throw new Error(`${res.id}: group ${res.group} is declared absent`); Type guard
function groupExists(res, groups) { return !res.group || groups.get(res.group) === 'present'; } Try / catch
try { plan = planner.plan(); } catch (e) { if (String(e).includes('requires group') && e.message.includes('is absent')) { reassignGroup(config); } else throw e; } Prevention
- Audit group references before deleting a group resource
- Keep group membership/ownership in the same config file as the group declaration
- Rename groups atomically: create the new one and update references before removing the old
When it happens
Trigger: Calling plan with a bootstrap resource whose group is set to a group name for which a group resource exists but is declared Absent.
Common situations: Deleting a legacy group while files/directories still declare it as their group; layered configs disagree about the group's state; a group rename not propagated to resource definitions.
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
- absent bootstrap group
- bootstrap resource ' ' requires owner ' ', but that user is…
- bootstrap user ' ' sets exclusive_groups without groups
- bootstrap user ' ' requires group ' ', but that group is…
- bootstrap user ' ' requires undeclared group
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/3f3d33ee506acedf.
Report an issue: GitHub.
Appendix: source
Thrown at src/system/resources.rs:724
return Ok(());
}
if let Some(owner) = owner {
match user_states.get(owner) {
Some(super::accounts::AccountState::Present) => {
plan.add_dependency(resource, ResourceId::new("user", owner))?;
}
Some(super::accounts::AccountState::Absent) => bail!(
"bootstrap resource '{resource}' requires owner '{owner}', but that user is absent"
),
None => {}
}
}
if let Some(group) = group {
match group_states.get(group) {
Some(super::accounts::AccountState::Present) => {
plan.add_dependency(resource, ResourceId::new("group", group))?;
}
Some(super::accounts::AccountState::Absent) => bail!(
"bootstrap resource '{resource}' requires group '{group}', but that group is absent"
),
None => {}
}
}
Ok(())
}
fn desired_package(request: &super::packages::PackageRequest) -> String {
if request.desired == super::packages::PackageDesiredState::Absent {
return "absent".to_string();
}
request
.version
.as_ref()
.map(|version| format!("installed ({version})"))
.unwrap_or_else(|| "installed (any version)".to_string())
}View on GitHub (pinned to 533346cc37)