Skip to content

fix(daemons): run argv and Windows readiness probes in the tool environment - #14080

Merged
jdx merged 1 commit into
jdx:mainfrom
JamBalaya56562:fix-daemons-probe-tool-env
Oct 7, 2026
Merged

jdx merged 1 commit into
jdx:mainfrom
JamBalaya56562:fix-daemons-probe-tool-env

Conversation

@JamBalaya56562

@JamBalaya56562 JamBalaya56562 commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

mise runs a daemon's ready_cmd and health_cmd through mise x, so the probe sees the project's tools and [env], not whatever environment the shared pitchfork supervisor happened to start with. Two kinds of probe skipped that:

[env]
DATABASE_URL = "postgres://127.0.0.1:5432/app"

[daemons.api]
run = "node server.js"
ready_cmd = ["node", "scripts/ready.js"]

Here the probe found neither the project's node nor DATABASE_URL when the supervisor had been started from another project. It failed until pitchfork's timeout, and mise daemons start reported the daemon as failed.

mise now wraps both kinds:

  • An array stays an array: ["<mise>", "x", "--", "node", "scripts/ready.js"], still run without a shell.
  • A string on Windows becomes "<mise>" x -- cmd /c <command>, the form presets use, with the command escaped for cmd.

mise = false still leaves probes unwrapped. The docs now describe this and the array form.

Validation

  • New unit test argv_probes_stay_argv_inside_the_tool_environment checks both ready_cmd and a structured health_cmd. The existing task_probe_environment_respects_explicit_opt_out now runs on Windows too.
  • New e2e-win/daemons_probe_env.Tests.ps1 starts the pitchfork 2.30.0 supervisor from a directory without the project's [env], then starts a daemon whose readiness probe passes only when it sees a value from [env]. It covers an array probe and a string probe. With mise 2026.10.2 on Windows 11, both daemons failed when the 30-second ready timeout ran out (exit code 124), and the probe ran unwrapped. With this change, built by CI, both pass, and so do the existing daemons_task and daemons_task_init e2e tests.

AI-assisted β€” Tool: Claude Code; model: anthropic/claude-opus-5-5; version: unavailable.

πŸ€– Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Readiness and health checks now use the project’s tools and environment settings across platforms, unless a daemon opts out with mise = false.
    • Probe commands can be configured as argument arrays. Pitchfork 2.30.0 and later runs these without a shell.
  • Documentation
    • Updated daemon guidance to explain probe environment behavior and argument-array command support.

@coderabbitai

coderabbitai Bot commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack β†’

Important

Review skipped

Review was skipped as selected files did not have any reviewable changes.

βš™οΈ Run configuration
  • Configuration used: Repository YAML (base), Central YAML (inherited), Organization UI (inherited)
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: f7946949-a8b0-40d5-a5fb-c7714a02dba3
πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between ee94b79 and 7ee3390.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • πŸ” Trigger review

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: fe052991-6d4b-495d-909c-e432f34c9aaa
πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between e343483 and ee94b79.

πŸ“’ Files selected for processing (1)
  • e2e-win/daemons_probe_env.Tests.ps1

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


πŸ“ Walkthrough

Walkthrough

Daemon readiness and health probes now support string and argv commands through mise x across platforms, unless mise = false. Windows end-to-end tests cover project environment values for both ready_cmd forms. Documentation describes the behavior and Pitchfork’s argv-command support.

Changes

Daemon probe execution

Layer / File(s) Summary
Wrap probe commands across platforms
src/daemons/presets.rs, src/daemons/mod.rs, src/daemons/runtime.rs
Probe wrapping handles string commands and argv commands, including structured probe tables. Task-daemon and custom-probe wrapping no longer depends on the platform being Unix. The argv-probe test checks ready_cmd and health_cmd.run.
Test and document probe environments
e2e-win/daemons_probe_env.Tests.ps1, docs/daemons.md
Windows end-to-end tests verify that string and argv ready_cmd forms receive the project’s [env] value. Documentation describes tool and environment use, the mise = false exception, and argv command support in Pitchfork 2.30.0 and later.

Priority: βž– Normal

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix

Merge Risk: βšͺ Minimal Β· up to ee94b

The Windows probe tests cover both argv and string readiness commands; no merge-blocking concern was identified in the supplied evidence.

πŸš₯ Pre-merge checks | βœ… 5
βœ… Passed checks (5 passed)
Check name Status Explanation
Description Check βœ… Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check βœ… Passed The title clearly and concisely describes the main changes: running argv readiness probes and Windows readiness probes in the tool environment.
Docstring Coverage βœ… Passed Docstring coverage is 83.33% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 6 functions across 3 files. (1 skipped: 1 u…
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.
  • 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 7, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 5/5

[High risk] Daemon readiness probes now run on Windows with tool environment.

The PR appears safe to merge; no actionable new issue was found.

What we checked:

  • Explicit opt-outs still work: Each wrapper caller checks the explicit opt-out before changing the probe.

Summary

Readiness and health probes now use the project's tools and environment for argument arrays and custom Windows commands.

  • Argument arrays stay arrays when wrapped in mise x.
  • mise = false still leaves probes unchanged.
  • Adds Windows readiness tests and updates the daemon guide.
  • The earlier supervisor-startup concern is fixed: the test saves its output and checks its exit code.

Reviews (3) Β· Last reviewed commit: "fix(daemons): run argv and Windows readi..." Β· Reviewed by Greptile

Comment thread e2e-win/daemons_probe_env.Tests.ps1 Resolved
@JamBalaya56562
JamBalaya56562 marked this pull request as ready for review October 7, 2026 19:00
@JamBalaya56562
JamBalaya56562 force-pushed the fix-daemons-probe-tool-env branch from e343483 to ee94b79 Compare October 7, 2026 19:01
…onment

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@JamBalaya56562
JamBalaya56562 force-pushed the fix-daemons-probe-tool-env branch from ee94b79 to 7ee3390 Compare October 7, 2026 20:31
@jdx
jdx merged commit c7a2338 into jdx:main Oct 7, 2026
48 checks passed
@JamBalaya56562
JamBalaya56562 deleted the fix-daemons-probe-tool-env branch October 7, 2026 23:14
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)
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.

2 participants