Skip to content

v0.18.0

Choose a tag to compare

@tobert tobert released this 03 Oct 21:23
· 56 commits to main since this release
0d25d7a

What's Changed

  • Reserve exit 1 for results, exit 2 for mistakes by @tobert in #444
  • Add whole-program background execution for embedders by @tobert in #445
  • Show the full cause chain at three error-flattening sites by @tobert in #447
  • Tests assert one outcome, and a per-crate run cannot pass empty by @tobert in #450
  • Streaming callers see every terminal event their result reports by @tobert in #446
  • A runtime fault keeps the output that ran before it by @tobert in #448
  • A job's stdout stream holds only the job's own output by @tobert in #449
  • Whole-program jobs stream stdout as it is produced by @tobert in #451
  • A spilled statement no longer masks a later statement's exit by @tobert in #454
  • Thread the execution context through the interpreter by @tobert in #452
  • Refuse the patch offsets and the node posture we accepted silently by @tobert in #455
  • Keep the output a timeout or a binary refusal used to drop by @tobert in #456
  • A job's status carries the facts behind its exit code by @tobert in #457
  • Say which assignment failed, and stop claiming two paths are disjoint by @tobert in #458
  • A plan reports the type error the runtime will refuse by @tobert in #459
  • Retire the vestigial stdin parameter, and decline the JoinSet by @tobert in #460
  • Record the 0.18 silent-fallback batch by @tobert in #461
  • Rename allow_external_commands to allow_unwrapped_commands by @tobert in #462
  • exec and spawn refuse with exit 127, like the other gated sites by @tobert in #463
  • Close five gaps the 0.18 batch reviews found by @tobert in #464
  • A background job's stderr streams live, from every producer by @tobert in #465
  • Statement-level ! follows bash, and refuses the forms bash misreads by @tobert in #466
  • Fix main's build, and run a negated body unpublished like a chain operand by @tobert in #467
  • Record #462-#466 in the changelog by @tobert in #468
  • A substitution's stderr comes before its command's, in every arm by @tobert in #469
  • KernelBackend's default canonicalize returns absolute paths, and both defaults are tested by @tobert in #470
  • Function, source, script and $() results follow one accumulator's rules by @tobert in #471
  • Redirect targets open before the command runs by @tobert in #472
  • Three parser residuals: a fitting example, a heredoc scanner, an enforced invariant by @tobert in #473
  • Usage errors exit 2; filesystem errors name their kind once by @tobert in #474
  • Stop a builtin pipeline from hanging, and let the script timeout end a busy builtin by @tobert in #475
  • grep: accept -m as the short form of --max-count by @tobert in #477
  • spawn runs through the kernel's shared spawner by @tobert in #476
  • A bareword with == or != is one literal word: echo === parses by @tobert in #478
  • A glued ! in argument position is one literal word, as in a bash script by @tobert in #481
  • grep reads GNU BRE by default, as GNU grep does by @tobert in #479
  • sed reads GNU BRE and awk reads gawk ERE; strict ERE follows GNU's escapes by @tobert in #482
  • Record #469-#476 in the changelog, and say which stdin a redirect target's $() reads by @tobert in #480
  • Update async-trait for Rust 1.99 Clippy by @tobert in #491
  • Scope redirected and gathered stdin to its commands by @tobert in #487
  • Restore function definitions after command substitution by @tobert in #488
  • Preserve stderr from single pre-scatter stages by @tobert in #489
  • Merge captured stdout before stderr under 1>&2 by @tobert in #490
  • Expand only unquoted tilde prefixes written in source by @tobert in #483
  • Keep child command arguments out of wrapper options by @tobert in #492
  • Read caret, mid-word tilde and open ranges as literal words by @tobert in #493
  • Read backslash-quoted literal words and patterns by @tobert in #494
  • Read raw jq input and end structured text with a newline by @tobert in #495
  • Skip special entries and bound recursive grep reads by @tobert in #496
  • Expose literal plan words alongside their rendered text by @tobert in #497
  • Complete supported builtin flags and keep help argument roles by @tobert in #498
  • Use one JSON envelope for nonzero builtin results by @tobert in #499
  • Add brace groups and compound redirects by @tobert in #500
  • Name usable fixes for redirects into mount ancestors by @tobert in #501
  • Return an error, not a panic, for non-ASCII RFC 3339 input by @tobert in #503
  • Refuse break and continue counts below 1 by @tobert in #502
  • Propagate exit out of user functions and source by @tobert in #506
  • Groom the 0.18 changelog by @tobert in #507
  • Keep recursive walks in one mount unless another is named by @tobert in #504
  • Make -name=value, glued flag lists, +x, and ... one word each by @tobert in #505
  • Report readonly as an unknown command in validation by @tobert in #509
  • Refuse negative xxd -l/-s, base64 -w, diff -C, and patch -p values by @tobert in #510
  • find: report unstattable entries and fail -mtime/-size on them by @tobert in #511
  • Record how stdout and stderr interleave (#485, part 1) by @tobert in #512
  • Trim AGENTS.md and lead it with the writing guide by @tobert in #508
  • chore: bump to v0.18.0 by @tobert in #513

Full Changelog: v0.17.2...v0.18.0