jdx/mise · error
packslip:{tool_name} is not a project name; use github.com/o
Error message
packslip:{tool_name} is not a project name; use github.com/owner/repo, owner/repo, or a host such as tool.example.com What it means
The packslip backend requires a fully qualified project name — a host (github.com, gitlab.com, or custom), owner, and repo. `project_name` validates the constructed project and bails when the name is not a valid project (missing owner/repo or missing host), because without it mise cannot resolve release manifests or pin a signer.
Source
Thrown at src/backend/packslip.rs:137
.iter()
.map(|s| s.to_string())
.collect()
}
/// The packslip project name behind a tool name: `github.com/owner/repo`
/// as given, `owner/repo` with github.com implied, or a vendor's host.
pub(crate) fn project_name(tool_name: &str) -> Result<String> {
let name = tool_name.trim_matches('/');
let first = name.split('/').next().unwrap_or_default();
let project = if first.contains('.') {
name.to_string()
} else {
format!("github.com/{name}")
};
let forge_without_repo =
packslip::model::project_host(&project) == "github.com" && repository(&project).is_none();
if !packslip::model::valid_project(&project) || forge_without_repo {
bail!(
"packslip:{tool_name} is not a project name; use github.com/owner/repo, owner/repo, or a host such as tool.example.com"
);
}
Ok(project)
}
/// The release asset a project's packslip is published as.
fn bundle_name(project: &str) -> String {
match repository_subpath(project) {
Some(sub) => format!("packslip.{}.sigstore.json", sub.replace('/', "-")),
None => "packslip.sigstore.json".to_string(),
}
}
/// The signed release list of a project on its own domain.
fn well_known_url(project: &str) -> String {
match project.split_once('/') {
Some((host, path)) => format!("https://{host}/.well-known/packslip/{path}.json"),View on GitHub (pinned to afd2eddd3a)
Solutions
- Use the fully qualified form: `packslip:github.com/owner/repo` (or `packslip:owner/repo`).
- Use a custom host if releases live elsewhere: `packslip:tool.example.com/owner/repo`.
- Check the tool's README for the exact packslip project identifier.
Example fix
// before (mise.toml) [tools] "packslip:mytool" = "1.0" // after [tools] "packslip:github.com/owner/mytool" = "1.0"
Defensive patterns
Strategy: validation
Validate before calling
const isValidPackslipName = (s) =>
/^(github\.com|gitlab\.com|[a-z0-9.-]+\.[a-z]{2,})\/[\w.-]+\/[\w.-]+$/i.test(s) ||
/^[\w.-]+\/[\w.-]+$/.test(s); // owner/repo shorthand
if (!isValidPackslipName(name)) throw new Error(`use github.com/owner/repo or owner/repo: ${name}`); Prevention
- Always write packslip refs as host/owner/repo or at minimum owner/repo.
- Copy the project identifier verbatim from the upstream project's install docs.
- Never shorten to a bare tool name like other registry backends allow.
When it happens
Trigger: Configuring a tool as `packslip:somerepo` or `packslip:owner` without a host prefix when the shorthand cannot be expanded, or a malformed name like `packslip:github.com/repo` (missing owner).
Common situations: Users writing `packslip:mytool` by analogy with other backends; forgetting the owner portion; assuming bare repo names work like the github: backend's owner/repo shorthand.
Understand the failure class
Background: "invalid id" errors: invalid identifier format — why libraries reject IDs before lookup, and how to fix them — this error's family across 37 libraries.
Related errors
- packslip: list_identity_prefix must be a non-empty string
- packslip: list_identity_prefix cannot be combined with pubke
- packslip: list_identity_prefix requires an issuer
- the release list at {url} is for {}, not {project}
- "{path_raw}".{id:?}: ids may only contain letters, digits, '
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/ca09850ef59d4cc5.
Report an issue: GitHub.