jdx/mise · warning · eyre::Report

"{path_raw}".{id}: no recognized operation (block, source, o

Error message

"{path_raw}".{id}: no recognized operation (block, source, or line), ignoring entry

What it means

After parsing, an edit entry table must contain at least one recognized operation: block, source, or line. A table with none of them (for example only template, comment, or empty) is warned about and skipped. The fields are deliberately loosely typed so entries using future operations degrade to this warning instead of failing the whole config parse.

Source

Thrown at src/system/edits.rs:249

    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"
            )
        }
        (false, None) => {
            bail!(
                "\"{path_raw}\".{id}: no recognized operation (block, source, or line), ignoring entry"
            )
        }
        (true, None) => {
            let source = match (entry.block, entry.source) {
                (Some(_), Some(_)) => {
                    bail!(
                        "\"{path_raw}\".{id}: block and source are mutually exclusive, ignoring entry"
                    )
                }
                (Some(inline), None) => BlockSource::Inline(inline),
                (None, Some(src)) => {
                    let src = file::replace_path(&src);
                    BlockSource::File(if src.is_relative() {
                        base.join(src)
                    } else {
                        src
                    })

View on GitHub (pinned to 9dcfcaa0dc)

Solutions

  1. Add exactly one of block =, source =, or line = to the entry
  2. Check for typos in the operation key (line, not lnie/lines)

Example fix

# before
[dotfiles]
"~/.zshrc/aliases" = { template = "tera" }

# after
[dotfiles]
"~/.zshrc/aliases" = { block = 'alias g=git', template = "tera" }
Defensive patterns

Strategy: validation

Validate before calling

python3 - <<'EOF'
import tomllib
for key, v in tomllib.load(open('mise.toml','rb')).get('dotfiles', {}).items():
    if isinstance(v, dict):
        assert any(k in v for k in ('block', 'source', 'line')), f'no operation: {key}'
EOF

Prevention

When it happens

Trigger: { template = "tera" } or { comment = "#" } or { } as an edit entry value in [dotfiles].

Common situations: Starting an entry from a template scaffold and forgetting the content key; YAML-to-TOML conversion dropping the content key; typo like lnie = ... that silently parses as an unknown key.

Understand the failure class

Background: "Missing required field" and "field is required" errors: why libraries reject payloads that omit mandatory fields — this error's family across 20 libraries.

Related errors


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