Merge nucleic/sleek-thistle-egret-fyej into dev

This commit is contained in:
2026-07-18 14:31:25 -07:00
parent 26fd468ad0
commit b8ef14999d
5 changed files with 133 additions and 3 deletions
+9 -2
View File
@@ -18,6 +18,10 @@ Every fork change is marked with a `// nash:` comment. Current patches:
| `brush-core/src/commands.rs` | `SimpleCommand::execute` split into gate wrapper + `execute_inner`: `on_exec` before dispatch (Deny short-circuits), completion correlated through all three spawn-result variants |
| `brush-core/src/processes.rs` | `ChildProcess.gate_token` + `on_exit` reporting from `wait()`/`poll()` (128+signal for signal deaths) |
| `brush-shell/src/entry.rs` | `set_exit_hook` seam so nash can flush its event buffer before `process::exit` |
| `brush-core/src/gate.rs` | M2 (docs/NASH.md §5.2–5.3): `RedirectRecord`/`RedirectReadback` + `ExecStart.redirects` + `Gate::on_cmdsub` default hook |
| `brush-core/src/interp.rs` | `ExecutionParameters.nash_redirects` accumulator; `setup_redirect` records file (`>`,`>>`,`<`,`2>`,`&>`,`<>`), heredoc, and here-string redirects |
| `brush-core/src/commands.rs` | gate wrapper drains `nash_redirects` into `ExecStart` for post-run read-back |
| `brush-core/src/expansion.rs` | command-substitution arm calls `gate().on_cmdsub` with the trimmed output |
Verification (this container): brush compat suite `2067 ran: 1684 succeeded, 6
failed, 377 known to fail, 38 skipped` — the 6 failures are identical to a
@@ -26,8 +30,11 @@ pristine `brush-shell-v0.4.0` baseline run (environmental: ANSI-C quote and
zero fork-caused regressions; +3 successes vs baseline are the repaired IFS
tests. nash corpus: 94/94.
Planned (M2, per docs/NASH.md §5.2–5.3): redirect/pipe tap hooks on the `Gate`
trait (`on_redirect`/`on_pipe`) in `interp.rs`/`openfiles.rs`.
Planned (M2 remainder, per docs/NASH.md §5.3): inline tees on the pipe wiring
in `interp.rs::spawn_pipeline_processes` (the `std::io::pipe()` links between
`a | b` stages) — the one data-flow channel not yet tapped. Deferred as the most
invasive change (async copier + backpressure + SIGPIPE); regular-file
redirections, heredoc/here-string, and command substitution are all captured.
Updating: diff against the upstream tag, re-vendor, re-apply `// nash:` patches
(grep for the marker), then re-run `shell/corpus/replay.py` and the brush compat