Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jdx/mise
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v2026.2.7
Choose a base ref
...
head repository: jdx/mise
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v2026.2.8
Choose a head ref
  • 12 commits
  • 609 files changed
  • 6 contributors

Commits on Feb 8, 2026

  1. feat(ruby): graduate precompiled ruby from experimental (gradual roll…

    …out) (#8052)
    
    ## Summary
    
    - Allow `ruby.compile=false` to enable precompiled binaries without
    requiring `experimental=true`
    - Show a warning during Ruby install when `ruby.compile` is unset,
    notifying users that precompiled will become the default in 2026.8.0
    - Remove `[experimental]` prefix from Ruby precompiled settings
    documentation
    - Add `debug_assert` to block debug compilation when 2026.8.0 arrives as
    a reminder to complete the migration
    - Use `self.should_try_precompiled()` in `security_info()` to avoid
    duplicating logic
    
    ### Behavior matrix
    
    | `ruby.compile` | `experimental` | Result |
    |---|---|---|
    | `true` | any | Compile from source, no warning |
    | `false` | any | Try precompiled (new: works without experimental) |
    | unset | `true` | Try precompiled (existing behavior preserved) |
    | unset | `false` | Compile from source + show warning about 2026.8.0 |
    
    ## Test plan
    
    - [x] `mise run build` — confirms it compiles
    - [x] `mise run lint-fix` — confirms lint passes
    - [x] Existing e2e tests (`test_ruby_precompiled`,
    `test_ruby_github_attestations`) still pass since they use
    `MISE_EXPERIMENTAL=1`
    - [x] With `ruby.compile` unset and `experimental` off: `mise install
    ruby@3.3.0` should compile from source and show the 2026.8.0 warning
    - [x] With `ruby.compile=false`: should use precompiled, no warning
    - [x] With `ruby.compile=true`: should compile from source, no warning
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Medium Risk**
    > Changes Ruby installation path selection (precompiled vs source) and
    attestation reporting logic, which can affect install behavior across
    environments; rollout is guarded by explicit `compile=false` or
    `experimental` + unset.
    > 
    > **Overview**
    > **Ruby precompiled binaries are no longer gated behind
    `experimental`.** Setting `ruby.compile=false` (or
    `MISE_RUBY_COMPILE=false`) now opts into precompiled Ruby even when
    `experimental` is off, while `compile` unset continues to compile by
    default unless `experimental` is enabled.
    > 
    > Adds a one-time install warning when `ruby.compile` is unset (and
    `experimental` is off) to announce that precompiled will become the
    default in `2026.8.0`, centralizes the precompiled decision logic via
    `should_try_precompiled()` (reused by `security_info()`), and updates
    schema/settings docs and e2e tests to reflect the new `ruby.compile`
    behavior and remove the `[experimental]` labeling.
    > 
    > <sup>Written by [Cursor
    Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
    db46d91. This will update automatically
    on new commits. Configure
    [here](https://cursor.com/dashboard?tab=bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    ---------
    
    Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
    jdx and claude authored Feb 8, 2026
    Configuration menu
    Copy the full SHA
    422a54e View commit details
    Browse the repository at this point in the history
  2. registry: add quicktype (npm:quicktype) (#8054)

    [quicktype](https://quicktype.io) - Generate types and converters from
    JSON, Schema, and GraphQL.
    zdunecki authored Feb 8, 2026
    Configuration menu
    Copy the full SHA
    8e64b92 View commit details
    Browse the repository at this point in the history
  3. registry: use inline table for test definitions (#8056)

    ## Summary
    - Changes registry test format from positional array to named inline
    table fields
    - Before: `test = ["bat --version", "bat {{version}}"]`
    - After: `test = { cmd = "bat --version", expected = "bat {{version}}"
    }`
    - Updates `build.rs` to parse the new table format
    - Updates `schema/mise-registry-tool.json` to match
    
    ## Test plan
    - [x] All 510 registry TOML files validated with Python `tomllib`
    - [x] `cargo check` passes
    - [x] All pre-commit lints pass (taplo, cargo-check, etc.)
    - [x] CI passes
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Medium Risk**
    > Large-scale data-format change across many registry entries; any
    missed conversion or downstream expectation of the old array shape could
    break registry validation or generated code.
    > 
    > **Overview**
    > Standardizes registry `test` definitions by migrating from positional
    arrays (e.g. `[cmd, expected]`) to an inline TOML table `{ cmd = ...,
    expected = ... }` across the registry files.
    > 
    > Updates `build.rs` registry code generation to parse the new table
    format, and updates `schema/mise-registry-tool.json` to validate the new
    `test` object shape (required `cmd`/`expected`, no extra fields).
    > 
    > <sup>Written by [Cursor
    Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
    64d6cb5. This will update automatically
    on new commits. Configure
    [here](https://cursor.com/dashboard?tab=bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
    jdx and claude authored Feb 8, 2026
    Configuration menu
    Copy the full SHA
    41ac58d View commit details
    Browse the repository at this point in the history
  4. fix: accept key=value format in set/add subcommands (#8053)

    ## Summary
    - `mise settings set key=value`, `mise settings add key=value`, `mise
    config set key=value`, and `mise shell-alias set alias=command` now all
    work
    - Previously only parent commands (like `mise settings`) split on `=`,
    so subcommands like `mise settings set ruby.compile=false` would fail
    with a missing `<VALUE>` argument
    - Makes `value` optional in each subcommand and splits the first arg on
    `=` when no separate value is provided
    
    ## Changed files
    - `src/cli/settings/set.rs` — `SettingsSet.value` now `Option<String>`
    - `src/cli/settings/add.rs` — `SettingsAdd.value` now `Option<String>`
    - `src/cli/config/set.rs` — `ConfigSet.value` now `Option<String>`
    - `src/cli/shell_alias/set.rs` — `ShellAliasSet.command` now
    `Option<String>`
    - `src/cli/settings/mod.rs` — wrap value in `Some(...)` at construction
    sites
    
    ## Test plan
    - [x] `mise settings set ruby.compile=true` — succeeds
    - [x] `mise settings set ruby.compile true` — still works
    - [x] `mise settings set ruby.compile` — errors with usage hint
    - [x] `mise settings add disable_hints=python_multi` — succeeds
    - [x] `mise settings add disable_hints python_multi` — still works
    - [x] `mise shell-alias set ll="ls -la"` — succeeds
    - [x] `mise shell-alias set ll` — errors with usage hint
    - [x] Lint passes
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Low Risk**
    > Small, localized CLI argument-parsing change with added e2e coverage
    and doc/spec updates; main risk is minor behavior differences around
    edge cases in `=` parsing.
    > 
    > **Overview**
    > `mise config set`, `mise settings set`, `mise settings add`, and `mise
    shell-alias set` now accept a single `KEY=VALUE`/`ALIAS=COMMAND`
    argument in addition to the existing two-argument form by making the
    value parameter optional and splitting on `=` when omitted (with clearer
    usage errors when neither is provided).
    > 
    > Updates the CLI spec (`mise.usage.kdl`), generated docs/manpage, Fig
    completion metadata, and adds e2e coverage for the new shorthand plus
    failure cases when no value is supplied.
    > 
    > <sup>Written by [Cursor
    Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
    5e28b08. This will update automatically
    on new commits. Configure
    [here](https://cursor.com/dashboard?tab=bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    ---------
    
    Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
    Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
    3 people authored Feb 8, 2026
    Configuration menu
    Copy the full SHA
    b2727a0 View commit details
    Browse the repository at this point in the history
  5. chore(deps): upgrade toml to 0.9 and toml_edit to 0.24 (TOML 1.1) (#8057

    )
    
    ## Summary
    - Upgrades `toml` from 0.8 (spec 1.0) to 0.9 (spec 1.1)
    - Upgrades `toml_edit` from 0.22 to 0.24
    - Updates all call sites for breaking API changes:
    - `FromStr for Value` now parses single values instead of documents;
    switched to `toml::de::from_str` for document parsing
      - `Deserializer::new` deprecated; switched to `Deserializer::parse`
    
    ## TOML 1.1 features now available in `mise.toml`
    
    This upgrade enables TOML 1.1 syntax in all mise configuration files:
    
    - **Newlines in inline tables** — spread inline tables across multiple
    lines for readability:
      ```toml
      [tools]
      rust = { version = "1.82",
               profile = "minimal",
               components = ["rust-src", "llvm-tools"] }
      ```
    
    - **Trailing commas in inline tables and arrays** — no more editing the
    last line when adding entries:
      ```toml
      [env]
      _.path = [
        "./node_modules/.bin",
        "./bin",
      ]
      ```
    
    - **`\xHH` escape sequences** — hex escapes for codepoints ≤ 255 in
    quoted strings:
      ```toml
      [env]
      SEPARATOR = "\x1F"
      ```
    
    - **`\e` escape** — shorthand for the escape character (`\x1B`):
      ```toml
      [env]
      RED = "\e[31m"
      ```
    
    - **Optional seconds in datetime/time values**:
      ```toml
      # Seconds are now optional
      created = 2026-02-07T12:00
      ```
    
    ## Test plan
    - [x] `cargo check --workspace` passes
    - [x] All pre-commit lints pass
    - [x] CI passes
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Medium Risk**
    > Touches core config parsing paths (including `mise.toml`
    deserialization) and build-time codegen, so any subtle parsing/serde
    behavior changes could impact config compatibility despite the changes
    being largely mechanical.
    > 
    > **Overview**
    > Upgrades the Rust `toml` ecosystem to TOML 1.1 support by bumping
    `toml` to `0.9` and `toml_edit` to `0.24` (including lockfile updates
    that replace older `toml_*` crates with `toml_parser`/`toml_writer` and
    newer `serde_spanned`).
    > 
    > Updates TOML parsing call sites to match the new APIs by switching
    document parsing from `str::parse()` to `toml::de::from_str()` and
    replacing `toml::Deserializer::new` with `toml::Deserializer::parse`
    (affecting `build.rs`, `mise.toml` parsing, `mise config get`, rust
    toolchain file parsing, task header parsing, and nested tool option
    lookup).
    > 
    > Refreshes docs examples to use multi-line inline-table formatting that
    TOML 1.1 permits (primarily readability changes).
    > 
    > <sup>Written by [Cursor
    Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
    d750e9f. This will update automatically
    on new commits. Configure
    [here](https://cursor.com/dashboard?tab=bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    ---------
    
    Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
    jdx and claude authored Feb 8, 2026
    Configuration menu
    Copy the full SHA
    27dccaa View commit details
    Browse the repository at this point in the history
  6. feat(node): support package.json as idiomatic version file (#8059)

    ## Summary
    
    - Read tool versions from `package.json` `devEngines` and
    `packageManager` fields (closes #7379)
    - Support `devEngines.runtime` for node/bun version detection
    - Support `devEngines.packageManager` and `packageManager` field for
    pnpm/yarn/npm version detection
    - `devEngines` takes priority over `packageManager` field when both are
    present
    - Semver ranges are simplified to mise-compatible prefixes (`>=18.0.0` →
    `18`, `^20.0.0` → `20`)
    - Gracefully skip backends when `package.json` doesn't contain their
    version info (multiple backends claim the same file)
    
    ## Test plan
    
    - [x] Unit tests for `simplify_semver` covering all range operators,
    wildcards, and exact versions
    - [x] Unit tests for `runtime_version` and `package_manager_version`
    extraction
    - [x] Unit tests for priority logic (devEngines overrides packageManager
    field)
    - [x] Unit tests for missing/empty fields returning None
    - [x] E2E test `e2e/core/test_package_json` covering node devEngines,
    pnpm packageManager, and priority
    - [ ] Manual: create project with `package.json` containing
    `devEngines`/`packageManager`, verify `mise ls` shows correct versions
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Medium Risk**
    > Changes how tool versions are discovered from idiomatic files and adds
    parsing of `package.json`, which could affect version resolution when
    multiple tools claim the same file or when semver ranges are simplified.
    > 
    > **Overview**
    > Adds support for using `package.json` as an *idiomatic version file*
    to auto-detect tool versions.
    > 
    > Introduces a new `PackageJson` parser that extracts versions from
    `devEngines.runtime` (for runtimes like `node`/`bun`) and from
    `devEngines.packageManager` or `packageManager` (for package managers
    like `pnpm`/`yarn`/`npm`), with semver ranges simplified into
    mise-friendly prefixes.
    > 
    > Updates core `node`/`bun` plugins and registry-backed package manager
    tools to include `package.json` in `idiomatic_files`, and changes
    idiomatic file parsing to *skip* backends that can’t extract a version
    from the shared file instead of failing. Adds unit coverage for
    parsing/semver simplification and an e2e test for node+pnpm detection
    and precedence.
    > 
    > <sup>Written by [Cursor
    Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
    1f4a630. This will update automatically
    on new commits. Configure
    [here](https://cursor.com/dashboard?tab=bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
    jdx and claude authored Feb 8, 2026
    Configuration menu
    Copy the full SHA
    3439a73 View commit details
    Browse the repository at this point in the history
  7. fix(hooks): resolve 12 community-reported hooks issues (#8058)

    ## Summary
    
    Addresses 12 community-reported issues with the hooks system, fixing the
    most commonly encountered problems with global hooks, hook execution
    order, error handling, and shell integration.
    
    ## What's fixed
    
    ### Global hooks now work (#5264, #5293, #4875)
    Hooks defined in `~/.config/mise/config.toml` were silently ignored.
    Global hooks now fire correctly for all hook types (enter, leave, cd,
    preinstall, postinstall) across all projects.
    
    ### Hook execution order corrected (#4583)
    When changing from directory A to directory B, leave hooks now fire
    before enter hooks. Previously the order was reversed.
    
    ### Hooks no longer loop infinitely in fish (#4378)
    Running `mise run` from inside a hook (e.g. `enter = "mise run setup"`)
    could cause infinite recursion when using fish shell, because fish
    sources its config on subshell startup which re-activates mise. Hooks
    now set `MISE_NO_HOOKS=1` in their subprocess environment to prevent
    this.
    
    ### `mise use -g` no longer triggers project hooks (#7183)
    Running `mise use -g` from a project directory incorrectly fired that
    project's preinstall/postinstall hooks. Non-global hooks now only fire
    when you're inside the project that defines them.
    
    ### Postinstall hooks can find all installed tools (#6323, #7489)
    Postinstall hooks now run with the full resolved toolset on PATH, so
    commands from previously-installed tools (like `lefthook`, `pnpm`, etc.)
    are available.
    
    ### `tools=true` env vars no longer evaluated during preinstall (#6162)
    Environment variables with `tools = true` (e.g. `AN_ENV_VAR = { value =
    "{{env.ANDROID_HOME}}", tools = true }`) were being resolved during
    preinstall hooks, before the tools providing those variables were
    installed. Preinstall hooks now skip tool-dependent env var resolution.
    
    ### Shell hooks receive environment variables (#4013, #6054)
    Shell hooks (with `shell = "bash"` etc.) now receive
    `MISE_PROJECT_ROOT`, `MISE_CONFIG_ROOT`, `MISE_ORIGINAL_CWD`,
    `MISE_PREVIOUS_DIR`, and `MISE_INSTALLED_TOOLS` as exported variables.
    
    ### PowerShell `$Error` no longer polluted (#5481)
    The `_mise_hook` function in PowerShell was adding errors to `$Error` on
    every prompt because it called `Invoke-Expression` with empty output.
    Now checks for non-empty output first.
    
    ### Hook errors no longer crash or get swallowed
    - Failing hooks warn with context (hook type, config directory, error)
    and continue running remaining hooks
    - Invalid hook definitions produce proper errors instead of panics
    - `MISE_CONFIG_ROOT` is now available in hook environments
    
    ### Serde-based hook parsing
    Hook definitions now use serde deserialization instead of manual TOML
    parsing, giving better error messages for malformed configs.
    
    ## Not actionable (investigated)
    - #5001 — Already fixed in a prior release
    - #6347 — Likely fixed by prior `starts_with` direction fix
    - #7792 — By design (`hook-env` runs on prompt, can't update shell
    mid-command)
    - #7255 — By design (use `MISE_INSTALLED_TOOLS` JSON or tool-level
    `[tools.X.postinstall]`)
    - #6581 — Not a bug (mise inherits local env vars)
    
    ## Test plan
    - [x] All linters pass
    - [x] 447 unit tests pass
    - [x] All 10 hooks e2e tests pass including 3 new ones (global hooks,
    shell env vars, error handling)
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Medium Risk**
    > Touches core hook execution and environment construction paths
    (including install-time hooks and shell integrations), so regressions
    could affect when/where hooks fire or what env they see across projects
    and shells.
    > 
    > **Overview**
    > Fixes hook execution across config scopes by **treating hooks from
    global configs as truly global** (skipping per-project directory
    matching) while tightening non-global pre/postinstall hooks to only run
    when the current working directory is under that config’s root.
    > 
    > Refactors hook parsing to a serde-driven `HookDef`
    (string/table/array) and removes panic paths; hook failures now **warn
    with hook type + root and continue** rather than crashing or silently
    swallowing errors. Shell hook output now includes exported
    `MISE_PROJECT_ROOT`/`MISE_CONFIG_ROOT` (plus other hook context), hook
    subprocesses set `MISE_NO_HOOKS=1` to avoid recursion, and preinstall
    hooks run with an env that skips `tools=true` directives.
    > 
    > Improves install-time behavior by running `postinstall` hooks with a
    fully resolved toolset on `PATH`, adjusts hook scheduling order on dir
    changes, and tweaks PowerShell activation to only `Invoke-Expression`
    when `hook-env` returns non-empty output. Adds new e2e coverage for
    global hooks, shell env exports, and error handling.
    > 
    > <sup>Written by [Cursor
    Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
    cf3ab75. This will update automatically
    on new commits. Configure
    [here](https://cursor.com/dashboard?tab=bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    ---------
    
    Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
    Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
    3 people authored Feb 8, 2026
    Configuration menu
    Copy the full SHA
    98cecef View commit details
    Browse the repository at this point in the history
  8. fix(core): respect MISE_ARCH override in bun and erlang plugins (#8062)

    ## Summary
    - Replace compile-time `cfg!(target_arch)` checks with
    `Settings::get().arch()` in bun and erlang core plugins so that
    `MISE_ARCH` environment variable overrides are respected at runtime
    - This enables Windows ARM64 users to opt into x64 bun builds under
    Prism emulation (ref: #7155)
    - Also replaces `cfg!(target_os)` / hardcoded OS constants with
    `Settings::get().os()` for consistency with other plugins (node, python,
    java, ruby, rust, swift)
    
    ## Test plan
    - [x] `mise run lint-fix` passes
    - [x] `mise run build` compiles successfully (via cargo-check in lint)
    - [x] `mise run test:unit` — all 461 tests pass
    - [ ] Manual verification: set `MISE_ARCH=x64` on an ARM64 system and
    confirm bun installs the x64-baseline variant
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Medium Risk**
    > Changes alter platform/variant string construction that directly
    controls which prebuilt archives are downloaded and written into
    lockfiles; incorrect mapping could break installs on specific OS/arch
    combinations, especially Windows/ARM64 and musl/baseline variants.
    > 
    > **Overview**
    > **Bun and Erlang installs now respect runtime arch/OS overrides.** The
    Bun plugin replaces compile-time `cfg!(target_arch)`/static `ARCH`/`OS`
    usage with `Settings::get().arch()` and `Settings::get().os()` when
    building download URLs and platform keys, while still using runtime AVX2
    and compile-time musl detection for bun variant selection.
    > 
    > **Improves cross-arch behavior on Windows ARM64.** Bun’s arch
    resolution now explicitly falls back to `x64-baseline` when `Settings`
    reports `arm64` on Windows (to support x64-under-emulation), and
    Erlang’s precompiled asset naming now maps `Settings` arch/OS values to
    the expected release artifact names and removes the old hardcoded
    `ARCH`/`OS` constants.
    > 
    > <sup>Written by [Cursor
    Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
    026c4f6. This will update automatically
    on new commits. Configure
    [here](https://cursor.com/dashboard?tab=bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
    jdx and claude authored Feb 8, 2026
    Configuration menu
    Copy the full SHA
    c671053 View commit details
    Browse the repository at this point in the history
  9. feat: add --dry-run-code flag to exit non-zero when there is work to …

    …do (#8063)
    
    ## Summary
    
    - Adds a `--dry-run-code` flag to `install`, `upgrade`, `prune`,
    `uninstall`, and `use` commands
    - When used, behaves like `--dry-run` (shows what would happen without
    making changes) but additionally exits with code 1 when there are
    pending operations
    - Exits 0 when everything is already up-to-date
    - Enables scripting patterns like:
      ```bash
      if ! mise install --dry-run-code --quiet; then
        echo "Installing stuff using mise"
        mise install
      fi
      ```
    
    Closes #8060
    
    ## Test plan
    
    - [x] `mise run test:e2e test_install_dry_run` — install dry-run tests
    including `--dry-run-code`
    - [x] `mise run test:e2e test_use_dry_run` — use dry-run tests including
    `--dry-run-code`
    - [x] `cargo test` — all 461 unit tests pass (including CLI flag sort
    test)
    - [x] `mise run lint-fix` — all linters pass
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Medium Risk**
    > Changes CLI exit-code behavior for multiple core commands, which may
    affect automation that relies on previous dry-run semantics, though the
    changes are localized and covered by updated e2e tests.
    > 
    > **Overview**
    > Adds a new `--dry-run-code` flag to `install`, `use`, `upgrade`,
    `prune`, and `uninstall` that behaves like `--dry-run` but exits with
    status `1` when there is work to do (and `0` when no changes are
    needed).
    > 
    > Refactors these commands to treat `--dry-run` and `--dry-run-code`
    consistently via shared `is_dry_run()` checks, skipping side effects
    (config writes, deletions, shim rebuilds) while optionally computing
    whether any operations would occur before deciding to exit non-zero.
    > 
    > Updates generated CLI docs/manpages, the `mise.usage.kdl` spec, Fig
    completions, and expands e2e coverage (including a new
    `assert_fail_contains`) to validate the new exit-code semantics.
    > 
    > <sup>Written by [Cursor
    Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
    2a305c7. This will update automatically
    on new commits. Configure
    [here](https://cursor.com/dashboard?tab=bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    ---------
    
    Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
    Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
    3 people authored Feb 8, 2026
    Configuration menu
    Copy the full SHA
    0fb325f View commit details
    Browse the repository at this point in the history
  10. docs: bump action versions in GitHub Actions examples (#8065)

    Also bumps action versions in the workflow generated by `mise generate
    github-action`.
    muzimuzhi authored Feb 8, 2026
    Configuration menu
    Copy the full SHA
    8d0b1e3 View commit details
    Browse the repository at this point in the history
  11. docs: add opengraph meta tags (#8066)

    ## Summary
    - Add og:site_name, og:type, og:image, and twitter:card meta tags for
    better social media link previews
    
    ## Test plan
    - [ ] Verify OG tags appear in page source after build
    - [ ] Test link preview on social media/Slack/Discord
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Low Risk**
    > Static documentation config change only; no runtime logic, auth, or
    data-handling impact.
    > 
    > **Overview**
    > Adds global OpenGraph/Twitter meta tags to the VitePress docs site via
    `docs/.vitepress/config.ts` (`og:site_name`, `og:type`, `og:image`, plus
    `twitter:card`/`twitter:image`) to improve link previews when pages are
    shared.
    > 
    > <sup>Written by [Cursor
    Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
    306f012. This will update automatically
    on new commits. Configure
    [here](https://cursor.com/dashboard?tab=bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
    jdx and claude authored Feb 8, 2026
    Configuration menu
    Copy the full SHA
    03bbcaa View commit details
    Browse the repository at this point in the history

Commits on Feb 9, 2026

  1. chore: release 2026.2.8 (#8055)

    ### 🚀 Features
    
    - **(node)** support package.json as idiomatic version file by @jdx in
    [#8059](#8059)
    - **(ruby)** graduate precompiled ruby from experimental (gradual
    rollout) by @jdx in [#8052](#8052)
    - add --dry-run-code flag to exit non-zero when there is work to do by
    @jdx in [#8063](#8063)
    
    ### 🐛 Bug Fixes
    
    - **(core)** respect MISE_ARCH override in bun and erlang plugins by
    @jdx in [#8062](#8062)
    - **(hooks)** resolve 12 community-reported hooks issues by @jdx in
    [#8058](#8058)
    - accept key=value format in set/add subcommands by @jdx in
    [#8053](#8053)
    
    ### 📚 Documentation
    
    - bump action versions in GitHub Actions examples by @muzimuzhi in
    [#8065](#8065)
    - add opengraph meta tags by @jdx in
    [#8066](#8066)
    
    ### 📦️ Dependency Updates
    
    - upgrade toml to 0.9 and toml_edit to 0.24 (TOML 1.1) by @jdx in
    [#8057](#8057)
    
    ### 📦 Registry
    
    - add quicktype (npm:quicktype) by @zdunecki in
    [#8054](#8054)
    - use inline table for test definitions by @jdx in
    [#8056](#8056)
    mise-en-dev authored Feb 9, 2026
    Configuration menu
    Copy the full SHA
    67b504b View commit details
    Browse the repository at this point in the history
Loading