Skip to content

fix: point error hints at current commands - #14142

Merged
jdx merged 2 commits into
mainfrom
fix/msg-hints
Oct 8, 2026
Merged

jdx merged 2 commits into
mainfrom
fix/msg-hints

Conversation

@jdx

@jdx jdx commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner

https://entire.io/gh/jdx/mise/trails/561

Several error and warning messages suggested an outdated command, used an old feature name, or gave advice that cannot work. This PR updates them. Only the message text changes; mise behaves the same otherwise.

Remote installs gave advice that cannot work. When mise bootstrap remote installs mise (install_mise) to a directory that is not on the host's login PATH, the warning used to say:

WARN  /home/me/bin/mise is not on host's login PATH; add its directory to PATH or declare [bootstrap.mise_shell_activate] in the bootstrap project

Declaring [bootstrap.mise_shell_activate] does not help. The activation blocks it writes run mise activate … by name, so they also need mise on PATH. The warning now names the directory to add:

WARN  /home/me/bin/mise is not on host's login PATH; add /home/me/bin to PATH

Other messages

  • When watchexec is missing, mise watch now suggests mise use -g watchexec, the same command its help shows. It used to suggest watchexec@latest.
  • mise cache task now says "No artifact cache entries for …", the feature's current name. It used to say "output cache".

No migration is needed. Scripts that match on the old wording of these messages will need updating.

Validation: e2e tests now check each new message, and each of those tests fails without this change. One is new, e2e/cli/test_watch_missing_watchexec, which runs mise watch with only mise on PATH and a 30 second limit; the others are updated assertions in test_bootstrap_remote and test_task_artifact_cache_inspect. Clippy (-D warnings) and hk checks pass.

AI-assisted — Tool: Claude Code; model: anthropic/claude-opus-5-5; version: claude-code_2-1-289_agent.

🤖 Generated with Claude Code


Note

Low Risk
String-only changes to warnings and error hints; scripts that assert on old message text may need updates.

Overview
User-facing message fixes so hints match current behavior and workable fixes—no functional behavior changes beyond wording.

Remote bootstrap: When an installed mise binary isn’t on the host’s login PATH, the warning now tells users to add the parent directory to PATH and drops the misleading [bootstrap.mise_shell_activate] suggestion (activation still needs mise on PATH).

mise watch: Missing watchexec now suggests mise use -g watchexec instead of watchexec@latest, aligned with help text. New e2e covers this with a PATH that only contains mise.

mise cache task: Empty-state copy says “artifact cache” instead of “output cache”; e2e assertion updated accordingly.

Tests: Remote bootstrap e2e captures install output and asserts the new PATH warning (and that mise_shell_activate isn’t mentioned).

Reviewed by Cursor Bugbot for commit 4e4d4f7. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • Bug Fixes
    • Remote installation guidance now explains that the install directory’s parent must be added to the remote login PATH.
    • The missing watchexec hint now shows the global install command without a version suffix.
    • Empty task-cache messages now refer to “artifact cache entries” for clearer terminology.

- Untrusted-config errors link the configuration trust section of the
  security page instead of the `mise trust` reference.
- `mise watch` suggests `mise use -g watchexec`, matching its help.
- `mise cache task` says "artifact cache", the feature's current name.
- The remote login-PATH warning after `install_mise` no longer suggests
  [bootstrap.mise_shell_activate]: the activation blocks run `mise` by
  name, so they need the same PATH entry. It names the directory to add.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Entire-Checkpoint: 01M4CZ53YJRZR8PJT0W9FTZD43
@coderabbitai

coderabbitai Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository YAML (base), Central YAML (inherited), Organization UI (inherited)
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 64d1deb3-b1b4-4fc7-81de-b0538a593633
📥 Commits

Reviewing files that changed from the base of the PR and between 4a98b02 and 4e4d4f7.

📒 Files selected for processing (6)
  • e2e/cli/test_bootstrap_remote
  • e2e/cli/test_watch_missing_watchexec
  • e2e/tasks/test_task_artifact_cache_inspect
  • src/cli/cache/task.rs
  • src/cli/watch.rs
  • src/system/remote.rs

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The changes update messages for remote bootstrap PATH setup, missing watchexec, and empty task artifact caches. End-to-end tests verify the updated messages and related command behavior.

Changes

Remote Bootstrap PATH Warning

Layer / File(s) Summary
Update and verify the remote PATH warning
src/system/remote.rs, e2e/cli/test_bootstrap_remote
The warning directs users to add the install path’s parent directory to the remote login PATH. The test checks the warning, confirms the executable was installed, and verifies the output does not contain mise_shell_activate.

Missing Watchexec Hint

Layer / File(s) Summary
Update and verify the watchexec install hint
src/cli/watch.rs, e2e/cli/test_watch_missing_watchexec
The install hint uses mise use -g watchexec without @latest. The test checks the exit status and hint with a restricted PATH.

Task Artifact Cache Message

Layer / File(s) Summary
Update and verify the empty-cache message
src/cli/cache/task.rs, e2e/tasks/test_task_artifact_cache_inspect
The empty-cache message and its test now use “artifact cache entries” instead of “output cache entries.”

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix

Suggested reviewers: risu729

Merge Risk: ⚪ Minimal · up to 4e4d4

The updated messages and their checks are consistent; no concrete merge-blocking risk remains.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 3 functions across 3 files. (3 skipped: 3… Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
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.
Title check ✅ Passed The title accurately summarizes the main changes to user-facing error and warning hints. It is concise and specific enough for the changeset.
Full details: Docstring Coverage

Explanation

Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 3 functions across 3 files. (3 skipped: 3 unsupported.)

  • Fix all pre-merge checks with AI
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@greptile-apps

greptile-apps Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 5/5

[Medium risk] Updates error messages in CLI commands and tests.

The PR appears safe to merge; the earlier watch-test issue is fixed, and no new actionable issues remain.

What we checked:

  • Watch hint remains testable: run_with_timeout captures both output streams and returns the child's exit status. The test checks that status and the captured hint.

Summary

Updates the remote-install warning, the missing-watchexec hint, and the artifact-cache message.

  • The watch test now uses an isolated PATH and a bounded run.
  • Both trust errors keep the working command-reference link. jdx deferred the security-guide link until its section lands.
  • No new actionable issues were found.

AI-assisted — Tool: Greptile; model: llmproxy/gpt-6.1-sol; version: unavailable.

Reviews (2) · Last reviewed commit: "fix: keep the trust link and isolate the..." · Reviewed by Greptile

Comment thread src/errors.rs Resolved
Comment thread e2e/cli/test_watch_missing_watchexec Resolved
The configuration-trust section of the security guide does not exist on
main yet, so the untrusted-config errors keep linking to the mise trust
reference. The missing-watchexec test now runs mise watch with only mise
on PATH and a 30 second limit, so a host watchexec cannot hang it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Entire-Checkpoint: 01M4D5B0VDNFTYZJQYZBMFENE6
@jdx jdx changed the title fix: point error hints at current commands and pages fix: point error hints at current commands Oct 8, 2026
@jdx
jdx merged commit 209167f into main Oct 8, 2026
51 of 55 checks passed
@jdx
jdx deleted the fix/msg-hints branch October 8, 2026 10:13
mise-en-dev added a commit that referenced this pull request Oct 8, 2026
<!-- entire-trail-link-start -->
https://entire.io/gh/jdx/mise/trails/493
<!-- entire-trail-link-end -->

### 🚀 Features

- **(bootstrap)** add an os filter to files and directories by @jdx in
[#14058](#14058)
- **(bootstrap)** add auto mode for fish shell activation by @jdx in
[#14172](#14172)
- **(config)** merge [bootstrap] from config includes by @jdx in
[#14176](#14176)
- **(doctor)** show dotfiles repo path and origin by @jdx in
[#14173](#14173)
- **(dotfiles)** give each machine its own tracked version with a
machine variant by @jdx in
[#14062](#14062)
- **(dotfiles)** infer merge sources and keep app state when switching
from symlink by @jdx in [#14076](#14076)
- **(dotfiles)** add merge = "missing" to fill in defaults the app may
change by @jdx in [#14081](#14081)
- **(dotfiles)** add track-local for history that never leaves the
machine by @jdx in [#14082](#14082)
- **(dotfiles)** refuse to publish saved versions that look like secrets
by @jdx in [#14171](#14171)
- **(installs)** move installs that cannot be reinstalled into the
identity layout during migrate by @jdx in
[#14079](#14079)
- **(java)** **breaking** default java versions to Temurin builds by
@jdx in [#14146](#14146)
- **(mcp)** implement install_tool and require a trusted project for
run_task by @jdx in [#14111](#14111)
- **(packslip)** add a workflow option to pin the signing workflow by
@jdx in [#14075](#14075)
- **(packslip)** accept a list of signing workflows by @jdx in
[#14093](#14093)

### 🐛 Bug Fixes

- **(backend)** respect disable_backends in ls-remote by @jdx in
[#14130](#14130)
- **(bootstrap)** keep applying other package managers after one fails
by @jdx in [#14138](#14138)
- **(bootstrap)** skip the firewall section where it is unsupported by
@jdx in [#14137](#14137)
- **(bootstrap)** keep shell activation when a dotfile is tracked by
@jdx in [#14135](#14135)
- **(bootstrap)** warn on legacy command spellings and mise direnv by
@jdx in [#14113](#14113)
- **(bootstrap)** show hooks that use exec() in dry runs by @jdx in
[#14136](#14136)
- **(bootstrap)** support absent and unapply for systemd units by @jdx
in [#14139](#14139)
- **(brew)** infer formula version from the GitHub release tag path by
@JamBalaya56562 in [#14165](#14165)
- **(brew)** detach a DMG left attached by an interrupted install by
@jdx in [#14177](#14177)
- **(cargo)** do not resolve dependencies to mise shims by @jdx in
[#14070](#14070)
- **(cli)** accept yes/no booleans, prefix: in latest, and warn log
level by @jdx in [#14125](#14125)
- **(cli)** print the invoked command name in help by @jdx in
[#14123](#14123)
- **(cli)** replace unimplemented!() in --monorepo flags with an error
by @jdx in [#14116](#14116)
- **(config)** report an invalid tool version in config ls instead of
panicking by @JamBalaya56562 in
[#14094](#14094)
- **(config)** verify .monorepo markers in paranoid mode by @jdx in
[#14105](#14105)
- **(config)** apply config environment files in directory order by @jdx
in [#14148](#14148)
- **(config)** ignore project bootstrap and dotfiles config in safe mode
by @jdx in [#14110](#14110)
- **(daemons)** quote deferred daemon commands for cmd.exe on Windows by
@JamBalaya56562 in [#14055](#14055)
- **(daemons)** run argv and Windows readiness probes in the tool
environment by @JamBalaya56562 in
[#14080](#14080)
- **(doctor)** recognize a `mise` entry in the dedicated shims dir by
@jdx in [#14069](#14069)
- **(dotfiles)** say when incoming history changes no files on this
machine by @jdx in [#14066](#14066)
- **(dotfiles)** let MISE_YES confirm rollback, undo, and recover by
@jdx in [#14067](#14067)
- **(dotfiles)** save files replaced when adopting a setup, and add
--take-remote-all by @jdx in
[#14065](#14065)
- **(dotfiles)** don't require --yes without a TTY for recoverable
confirmations by @jdx in
[#14071](#14071)
- **(dotfiles)** stop prompting for recoverable operations by @jdx in
[#14077](#14077)
- **(edit)** do not overwrite an existing config without a terminal by
@jdx in [#14124](#14124)
- **(env)** honor redact = false exclusions in mise env --redacted by
@jdx in [#14109](#14109)
- **(env)** skip watch_files runs in safe mode and with --no-hooks by
@jdx in [#14108](#14108)
- **(exec)** install exact versions when the version list times out by
@jdx in [#14164](#14164)
- **(generate)** update the GitHub Actions and devcontainer templates by
@jdx in [#14145](#14145)
- **(generate)** skip hidden and global tasks in task-stubs by @jdx in
[#14127](#14127)
- **(github)** check asset size without a checksum by @jdx in
[#14128](#14128)
- **(github)** percent-encode the tag in gitlab release lookups by
@thespags in [#14102](#14102)
- **(java)** key the version cache by vendor and keep release_type by
@jdx in [#14131](#14131)
- **(migrate)** keep an unwritable stderr from aborting mise during a
migration by @JamBalaya56562 in
[#14158](#14158)
- **(node)** verify GPG signatures for every node version by @jdx in
[#14132](#14132)
- **(npm)** stop npm view from re-entering mise through a foreign shim
by @jdx in [#14084](#14084)
- **(packslip)** let a user signer option replace a registry workflow
default by @jdx in [#14091](#14091)
- **(plugins)** install git:: plugins from a subdirectory by @jdx in
[#14140](#14140)
- **(plugins)** install packslip entries in [plugins] as vfox plugins by
@jdx in [#14141](#14141)
- **(plugins)** stop mise plugins uninstall --purge from panicking by
@jdx in [#14117](#14117)
- **(plugins)** install and compare git:: subdirectory sources from
[plugins] by @onokonem in
[#14150](#14150)
- **(prune)** skip a tracked config whose tool version no longer parses
by @JamBalaya56562 in [#14103](#14103)
- **(ruby)** expand {os} and {arch} in precompiled URLs correctly by
@jdx in [#14133](#14133)
- **(sandbox)** clear inherited variables for --deny-env on Windows by
@jdx in [#14107](#14107)
- **(sandbox)** reject allow_net on macOS instead of writing invalid
rules by @jdx in [#14106](#14106)
- **(settings)** reject settings set in places mise ignores them by @jdx
in [#14126](#14126)
- **(shim)** skip version lookups for lazy tools that are not installed
by @jdx in [#14063](#14063)
- **(shim)** stop system fallback cycles through wrappers by @jdx in
[#14088](#14088)
- **(shim)** match Windows lazy shim names regardless of ASCII case by
@jdx in [#14090](#14090)
- **(spm)** use a custom api_url for cloning and skip lockfile URLs by
@jdx in [#14129](#14129)
- **(task)** report unmatched sources, show depends_post, and load
global tasks by @jdx in [#14122](#14122)
- **(task)** resolve mise run ./script relative to the current directory
by @jdx in [#14120](#14120)
- **(task)** send mbx-cache headers to the remote task cache by @jdx in
[#14147](#14147)
- **(task)** strip script extensions only from file task names by @jdx
in [#14159](#14159)
- **(task)** skip fresh raw and interactive cached tasks when their
cache key is unchanged by @jdx in
[#14121](#14121)
- **(task)** keep secret values out of remote cache keys by @jdx in
[#14104](#14104)
- **(use)** create config.toml instead of writing global tools to
config.<env>.toml by @jdx in
[#14179](#14179)
- **(vfox)** do not fail every command for an env plugin with no source
by @jdx in [#14119](#14119)
- **(vfox)** resolve embedded plugin files from the manifest dir by @jdx
in [#14167](#14167)
- **(watch)** pass watchexec flags through to watchexec by @jdx in
[#14115](#14115)
- keep temporary files out of the cache directory by @jdx in
[#14134](#14134)
- point error hints at current commands by @jdx in
[#14142](#14142)
- replace panics on bad input with errors by @jdx in
[#14118](#14118)
- require experimental for remote task sources, OpenTelemetry and spinel
by @jdx in [#14114](#14114)

### 📚 Documentation

- **(agents)** treat 12 months as the default deprecation window by @jdx
in [#14100](#14100)
- **(cli)** hide mise bootstrap dotfiles and mise tasks run from help by
@jdx in [#14101](#14101)
- restructure and rewrite the documentation site by @jdx in
[#14097](#14097)
- rewrite CLI help and settings descriptions by @jdx in
[#14098](#14098)
- update pages for behavior changed by recent fixes by @jdx in
[#14163](#14163)

### 🧪 Testing

- **(backend)** give test_ubi a longer version-fetch timeout by @jdx in
[#14162](#14162)
- **(config)** don't rely on teleport plugins being absent in not-found
test by @jdx in [#14059](#14059)
- **(windows)** isolate install fixtures and wait for executable
teardown by @jdx in [#14089](#14089)

### 📦️ Dependency Updates

- update rust crate demand to v2.4.0 by @renovate[bot] in
[#14054](#14054)
- update aube to v2.7.0 by @renovate[bot] in
[#14074](#14074)

### 📦 Registry

- pin packslip tools to the workflow that signs their releases by @jdx
in [#14092](#14092)
- rename mprocs to dekit and keep mprocs as an alias by @jdx in
[#14169](#14169)

### Chore

- **(docs)** keep moved pages reachable and fail on dead anchors by @jdx
in [#14096](#14096)
- **(settings)** deprecate settings that have no effect by @jdx in
[#14112](#14112)
- run e2e tests from mise run test and fix the registry test example by
@jdx in [#14143](#14143)

### Ci

- install mold from its GitHub release instead of apt by @jdx in
[#14085](#14085)
- stop installing direnv for the e2e tests by @jdx in
[#14170](#14170)

### Security

- **(http)** redact URL credentials in debug logs by @jdx in
[#14155](#14155)
- **(npm)** redact credentials in Git-source diagnostics by @jdx in
[#14057](#14057)
- **(npm)** redact normalized SSH diagnostics by @jdx in
[#14064](#14064)
- **(worktrunk)** pin the registry default to the release workflow on
tags by @max-sixty in [#14073](#14073)

### New Contributors

- @onokonem made their first contribution in
[#14150](#14150)
- @max-sixty made their first contribution in
[#14073](#14073)

## 📦 Aqua Registry Updates

### Updated Packages (2)

- [`charmbracelet/skate`](https://github.com/charmbracelet/skate)
- [`pvolok/dekit`](https://github.com/pvolok/dekit)
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Instruction counts

benchmark trend instructions Δ wall (min) Δ
env ▃█▁▆▇ 27,617,353 → 27,619,971 +0.01% 19.52 → 19.69ms +0.87%
hook-env ▁█▄▃▂ 29,598,137 → 29,594,311 -0.01% 20.65 → 20.50ms -0.70%
ls ▃▄▁█▄ 31,404,378 → 31,387,705 -0.05% 21.34 → 21.59ms +1.15%
registry █▇▃▄▁ 39,991,186 → 39,915,051 -0.19% 17.82 → 18.06ms +1.35%
startup ▆▇▅█▁ 10,954,162 → 10,936,333 -0.16% 12.00 → 12.23ms +1.93%

No instruction-count regression above 1%.

Only instruction counts gate. Wall clock is shown for context — on identical hardware it moves 4-20% run to run.

Measured by tak — instruction-counted CLI benchmarks, stored in this repository's git notes.

4e4d4f7490a9 vs 4a98b02f988b · measured on the runner, not pushed to the history.

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