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
- Rename the id to use only letters, digits, '_', '-', '.' — e.g. "git-aliases"
- 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
- Keep ids to lowercase-kebab or snake words ("mise-activate", "git_aliases")
- Never use spaces, colons, or slashes in the id segment of the key
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
- path "{path_raw}" must be absolute or start with ~/, ignorin
- "{path_raw}".{id}: block/source and line are mutually exclus
- "{path_raw}".{id}: no recognized operation (block, source, o
- "{path_raw}".{id}: block and source are mutually exclusive,
- "{path_raw}".{id}: unknown template engine '{other}' (expect
AI-assisted analysis of jdx/mise@9dcfcaa0dc (2026-08-17).
Data as JSON: /api/errors/daa0bfefa95c357b.
Report an issue: GitHub.