Files
nucleic-brush/NUCLEIC_FORK.md
T

2.6 KiB
Raw Blame History

Nucleic fork of brush

Vendored copy of reubeno/brush, pinned at tag brush-shell-v0.4.0 (upstream commit 96a26d0), consumed by the shell/ workspace to build nash, the Nucleic agent shell (docs/NASH.md).

Every fork change is marked with a // nash: comment. Current patches:

File Change
brush-shell/src/productinfo.rs PRODUCT_NAME → nash; display string identifies the fork
brush-shell/src/args.rs usage/version strings rebranded
brush-core/src/expansion.rs corpus divergence D1: added ExpansionPiece::LiteralText — literal unquoted text is never field-split (bash splits only expansion results) but keeps glob characters active. Parameter-expansion substitutions (${v:-word} etc.) convert back to splittable at the expansion boundary; ExpanderOptions.field_split_literal_text lets data-string callers opt in. Upstream candidate.
brush-core/src/completion.rs compgen -W word list opts into field_split_literal_text (the -W string is data)
brush-shell/tests/cases/compat/ifs.yaml removed known_failure from 3 IFS tests the D1 fix repairs
brush-core/src/gate.rs (new) + lib.rs the Gate trait (docs/NASH.md §4.2): process-global, verdict-shaped hook; allow-all default so an unconfigured shell behaves exactly like upstream
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

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 pristine brush-shell-v0.4.0 baseline run (environmental: ANSI-C quote and echo -e oracle differences, syntax-error formatting, missing hexdump), i.e. 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.

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 suite (cargo test -p brush-shell --test brush-compat-tests).