{"record":{"id":"a6ec7ab43f5e417b","repo":"jdx/mise","slug":"has-no-uv-dependency-graph-run-mise-lock","errorCode":null,"errorMessage":"{} has no uv dependency graph; run `mise lock`","messagePattern":"(.+?) has no uv dependency graph; run `mise lock`","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/backend/pipx.rs","lineNumber":459,"sourceCode":"                crate::lockfile::version_for_request(&ctx.config, &tv.request)?\n            } else {\n                None\n            };\n            let graph_required = revision.is_some_and(|v| v >= 2)\n                || (!tv.resolved_from_lockfile() && Settings::get().lockfile_creation_enabled());\n            if graph_required {\n                if !self.uv_lock_options_supported(&tv) {\n                    if ctx.locked {\n                        self.validate_lock_options(&tv)?;\n                    }\n                    warn!(\n                        \"{} dependency graph skipped because uvx_args or pipx_args are configured; installing with version-only resolution\",\n                        self.ba.short\n                    );\n                    return Ok(tv);\n                }\n                if ctx.locked {\n                    bail!(\n                        \"{} has no uv dependency graph; run `mise lock`\",\n                        self.ba.short\n                    );\n                }\n                if self\n                    .spawnable_dependency(&ctx.config, Some(&ctx.ts), \"uv\")\n                    .await\n                    .is_none()\n                {\n                    return Ok(tv);\n                }\n                if let Some(version) = tv.uv_install_path_version().map(str::to_owned) {\n                    tv.version = version;\n                }\n                match self.resolve_uv_lock(&ctx.config, &tv).await {\n                    Ok(lock) => tv.uv_lock = Some(lock),\n                    Err(error) => {\n                        warn!(","sourceCodeStart":441,"sourceCodeEnd":477,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/backend/pipx.rs#L441-L477","documentation":"prepare_install_version refuses to install a pipx tool whose lockfile declares a uv dependency graph when the graph is missing. Locking with uv records the full resolved dependency set; replaying an install from that lock requires the graph, so mise bails and tells you to run `mise lock` to (re)generate it.","triggerScenarios":"Running `mise install` (ctx.locked = true) for a pipx tool that has a uv dependency graph recorded in mise.lock, while uvx_args or pipx_args are NOT configured (the skip path above didn't apply) and the graph is absent/unavailable.","commonSituations":"Deleting or regenerating mise.lock without re-running `mise lock`; cloning a repo and installing from a lockfile whose dependency graph entries were stripped; switching machines where lock content was trimmed.","solutions":["Run `mise lock` to regenerate the uv dependency graph for the tool","Reinstall after locking: `mise install`","If you don't need dependency locking, remove the lock entry / related lock options so install falls back to version-only resolution"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// before installing a locked pipx tool, ensure the lock has the uv graph\nconst entry = lock.tools[\"pipx:ruff\"];\nif (entry?.hasUvGraph && !entry.graph) throw new Error(\"run `mise lock` first\");","typeGuard":null,"tryCatchPattern":"try { await $`mise install pipx:ruff` } catch (e) {\n  if (/run `mise lock`/.test(e.message)) await $`mise lock`;\n  else throw e;\n}","preventionTips":["Run `mise lock` after any change to pipx tool options before `mise install`","Never hand-edit or trim mise.lock; commit it fully to the repo","In CI, always lock before install in the same pipeline"],"tags":["pipx","uv","lockfile","install"],"backgroundTag":"missing-required-config-field","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"}