Skip to content

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 25 Jun 17:45
· 60 commits to main since this release

This release makes nub install resilient on resource-constrained CI and containers, and shaves repeated work off the install and warm-cache paths.

Important

Installs no longer abort under thread/PID or CPU-quota pressure. On constrained CI runners (e.g. Vercel) nub ci could exit 101 at the install tail when an OS thread spawn failed with EAGAIN — with panic = "abort", that crashed the whole install instead of degrading. Spawns are now guarded and the install's CPU-bound pools size to the cgroup CPU quota rather than the host core count. If you saw intermittent exit-101 installs in a container, this release fixes them.

Install resilience & performance

Area What changed Commit
nub ci / install Guard every thread::spawn against EAGAIN and add a cgroup-aware concurrency cap, so install degrades gracefully instead of aborting under thread/PID exhaustion #136 (1889904f)
Pool sizing Size the CPU-bound install pools (tokio, rayon, the linker pool) to the box's cgroup CFS CPU quota instead of the over-reported host core count, avoiding over-subscription and the CFS-throttle latency cliff #140 (8098ce11)
File descriptors Raise the soft RLIMIT_NOFILE on PM-engine startup, fixing intermittent Too many open files (os error 24) on large dependency trees (e.g. @aws-sdk/* + aws-cdk-lib) on macOS #143 (336408a9)
Config reads Read and parse each config file (package.json, .npmrc, .yarnrc.yml, …) once per command via an mtime-validated cache, dropping repeated reads from 3x to 1x with byte-identical output #137 (2fe966bb)
Transpile cache Collapse warm transpile-cache hits from three body copies to one, reusing the read buffer in place #139 (9368ec2a)

The NUB_CPU_BUDGET override introduced alongside the pool-sizing work was removed before release — CPU-quota auto-detection stays wired in, with no public CPU knob in any namespace. (#150, 146cadca)

nub run

nub run <script> <args> already forwarded args to the underlying command, but the echoed $ <cmd> preamble showed only the script body. It now includes the forwarded args, shell-quoted exactly as they run, so the displayed command matches what executes. (#147, f9785bcd)

Documentation

  • Correct the pnpm overrides and npm resolutions support-table rows to match the surrounding prose (2a6faad1).

CI & tooling

  • Share the rust-cache across CI jobs, saving only on main so PRs restore read-only and stop churning the cache budget (#133, 1d4c39e4).
  • Drop the unused pnpm cache from the daily-driver smoke workflow, fixing its post-cleanup cache-save failure (#138, 9d2aead1).
  • Default new worktrees to ~/.cache/nub/worktrees instead of /tmp (d609654b).
  • Add the implementation-thread and visual-review skills; add decisions-pending statusline tooling and a comment-guard nudge (b5c6dbd7, 2ebae8a9, cd185f40, b4f55577).

Site & README

README badge-link cleanup and an animated star-count SVG endpoint at /stars.svg. (783e0c21, 6cb68613, 60568ed6)

Commits in this release

  • Remove badge links from README (783e0c21)
  • site: add animated star-count SVG endpoint at /stars.svg (6cb68613)
  • site: restyle /stars.svg as GitHub's Star button (dark) (f9634e91)
  • ci: share rust-cache across jobs, save only on main (#133, 1d4c39e4)
  • site: fix /stars.svg count-up — nested-svg+SMIL clip, 6.5s ease-in-out odometer (60568ed6)
  • hooks(gh-comment-guard): nudge toward minimal comments, not trim-to-limit (b4f55577)
  • fix(ci): guard thread::spawn against EAGAIN + cgroup-aware concurrency cap so install degrades instead of aborting (panic=abort) (#136, 1889904f)
  • fix(ci): drop pnpm cache from daily-driver setup-node (#138, 9d2aead1)
  • feat(install): size CPU-bound pools to the cgroup CPU quota, not host cores (#140, 8098ce11)
  • run: include forwarded args in the echoed command (#147, f9785bcd)
  • chore(worktree): default worktrees to ~/.cache/nub/worktrees (off /tmp) (d609654b)
  • perf(pm): read each config file once per command via an mtime-validated cache (#137, 2fe966bb)
  • perf(cache): collapse warm-hit body copies from 3 to 1 (#139, 9368ec2a)
  • fix(install): raise RLIMIT_NOFILE on the PM engine startup (#143, 336408a9)
  • docs(install): correct pnpm overrides + npm resolutions support-table rows to match prose (2a6faad1)
  • skills: add implementation-thread + visual-review (codify the workup + browser-computed UI verification) (b5c6dbd7)
  • Remove the NUB_CPU_BUDGET public override (brand boundary) (#150, 146cadca)
  • tooling: decisions-pending statusline (live 'N decisions awaiting maintainer' from .fray/decisions.md) (2ebae8a9)
  • tooling: multi-line decisions statusline (list each pending decision) (cd185f40)

Full Changelog: v0.2.0...v0.2.1