{"record":{"id":"1bb77f56ee2ceacf","repo":"jdx/mise","slug":"is-not-tracked-mise-dot-paths-lists-what-is","errorCode":null,"errorMessage":"{} is not tracked; `mise dot paths` lists what is","messagePattern":"(.+?) is not tracked; `mise dot paths` lists what is","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/history/replay.rs","lineNumber":134,"sourceCode":"            \"name the paths to roll back, or `--to <ref> --all` for everything the checkpoint covers\"\n        );\n    }\n    if req.to.is_none() && req.all {\n        bail!(\"`--all` needs `--to <ref>`\");\n    }\n    let (store, tracked, entries) = crate::cli::dotfiles::history::open().await?;\n    let repo = store\n        .repo()\n        .ok_or_else(|| eyre::eyre!(\"rolling back requires git\"))?;\n    let live = live_tree(repo, &tracked)?;\n    let paths: Vec<PathBuf> = req\n        .paths\n        .iter()\n        .map(|path| normalize_target(path))\n        .collect();\n    for path in &paths {\n        if tracked.entry_for(path).is_none() {\n            bail!(\n                \"{} is not tracked; `mise dot paths` lists what is\",\n                display_path(path)\n            );\n        }\n    }\n    let targets = match &req.to {\n        Some(reference) => {\n            let entry = crate::cli::dotfiles::history::resolve(\n                reference,\n                &entries,\n                (paths.len() == 1)\n                    .then(|| display_path(&paths[0]))\n                    .as_deref(),\n            )?;\n            refuse_unusable(&entry)?;\n            let paths = if req.all {\n                covered_paths(&entry.checkpoint)\n            } else {","sourceCodeStart":116,"sourceCodeEnd":152,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/system/history/replay.rs#L116-L152","documentation":"Rollback only works on paths that dotfiles history tracks. Each requested path is normalized and looked up in the tracked-path registry; if it isn't there, the command aborts rather than silently ignoring it.","triggerScenarios":"`mise dot rollback <path>` where `<path>` was never added to dot tracking (or is spelled/normalized differently than the tracked entry), detected via `tracked.entry_for(path) == None`.","commonSituations":"Typos or non-normalized paths (relative vs absolute, symlinks, trailing slashes) in the rollback command; rolling back a dotfile after removing it from tracking; running rollback in a fresh checkout where the path was never tracked.","solutions":["Run `mise dot paths` to list tracked paths and use an exact entry from that list","Add the path to dot tracking first (`mise dot track`/equivalent) before rolling it back","Check spelling and use the same path form (absolute, no symlink indirection) as shown by `mise dot paths`"],"exampleFix":"// before\nmise dot rollback ~/.zshrc\n// after\nmise dot paths        # confirms ~/.config/zsh/.zshrc is the tracked path\nmise dot rollback ~/.config/zsh/.zshrc","handlingStrategy":"validation","validationCode":"const tracked = await mise.dot.paths();\nfor (const p of req.paths) {\n  if (!tracked.includes(p)) throw new Error(`${p} is not tracked`);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Copy paths verbatim from `mise dot paths`","Keep tracked paths absolute and symlink-free in scripts","Track new dotfiles before expecting rollback to cover them"],"tags":["dotfiles","path","validation"],"backgroundTag":"resource-not-found","analyzedSha":"533346cc374382b41ec5ff70536252b2e96e725c","analyzedAt":"2026-09-17T13:35:38.149Z","contentChangedAt":"2026-09-17T13:35:38.149Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}