{"record":{"id":"5e21ffa2aa05f866","repo":"jdx/mise","slug":"mise-upgrade-monorepo-is-not-implemented-yet","errorCode":null,"errorMessage":"mise upgrade --monorepo is not implemented yet","messagePattern":"mise upgrade --monorepo is not implemented yet","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/upgrade.rs","lineNumber":163,"sourceCode":"        if self.local {\n            ConfigScope::LocalOnly\n        } else {\n            ConfigScope::All\n        }\n    }\n\n    pub async fn run(mut self) -> Result<()> {\n        if self.legacy_bump {\n            deprecated_at!(\n                \"2026.8.5\",\n                \"2027.8.5\",\n                \"cli.upgrade.bump-l\",\n                \"`mise upgrade -l` is deprecated. Use `mise upgrade -b` or `mise upgrade --bump` instead. After removal, `-l` will become shorthand for `--local`.\"\n            );\n            self.bump = true;\n        }\n        if self.monorepo {\n            unimplemented!(\"mise upgrade --monorepo is not implemented yet\");\n        }\n        let mut config = Config::get().await?;\n        if !self.is_dry_run() {\n            crate::lockfile::migrate_monorepo_lockfiles(&config)?;\n        }\n        let ts = ToolsetBuilder::new()\n            .with_args(&self.tool)\n            .with_scope(self.scope())\n            .build(&config)\n            .await?;\n        // Compute before_date once to ensure consistency when using relative durations\n        let before_date = self.get_before_date()?;\n        let opts = ResolveOptions {\n            use_locked_version: false,\n            latest_versions: true,\n            resolve_rolling_channels: false,\n            prefer_exact_version: false,\n            before_date,","sourceCodeStart":145,"sourceCodeEnd":181,"githubUrl":"https://github.com/jdx/mise/blob/6bd4a54fadcdf3a6757cc44061a9528b48dd2ae7/src/cli/upgrade.rs#L145-L181","documentation":"`mise upgrade` defines a `--monorepo` clap flag explicitly labeled a placeholder (src/cli/upgrade.rs:106-108: 'Placeholder for future monorepo upgrades; mise upgrade --monorepo is not implemented yet'). Passing it makes `Upgrade::run` hit `unimplemented!()` at src/cli/upgrade.rs:163 before `Config::get()` is even awaited, so no lockfile migration, outdated scan, or install happens. The flag reserves the CLI grammar for future monorepo support only.","triggerScenarios":"Running `mise upgrade --monorepo` (or `mise up --monorepo`, since `up` is a visible alias). The panic fires immediately in `run()` after only the legacy `-l` deprecation handling, so the command aborts with exit failure and a panic message rather than upgrading anything.","commonSituations":"Upgrade automation written against planned monorepo functionality discussed in mise issues; shell completion surfacing the flag; lockfile-using monorepos (note `migrate_monorepo_lockfiles` exists at src/cli/upgrade.rs:167) leading users to assume the flag already works; version drift between a teammate's mise and yours.","solutions":["Remove `--monorepo` and run `mise upgrade` inside each project directory; mise.lock handling already runs per config via migrate_monorepo_lockfiles","Scope upgrades per project with `mise upgrade --local`, or bump ranges with `mise upgrade -b` inside each subproject","Use `mise upgrade -n` (dry-run) in each subproject before real upgrades","Check mise release notes / `mise --version` and adopt the flag only once monorepo support ships"],"exampleFix":"# before\nmise upgrade --monorepo\n# after\nfor d in services/*/; do (cd \"$d\" && mise upgrade); done","handlingStrategy":"validation","validationCode":"# gate the flag on real support before upgrading\nif mise upgrade --help 2>/dev/null | grep -q -- '--monorepo.*not implemented'; then\n  for d in services/*/; do (cd \"$d\" && mise upgrade -n); done  # dry-run per project\nelse\n  mise upgrade --monorepo\nfi","typeGuard":null,"tryCatchPattern":"# shell: fall back to per-project upgrades on the panic\nout=$(mise upgrade --monorepo 2>&1)\nif [ $? -ne 0 ] && printf '%s' \"$out\" | grep -q 'not implemented yet'; then\n  for d in services/*/; do (cd \"$d\" && mise upgrade); done\nelse\n  printf '%s\\n' \"$out\"\nfi","preventionTips":["Treat any flag documented as 'placeholder' in `--help` as parse-only until release notes say otherwise","Prefer `mise upgrade -n/--dry-run` in automation before real upgrade runs","Centralize mise invocations in one script per repo so flag changes happen in one reviewed place, not ad hoc"],"tags":["mise","cli","upgrade","monorepo","unimplemented","flag"],"backgroundTag":"unimplemented-cli-flag","analyzedSha":"6bd4a54fadcdf3a6757cc44061a9528b48dd2ae7","analyzedAt":"2026-08-16T19:20:32.527Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}