jdx/mise · error
vfox plugin artifacts must not declare executables
Error message
vfox plugin artifacts must not declare executables
What it means
As part of the vfox plugin artifact contract, `validate_artifact` (src/plugins/packslip.rs) rejects artifacts that declare executables (`artifact.bin` non-empty). vfox plugins ship Lua/agent code inside a tarball, not standalone binaries, so any `bin` entries indicate a plain tool artifact mislabeled as a plugin.
Source
Thrown at src/plugins/packslip.rs:186
if existed {
file::rename(backup, destination).wrap_err("restoring previous plugin")?;
}
return Err(error);
}
Ok(())
}
pub(crate) fn validate_artifact(artifact: &packslip::model::Artifact) -> Result<()> {
ensure!(
artifact
.extensions
.get("mise")
.and_then(|v| v.get("plugin"))
.and_then(|v| v.as_str())
== Some("vfox"),
"packslip artifact must declare extensions.mise.plugin = vfox"
);
ensure!(
artifact.bin.is_empty(),
"vfox plugin artifacts must not declare executables"
);
ensure!(
artifact.os.is_none() && artifact.arch.is_none() && artifact.libc.is_none(),
"vfox plugin artifact must be portable"
);
ensure!(
artifact.requires.is_none(),
"vfox plugin artifacts must not declare host requirements"
);
ensure!(
matches!(artifact.format.as_deref(), Some("tar.gz" | "tgz")),
"vfox plugin artifacts currently require tar.gz format"
);
Ok(())
}
View on GitHub (pinned to afd2eddd3a)
Solutions
- Remove all `bin` entries from the plugin artifact's manifest and republish.
- Split the release: keep the vfox plugin artifact free of executables and declare CLI binaries in a separate non-plugin artifact.
- If the project is actually a binary tool, install it through the standard packslip tool path instead of the plugin contract.
Example fix
// before (manifest) [[artifacts.plugin.bin]] name = "mytool" path = "bin/mytool" // after (manifest) [artifacts.plugin.extensions.mise] plugin = "vfox" # bin entries removed
Defensive patterns
Strategy: validation
Validate before calling
// fail the release if a plugin artifact declares executables
jq -e '.artifacts[] | select(.extensions.mise.plugin == "vfox" and (.bin | length == 0))' manifest.json \
|| { echo "vfox plugin artifact must not declare bin entries"; exit 1; } Prevention
- Never include a bin section in plugin artifact manifests.
- Split plugin payloads and CLI binaries into distinct artifacts/releases.
- Add a CI lint that asserts plugin manifests contain no bin entries.
When it happens
Trigger: A packslip release manifest declares `bin = [...]` (or `[[bin]]` entries) on the artifact that is being validated as a vfox plugin via `plugin_artifact_contract`.
Common situations: Author reused a binary-tool manifest as a plugin manifest; the release template always emits a `bin` section; an artifact bundles both a plugin and a CLI binary.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- packslip artifact must declare extensions.mise.plugin = vfox
- vfox plugin artifacts must not declare host requirements
- the packslip names an executable {:?}, which is not a plain
- an exec entry with no command
- vfox plugin artifact must be portable
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/9890feea54423305.
Report an issue: GitHub.