jdx/mise · error

the stamp list at is for , not

Error message

the stamp list at {url} is for {}, not {project}

What it means

Raised by packslip_stamps::fetch after verifying a stamp list's signature when the list's predicate.project does not match the project that was requested. This guards against a host serving a validly signed but wrong-project list (e.g. a list for a different tool), which would corrupt stamp state.

Solutions

  1. Fix the stamper/list URL so it points at the list for the requested project.
  2. Check the project name in your tool request/config for typos vs what the host publishes.
  3. Ask the publisher to correct the URL or re-publish the list under the correct project path if the host misroutes.

Example fix

// before (mise.toml)
stampers = ["example.com=https://example.com/lists/other-project/"]
// after
stampers = ["example.com=https://example.com/lists/my-project/"]
Defensive patterns

Strategy: validation

Validate before calling

// confirm the list URL's project segment matches the requested project
function urlMatchesProject(url, project) {
  return decodeURIComponent(url).includes(`/${project}/`) ||
         decodeURIComponent(url).endsWith(`/${project}`);
}

Try / catch

try {
  fetchStampList(host, project);
} catch (e) {
  if (String(e).includes("is for") && String(e).includes("not")) {
    throw new Error(`Stamper URL serves a different project's list; fix the URL for ${project}.`);
  } else throw e;
}

Prevention

When it happens

Trigger: Fetching the stamp list for `project` from a stamper's URL where verify_release_list succeeds but list.predicate.project differs — typically a URL template pointing at another project's list or a misconfigured stamper mapping.

Common situations: Copy-pasting a stamper/list URL from another project; a host redirect serving a different project's list; typos in the project name or URL path; a publisher re-pointing a URL at a different list without updating clients.

Related errors


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

Appendix: source

Thrown at src/packslip_stamps.rs:302

    for stamper in &stampers {
        let url = stamper.url(project);
        let text = match HTTP_FETCH.get_text(&url).await {
            Ok(text) => text,
            Err(err) if is_not_found(&err) => {
                missing_list(&stamper.host, project, &url)?;
                debug!("{}: no stamp list for {project} at {url}", stamper.host);
                stamps.hosts.push(stamper.host.clone());
                continue;
            }
            Err(err) => {
                return Err(err)
                    .wrap_err_with(|| format!("fetching the stamp list for {project} from {url}"));
            }
        };
        let list = verify_release_list(&text, &stamper.pin, true)
            .wrap_err_with(|| format!("verifying the stamp list from {}", stamper.host))?;
        if list.predicate.project != project {
            bail!(
                "the stamp list at {url} is for {}, not {project}",
                list.predicate.project
            );
        }
        check_sequence(&stamper.host, project, &list)?;
        stamps.add(&stamper.host, &list);
    }
    Ok(Some(stamps))
}

fn is_not_found(err: &eyre::Report) -> bool {
    crate::http::error_code(err) == Some(404)
}

#[cfg(test)]
mod tests {
    use super::*;
    use packslip::model::{

View on GitHub (pinned to 533346cc37)