jdx/mise · error
brew-cask:{}: unsupported {kind} step type {}
Error message
brew-cask:{}: unsupported {kind} step type {} What it means
The catch-all arm of parse_flight_step. Each step object in preflight_steps/postflight_steps needs a "type", and mise implements exactly six: move, remove, copy, symlink, run, terminate_process. Any other type string — e.g. set_permissions, delete, launchctl — is unsupported and fails the whole cask parse with the cask token and offending type in the message.
Source
Thrown at src/system/packages/brew/cask.rs:5787
let failure_message = match object.get("failure_message") {
None | Some(Value::Null) => None,
Some(Value::String(value)) => Some(value.clone()),
Some(_) => bail!(
"brew-cask:{}: {kind} terminate_process failure_message must be a string",
cask.token
),
};
Ok(FlightStep::TerminateProcess {
name: name.to_string(),
match_mode,
sudo,
attempts,
must_succeed,
notices,
failure_message,
})
}
_ => bail!(
"brew-cask:{}: unsupported {kind} step type {}",
cask.token,
step_type
),
}
}
fn parse_flight_sudo(cask: &Cask, kind: &str, value: Option<&Value>) -> Result<FlightSudo> {
match value {
None | Some(Value::Bool(false)) => Ok(FlightSudo::Never),
Some(Value::Bool(true)) => Ok(FlightSudo::Always),
Some(Value::String(value)) if value == "if_needed" => Ok(FlightSudo::IfNeeded),
_ => bail!("brew-cask:{}: unsupported {kind} sudo setting", cask.token),
}
}
fn parse_flight_guards(cask: &Cask, kind: &str, value: Option<&Value>) -> Result<Vec<FlightGuard>> {
valueView on GitHub (pinned to 6f52dcdf99)
Solutions
- Replace the unsupported step with one of the implemented types (move, remove, copy, symlink, run, terminate_process) if the effect can be expressed that way
- Update mise — new step types are added over time; retest after upgrading
- Otherwise install the cask with native brew instead of mise and report the cask token to the mise issue tracker
Example fix
// before
{"steps": [{"type": "set_permissions", "path": "bin/tool", "mode": "755"}]}
// after
{"steps": [{"type": "run", "command": {"path": "chmod", "args": ["755", "bin/tool"]}}]} Defensive patterns
Strategy: validation
Validate before calling
const SUPPORTED_STEP_TYPES: &[&str] = &["move", "remove", "copy", "symlink", "run", "terminate_process"];
fn flight_steps_ok(v: &serde_json::Value, kind: &str) -> bool {
let Some(groups) = v.get(kind).and_then(|g| g.as_array()) else { return true; };
groups.iter().all(|g| g.get("steps").and_then(|s| s.as_array()).map(|steps| {
steps.iter().all(|s| {
s.get("type").and_then(|t| t.as_str())
.map(|t| SUPPORTED_STEP_TYPES.contains(&t))
.unwrap_or(false)
})
}).unwrap_or(false))
} Type guard
fn is_supported_step_type(v: &serde_json::Value) -> bool {
v.as_str().map(|t| ["move", "remove", "copy", "symlink", "run", "terminate_process"].contains(&t)).unwrap_or(false)
} Try / catch
match parse_flight_steps(&cask, &artifact, kind) {
Ok(steps) => { /* proceed */ }
Err(e) if e.to_string().contains("step type") => {
eprintln!("cask {} uses a flight step type mise does not implement; update mise or use brew directly", cask.token);
}
Err(e) => return Err(e),
} Prevention
- Restrict custom cask steps to move/remove/copy/symlink/run/terminate_process
- After Homebrew metadata refreshes, upgrade mise before installing casks with new step types
When it happens
Trigger: {"type": "set_permissions", ...} or any unrecognized type string inside a steps array of preflight_steps/postflight_steps; also triggered by step objects whose type key is present but names a Homebrew feature mise has not implemented.
Common situations: Homebrew casks using newer or rarer flight features (permissions, launchd management) that mise's Rust parser has not implemented yet; hand-written steps inventing types; version skew between Homebrew metadata and mise.
Related errors
- brew-cask:{}: {kind} terminate_process match must be name or
- brew-cask:{}: unsupported {kind} sudo setting
- brew-cask:{}: unsupported {kind} run command base {}
- brew-cask:{}: unsupported {kind} run guard platform {}
- brew-cask:{}: unsupported {kind} run guard condition {}
AI-assisted analysis of jdx/mise@6f52dcdf99 (2026-08-22).
Data as JSON: /api/errors/7bc07ba48255fc80.
Report an issue: GitHub.