jdx/mise · warning · eyre::Report

"{path_raw}".{id:?}: ids may only contain letters, digits, '

Error message

"{path_raw}".{id:?}: ids may only contain letters, digits, '_', '-', and '.', ignoring entry

What it means

The id is the last path segment of a [dotfiles] edit key and becomes the text inside the marker lines (# >>> mise:<id> >>>) that delimit the managed block. Ids must be non-empty and contain only alphanumerics, '_', '-', and '.' so they can never collide with the marker syntax itself. Anything else is warned about and the entry skipped.

Source

Thrown at src/system/edits.rs:227

    }
    Some((path.to_string(), id.to_string()))
}

fn resolve_entry(
    path_raw: &str,
    id: String,
    entry: EditTomlEntry,
    base: &Path,
    config_path: &Path,
) -> Result<EditRequest> {
    let path = file::replace_path(path_raw);
    if path.is_relative() {
        bail!("path \"{path_raw}\" must be absolute or start with ~/, ignoring entry");
    }
    // ids end up inside marker lines — keep them to characters that can't
    // collide with the marker syntax itself
    if id.is_empty() || !id.chars().all(|c| c.is_alphanumeric() || "_-.".contains(c)) {
        bail!(
            "\"{path_raw}\".{id:?}: ids may only contain letters, digits, '_', '-', and '.', ignoring entry"
        );
    }
    let entry = match entry {
        EditTomlEntry::Block(inline) => EditTomlTable {
            block: Some(inline),
            source: None,
            template: None,
            line: None,
            comment: None,
        },
        EditTomlEntry::Table(table) => table,
    };
    let is_block = entry.block.is_some() || entry.source.is_some();
    let op = match (&is_block, &entry.line) {
        (true, Some(_)) => {
            bail!(
                "\"{path_raw}\".{id}: block/source and line are mutually exclusive, ignoring entry"

View on GitHub (pinned to 9dcfcaa0dc)

Solutions

  1. Rename the id to use only letters, digits, '_', '-', '.' — e.g. "git-aliases"
  2. Check for stray spaces around the id segment in the quoted key

Example fix

# before
[dotfiles]
"~/.zshrc/my edit" = { block = 'alias ll=ls -la' }

# after
[dotfiles]
"~/.zshrc/my-edit" = { block = 'alias ll=ls -la' }
Defensive patterns

Strategy: type-guard

Type guard

fn is_valid_edit_id(id: &str) -> bool {
    !id.is_empty() && id.chars().all(|c| c.is_alphanumeric() || "_-.".contains(c))
}

Prevention

When it happens

Trigger: Keys like "~/.zshrc/my edit" (space), "~/.zshrc/mise:activate" (colon), "~/.zshrc/#snippet" (hash), or an id using non-ASCII characters.

Common situations: Natural-language ids ("git aliases"); copying ids from other tools that allow colons; ids with slashes that turn into extra path segments and shift the split.

Related errors


AI-assisted analysis of jdx/mise@9dcfcaa0dc (2026-08-17). Data as JSON: /api/errors/daa0bfefa95c357b. Report an issue: GitHub.