diff --git a/IMPLEMENTATION_PLAN.md b/IMPLEMENTATION_PLAN.md index f426100..2354ffc 100644 --- a/IMPLEMENTATION_PLAN.md +++ b/IMPLEMENTATION_PLAN.md @@ -565,9 +565,10 @@ priorities. mutating or ambiguous `hash`, `alias`, `unalias`, `shopt`, and `enable` forms before later occurrences can inherit a false executable identity; retain only exact static query grammar and pin native-shell behavior, recursive - wrappers, and executable corpus cases. Fail unmodeled `time`, negation, - coprocess, and current-shell brace-group syntax closed rather than - flattening nested execution into apparent ordinary verb chains. + wrappers, and executable corpus cases. Entries 273-280 pin the mutation + and reserved-form boundaries, including unmodeled `time`, negation, + coprocess, and current-shell brace-group syntax, which fail closed rather + than flattening nested execution into apparent ordinary verb chains. - [ ] Promote the Bash command-resolution mutation cases into Netclaw's strict allow/prompt/deny matrix before the downstream approval-fatigue gate. - [x] Add the separately tested Bash `<<<` here-string redirect slice with diff --git a/tests/ShellSyntaxTree.Tests/Corpus/bash/280_v03_coproc_rejected.json b/tests/ShellSyntaxTree.Tests/Corpus/bash/280_v03_coproc_rejected.json new file mode 100644 index 0000000..ff7b9eb --- /dev/null +++ b/tests/ShellSyntaxTree.Tests/Corpus/bash/280_v03_coproc_rejected.json @@ -0,0 +1,10 @@ +{ + "name": "v0.3 Bash coprocess form fails closed before nested command", + "input": "coproc git status", + "expected": { + "isUnparseable": true, + "unparseableReasonContains": "reserved execution syntax" + }, + "notes": "A coprocess starts asynchronous execution with pipe state that stable v0.3 does not model, so its command body cannot be treated as an ordinary complete command.", + "oracleExpectation": "OutOfScope" +}