A memory-retention release, plus two fixes to nub upgrade.
Memory retention
Seven unbounded-retention defects, each reproduced with a fixture against a plain Node control before and after the fix. (#702)
─────────────────────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────
Area │What changed │Measured
─────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────
nub run -r supervisor│Streaming mode no longer retains every prefixed output line for the child's whole life. A script that never exits — nub run -r dev — grew the supervisor 1:1 with child output. │45 → 325 MB over 50 s, now flat at 15 MB
─────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────
Aggregate output │Flushes past 8 MiB instead of buffering the entire run. A non-TTY stdout selects this path, so CI and piped runs were affected too. │250 MB climbing → flat 29 MB, output still in order
─────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────
URL.createObjectURL │Captures one compact Buffer when the Blob is built, capped at 4 MiB, and decodes only when a Worker asks for the source. │20k object URLs: +43.1 → +5.6 MB (plain Node: +1.1)
─────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────
Blob │A Blob no longer pins whatever its construction parts referenced. │2000 Blobs holding 64 KB between them: 504 → 4 MB external
─────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────
Transpile-cache sweep│Was armed on an unref'd setImmediate the process exited before running, so a user whose runs are all synchronous never swept. It is now scheduled only when a sweep is due, and │—
│ref'd. │
─────────────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────
Upgrade
Fixes in #705.
- On Windows the command reported its install path in the extended-length form — installed v0.7.4 to \?\C:\Users\you.nub. The install itself was always correct. Paths are now spelled for display at the print sites, while the path used for the file swap keeps the MAX_PATH exemption a deep install directory depends on. (#704)
- A nub upgrade with nothing newer to install downloaded and swapped in the release it was already running. It now reports already on the latest release and stops. An explicit --version still reinstalls, which is what repairs a damaged install, and --stable from a canary build still downloads, because that is a channel switch. (#664)
- The upgrade line now names the version being left as well as the one arriving.
- The --yes flag advertised a confirmation prompt that has never existed. Its help text now says what it does.
Docs
The reference pages were rewritten for density — the config reference, the FAQ, and the install, runtime, runner and deployment sections — and two rotted links were fixed.
What's Changed
- fix: bound unbounded retention in the run supervisor, blob URLs, and the caches by @colinhacks in #702
- fix(upgrade): strip the Windows verbatim path prefix, and skip a no-op upgrade by @colinhacks in #705