v2026.2.21

jdx/misev2026.2.21Feb 26, 2026by mise-en-dev

AI Summary

A bug-fix release addressing several regressions and long-standing issues: monorepo task variables and glob dependencies now resolve correctly, the conda backend can install Python noarch packages, `mise x` respects virtualenv PATH ordering again, and nested task execution no longer hangs.

Key Highlights

  • `mise x` respects virtualenv PATH order again
  • Conda noarch Python packages install correctly
  • Nested mise tasks no longer hang
  • Monorepo tasks resolve `[vars]` from subdirectory configs
  • Monorepo glob dependencies trigger subdirectory prepare steps

New Features

  • Virtualenv PATH ordering fix
  • Conda noarch Python package support
  • Nested task hanging fix
  • Monorepo task variable resolution from subdirectory configs
  • Monorepo glob dependency prepare step discovery

Full Release Notes

A bug-fix release addressing several regressions and long-standing issues: monorepo task variables and glob dependencies now resolve correctly, the conda backend can install Python noarch packages, `mise x` respects virtualenv PATH ordering again, and nested task execution no longer hangs.

## Fixed

- **`mise x` respects virtualenv PATH order again** -- A pre-resolution step added in v2026.2.17 ([#8276](https://github.com/jdx/mise/pull/8276)) resolved bare command names directly to mise-managed tool paths, bypassing PATH entirely. This broke `_.python.venv` and similar configs where a virtualenv binary should take precedence over the mise-managed install. The pre-resolution is removed; shim stripping in `exec_program` (also from #8276) is sufficient to prevent recursion. [#8342](https://github.com/jdx/mise/pull/8342) by @jdx

- **Conda noarch Python packages install correctly** -- Installing noarch Python packages via the conda backend (e.g. `mise use conda:ruff`) failed because the linker didn't know the Python version needed to compute `site-packages` paths. The solver's resolved Python version is now extracted and passed through to `link_package`, fixing the error. [#8349](https://github.com/jdx/mise/pull/8349) by @wolfv

- **Nested mise tasks no longer hang** -- The process group isolation (`setpgid`/`killpg`) introduced in v2026.2.18 and refined in v2026.2.19 has been fully reverted. When tools like Playwright use process-group-based kills (`kill(-pid, SIGKILL)`) to tear down a server subprocess tree, grandchild processes in a separate group (created by mise's `setpgid`) survived and held pipes open, causing indefinite hangs. mise now sends signals directly to child PIDs instead. [#8347](https://github.com/jdx/mise/pull/8347) by @jdx

- **Monorepo tasks resolve `[vars]` from subdirectory configs** -- Running a monorepo task like `mise run //infra/stacks/gcp:greet` failed to pick up `[vars]` defined in subdirectory `.mise.toml` files, causing template rendering errors. Variables are now resolved from the task's full config hierarchy (including `mise.<env>.toml` overlays) and threaded through script rendering. [#8343](https://github.com/jdx/mise/pull/8343) by @jdx

- **Monorepo glob dependencies trigger subdirectory prepare steps** -- When a root task depended on a monorepo glob pattern like `//...:check`, the prepare phase only collected configs from top-level tasks, missing subdirectory tasks entirely. Dependencies are now resolved before prepare runs, so transitive subdirectory tasks and their prepare providers are properly discovered. [#8353](https://github.com/jdx/mise/pull/8353) by @jdx

## New Contributors

- @wolfv made their first contribution in [#8349](https://github.com/jdx/mise/pull/8349)

**Full Changelog**: https://github.com/jdx/mise/compare/v2026.2.20...v2026.2.21