Skip to content

v0.1.8

Choose a tag to compare

@github-actions github-actions released this 21 Jun 03:46

Node augmentation batch: TUI hang fix, native addon ESM imports, wasm/shadow-realm unflag, and NODE_COMPAT tree-wide opt-out.

Runtime: terminal foreground handoff

Interactive full-screen TUIs (Nx, Turbo) hung unkillably under nub run — Ctrl-C was unreachable, requiring kill -9. Root cause: since v0.1.6 the child runs in its own process group (setpgid), but that group was never handed the terminal foreground (tcsetpgrp). Any raw-mode terminal read raises SIGTTIN and the process stops; Ctrl-C was delivered to nub, not the child. Non-TUI children don't read the terminal, so the issue was asymmetric.

Fix: on the interactive path (stdin is a TTY with inherited stdio), after spawn, tcsetpgrp(STDIN, child_pgid) hands the terminal foreground to the child's group. A RAII ForegroundGuard restores nub's foreground on child exit. While the child owns the terminal, the redundant SIGINT forward is suppressed (the kernel already delivers Ctrl-C to the foreground group directly); SIGTERM/SIGHUP/QUIT/USR1/USR2 still forward. The v0.1.6 single-SIGINT guarantee is preserved. (#32, fixes #27)

Runtime: expanded feature matrix

Three experimental Node features are now auto-injected on the Node versions that require the flag — consistent with the existing unflag-on-prior-versions posture (default-on in current Node ⇒ backfill it where it was flagged; --node opts out).

Feature Flag Bands injected
Native addon ESM imports --experimental-addon-modules [22.20, 23.0)[23.6, ∞) — never default-on; open-ended upper bound
WebAssembly modules --experimental-wasm-modules [18.19, 22.19)[23.0, 24.5) — default-on at 22.19 / 24.5
ShadowRealm --experimental-shadow-realm [18.19, ∞) — TC39 Stage 3, never default-on

Worker execArgv filtering also strips --harmony-* and --experimental-shadow-realm from child Worker threads to avoid bad-option startup aborts on Node versions where those flags are absent. (#31, #33, b28e40b, c87db12)

CLI: NODE_COMPAT env var

Setting NODE_COMPAT=1 (or true / yes, case-insensitive) forces zero-augmentation mode tree-wide — the persistent, inheritable form of --node. Because env vars propagate to descendants, one export in your shell, .envrc, or CI config covers the entire process tree. Version resolution and Node version provisioning remain active; only runtime augmentation is disabled.

Truthy values: 1, true, yes. Falsy/unset: anything else. Composes with --node (either one forces compat). (#34, f55fc83)

Testing & internals

  • pnpm conformance harness: runs pnpm's own test suite against nub, with an allowlist grounded in a full baseline run (461d613, e7d8f1d).
  • Fast dev Cargo profile + CI compile deduplication (7c67c8d).
  • CI: cancel-in-progress on PR workflows to avoid redundant runs (#37).

Commits in this release

  • fray: stop hook flags idle/frozen/unreaped dispatched sub-agents (527cb6b)
  • fray+agents: codify always-steer/resume rule, pnpm-compat exceptions, core design positions; fix stale anti-steering hook text (d5116c5)
  • fray: derive agent liveness from ground truth, not a hand-stored status (fd78dc6)
  • build: add fast dev profile + cut redundant CI compiles (7c67c8d)
  • docs: default to PR flow from a git worktree for nub-repo work (0bf1056)
  • cli: add --node opt-out to the node PATH-shim hijack (f35e566)
  • tests: add pnpm conformance harness (run pnpm's own suite against nub) (461d613)
  • tests: ground pnpm-conformance allowlist in a full-suite run; fix set -u array expansion (e7d8f1d)
  • fray(liveness): only flag UNRECONCILED on 'active' threads — parked phases (needs-decision/blocked/planned) with done agents are expected, not drift (699ce18)
  • runtime: filter --harmony-* flags from worker execArgv (b28e40b)
  • runtime: also strip --experimental-shadow-realm from worker execArgv (c87db12)
  • fix(#27): hand terminal foreground to interactive child (tcsetpgrp) (#32, fc5ffe6)
  • node: unflag addon-modules (ESM import of native .node addons on prior versions) (#33, d7541fd)
  • ci: add concurrency cancel-in-progress to PR workflows (#37, fcfb986)
  • feat(node): unflag shadow-realm + wasm-modules (#31, 54cb42e)
  • feat(cli): NODE_COMPAT env-var opt-out (nub --node persistent equivalent) (#34, f55fc83)
  • v0.1.8 (2f0f452)

Full Changelog: v0.1.7...v0.1.8