Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions IMPLEMENTATION_PLAN.md
Original file line number Diff line number Diff line change
Expand Up @@ -287,12 +287,16 @@ priorities.
The PowerShell manifest owns all 491 entries and round-trips them exactly,
including case-specific isolated-state inputs. Explicit false/null
assertions remain opt-in and generator-preserved.
- [x] Promote the remaining 21 stable Bash design cases into the executable
corpus with complete compatibility, syntax, occurrence, value, ancestry,
- [x] Promote every landed stable Bash design case into the executable corpus
with complete compatibility, syntax, occurrence, value, ancestry,
redirect, and completeness assertions. Nine compatibility-only entries
now carry the v0.3 projections and entries 281-292 cover the inputs that
had no exact executable-corpus case. The three Bash future-scope design
cases remain non-gating. Promotion also reconciled the unquoted wildcard
carry the v0.3 projections, entries 281-292 cover the first inputs that
had no exact executable-corpus case, and entries 294-308 close the
remaining exact-input gap for substitutions, cwd joins, bounded loops,
descriptor duplication, and literal heredoc data. Empty occurrence-level
redirect projections are explicit in the new cases. The three Bash
future-scope design cases remain non-gating.
Promotion also reconciled the unquoted wildcard
redirect story with the fail-closed completeness contract, publishes
sparse exact/unknown effective-value overlays, and pins quoted, escaped,
and continued tilde-prefix behavior against Bash. The PowerShell promotion
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
{
"name": "v0.3 Bash design promotion: Simple command substitution",
"input": "rm \"$(find /tmp)\"",
"expected": {
"isUnparseable": false,
"clauses": [
{
"operator": "None",
"verb": [
"find"
],
"args": [
{
"raw": "/tmp",
"kind": "Literal",
"isPath": true,
"resolved": "/tmp",
"isFlag": false
}
],
"redirects": [],
"elements": [
{
"raw": "find",
"value": "find",
"role": "Verb",
"sourceStart": 6,
"sourceLength": 4,
"precedingVerbElementCount": 0,
"kind": "Literal",
"isFlag": false,
"isPath": false
},
{
"raw": "/tmp",
"value": "/tmp",
"role": "Argument",
"sourceStart": 11,
"sourceLength": 4,
"precedingVerbElementCount": 1,
"kind": "Literal",
"isFlag": false,
"isPath": true,
"resolved": "/tmp"
}
]
},
{
"operator": "None",
"verb": [
"rm"
],
"args": [
{
"raw": "\"$(find /tmp)\"",
"kind": "DynamicSkip",
"isPath": false,
"resolved": "__NULL__",
"isFlag": false
}
],
"redirects": [],
"elements": [
{
"raw": "rm",
"value": "rm",
"role": "Verb",
"sourceStart": 0,
"sourceLength": 2,
"precedingVerbElementCount": 0,
"kind": "Literal",
"isFlag": false,
"isPath": false
},
{
"raw": "\"$(find /tmp)\"",
"value": "$(find /tmp)",
"role": "Argument",
"sourceStart": 3,
"sourceLength": 14,
"precedingVerbElementCount": 1,
"kind": "DynamicSkip",
"isFlag": false,
"isPath": false
}
]
}
],
"syntax": [
{
"kind": "Block",
"parentIndex": null,
"region": "Unknown",
"childIndex": null,
"sourceStart": 0,
"sourceLength": 17,
"clauseIndex": null,
"groupKind": null,
"listOperator": null
},
{
"kind": "SimpleCommand",
"parentIndex": 0,
"region": "Root",
"childIndex": 0,
"sourceStart": 0,
"sourceLength": 17,
"clauseIndex": 1,
"groupKind": null,
"listOperator": null
},
{
"kind": "CommandSubstitution",
"parentIndex": 1,
"region": "Substitution",
"childIndex": 0,
"sourceStart": 4,
"sourceLength": 12,
"clauseIndex": null,
"groupKind": null,
"listOperator": null
},
{
"kind": "Block",
"parentIndex": 2,
"region": "Substitution",
"childIndex": 0,
"sourceStart": 6,
"sourceLength": 9,
"clauseIndex": null,
"groupKind": null,
"listOperator": null
},
{
"kind": "SimpleCommand",
"parentIndex": 3,
"region": "Statement",
"childIndex": 0,
"sourceStart": 6,
"sourceLength": 9,
"clauseIndex": 0,
"groupKind": null,
"listOperator": null
}
],
"commands": [
{
"clauseIndex": 0,
"immediateRole": "Substitution",
"isComplete": true,
"ancestry": [
{
"ancestorKind": "Block",
"region": "Root",
"childIndex": 0,
"sourceStart": 0,
"sourceLength": 17
},
{
"ancestorKind": "CommandSubstitution",
"region": "Substitution",
"childIndex": 0,
"sourceStart": 4,
"sourceLength": 12
},
{
"ancestorKind": "Block",
"region": "Statement",
"childIndex": 0,
"sourceStart": 6,
"sourceLength": 9
}
],
"effectiveArguments": [],
"workingDirectory": {
"kind": "Exact",
"values": [
"/work"
],
"pattern": null,
"coveringDirectory": null
},
"redirects": []
},
{
"clauseIndex": 1,
"immediateRole": "Ordinary",
"isComplete": true,
"ancestry": [
{
"ancestorKind": "Block",
"region": "Root",
"childIndex": 0,
"sourceStart": 0,
"sourceLength": 17
}
],
"effectiveArguments": [
{
"clauseElementIndex": 1,
"value": {
"kind": "Unknown",
"values": [],
"pattern": null,
"coveringDirectory": null
}
}
],
"workingDirectory": {
"kind": "Exact",
"values": [
"/work"
],
"pattern": null,
"coveringDirectory": null
},
"redirects": []
}
]
},
"notes": "Promotes stable design case bash-simple-command-substitution into the executable corpus with exact compatibility, syntax, occurrence, value, and completeness assertions."
}
Loading