Thanks to visit codestin.com
Credit goes to github.com

Skip to content

chore: graduate stable features from experimental#10371

Merged
jdx merged 1 commit into
mainfrom
chore/promote-stable-features
Jun 13, 2026
Merged

chore: graduate stable features from experimental#10371
jdx merged 1 commit into
mainfrom
chore/promote-stable-features

Conversation

@jdx

@jdx jdx commented Jun 13, 2026

Copy link
Copy Markdown
Owner

Summary

  • remove experimental gates from MCP, sandboxing, hooks/watch_files, monorepo tasks, task templates, native GitHub OAuth, custom vfox backends, Swift, and dotnet/s3/spm backends
  • rename the visible monorepo root config key to monorepo_root, while keeping experimental_monorepo_root as a hidden compatibility alias
  • remove experimental labels from related settings, generated CLI docs, schemas, manpage, fig completion data, and hand-written docs
  • update e2e coverage to exercise the promoted behavior without MISE_EXPERIMENTAL

Verification

  • mise run render
  • cargo fmt
  • mise run test:e2e e2e/tasks/test_task_templates e2e/tasks/test_task_monorepo_validation e2e/cli/test_mcp e2e/cli/test_token_github (the harness also ran e2e/cli/test_mcp_protocol; initial run exposed a test dependency on real Node/Python installs)
  • mise run test:e2e e2e/cli/test_mcp_protocol e2e/cli/test_token_github
  • mise run test:e2e e2e/tasks/test_task_monorepo_validation
  • mise run build
  • git diff --check

This PR was generated by an AI coding assistant.

Summary by CodeRabbit

  • Documentation

    • Removed experimental badges/warnings across CLI, docs, man pages, and config examples.
  • Features

    • Sandboxing and access-control flags marked stable.
    • MCP server, task templates, monorepo support, hooks, watch-file hooks, and native GitHub OAuth promoted to stable.
    • S3, SPM, dotnet backends, Swift plugin, and shared/system install options are no longer experimental.

@coderabbitai

coderabbitai Bot commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

This PR removes experimental gating and “[experimental]” labels across features (sandboxing, monorepo support, task templates, backends, plugins, hooks, MCP, GitHub OAuth), updates schemas and settings to use monorepo_root, and aligns e2e tests and documentation with the new non-experimental defaults.

Changes

Experimental feature graduation

Layer / File(s) Summary
Documentation and user-facing help text cleanup
docs/cli/*, docs/configuration.md, docs/core-tools.md, docs/dev-tools/backends/*, docs/dev-tools/github-tokens.md, docs/hooks.md, docs/lang/swift.md, docs/sandboxing.md, docs/tasks/*, man/man1/mise.1, mise.usage.kdl, schema/mise.json, settings.toml, xtasks/fig/src/mise.ts
Removed [experimental] markers and example gating; updated examples and schema to use monorepo_root instead of experimental_monorepo_root.
Sandbox feature graduation
src/cli/exec.rs, src/cli/run.rs, src/task/task_executor.rs
Removed runtime experimental checks for sandboxing; sandbox filtering runs whenever the computed SandboxConfig is active; doc comments updated.
Monorepo and task template configuration
src/config/mod.rs, src/config/config_file/mod.rs, src/config/config_file/mise_toml.rs, src/task/task_list.rs, src/task/task_load_context.rs
Renamed experimental_monorepo_rootmonorepo_root in config types; monorepo discovery, trust traversal, and task-template collection are unconditional (no experimental gating); resolve_task_template no longer requires experimental mode.
Backend constant and gating removals
src/backend/dotnet.rs, src/backend/s3.rs, src/backend/spm.rs, src/backend/vfox.rs
Changed backend EXPERIMENTAL constants to false and removed ensure_experimental guards from install/list paths.
Plugin and hook feature graduation
src/plugins/core/swift.rs, src/plugins/core/python.rs, src/hooks.rs, src/watch_files.rs
Removed experimental checks and warning text; Swift idiomatic filename and Python virtualenv paths unconditionally available; hooks/watch-file execution no longer gated.
OAuth, MCP, and task docs generation
src/github/oauth.rs, src/cli/mcp.rs, src/cli/generate/task_docs.rs
Removed experimental gates for native GitHub OAuth and MCP; task docs generation now always collects templates. Claude Desktop MCP example env cleared.
CLI argument documentation updates
src/cli/install.rs, src/cli/token/github.rs, src/cli/github/token.rs, src/backend/backend_type.rs, xtasks/fig/src/mise.ts
Removed [experimental] from flag help strings (--shared, --system, --oauth, --refresh, sandbox allow/deny flags) and adjusted wording in completion spec.
End-to-end test updates
e2e-win/*, e2e/cli/*, e2e/tasks/*
E2E tests removed MISE_EXPERIMENTAL setup and experimental mise.toml blocks; assertions updated to reflect non-experimental monorepo behavior and template usage.
Schema and tests alignment
schema/mise.json, crates/mise-interactive-config/src/schema.rs
Schema entries and unit tests updated to expose monorepo_root and remove [experimental] descriptions.

Estimated code review effort:
🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • jdx/mise#10312: Adds task template resolution for included TOML files by threading the collected task_templates map, which aligns with this PR's unconditional template collection changes.

🐰 "Features once hidden now shine so bright,
No experimental flags to dim the light,
Monorepo roots and sandboxing bloom,
Task templates dance and fill each room,
Stable and steady, ready to use!"

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 72.41% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'chore: graduate stable features from experimental' directly and clearly summarizes the main change—promoting multiple experimental features to stable status.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@greptile-apps

greptile-apps Bot commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR graduates a batch of features from experimental to stable in mise, removing ensure_experimental() guards and [experimental] labels from MCP, sandboxing, hooks/watch_files, monorepo tasks, task templates, native GitHub OAuth, custom vfox backends, Swift, and the dotnet/s3/spm backends. The changes touch Rust source, generated CLI docs, the JSON schema, settings definitions, man page, fig completion data, and several e2e test scripts.

  • The ensure_experimental() calls are removed from all graduated code paths in src/; the three backend modules set their EXPERIMENTAL constant to false, making BackendType::is_experimental() return false for them automatically.
  • E2E tests that specifically asserted on the experimental-mode gate are updated; a large set of pre-existing monorepo tests still carry export MISE_EXPERIMENTAL=1 that is now redundant but harmless.

Confidence Score: 5/5

The changes are mechanical gate removals with no new logic introduced; all graduated features were already functional and just needed the flag lifted.

Every ensure_experimental call is correctly removed from the target code paths, backend EXPERIMENTAL constants are flipped to false so BackendType::is_experimental() reflects the new state, and the docs/schema/tests are kept in sync. The only rough edges are a soft assertion in one test file and ~35 test scripts that still carry the now-redundant MISE_EXPERIMENTAL=1 — neither affects runtime behavior.

No files require special attention. e2e/tasks/test_task_monorepo_errors has a soft assertion that won't catch regressions, and the broader set of monorepo e2e tests still export MISE_EXPERIMENTAL=1 unnecessarily, but both are cosmetic cleanup items.

Important Files Changed

Filename Overview
src/backend/backend_type.rs Only the doc comment on is_experimental() is changed; the function body still correctly delegates to each backend's EXPERIMENTAL constant, all of which are now false.
src/backend/dotnet.rs Sets EXPERIMENTAL = false and removes the ensure_experimental call from install_version_.
src/backend/s3.rs Sets EXPERIMENTAL = false and removes the ensure_experimental call from the install path.
src/backend/spm.rs Sets EXPERIMENTAL = false and removes the ensure_experimental call from install_version_.
src/backend/vfox.rs Removes two ensure_experimental('custom backends') guards from the backend plugin path in both the list and install flows.
src/cli/mcp.rs Removes the ensure_experimental('mcp') guard at server startup and drops MISE_EXPERIMENTAL from the example MCP config block.
src/cli/exec.rs Removes the ensure_experimental('sandbox') guard; sandbox flags are now stable.
src/task/task_executor.rs Removes the ensure_experimental('sandbox') guard in the task sandbox path.
src/config/mod.rs Removes the experimental guard from find_monorepo_config and collect_task_templates, and drops the experimental-check block from resolve_task_template.
src/config/config_file/mod.rs Removes the settings.experimental guard from the monorepo-marker trust check in is_trusted.
src/task/task_list.rs Removes the MISE_EXPERIMENTAL check from validate_monorepo_setup; error message now points to missing monorepo root rather than missing experimental flag.
src/hooks.rs Removes ensure_experimental('hooks') from both execute and execute_task.
src/watch_files.rs Removes ensure_experimental('watch_file_hooks') from execute and execute_task.
src/plugins/core/swift.rs Removes the ensure_experimental('swift') call from install and always returns .swift-version from _idiomatic_filenames.
src/plugins/core/python.rs Removes the experimental-mode warning for python virtualenv activation; venv is now stable.
src/github/oauth.rs Removes the ensure_experimental('native GitHub OAuth') guard from token_async.
src/cli/generate/task_docs.rs Removes the experimental guard around template collection; always collects templates now. Removes now-unused IndexMap import.
e2e/tasks/test_task_monorepo_validation Removes the test for experimental-mode enforcement; updates remaining tests to assert on 'monorepo root' errors instead.
e2e/tasks/test_task_templates Removes all [settings] experimental = true blocks from test fixtures and drops the test that verified failure without the experimental flag.
e2e/tasks/test_task_monorepo_errors Removes MISE_EXPERIMENTAL usage and updates the no-monorepo-root assertion; the assertion at test-4 remains a soft check (grep
e2e/cli/test_token_github Removes MISE_EXPERIMENTAL=1 from OAuth env strings and drops the test that verified --oauth fails without experimental mode.
settings.toml Drops [experimental] prefixes and the 'Requires experimental = true' line from github.oauth_client_id and shared_install_dirs descriptions.
schema/mise.json Removes [experimental] from the JSON schema descriptions for oauth_client_id and shared_install_dirs.

Comments Outside Diff (1)

  1. e2e/tasks/test_task_monorepo_validation, line 1-3 (link)

    P2 Many related monorepo e2e tests still carry a now-redundant MISE_EXPERIMENTAL=1

    About 35 other test files under e2e/tasks/ (e.g. test_task_monorepo_wildcards, test_task_monorepo_deps, test_task_monorepo_syntax, …) still begin with export MISE_EXPERIMENTAL=1. Since the experimental gate is removed, the variable is now a no-op for those tests. This doesn't break anything, but it's misleading — a future reader may think the feature still requires the flag. It would be worth a follow-up pass to clean them up.

    Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

    Fix in Claude Code

Fix All in Claude Code

Reviews (1): Last reviewed commit: "chore: graduate stable features from exp..." | Re-trigger Greptile

Comment on lines 97 to +101
# Running with // syntax should fail or warn
unset MISE_EXPERIMENTAL
output=$(mise run '//projects/app:build' 2>&1 || true)
echo "$output"
# Should require experimental mode
echo "$output" | grep -q -i "experimental" || echo "Note: May need experimental mode check"
# Should require a monorepo root
echo "$output" | grep -q -i "monorepo root" || echo "Note: May need monorepo root check"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Soft assertion never fails the test

The grep -q … || echo "Note:" pattern at line 101 prints a note when "monorepo root" is absent from the output but never causes the test to exit non-zero. If the error message changes (or doesn't appear at all), CI stays green. The previous version had the same pattern, but this PR changes the expected substring from "experimental" to "monorepo root", making the assertion text meaningful again — it's worth promoting it to a real assert_fail / assert_contains call so the check actually guards the new behavior.

Fix in Claude Code

@jdx jdx force-pushed the chore/promote-stable-features branch from 5116535 to 98b1d77 Compare June 13, 2026 01:14
@greptile-apps

greptile-apps Bot commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Too many files changed for review. (102 files found, 100 file limit)

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
src/config/config_file/mod.rs (1)

375-383: ⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

Require the monorepo root itself to be explicitly trusted before honoring .monorepo markers.

This loop now trusts any descendant config under a monorepo marker, but src/config/mod.rs still creates that marker during load_all_config_files() for every parsed experimental_monorepo_root = true config. That means opening an untrusted repo once can persist a local marker and later cause src/task/task_list.rs to accept descendant configs as trusted without ever prompting.

Suggested guard
     if let Some(parent) = canonicalized_path.parent() {
         let mut current = parent;
         while let Some(dir) = current.parent() {
             let monorepo_marker = with_appended_extension(&trust_path(dir), "monorepo");
-            if monorepo_marker.exists() {
+            let root_is_explicitly_trusted = if settings.paranoid {
+                trust_file_hash(dir).unwrap_or(false)
+            } else {
+                trust_path(dir).exists()
+            };
+            if root_is_explicitly_trusted && monorepo_marker.exists() {
                 add_trusted(canonicalized_path.to_path_buf());
                 return true;
             }
             current = dir;
         }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/config/config_file/mod.rs` around lines 375 - 383, The current loop that
looks for a .monorepo marker should not auto-trust descendant configs; change
the logic in the code around canonicalized_path /
with_appended_extension(&trust_path(dir), "monorepo") so that when you detect a
monorepo_marker you only treat the descendant as trusted if the monorepo root
itself is already explicitly trusted (e.g., check the trusted store via the same
mechanism used by add_trusted/is_trusted on the marker directory) — if the root
is trusted then call add_trusted(canonicalized_path.to_path_buf()) and return
true, otherwise ignore the marker and continue; likewise update
load_all_config_files so it does not create/persist a .monorepo marker when
experimental_monorepo_root = true unless that monorepo root has been explicitly
trusted via the trust API (do not write markers unconditionally from
load_all_config_files).
xtasks/fig/src/mise.ts (1)

2655-2716: ⚠️ Potential issue | 🟡 Minor

Fix --allow-net Linux help text to match sandbox behavior

  • src/cli/exec.rs/mise.usage.kdl and one xtasks/fig/src/mise.ts section claim: “on Linux falls back to allowing all network”, but Linux code rejects per-host filtering: it errors with “per-host network filtering (--allow-net=) is not supported on Linux…”.
  • Align all xtasks/fig/src/mise.ts/usage strings for run/tasks run and exec to say --allow-net is not supported on Linux (or remove the incorrect fallback wording).
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@xtasks/fig/src/mise.ts` around lines 2655 - 2716, The help text for the
"--allow-net" flag is incorrect about Linux behavior; locate the option object
with name "--allow-net" in xtasks/fig/src/mise.ts and update its description to
state that per-host network filtering is not supported on Linux (remove or
replace "on Linux falls back to allowing all network"). Also search for other
usage strings (e.g., the exec.rs usage builder and mise.usage.kdl entries used
by "run"/"tasks run" and "exec") and make the same wording change so all
help/usage text consistently says per-host --allow-net is not supported on
Linux.
🧹 Nitpick comments (1)
src/backend/backend_type.rs (1)

83-92: 💤 Low value

Consider clarifying the documentation comment.

After this PR, dotnet::EXPERIMENTAL, s3::EXPERIMENTAL, and spm::EXPERIMENTAL all return false, so this method will always return false. The phrase "is still gated" implies some backends remain experimental, which is no longer accurate. Consider updating the comment to reflect that this method returns false for all backends, or remove the "still" qualifier.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/backend/backend_type.rs` around lines 83 - 92, The doc comment for
BackendType::is_experimental is misleading now that dotnet::EXPERIMENTAL,
s3::EXPERIMENTAL, and spm::EXPERIMENTAL are all false; update the /// Returns
true... comment on the is_experimental method to accurately reflect current
behavior (e.g., "Returns true if this backend is experimental" or note that it
currently returns false for all known backends) or remove the word "still" so
the comment no longer implies some backends remain gated; reference
BackendType::is_experimental and the module constants dotnet::EXPERIMENTAL,
s3::EXPERIMENTAL, spm::EXPERIMENTAL when making the change.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@e2e/tasks/test_task_monorepo_errors`:
- Around line 100-101: The test currently uses a soft assertion after the
command echo "$output" | grep -q -i "monorepo root" which only prints a note on
failure; change it to a hard failure like the other checks by replacing the
fallback action so the test exits non‑zero and prints a clear FAIL message when
the "monorepo root" string is not found (match the pattern used by the other
assertions e.g., || (echo "FAIL: ..." && exit 1)).

---

Outside diff comments:
In `@src/config/config_file/mod.rs`:
- Around line 375-383: The current loop that looks for a .monorepo marker should
not auto-trust descendant configs; change the logic in the code around
canonicalized_path / with_appended_extension(&trust_path(dir), "monorepo") so
that when you detect a monorepo_marker you only treat the descendant as trusted
if the monorepo root itself is already explicitly trusted (e.g., check the
trusted store via the same mechanism used by add_trusted/is_trusted on the
marker directory) — if the root is trusted then call
add_trusted(canonicalized_path.to_path_buf()) and return true, otherwise ignore
the marker and continue; likewise update load_all_config_files so it does not
create/persist a .monorepo marker when experimental_monorepo_root = true unless
that monorepo root has been explicitly trusted via the trust API (do not write
markers unconditionally from load_all_config_files).

In `@xtasks/fig/src/mise.ts`:
- Around line 2655-2716: The help text for the "--allow-net" flag is incorrect
about Linux behavior; locate the option object with name "--allow-net" in
xtasks/fig/src/mise.ts and update its description to state that per-host network
filtering is not supported on Linux (remove or replace "on Linux falls back to
allowing all network"). Also search for other usage strings (e.g., the exec.rs
usage builder and mise.usage.kdl entries used by "run"/"tasks run" and "exec")
and make the same wording change so all help/usage text consistently says
per-host --allow-net is not supported on Linux.

---

Nitpick comments:
In `@src/backend/backend_type.rs`:
- Around line 83-92: The doc comment for BackendType::is_experimental is
misleading now that dotnet::EXPERIMENTAL, s3::EXPERIMENTAL, and
spm::EXPERIMENTAL are all false; update the /// Returns true... comment on the
is_experimental method to accurately reflect current behavior (e.g., "Returns
true if this backend is experimental" or note that it currently returns false
for all known backends) or remove the word "still" so the comment no longer
implies some backends remain gated; reference BackendType::is_experimental and
the module constants dotnet::EXPERIMENTAL, s3::EXPERIMENTAL, spm::EXPERIMENTAL
when making the change.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 2ee86170-21c9-4660-a3ca-5f625b90a503

📥 Commits

Reviewing files that changed from the base of the PR and between b27949e and 5116535.

📒 Files selected for processing (52)
  • docs/cli/exec.md
  • docs/cli/install.md
  • docs/cli/mcp.md
  • docs/cli/run.md
  • docs/cli/tasks/run.md
  • docs/cli/token/github.md
  • docs/configuration.md
  • docs/core-tools.md
  • docs/dev-tools/backends/index.md
  • docs/dev-tools/backends/s3.md
  • docs/dev-tools/backends/spm.md
  • docs/dev-tools/github-tokens.md
  • docs/hooks.md
  • docs/lang/swift.md
  • docs/sandboxing.md
  • docs/tasks/monorepo.md
  • docs/tasks/task-configuration.md
  • docs/tasks/templates.md
  • e2e-win/vfox.Tests.ps1
  • e2e/cli/test_mcp
  • e2e/cli/test_mcp_protocol
  • e2e/cli/test_token_github
  • e2e/tasks/test_task_monorepo_errors
  • e2e/tasks/test_task_monorepo_validation
  • e2e/tasks/test_task_templates
  • man/man1/mise.1
  • mise.usage.kdl
  • schema/mise.json
  • settings.toml
  • src/backend/backend_type.rs
  • src/backend/dotnet.rs
  • src/backend/s3.rs
  • src/backend/spm.rs
  • src/backend/vfox.rs
  • src/cli/exec.rs
  • src/cli/generate/task_docs.rs
  • src/cli/github/token.rs
  • src/cli/install.rs
  • src/cli/mcp.rs
  • src/cli/run.rs
  • src/cli/token/github.rs
  • src/config/config_file/mod.rs
  • src/config/mod.rs
  • src/github/oauth.rs
  • src/hooks.rs
  • src/plugins/core/python.rs
  • src/plugins/core/swift.rs
  • src/task/mod.rs
  • src/task/task_executor.rs
  • src/task/task_list.rs
  • src/watch_files.rs
  • xtasks/fig/src/mise.ts
💤 Files with no reviewable changes (7)
  • src/github/oauth.rs
  • src/hooks.rs
  • src/backend/vfox.rs
  • docs/tasks/templates.md
  • src/plugins/core/python.rs
  • src/task/task_executor.rs
  • src/watch_files.rs

Comment on lines +100 to +101
# Should require a monorepo root
echo "$output" | grep -q -i "monorepo root" || echo "Note: May need monorepo root check"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Replace soft assertion with hard failure for consistency.

Line 101 uses a soft assertion (|| echo "Note: ...") that doesn't fail the test if the expected error message isn't present. This is inconsistent with the rest of the test file (e.g., lines 31, 56, 60, 128) which use hard assertions (|| (echo "FAIL: ..." && exit 1)). For a feature graduating from experimental, the test should definitively validate that the proper error is shown when monorepo syntax is used without experimental_monorepo_root configured.

🔧 Suggested fix
 # Should require a monorepo root
-echo "$output" | grep -q -i "monorepo root" || echo "Note: May need monorepo root check"
+echo "$output" | grep -q -i "monorepo root" || (echo "FAIL: Should require monorepo root configuration" && exit 1)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# Should require a monorepo root
echo "$output" | grep -q -i "monorepo root" || echo "Note: May need monorepo root check"
# Should require a monorepo root
echo "$output" | grep -q -i "monorepo root" || (echo "FAIL: Should require monorepo root configuration" && exit 1)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/tasks/test_task_monorepo_errors` around lines 100 - 101, The test
currently uses a soft assertion after the command echo "$output" | grep -q -i
"monorepo root" which only prints a note on failure; change it to a hard failure
like the other checks by replacing the fallback action so the test exits
non‑zero and prints a clear FAIL message when the "monorepo root" string is not
found (match the pattern used by the other assertions e.g., || (echo "FAIL: ..."
&& exit 1)).

@jdx jdx enabled auto-merge (squash) June 13, 2026 01:20

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (10)
e2e/cli/test_lock_project_root_scope (1)

60-60: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Remove MISE_EXPERIMENTAL=1 from graduated monorepo feature tests. All four tests validate monorepo-only behavior (lock scope, colon syntax, file aliases, vars inheritance). Per the PR objectives, tests should "exercise the promoted behavior without requiring the MISE_EXPERIMENTAL environment variable" now that monorepo tasks have been graduated.

  • e2e/cli/test_lock_project_root_scope#L60-L60: remove env MISE_EXPERIMENTAL=1 from the mise lock command invocation in monorepo-root/packages/api.
  • e2e/cli/test_lock_project_root_scope#L64-L64: remove env MISE_EXPERIMENTAL=1 from the mise lock command invocation in monorepo-root.
  • e2e/tasks/test_task_colon_syntax#L18-L18: remove export MISE_EXPERIMENTAL=1 and update the comment on line 17 to remove "with experimental mode".
  • e2e/tasks/test_task_file_alias_run#L4-L4: remove export MISE_EXPERIMENTAL=1 at the top of the file.
  • e2e/tasks/test_task_monorepo_vars#L3-L3: remove export MISE_EXPERIMENTAL=1 at the top of the file.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/cli/test_lock_project_root_scope` at line 60, Remove the now-unnecessary
MISE_EXPERIMENTAL flag from the graduated monorepo tests: delete the prefix "env
MISE_EXPERIMENTAL=1" from the `mise lock --platform linux-x64 --dry-run`
invocations (the occurrences in the test that run from
monorepo-root/packages/api and the one from monorepo-root), remove any
top-of-file "export MISE_EXPERIMENTAL=1" lines in the task tests, and update the
nearby comment that mentions "with experimental mode" to remove that phrase;
search for the exact tokens "env MISE_EXPERIMENTAL=1", "export
MISE_EXPERIMENTAL=1", and the `mise lock --platform linux-x64 --dry-run` command
in the failing test files and delete the env exports/prefixes and adjust the
comment text accordingly.
e2e/tasks/test_task_monorepo_usage_env (1)

5-5: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Remove experimental flag after monorepo graduation.

The test exports MISE_EXPERIMENTAL=1, but monorepo features are being graduated. Per PR objectives, e2e tests should validate promoted behavior without experimental mode.

🧹 Proposed fix
 # When a task uses `env="NAME"` in its usage spec, the env var from the
 # child config should be available at parse time.
-export MISE_EXPERIMENTAL=1
 
 # Create monorepo root config
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/tasks/test_task_monorepo_usage_env` at line 5, The test currently forces
experimental mode by exporting the environment variable MISE_EXPERIMENTAL=1;
remove that export (or unset/set it to 0) so the e2e test runs against the
graduated monorepo behavior instead of experimental mode—locate the line
exporting MISE_EXPERIMENTAL in the test_task_monorepo_usage_env file and delete
or change it accordingly.
e2e/tasks/test_task_monorepo_triple_colon_with_deps (2)

20-22: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Remove experimental setting from test config.

The test config sets experimental = true in settings, but monorepo features are being graduated in this PR. This setting should be removed to validate non-experimental behavior.

🧹 Proposed fix
 [monorepo]
 config_roots = ["libs/*", "apps/*", "tools/*"]
-
-[settings]
-experimental = true
 EOF
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/tasks/test_task_monorepo_triple_colon_with_deps` around lines 20 - 22,
The test config currently enables experimental features by setting "experimental
= true" under the [settings] section; remove the "experimental = true" line from
the file (i.e., delete the experimental flag in the [settings] block) so the
test validates the graduated monorepo behavior without experimental mode.

11-11: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Remove experimental flag after monorepo graduation.

The test exports MISE_EXPERIMENTAL=1, but monorepo features are being graduated. Per PR objectives, e2e tests should validate promoted behavior without experimental mode.

🧹 Proposed fix
 # resolve to that project's own :bootstrap task, not the monorepo root's.
 
-export MISE_EXPERIMENTAL=1
-
 # Create monorepo root config
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/tasks/test_task_monorepo_triple_colon_with_deps` at line 11, Remove the
experimental flag by deleting the export line "export MISE_EXPERIMENTAL=1" from
the test (the e2e task that sets this env); ensure the test runs and validates
the graduated monorepo behavior without setting MISE_EXPERIMENTAL, and scan for
any other occurrences of that variable in the test to remove or adjust
accordingly.
e2e/tasks/test_task_monorepo_aliases (1)

4-4: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Remove experimental flag after monorepo graduation.

The test exports MISE_EXPERIMENTAL=1, but monorepo features are being graduated in this PR. Per the PR objectives, e2e tests should validate the promoted behavior without requiring the experimental flag.

🧹 Proposed fix
 #!/usr/bin/env bash
 # Test that task aliases work properly in monorepo mode
 # Regression test for: https://github.com/jdx/mise/discussions/6854
-export MISE_EXPERIMENTAL=1
 
 # Create monorepo root config with tasks that have aliases
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/tasks/test_task_monorepo_aliases` at line 4, Remove the experimental flag
export by deleting the line that sets MISE_EXPERIMENTAL=1 from the test (the
export MISE_EXPERIMENTAL=1 line) so the e2e tests run against the graduated
monorepo behavior; ensure no other test setup relies on MISE_EXPERIMENTAL and
update any test fixtures or environment setup to assume the promoted behavior
instead.
e2e/tasks/test_task_monorepo_trust (1)

4-4: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Remove experimental flag after monorepo graduation.

The test exports MISE_EXPERIMENTAL=1, but monorepo features are being graduated. Per PR objectives, e2e tests should validate promoted behavior without experimental mode.

🧹 Proposed fix
 #!/usr/bin/env bash
 
 # Test that trusting a monorepo root implicitly trusts all descendant configs
-export MISE_EXPERIMENTAL=1
 
 # Create monorepo root config
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/tasks/test_task_monorepo_trust` at line 4, Remove the experimental flag
export so e2e tests validate promoted monorepo behavior: delete the line
exporting MISE_EXPERIMENTAL=1 in the test_task_monorepo_trust script (remove or
comment out the export MISE_EXPERIMENTAL line) and ensure no downstream logic
relies on that env var; run the task to confirm tests pass under the
non-experimental default.
e2e/tasks/test_task_monorepo_circular_deps (1)

4-4: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Remove MISE_EXPERIMENTAL=1 from monorepo e2e tests to validate graduated features. All seven tests retain export MISE_EXPERIMENTAL=1, contradicting the PR objective that e2e tests should "exercise the promoted behavior without requiring the MISE_EXPERIMENTAL environment variable." The shared root cause is incomplete migration: tests were updated to use monorepo_root = true but still force experimental mode, so they validate experimental behavior instead of the graduated stable behavior.

  • e2e/tasks/test_task_monorepo_circular_deps#L4-L4: delete the export MISE_EXPERIMENTAL=1 line.
  • e2e/tasks/test_task_monorepo_config_roots#L3-L3: delete the export MISE_EXPERIMENTAL=1 line.
  • e2e/tasks/test_task_monorepo_dependencies#L3-L3: delete the export MISE_EXPERIMENTAL=1 line.
  • e2e/tasks/test_task_monorepo_deps#L8-L8: delete the export MISE_EXPERIMENTAL=1 line.
  • e2e/tasks/test_task_monorepo_deps_tool_install#L14-L14: delete the export MISE_EXPERIMENTAL=1 line.
  • e2e/tasks/test_task_monorepo_dots_in_dir#L3-L3: delete the export MISE_EXPERIMENTAL=1 line.
  • e2e/tasks/test_task_monorepo_env_version_override#L3-L3: delete the export MISE_EXPERIMENTAL=1 line.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/tasks/test_task_monorepo_circular_deps` at line 4, Remove the line
exporting the experimental flag in this e2e test so it validates graduated
behavior: delete the `export MISE_EXPERIMENTAL=1` entry from
test_task_monorepo_circular_deps (the environment variable declaration shown in
the diff) so the test relies on `monorepo_root = true` and exercises the
promoted/stable behavior rather than forcing experimental mode; repeat the same
deletion for the other listed monorepo e2e task files noted in the review.
e2e/tasks/test_task_monorepo_deps (1)

19-19: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Remove experimental = true setting from test fixtures to validate graduated features. Both tests generate a mise.toml with experimental = true in the [settings] section, contradicting the PR objective of validating monorepo features without experimental mode. The shared root cause is incomplete migration: the monorepo_root key was updated but the experimental setting was not removed.

  • e2e/tasks/test_task_monorepo_deps#L19-L19: delete the [settings] section containing experimental = true from the generated mise.toml.
  • e2e/tasks/test_task_monorepo_deps_tool_install#L20-L20: delete the [settings] section containing experimental = true from the generated mise.toml.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/tasks/test_task_monorepo_deps` at line 19, Remove the `[settings]`
section containing `experimental = true` from the test fixtures that generate a
mise.toml so the tests validate graduated monorepo behavior; specifically edit
the test fixtures named test_task_monorepo_deps and
test_task_monorepo_deps_tool_install to delete the `[settings]` block (and its
`experimental = true` line) from the generated mise.toml output so only the
updated `monorepo_root` key remains and no experimental flag is present.
e2e/tasks/test_task_monorepo_file_tasks (1)

4-4: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Verify whether MISE_EXPERIMENTAL=1 is still needed after graduating monorepo features.

All seven monorepo e2e tests still export MISE_EXPERIMENTAL=1, but the PR objectives state tests should exercise promoted behavior "without requiring the MISE_EXPERIMENTAL environment variable." Since monorepo features are graduating from experimental, these exports may no longer be necessary.

  • e2e/tasks/test_task_monorepo_file_tasks#L4: remove or confirm needed for other experimental features
  • e2e/tasks/test_task_monorepo_global_tasks#L4: remove or confirm needed for other experimental features
  • e2e/tasks/test_task_monorepo_idiomatic_tools#L4: remove or confirm needed for other experimental features
  • e2e/tasks/test_task_monorepo_includes#L4: remove or confirm needed for other experimental features
  • e2e/tasks/test_task_monorepo_includes_relative_path#L7: remove or confirm needed for other experimental features
  • e2e/tasks/test_task_monorepo_mise_env#L3: remove or confirm needed for other experimental features
  • e2e/tasks/test_task_monorepo_name_conflicts#L4: remove or confirm needed for other experimental features
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/tasks/test_task_monorepo_file_tasks` at line 4, Confirm whether the
environment variable MISE_EXPERIMENTAL=1 is still required by the monorepo e2e
tests and if not remove it from each test file that exports it (references:
test_task_monorepo_file_tasks, test_task_monorepo_global_tasks,
test_task_monorepo_idiomatic_tools, test_task_monorepo_includes,
test_task_monorepo_includes_relative_path, test_task_monorepo_mise_env,
test_task_monorepo_name_conflicts); to verify, run the relevant e2e suites with
the env var unset and check for failures caused by monorepo features, and if
removal is safe, delete the export line and any related conditional logic or
comments referencing MISE_EXPERIMENTAL, otherwise leave it and add a short
comment explaining which other experimental feature still requires it.
e2e/tasks/test_task_monorepo_optional_colon (1)

6-17: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Remove experimental toggles so this test validates the graduated behavior.

This test still enables experimental mode (MISE_EXPERIMENTAL=1 and [settings].experimental=true), so it can pass even if monorepo behavior regresses back behind a gate.

Suggested change
-export MISE_EXPERIMENTAL=1
-
 # Set up monorepo structure
 cat <<'EOF' >mise.toml
 min_version = "2025.10.6"
 monorepo_root = true
 
 [monorepo]
 config_roots = ["app", "frontend", "backend", "services", "other"]
-
-[settings]
-experimental = true
 EOF
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/tasks/test_task_monorepo_optional_colon` around lines 6 - 17, Remove the
experimental toggles so the test validates graduated monorepo behavior: delete
the environment export MISE_EXPERIMENTAL=1 and remove or set
[settings].experimental = false in the generated mise.toml (keep the
min_version, monorepo_root and [monorepo] config_roots as-is) so the test runs
without the experimental gate.
♻️ Duplicate comments (1)
e2e/tasks/test_task_monorepo_errors (1)

100-101: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Replace soft assertion with hard failure for consistency.

Line 101 uses a soft assertion (|| echo "Note: ...") that doesn't fail the test if the expected error message isn't present. This is inconsistent with the rest of the test file (e.g., lines 31, 56, 60, 128) which use hard assertions (|| (echo "FAIL: ..." && exit 1)). For a feature graduating from experimental, the test should definitively validate that the proper error is shown when monorepo syntax is used without monorepo_root configured.

🔧 Proposed fix
 # Should require a monorepo root
-echo "$output" | grep -q -i "monorepo root" || echo "Note: May need monorepo root check"
+echo "$output" | grep -q -i "monorepo root" || (echo "FAIL: Should require monorepo root configuration" && exit 1)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/tasks/test_task_monorepo_errors` around lines 100 - 101, Replace the soft
assertion that tolerates missing "monorepo root" output with a hard exit like
the other checks: change the grep fallback `|| echo "Note: May need monorepo
root check"` to a failure branch `|| (echo "FAIL: expected \"monorepo root\" in
output && exit 1)` so the test fails if the expected error message is not found;
update the same grep invocation line in the test_task_monorepo_errors file to
match the existing hard-assert pattern used elsewhere (lines that use `|| (echo
"FAIL: ..." && exit 1)`).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@e2e/tasks/test_task_missing_suggestions`:
- Line 20: Remove the experimental flag export so the test validates promoted
monorepo behavior without experimental mode: delete the line exporting
MISE_EXPERIMENTAL (the line containing "export MISE_EXPERIMENTAL=1") from the
e2e/tasks/test_task_missing_suggestions test setup and ensure the test still
runs and asserts monorepo task suggestions succeed under normal
(non-experimental) execution; run the test suite to confirm no other setup
depends on MISE_EXPERIMENTAL.

---

Outside diff comments:
In `@e2e/cli/test_lock_project_root_scope`:
- Line 60: Remove the now-unnecessary MISE_EXPERIMENTAL flag from the graduated
monorepo tests: delete the prefix "env MISE_EXPERIMENTAL=1" from the `mise lock
--platform linux-x64 --dry-run` invocations (the occurrences in the test that
run from monorepo-root/packages/api and the one from monorepo-root), remove any
top-of-file "export MISE_EXPERIMENTAL=1" lines in the task tests, and update the
nearby comment that mentions "with experimental mode" to remove that phrase;
search for the exact tokens "env MISE_EXPERIMENTAL=1", "export
MISE_EXPERIMENTAL=1", and the `mise lock --platform linux-x64 --dry-run` command
in the failing test files and delete the env exports/prefixes and adjust the
comment text accordingly.

In `@e2e/tasks/test_task_monorepo_aliases`:
- Line 4: Remove the experimental flag export by deleting the line that sets
MISE_EXPERIMENTAL=1 from the test (the export MISE_EXPERIMENTAL=1 line) so the
e2e tests run against the graduated monorepo behavior; ensure no other test
setup relies on MISE_EXPERIMENTAL and update any test fixtures or environment
setup to assume the promoted behavior instead.

In `@e2e/tasks/test_task_monorepo_circular_deps`:
- Line 4: Remove the line exporting the experimental flag in this e2e test so it
validates graduated behavior: delete the `export MISE_EXPERIMENTAL=1` entry from
test_task_monorepo_circular_deps (the environment variable declaration shown in
the diff) so the test relies on `monorepo_root = true` and exercises the
promoted/stable behavior rather than forcing experimental mode; repeat the same
deletion for the other listed monorepo e2e task files noted in the review.

In `@e2e/tasks/test_task_monorepo_deps`:
- Line 19: Remove the `[settings]` section containing `experimental = true` from
the test fixtures that generate a mise.toml so the tests validate graduated
monorepo behavior; specifically edit the test fixtures named
test_task_monorepo_deps and test_task_monorepo_deps_tool_install to delete the
`[settings]` block (and its `experimental = true` line) from the generated
mise.toml output so only the updated `monorepo_root` key remains and no
experimental flag is present.

In `@e2e/tasks/test_task_monorepo_file_tasks`:
- Line 4: Confirm whether the environment variable MISE_EXPERIMENTAL=1 is still
required by the monorepo e2e tests and if not remove it from each test file that
exports it (references: test_task_monorepo_file_tasks,
test_task_monorepo_global_tasks, test_task_monorepo_idiomatic_tools,
test_task_monorepo_includes, test_task_monorepo_includes_relative_path,
test_task_monorepo_mise_env, test_task_monorepo_name_conflicts); to verify, run
the relevant e2e suites with the env var unset and check for failures caused by
monorepo features, and if removal is safe, delete the export line and any
related conditional logic or comments referencing MISE_EXPERIMENTAL, otherwise
leave it and add a short comment explaining which other experimental feature
still requires it.

In `@e2e/tasks/test_task_monorepo_optional_colon`:
- Around line 6-17: Remove the experimental toggles so the test validates
graduated monorepo behavior: delete the environment export MISE_EXPERIMENTAL=1
and remove or set [settings].experimental = false in the generated mise.toml
(keep the min_version, monorepo_root and [monorepo] config_roots as-is) so the
test runs without the experimental gate.

In `@e2e/tasks/test_task_monorepo_triple_colon_with_deps`:
- Around line 20-22: The test config currently enables experimental features by
setting "experimental = true" under the [settings] section; remove the
"experimental = true" line from the file (i.e., delete the experimental flag in
the [settings] block) so the test validates the graduated monorepo behavior
without experimental mode.
- Line 11: Remove the experimental flag by deleting the export line "export
MISE_EXPERIMENTAL=1" from the test (the e2e task that sets this env); ensure the
test runs and validates the graduated monorepo behavior without setting
MISE_EXPERIMENTAL, and scan for any other occurrences of that variable in the
test to remove or adjust accordingly.

In `@e2e/tasks/test_task_monorepo_trust`:
- Line 4: Remove the experimental flag export so e2e tests validate promoted
monorepo behavior: delete the line exporting MISE_EXPERIMENTAL=1 in the
test_task_monorepo_trust script (remove or comment out the export
MISE_EXPERIMENTAL line) and ensure no downstream logic relies on that env var;
run the task to confirm tests pass under the non-experimental default.

In `@e2e/tasks/test_task_monorepo_usage_env`:
- Line 5: The test currently forces experimental mode by exporting the
environment variable MISE_EXPERIMENTAL=1; remove that export (or unset/set it to
0) so the e2e test runs against the graduated monorepo behavior instead of
experimental mode—locate the line exporting MISE_EXPERIMENTAL in the
test_task_monorepo_usage_env file and delete or change it accordingly.

---

Duplicate comments:
In `@e2e/tasks/test_task_monorepo_errors`:
- Around line 100-101: Replace the soft assertion that tolerates missing
"monorepo root" output with a hard exit like the other checks: change the grep
fallback `|| echo "Note: May need monorepo root check"` to a failure branch `||
(echo "FAIL: expected \"monorepo root\" in output && exit 1)` so the test fails
if the expected error message is not found; update the same grep invocation line
in the test_task_monorepo_errors file to match the existing hard-assert pattern
used elsewhere (lines that use `|| (echo "FAIL: ..." && exit 1)`).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: db36ac74-12a2-4379-b0d7-3241cbbdee25

📥 Commits

Reviewing files that changed from the base of the PR and between 5116535 and 98b1d77.

📒 Files selected for processing (102)
  • crates/mise-interactive-config/src/schema.rs
  • docs/cli/exec.md
  • docs/cli/install.md
  • docs/cli/mcp.md
  • docs/cli/run.md
  • docs/cli/tasks/run.md
  • docs/cli/token/github.md
  • docs/configuration.md
  • docs/core-tools.md
  • docs/dev-tools/backends/index.md
  • docs/dev-tools/backends/s3.md
  • docs/dev-tools/backends/spm.md
  • docs/dev-tools/github-tokens.md
  • docs/hooks.md
  • docs/lang/swift.md
  • docs/sandboxing.md
  • docs/tasks/index.md
  • docs/tasks/monorepo.md
  • docs/tasks/task-configuration.md
  • docs/tasks/templates.md
  • e2e-win/vfox.Tests.ps1
  • e2e/cli/test_deps
  • e2e/cli/test_lock_project_root_scope
  • e2e/cli/test_mcp
  • e2e/cli/test_mcp_protocol
  • e2e/cli/test_token_github
  • e2e/tasks/test_task_colon_syntax
  • e2e/tasks/test_task_file_alias_run
  • e2e/tasks/test_task_include_trust
  • e2e/tasks/test_task_info_monorepo
  • e2e/tasks/test_task_ls_complete_monorepo
  • e2e/tasks/test_task_missing_suggestions
  • e2e/tasks/test_task_monorepo_aliases
  • e2e/tasks/test_task_monorepo_circular_deps
  • e2e/tasks/test_task_monorepo_config_context
  • e2e/tasks/test_task_monorepo_config_roots
  • e2e/tasks/test_task_monorepo_dependencies
  • e2e/tasks/test_task_monorepo_dependency_chain
  • e2e/tasks/test_task_monorepo_deps
  • e2e/tasks/test_task_monorepo_deps_tool_install
  • e2e/tasks/test_task_monorepo_dots_in_dir
  • e2e/tasks/test_task_monorepo_edge_cases
  • e2e/tasks/test_task_monorepo_env_version_override
  • e2e/tasks/test_task_monorepo_errors
  • e2e/tasks/test_task_monorepo_file_tasks
  • e2e/tasks/test_task_monorepo_global_tasks
  • e2e/tasks/test_task_monorepo_idiomatic_tools
  • e2e/tasks/test_task_monorepo_includes
  • e2e/tasks/test_task_monorepo_includes_relative_path
  • e2e/tasks/test_task_monorepo_mise_env
  • e2e/tasks/test_task_monorepo_name_conflicts
  • e2e/tasks/test_task_monorepo_nested_config
  • e2e/tasks/test_task_monorepo_optional_colon
  • e2e/tasks/test_task_monorepo_path_directives
  • e2e/tasks/test_task_monorepo_project_root
  • e2e/tasks/test_task_monorepo_relative_paths
  • e2e/tasks/test_task_monorepo_run_project_local_tasks
  • e2e/tasks/test_task_monorepo_run_project_tasks
  • e2e/tasks/test_task_monorepo_syntax
  • e2e/tasks/test_task_monorepo_tasks_deps_command
  • e2e/tasks/test_task_monorepo_tera_templates
  • e2e/tasks/test_task_monorepo_tool_inheritance
  • e2e/tasks/test_task_monorepo_tool_inheritance_intermediate
  • e2e/tasks/test_task_monorepo_triple_colon_with_deps
  • e2e/tasks/test_task_monorepo_trust
  • e2e/tasks/test_task_monorepo_usage_env
  • e2e/tasks/test_task_monorepo_validation
  • e2e/tasks/test_task_monorepo_vars
  • e2e/tasks/test_task_monorepo_wildcard_with_deps
  • e2e/tasks/test_task_monorepo_wildcards
  • e2e/tasks/test_task_shorthand_monorepo
  • e2e/tasks/test_task_templates
  • e2e/tasks/test_task_validate
  • man/man1/mise.1
  • mise.usage.kdl
  • schema/mise.json
  • settings.toml
  • src/backend/backend_type.rs
  • src/backend/dotnet.rs
  • src/backend/s3.rs
  • src/backend/spm.rs
  • src/backend/vfox.rs
  • src/cli/exec.rs
  • src/cli/generate/task_docs.rs
  • src/cli/github/token.rs
  • src/cli/install.rs
  • src/cli/mcp.rs
  • src/cli/run.rs
  • src/cli/token/github.rs
  • src/config/config_file/mise_toml.rs
  • src/config/config_file/mod.rs
  • src/config/mod.rs
  • src/github/oauth.rs
  • src/hooks.rs
  • src/plugins/core/python.rs
  • src/plugins/core/swift.rs
  • src/task/mod.rs
  • src/task/task_executor.rs
  • src/task/task_list.rs
  • src/task/task_load_context.rs
  • src/watch_files.rs
  • xtasks/fig/src/mise.ts
💤 Files with no reviewable changes (6)
  • src/task/task_executor.rs
  • src/plugins/core/python.rs
  • src/backend/vfox.rs
  • src/github/oauth.rs
  • src/hooks.rs
  • src/watch_files.rs
✅ Files skipped from review due to trivial changes (31)
  • e2e/tasks/test_task_monorepo_config_context
  • docs/sandboxing.md
  • docs/tasks/index.md
  • docs/cli/mcp.md
  • docs/hooks.md
  • src/cli/install.rs
  • e2e/tasks/test_task_monorepo_run_project_local_tasks
  • e2e/tasks/test_task_monorepo_edge_cases
  • e2e/tasks/test_task_monorepo_run_project_tasks
  • docs/core-tools.md
  • e2e/tasks/test_task_monorepo_tool_inheritance_intermediate
  • e2e/tasks/test_task_monorepo_nested_config
  • docs/configuration.md
  • src/cli/github/token.rs
  • docs/lang/swift.md
  • docs/dev-tools/backends/s3.md
  • src/cli/token/github.rs
  • e2e/tasks/test_task_monorepo_dependency_chain
  • src/backend/backend_type.rs
  • settings.toml
  • docs/cli/exec.md
  • src/cli/run.rs
  • docs/cli/tasks/run.md
  • docs/dev-tools/github-tokens.md
  • e2e/cli/test_mcp
  • docs/dev-tools/backends/index.md
  • docs/cli/token/github.md
  • src/task/mod.rs
  • man/man1/mise.1
  • xtasks/fig/src/mise.ts
  • mise.usage.kdl
🚧 Files skipped from review as they are similar to previous changes (17)
  • docs/dev-tools/backends/spm.md
  • docs/tasks/task-configuration.md
  • docs/cli/run.md
  • docs/cli/install.md
  • e2e-win/vfox.Tests.ps1
  • e2e/tasks/test_task_monorepo_validation
  • e2e/cli/test_mcp_protocol
  • src/task/task_list.rs
  • src/backend/dotnet.rs
  • src/cli/generate/task_docs.rs
  • src/cli/mcp.rs
  • src/plugins/core/swift.rs
  • e2e/cli/test_token_github
  • src/config/mod.rs
  • src/backend/s3.rs
  • src/cli/exec.rs
  • e2e/tasks/test_task_templates

@@ -20,7 +20,7 @@ rm mise.toml
export MISE_EXPERIMENTAL=1

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Remove experimental flag after monorepo graduation.

This test still exports MISE_EXPERIMENTAL=1, but the PR objective states that e2e tests should exercise promoted behavior without requiring the experimental flag. Since monorepo features are being graduated, this test should validate that monorepo task suggestions work without experimental mode.

🧹 Proposed fix
 
 rm mise.toml
-export MISE_EXPERIMENTAL=1
 
 cat <<EOF >mise.toml
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
export MISE_EXPERIMENTAL=1
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/tasks/test_task_missing_suggestions` at line 20, Remove the experimental
flag export so the test validates promoted monorepo behavior without
experimental mode: delete the line exporting MISE_EXPERIMENTAL (the line
containing "export MISE_EXPERIMENTAL=1") from the
e2e/tasks/test_task_missing_suggestions test setup and ensure the test still
runs and asserts monorepo task suggestions succeed under normal
(non-experimental) execution; run the test suite to confirm no other setup
depends on MISE_EXPERIMENTAL.

@github-actions

Copy link
Copy Markdown

Hyperfine Performance

mise x -- echo

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.6.5 x -- echo 19.2 ± 1.0 17.2 25.1 1.00
mise x -- echo 20.1 ± 2.1 17.9 35.3 1.05 ± 0.12

mise env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.6.5 env 18.6 ± 0.9 17.1 24.9 1.00
mise env 19.3 ± 1.0 17.6 23.8 1.04 ± 0.07

mise hook-env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.6.5 hook-env 19.3 ± 0.8 17.7 22.9 1.00
mise hook-env 20.0 ± 0.9 18.1 22.7 1.04 ± 0.06

mise ls

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.6.5 ls 15.9 ± 0.8 14.4 21.1 1.00
mise ls 16.4 ± 0.9 14.8 21.4 1.03 ± 0.08

xtasks/test/perf

Command mise-2026.6.5 mise Variance
install (cached) 131ms 133ms -1%
ls (cached) 59ms 57ms +3%
bin-paths (cached) 62ms 64ms -3%
task-ls (cached) 123ms 123ms +0%

@jdx jdx merged commit 1f5123b into main Jun 13, 2026
35 checks passed
@jdx jdx deleted the chore/promote-stable-features branch June 13, 2026 01:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant