chore: graduate stable features from experimental#10371
Conversation
📝 WalkthroughWalkthroughThis 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 ChangesExperimental feature graduation
Estimated code review effort: Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
Greptile SummaryThis PR graduates a batch of features from experimental to stable in mise, removing
Confidence Score: 5/5The 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
|
| # 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" |
There was a problem hiding this comment.
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.
5116535 to
98b1d77
Compare
|
Too many files changed for review. ( |
There was a problem hiding this comment.
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 winRequire the monorepo root itself to be explicitly trusted before honoring
.monorepomarkers.This loop now trusts any descendant config under a monorepo marker, but
src/config/mod.rsstill creates that marker duringload_all_config_files()for every parsedexperimental_monorepo_root = trueconfig. That means opening an untrusted repo once can persist a local marker and later causesrc/task/task_list.rsto 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 | 🟡 MinorFix
--allow-netLinux help text to match sandbox behavior
src/cli/exec.rs/mise.usage.kdland onextasks/fig/src/mise.tssection 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 forrun/tasks runandexecto say--allow-netis 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 valueConsider clarifying the documentation comment.
After this PR,
dotnet::EXPERIMENTAL,s3::EXPERIMENTAL, andspm::EXPERIMENTALall returnfalse, so this method will always returnfalse. The phrase "is still gated" implies some backends remain experimental, which is no longer accurate. Consider updating the comment to reflect that this method returnsfalsefor 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
📒 Files selected for processing (52)
docs/cli/exec.mddocs/cli/install.mddocs/cli/mcp.mddocs/cli/run.mddocs/cli/tasks/run.mddocs/cli/token/github.mddocs/configuration.mddocs/core-tools.mddocs/dev-tools/backends/index.mddocs/dev-tools/backends/s3.mddocs/dev-tools/backends/spm.mddocs/dev-tools/github-tokens.mddocs/hooks.mddocs/lang/swift.mddocs/sandboxing.mddocs/tasks/monorepo.mddocs/tasks/task-configuration.mddocs/tasks/templates.mde2e-win/vfox.Tests.ps1e2e/cli/test_mcpe2e/cli/test_mcp_protocole2e/cli/test_token_githube2e/tasks/test_task_monorepo_errorse2e/tasks/test_task_monorepo_validatione2e/tasks/test_task_templatesman/man1/mise.1mise.usage.kdlschema/mise.jsonsettings.tomlsrc/backend/backend_type.rssrc/backend/dotnet.rssrc/backend/s3.rssrc/backend/spm.rssrc/backend/vfox.rssrc/cli/exec.rssrc/cli/generate/task_docs.rssrc/cli/github/token.rssrc/cli/install.rssrc/cli/mcp.rssrc/cli/run.rssrc/cli/token/github.rssrc/config/config_file/mod.rssrc/config/mod.rssrc/github/oauth.rssrc/hooks.rssrc/plugins/core/python.rssrc/plugins/core/swift.rssrc/task/mod.rssrc/task/task_executor.rssrc/task/task_list.rssrc/watch_files.rsxtasks/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
| # Should require a monorepo root | ||
| echo "$output" | grep -q -i "monorepo root" || echo "Note: May need monorepo root check" |
There was a problem hiding this comment.
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.
| # 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)).
There was a problem hiding this comment.
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 winRemove
MISE_EXPERIMENTAL=1from 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: removeenv MISE_EXPERIMENTAL=1from themise lockcommand invocation inmonorepo-root/packages/api.e2e/cli/test_lock_project_root_scope#L64-L64: removeenv MISE_EXPERIMENTAL=1from themise lockcommand invocation inmonorepo-root.e2e/tasks/test_task_colon_syntax#L18-L18: removeexport MISE_EXPERIMENTAL=1and update the comment on line 17 to remove "with experimental mode".e2e/tasks/test_task_file_alias_run#L4-L4: removeexport MISE_EXPERIMENTAL=1at the top of the file.e2e/tasks/test_task_monorepo_vars#L3-L3: removeexport MISE_EXPERIMENTAL=1at 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 winRemove 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 winRemove experimental setting from test config.
The test config sets
experimental = truein 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 winRemove 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 winRemove 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 winRemove 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 winRemove
MISE_EXPERIMENTAL=1from monorepo e2e tests to validate graduated features. All seven tests retainexport 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 usemonorepo_root = truebut 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 theexport MISE_EXPERIMENTAL=1line.e2e/tasks/test_task_monorepo_config_roots#L3-L3: delete theexport MISE_EXPERIMENTAL=1line.e2e/tasks/test_task_monorepo_dependencies#L3-L3: delete theexport MISE_EXPERIMENTAL=1line.e2e/tasks/test_task_monorepo_deps#L8-L8: delete theexport MISE_EXPERIMENTAL=1line.e2e/tasks/test_task_monorepo_deps_tool_install#L14-L14: delete theexport MISE_EXPERIMENTAL=1line.e2e/tasks/test_task_monorepo_dots_in_dir#L3-L3: delete theexport MISE_EXPERIMENTAL=1line.e2e/tasks/test_task_monorepo_env_version_override#L3-L3: delete theexport MISE_EXPERIMENTAL=1line.🤖 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 winRemove
experimental = truesetting from test fixtures to validate graduated features. Both tests generate amise.tomlwithexperimental = truein the[settings]section, contradicting the PR objective of validating monorepo features without experimental mode. The shared root cause is incomplete migration: themonorepo_rootkey was updated but the experimental setting was not removed.
e2e/tasks/test_task_monorepo_deps#L19-L19: delete the[settings]section containingexperimental = truefrom the generated mise.toml.e2e/tasks/test_task_monorepo_deps_tool_install#L20-L20: delete the[settings]section containingexperimental = truefrom 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 winVerify whether
MISE_EXPERIMENTAL=1is 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 featurese2e/tasks/test_task_monorepo_global_tasks#L4: remove or confirm needed for other experimental featurese2e/tasks/test_task_monorepo_idiomatic_tools#L4: remove or confirm needed for other experimental featurese2e/tasks/test_task_monorepo_includes#L4: remove or confirm needed for other experimental featurese2e/tasks/test_task_monorepo_includes_relative_path#L7: remove or confirm needed for other experimental featurese2e/tasks/test_task_monorepo_mise_env#L3: remove or confirm needed for other experimental featurese2e/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 winRemove experimental toggles so this test validates the graduated behavior.
This test still enables experimental mode (
MISE_EXPERIMENTAL=1and[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 winReplace 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 withoutmonorepo_rootconfigured.🔧 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
📒 Files selected for processing (102)
crates/mise-interactive-config/src/schema.rsdocs/cli/exec.mddocs/cli/install.mddocs/cli/mcp.mddocs/cli/run.mddocs/cli/tasks/run.mddocs/cli/token/github.mddocs/configuration.mddocs/core-tools.mddocs/dev-tools/backends/index.mddocs/dev-tools/backends/s3.mddocs/dev-tools/backends/spm.mddocs/dev-tools/github-tokens.mddocs/hooks.mddocs/lang/swift.mddocs/sandboxing.mddocs/tasks/index.mddocs/tasks/monorepo.mddocs/tasks/task-configuration.mddocs/tasks/templates.mde2e-win/vfox.Tests.ps1e2e/cli/test_depse2e/cli/test_lock_project_root_scopee2e/cli/test_mcpe2e/cli/test_mcp_protocole2e/cli/test_token_githube2e/tasks/test_task_colon_syntaxe2e/tasks/test_task_file_alias_rune2e/tasks/test_task_include_truste2e/tasks/test_task_info_monorepoe2e/tasks/test_task_ls_complete_monorepoe2e/tasks/test_task_missing_suggestionse2e/tasks/test_task_monorepo_aliasese2e/tasks/test_task_monorepo_circular_depse2e/tasks/test_task_monorepo_config_contexte2e/tasks/test_task_monorepo_config_rootse2e/tasks/test_task_monorepo_dependenciese2e/tasks/test_task_monorepo_dependency_chaine2e/tasks/test_task_monorepo_depse2e/tasks/test_task_monorepo_deps_tool_installe2e/tasks/test_task_monorepo_dots_in_dire2e/tasks/test_task_monorepo_edge_casese2e/tasks/test_task_monorepo_env_version_overridee2e/tasks/test_task_monorepo_errorse2e/tasks/test_task_monorepo_file_taskse2e/tasks/test_task_monorepo_global_taskse2e/tasks/test_task_monorepo_idiomatic_toolse2e/tasks/test_task_monorepo_includese2e/tasks/test_task_monorepo_includes_relative_pathe2e/tasks/test_task_monorepo_mise_enve2e/tasks/test_task_monorepo_name_conflictse2e/tasks/test_task_monorepo_nested_confige2e/tasks/test_task_monorepo_optional_colone2e/tasks/test_task_monorepo_path_directivese2e/tasks/test_task_monorepo_project_roote2e/tasks/test_task_monorepo_relative_pathse2e/tasks/test_task_monorepo_run_project_local_taskse2e/tasks/test_task_monorepo_run_project_taskse2e/tasks/test_task_monorepo_syntaxe2e/tasks/test_task_monorepo_tasks_deps_commande2e/tasks/test_task_monorepo_tera_templatese2e/tasks/test_task_monorepo_tool_inheritancee2e/tasks/test_task_monorepo_tool_inheritance_intermediatee2e/tasks/test_task_monorepo_triple_colon_with_depse2e/tasks/test_task_monorepo_truste2e/tasks/test_task_monorepo_usage_enve2e/tasks/test_task_monorepo_validatione2e/tasks/test_task_monorepo_varse2e/tasks/test_task_monorepo_wildcard_with_depse2e/tasks/test_task_monorepo_wildcardse2e/tasks/test_task_shorthand_monorepoe2e/tasks/test_task_templatese2e/tasks/test_task_validateman/man1/mise.1mise.usage.kdlschema/mise.jsonsettings.tomlsrc/backend/backend_type.rssrc/backend/dotnet.rssrc/backend/s3.rssrc/backend/spm.rssrc/backend/vfox.rssrc/cli/exec.rssrc/cli/generate/task_docs.rssrc/cli/github/token.rssrc/cli/install.rssrc/cli/mcp.rssrc/cli/run.rssrc/cli/token/github.rssrc/config/config_file/mise_toml.rssrc/config/config_file/mod.rssrc/config/mod.rssrc/github/oauth.rssrc/hooks.rssrc/plugins/core/python.rssrc/plugins/core/swift.rssrc/task/mod.rssrc/task/task_executor.rssrc/task/task_list.rssrc/task/task_load_context.rssrc/watch_files.rsxtasks/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 | |||
There was a problem hiding this comment.
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.
| 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.
Hyperfine Performance
|
| 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% |
Summary
monorepo_root, while keepingexperimental_monorepo_rootas a hidden compatibility aliasVerification
This PR was generated by an AI coding assistant.
Summary by CodeRabbit
Documentation
Features