{"record":{"id":"9f204b04438334e3","repo":"jdx/mise","slug":"unknown-trigger-other-use-save-agent-or-upd","errorCode":null,"errorMessage":"unknown trigger {other:?}; use save, agent, or update","messagePattern":"unknown trigger (.+?); use save, agent, or update","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/dotfiles/save.rs","lineNumber":70,"sourceCode":"        tracked: &crate::system::history::tracked::TrackedSet,\n        draft: Draft,\n    ) -> Result<()> {\n        match self.capture(store, tracked, draft) {\n            Ok(()) => Ok(()),\n            Err(err) if self.best_effort => {\n                warn!(\"history save: {err:#}\");\n                Ok(())\n            }\n            Err(err) => Err(err),\n        }\n    }\n\n    async fn save(self) -> Result<()> {\n        let trigger = match self.trigger.as_str() {\n            \"save\" => Trigger::Save,\n            \"agent\" => Trigger::Agent,\n            \"update\" => Trigger::Update,\n            other => bail!(\"unknown trigger {other:?}; use save, agent, or update\"),\n        };\n        if !crate::config::Settings::get().history.enabled {\n            bail!(\"history is disabled (history.enabled = false)\");\n        }\n        let (store, tracked, entries) = super::history::open().await?;\n        if !self.paths.is_empty() {\n            let walk = tracked.walk()?;\n            for path in &self.paths {\n                let path = normalize_target(path);\n                let captured = walk.files.keys().any(|file| file.starts_with(&path));\n                if !captured {\n                    // saving a deleted manual-save path saves the deletion,\n                    // provided the path was captured before (a path that\n                    // never existed is not a deletion)\n                    let deletion = tracked\n                        .entry_for(&path)\n                        .is_some_and(|entry| !entry.policy.autosave)\n                        && std::fs::symlink_metadata(&path)","sourceCodeStart":52,"sourceCodeEnd":88,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/cli/dotfiles/save.rs#L52-L88","documentation":"Thrown by the dotfiles `save` command when the --trigger argument string is not one of the three supported trigger names: save, agent, or update. The trigger is matched exactly before any history work starts.","triggerScenarios":"Running `mise bootstrap dotfiles save --trigger <value>` with any string other than \"save\", \"agent\", or \"update\" (exact, lowercase match).","commonSituations":"Typos like --trigger Save or --trigger autosave; shell variables containing the wrong value; outdated scripts using a trigger name from an older version.","solutions":["Use one of: `--trigger save`, `--trigger agent`, or `--trigger update`","Check the variable interpolated into --trigger for typos or casing","Check `mise bootstrap dotfiles save --help` for the accepted trigger values"],"exampleFix":"// before\nmise bootstrap dotfiles save --trigger autosave\n// after\nmise bootstrap dotfiles save --trigger save","handlingStrategy":"validation","validationCode":"case \"$TRIGGER\" in\n  save|agent|update) ;;\n  *) echo \"invalid trigger: $TRIGGER (use save, agent, or update)\" >&2; exit 1 ;;\nesac\nmise bootstrap dotfiles save --trigger \"$TRIGGER\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Whitelist trigger values in scripts before invoking save","Use exact lowercase trigger names","Consult --help when upgrading mise in case trigger names change"],"tags":["cli","dotfiles","invalid-argument","enum"],"backgroundTag":"invalid-enum-value","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}