Proto commits in liljencrantz/crush

These 40 commits are when the Protocol Buffers files have changed:

Commit:69e3088
Author:Axel Liljencrantz

Join non-last pipeline stage threads in Job::eval(), fixing swallowed failures Job::eval() only ever tracked and joined the last stage of a pipeline's thread. A non-last stage dispatched to a worker thread (can_block=true, the default for most builtins) had its result -- success or failure -- discarded outright: e.g. `... | uniq | echo` with uniq failing (not the pipeline's last stage) silently vanished instead of aborting the script. Fixed with two pieces: - CrushError::is_send_disconnected(), matching only SendError -- crossbeam's SendError only ever means "every receiver was dropped", unlike the existing is_disconnected() (which also treats RecvError as benign for an unrelated reason: next_row() uses it to mean ordinary end-of-stream). - Job::eval() now joins every non-last stage's thread after the last stage finishes, propagating a genuine failure as the job's own but ignoring one where is_send_disconnected() (e.g. head/take truncating a stream early). This alone deadlocked `&`-backgrounded pipelines, since `&` desugared to a literal trailing `bg` stage whose entire point is to not wait for upstream to drain. Rather than detecting "is the last stage bg" at runtime (rejected: name matching breaks under shadowing; Arc-identity matching needs the command position resolved twice), `background` is now a real field on Job/JobNode set directly by the grammar's existing `&`-recognizing production. Job::eval() acts on it directly: dispatch the real last stage, register its output receiver for `fg`, return immediately -- none of the new joining logic runs for a background job at all. `bg` (the builtin) is now unrelated to job creation entirely; repurposed to resume an already-paused job in the background, parallel to crush:resume. pup (de)serialization of a Job carries the new field too, so it survives round trips (e.g. remote:exec of a closure containing a backgrounded job). See test-gaps.md for the full story, including a documentation bug found in passing (bg's own example used an infinite seq by mistake) and a rare, still-unresolved full-suite-only flake in tests/pipe2.crush/pipe3.crush that two concrete hypotheses (ThreadId reuse, shared Scope::is_stopped) were ruled out for with direct evidence, not just reasoning. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

Commit:ac94d62
Author:Axel Liljencrantz

Misc tweaks

Commit:e185546
Author:Axel Liljencrantz

grpc: Finish out incomplete parts

Commit:5059600
Author:Axel Liljencrantz

Merge conflicts

Commit:e71600c
Author:Axel Liljencrantz

Add test grpc service

Commit:f0fde9d
Author:Axel Liljencrantz

Misc

Commit:fdeaed4
Author:Axel Liljencrantz
Committer:Axel Liljencrantz

Better source code tracking Stack traces, command names and location tracking in error messages, etc.

The documentation is generated from this commit.

Commit:3c6291b
Author:Axel Liljencrantz

one_of type, including support in closure signatures

Commit:5398f0f
Author:Axel Liljencrantz

Better completion argument handling

Commit:7a2ca90
Author:Axel Liljencrantz
Committer:Axel Liljencrantz

multi-command command substitutions

Commit:39bf45d
Author:Axel Liljencrantz

Rethink documentation of closures

Commit:cbfb298
Author:Axel Liljencrantz

=Misc

Commit:45ab6f0
Author:Axel Liljencrantz

Return command

Commit:f9609e6
Author:Axel Liljencrantz

Fix missing column format serialization

Commit:8ac1181
Author:Axel Liljencrantz

Correctly handle single vs double dash switches to cmd

Commit:fcb34da
Author:Axel Liljencrantz

Drop non-working path join syntax

Commit:febe992
Author:Axel Liljencrantz

New commands New commands for viewing history and for filtering text via globs and regexps

Commit:644e7f0
Author:Axel Liljencrantz

Remove some dead code

Commit:7a6906d
Author:Axel Liljencrantz

Drop symbol value type, minor code cleanup

Commit:e177a02
Author:Axel Liljencrantz

AST/parsing cleanup

Commit:6b7156f
Author:Axel Liljencrantz

Add short description to namespaces

Commit:819851a
Author:Axel Liljencrantz
Committer:Axel Liljencrantz

Add table_input_stream:pipe method Many to many connections between input and output of commands.

Commit:c4db80b
Author:Axel Liljencrantz
Committer:Axel Liljencrantz

Track location of arguments, start using it in error reporting

Commit:42b23d0
Author:Axel Liljencrantz

Location tracking in parser Huge complicated change to start keeping track of mapping from source line to a parsed command. This is useful both for vastly superior error reporting and also to make tab completion possible.

Commit:4e78958
Author:Axel Liljencrantz
Committer:Axel Liljencrantz

Make pup encoding slightly more efficient

Commit:6810fee
Author:Axel Liljencrantz

Bump dependencies, update time parsing, add time tests

Commit:15f1ade
Author:Axel Liljencrantz
Committer:Axel Liljencrantz

Better API for duration creation

Commit:d41bbf5
Author:Axel Liljencrantz

Spelling

Commit:12d61b7
Author:Axel Liljencrantz

Serialization should be feature complete

Commit:cf689a8
Author:Axel Liljencrantz
Committer:Axel Liljencrantz

Finish up closure serialization Serialization and deserialization of closures should now be feature complete.

Commit:efd500e
Author:Axel Liljencrantz

Most of closure serialization working

Commit:4f8fa81
Author:Axel Liljencrantz

Bound ethods are now serializable

Commit:83b87a4
Author:Axel Liljencrantz

Add most of the proto work needed to serialize closures.

Commit:b3c590f
Author:Axel Liljencrantz

Support serialization and deserialization of builtin commands

Commit:32c370d
Author:Axel Liljencrantz

Serialize struct type

Commit:9510592
Author:Axel Liljencrantz

Serialize more types

Commit:20cf02c
Author:Axel Liljencrantz

Split up serializer code in multiple files

Commit:a1d3161
Author:Axel Liljencrantz

Flesh out serialization a bit

Commit:37ede49
Author:Axel Liljencrantz

Move serialization to separate module

Commit:67ce7e0
Author:Axel Liljencrantz

Start working on value deserialization