Build1 distinct publisher3 min readUpdated
A dev.to writeup traces silent child-process undercounts to pidtree 0.6.0 shelling out to a binary Microsoft removed. The rejection gets swallowed and the tree reads as size one.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Promise.allSettled turns a rejection into a result somebody has to go and read, and the polling loop in question did not read it. So `spawn wmic ENOENT` arrived at the UI as an empty child list, with the range in `package.json` saying `^0.6.0` and the lockfile saying 0.6.0 [8]. The pane showed about 77 MB, roughly the PowerShell host on its own, with the coding agent inside it and the dev server that agent had started counted as nothing at all [2].
The version arithmetic is the part that will keep this alive. pidtree shipped the fix in 1.0.0, which still tries wmic first and falls back to `Get-CimInstance` when the binary is missing [6]. A caret range of `^0.6.0` never resolves to 1.0.0 [7], so the fix can be published, available, and completely absent from your tree while every dependency check comes back clean. The author's advice is to look at what you resolve rather than what you declared [15].
If you write the replacement yourself, the shape of the cost matters. One snapshot of `Win32_Process` returning 396 rows took 200 ms, while five per-PID filtered queries took 517 ms [9]. That works out to about 103 ms per filtered call, which puts the whole-machine snapshot below the price of two filters [1]. Swap five filters for one snapshot and an in-memory parent-to-children map and the same cycle drops by 317 ms, about 61 per cent [2], because the expense sits in starting the CIM call rather than in the rows it returns [10].
Why the tree has to be right is the second half of the source. Killing the root `cmd` left its `timeout` grandchild running, confirmed by the same count before and after [12]. `Stop-Process` and Node's `process.kill(pid)` each end exactly one process, since Windows has no POSIX process groups and no reparenting cleanup, and the descendants carry on holding their handles and their ports [11]. `taskkill /F /T` terminated four PIDs deepest first and then upward [13], and that ordering is the mechanism, not a detail: kill the root first and the links you needed to find the rest are gone, leaving orphans with nothing pointing at them [14].
Put the two halves together and a childless tree is not a lost metric. It is a kill routine that iterates over zero children, returns without complaint, and leaves the dev server bound to its port. The measurements come from one machine, Windows 11 Home build 26200 in August 2026, on work the author does on a project called NestMux [1], and pidtree is not an obscure dependency: it backs pkill-style behaviour across a lot of tooling and pulls millions of downloads a week [4]. As the author puts it, the failure does not look like a failure, it looks like a process with no children [16].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
The measurements in the post come from Windows 11 Home, build 26200, in August 2026, on the author's own machine; the author hit the issue while working on a project called NestMux.
A terminal pane running a coding agent reported 77 MB of memory, which is roughly the PowerShell host and nothing else; the agent inside it and the dev server the agent had started were not counted, and every pane looked like an idle shell.
Microsoft deprecated WMIC in Windows 10 21H1 and started removing it from the image in Windows 11 22H2; on a current install it is simply not there, and the author notes it is buried inside libraries rather than in code people wrote.
pidtree is the standard way to get a process tree from Node, backs pkill-style behaviour in a lot of tooling, and has millions of downloads a week.
On Windows, pidtree version 0.6.0 shells out to wmic; the author's test call returns 'FAIL: spawn wmic ENOENT'.
pidtree 1.0.0 fixed it: it still tries wmic first and falls back to PowerShell Get-CimInstance when that fails, returning child PIDs in the author's test.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Reproducible commands, single machine
Each load-bearing claim ships with the exact command and its output - pidtree 0.6.0 returning 'spawn wmic ENOENT', pidtree 1.0.0 returning child PIDs, timeout.exe surviving Stop-Process, taskkill /F /T ordering deepest-first, and the 200 ms vs 517 ms CIM timings. That is unusually checkable for a self-published post. It is capped by the single-environment design: one Windows 11 Home build 26200 host, one date, single-run timings with no repetitions or variance, and no second publisher or maintainer confirming any of it.
Broken path is widely depended on; fix uptake unknown
Both halves of the failure condition are demonstrably in the field: WMIC removal has actually shipped to Windows 11 (Get-Command wmic fails on build 26200), and pidtree - the library whose 0.6.0 Windows path calls wmic - is described as having millions of downloads a week and backing pkill-style behaviour across Node tooling. A repaired version, pidtree 1.0.0 with a Get-CimInstance fallback, exists and works in test. What the cluster does not measure is uptake: no data on how many dependents still resolve 0.6.0, and the caret-range problem implies transitive dependents may stay pinned indefinitely.
Slightly understated
The framing is narrower than the evidence would license. Claims are scoped to what the author ran, the headline mechanism is demonstrated rather than asserted, and there is no product pitch attached. Meanwhile the substance - a silent, error-free undercount in a library with millions of weekly downloads, on a platform change that has already shipped - is presented as a personal debugging note with an explicit 'nothing here is specific to it' caveat. Mildly negative rather than strongly so, because the ecosystem-wide blast radius is asserted qualitatively and never quantified.
Disclosed project interest, low commercial pressure
Self-published on dev.to with no vendor, sponsor or funding relationship visible in the cluster. The one interest present is disclosed inline: the author works on NestMux and hit the bug there, which gives a mild promotional angle for that project, and the post is a follow-up to the author's own earlier piece. Offsetting factors are that the recommendations point at a third-party library upgrade and built-in Windows tooling rather than anything the author sells, and readers are explicitly invited to run the commands themselves.
Moderate - checkable but uncorroborated
The mechanism chain is internally coherent and each step is backed by quoted command output, which supports the technical claims fairly well. Confidence is held near the middle because the entire cluster is one publisher and one author on one machine: no independent replication, no maintainer or Microsoft comment, single-run timings, and no measurement of how widespread the resolved-0.6.0 condition is. The specific reproductions deserve more trust than the implied ecosystem-scale conclusion.
build
Parallel coding agents on Windows break at the home directory, not the launcher1 distinct publisher
build
A GAN beauty filter is a device budget allocation, not a feature toggle1 distinct publisher
build
Every viewer hits your HLS key endpoint in the same second, and almost nobody tests it1 distinct publisher
build
Your .ai viewer is a pdf.js problem, and its worst bugs never throw1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 23, 2026