Mises v0.41.0 is tagged. user/sh now does redirection and N-stage
pipelines — the shell half of the POSIX-plumbing track, and the payoff
of fd inheritance (v0.39) and dup/dup2/pipe (v0.40).

    cat f > g       stdout to a file (create, truncate)
    cat f >> g      stdout appended
    sort < in       stdin from a file
    a | b | c       an N-stage pipeline

Three of the four operators are pure userland over the existing calls.
`>>` was not: a writable open starts its cursor at 0, so a write
overwrites, and there is no lseek. So this adds one open flag, O_APPEND
(0x400) — additive, since open already ignores unknown flag bits, so no
existing binary changes and the ABI-break window stays open. cat gained
a `-` operand (read stdin) so `<` and `|` have a consumer; it is opt-in
because a terminal still cannot say EOF (no Ctrl-D, no signals).

The executor spawns each pipeline stage's writer before its reader and
closes each pipe's write end before the next stage (or the reader never
sees EOF), and spawns every stage before waiting on any (or a full
one-page pipe deadlocks) — both forced by the missing O_CLOEXEC. The
shell stays allocation-free per line; the whole line is validated before
anything runs.

Still deliberately not a full POSIX shell: no quoting, globbing,
variables, job control or Ctrl-C. Those want signals — the next item.

tests/redir.rs types the operators at the machine and reads six
artifacts back; it also checks the shell survives a syntax error, that a
pipeline's status is its last stage's, and that no fd description or pipe
leaks. writetest gains an O_APPEND check. Suite: 364 [ok], 0 failed,
0 warnings.

Rationale and invariants: docs/DECISIONS/0052-shell-redirection-and-pipelines.md

  git tag v0.41.0   (832f2f7)


        kaguya