[Bug]: herd isolate-node ignores --site and writes .nvmrc into the current folder
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 76/100
Research direction
Start with cli/app.php:1592 and cli/Valet/Site.php:1303-1306 to trace how --site selects the target path; compare with the unisolate-node handling at cli/app.php:1619. Also inspect bin/herd:148, where the shell hook checks for --site=. Done means isolation writes .nvmrc in the named site's folder, an unknown site returns an error, and the hook handles the documented argument order without changing the current folder's Node version.
Written by the indexing model from the issue text.
Description
Platform
macOS
Operating system version
macOS 27.0.1 (26A434)
System architecture
ARM64 (M1, M2, etc)
Herd Version
2.0.2 (Build: 71)
PHP Version
n/a (Node 26.12.0 through Herd's nvm; global PHP is 8.5.10)
Bug description
herd isolate-node 26 --site=example ignores --site. The docs show this form for sites whose name doesn't match their folder, but the .nvmrc lands in the current folder instead of the site's, overwriting any .nvmrc already there. It still says "The site is now using Node 26." and exits 0, even for a site that doesn't exist.
herd unisolate-node --site=example does look in the site's folder, so it says it worked and leaves the stray .nvmrc behind.
Because nvm and Herd's shell hook pick up .nvmrc from parent folders, running it from ~/Herd would switch Node for every site below it without its own .nvmrc (I saw the hook switch after a cd into a subfolder). From the hook's code it would also nvm install a missing version; I didn't test that.
Expected: the .nvmrc goes into the site's folder, and an unknown site name gives an error.
Cause (herd.phar 2.0.2): isolate-node always passes getcwd() to Site::isolateNode() (cli/app.php:1592), which uses that path whenever it's set (cli/Valet/Site.php:1303-1305), so the site lookup at :1306 never runs. unisolate-node passes no path (app.php:1619), so it finds the site.
Possible fix: pass null instead of getcwd() when --site is set (app.php:1592, and :1580 for the form without a version).
Also: bin/herd:148 only checks $2 for --site=, so with the docs' argument order (and for --help) it runs nvm use in the current folder as well.
Thanks for the quick fixes on #1770 and #1771.
Steps to reproduce
- Herd 2.0.2 with any installed Node version (26 here) and a linked or parked site
examplethat has no.nvmrc. - From a folder that isn't a site:
mkdir ~/herd-test && cd ~/herd-test, thenherd isolate-node 26 --site=example. ls -A ~/herd-test ~/Herd/example: the.nvmrcis in~/herd-test, not in the site's folder, andherd isolated-nodedoesn't list the site.herd unisolate-node --site=example: it says it worked, but~/herd-test/.nvmrcis still there.- Clean up with
rm ~/herd-test/.nvmrc.
Relevant log output
# Paths changed for privacy. For the linked-site part I ran herd.phar against a copy of my Herd config, so my real setup stayed untouched.
# Same behaviour with a stock .zshrc (only Herd's own lines) and with no shell config at all.
$ cd ~/herd-test
$ herd isolate-node --site=example 26
The site is now using Node 26.
$ ls -A ~/herd-test
.nvmrc
$ cat ~/herd-test/.nvmrc
26
$ ls -A ~/Herd/example
$ herd isolated-node
+------+--------------+
| Path | Node Version |
+------+--------------+
$ herd unisolate-node --site=example
The site is now using the default Node version.
$ ls -A ~/herd-test
.nvmrc
# The docs' argument order, with a site name that doesn't exist:
$ cd ~/herd-test2
$ herd isolate-node 26 --site=nosuchsite
The site is now using Node 26.
Found '~/herd-test2/.nvmrc' with version <26>
Now using node v26.12.0 (npm v11.20.0)
$ echo $?
0
- Dominant language
- No language data
- Stars
- 124
- Forks
- 1
- PR merge metrics
- No merged PRs in 30d
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from beyondcode/herd-community
-
[Bug]: PHP 8.3 php.ini missing auto_prepend_file and herd-ext extension lines (dump() undefined)OpenmacOS
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
beyondcode/herd-community#1693 ·
-
macOS
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
beyondcode/herd-community#1602 ·
-
macOS
Difficulty 2/5 1-3 hours Newbie friendliness 53/100
beyondcode/herd-community#1783 ·
-
windows
Difficulty 3/5 1-2 days Newbie friendliness 55/100
beyondcode/herd-community#1779 ·
-
needs more information windows
Difficulty 4/5 3-5 days Newbie friendliness 35/100
beyondcode/herd-community#1778 · 1 comment ·
All issues in beyondcode/herd-community
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
Eval bug: minimax-m3: build_moe_ffn() drops the per-expert NVFP4 scale → garbled output (M3.1 Flash)Openbug-unconfirmed
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
openminion/openminion#376 ·
Maintainers usually reply within 1 day
-
integration: apple_tv
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
home-assistant/core#188282 · 1 comment ·
Maintainers usually reply within 1 day
-
A "since" range is worded as a career: "the past two seasons" says "regular season career (2025 on)"OpenP4: low
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
jeffknupp/association#538 ·