diff --git a/Directory.Build.props b/Directory.Build.props
index 4120919..8722f5e 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -8,7 +8,6 @@
enable
true
0.2.0
- beta.1
diff --git a/IMPLEMENTATION_PLAN.md b/IMPLEMENTATION_PLAN.md
index 812cee1..7d50e86 100644
--- a/IMPLEMENTATION_PLAN.md
+++ b/IMPLEMENTATION_PLAN.md
@@ -14,8 +14,8 @@ priorities.
> **Spec:** `SPEC.POWERSHELL.md` (v0.2.0). The PowerShell parser is
> implemented — phases 1–14 of `SPEC.POWERSHELL.md` §16 are complete (see
-> below). What remains is the release flow and the downstream Netclaw
-> integration, both of which need actions outside this repository.
+> below). What remains is the downstream Netclaw integration, which needs
+> actions outside this repository.
### Implemented (SPEC.POWERSHELL.md §16 phases 1–14) — done
@@ -113,9 +113,9 @@ priorities.
`ShellSyntaxTree.0.2.0-alpha.nupkg` and it is live on nuget.org
(released 2026-05-20).
- [x] `0.2.0-beta.1` so Netclaw validates the parser + the breaking rename
-- [ ] Publish the next `0.2.0` prerelease with the additive issue #62
+- [x] Publish the next `0.2.0` prerelease with the additive issue #62
`Clause.Elements` provenance surface and migration guidance
-- [ ] Promote to stable `0.2.0` after Netclaw validation
+- [x] Promote to stable `0.2.0` after Netclaw validation
### 16. Netclaw v0.2.0 integration — SPEC.PWSH §17 #9
diff --git a/README.md b/README.md
index fc07f4c..bfd6f91 100644
--- a/README.md
+++ b/README.md
@@ -12,13 +12,12 @@ Hand-rolled, AOT-trim friendly, zero native dependencies. Multi-targets
`netstandard2.0` and `net8.0`.
```bash
-dotnet add package ShellSyntaxTree --version 0.2.0-beta.1
+dotnet add package ShellSyntaxTree --version 0.2.0
```
-The `0.2.0-beta.1` prerelease is required for PowerShell support. The latest
-stable `0.1.x` package supports Bash only. The public surface documented below
-tracks the `dev` branch; `Clause.Elements` is scheduled for the next `0.2.0`
-prerelease and is not present in `beta.1`.
+The `0.2.0` release adds PowerShell support. The latest stable
+`0.2.x` package supports bash and PowerShell together. The public surface
+documented below tracks the `dev` branch.
## What you get
diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index 2f2f88a..02dc1a0 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -1,31 +1,26 @@
#### Unreleased ####
-## Added
+#### 0.2.0 2026-08-05 ####
-- **Surfaced static `Invoke-Expression` payloads for security gates (#63)**
- `PwshParser` now recurses into provably static `Invoke-Expression` / `iex`
- strings, preserves current-scope `Set-Location` attribution, and applies the
- existing command-string size and depth limits. Variables, interpolation,
- concatenation, subexpressions, and pipeline input now route through
- `DynamicSkip` or `IsUnparseable` instead of producing a clean persistent
- approval shape. PowerShell backtick and Unicode escapes are decoded before
- recursion, and exact colon-form `-Command:` binding is supported.
+This stable release includes all behavior and API surface from the
+`0.2.0-alpha` and `0.2.0-beta.1` prereleases, plus the final `0.2.0`
+hardening and release-readiness work.
-#### 0.2.0-beta.1 2026-07-22 ####
+#### 0.2.0-beta.1 2026-07-22
## Fixed
- **Preserved hyphenated PowerShell native options for safer parsing (#60)**
PowerShell native options now keep their full hyphenated form when present in
- command text. Parameter forms like `-Native-Flag` and `-Native-Flag=value` now
- stay correctly grouped instead of being split in ways that could confuse
- downstream approvals. The parser also avoids over-reading ambiguous colon-value
- combinations by marking those cases as `DynamicSkip` when the shape is unclear.
+ command text. Parameter forms like `-Native-Flag` and `-Native-Flag=value`
+ now stay correctly grouped instead of being split in ways that could confuse
+ downstream approvals. The parser also avoids over-reading ambiguous
+ colon-value combinations by marking those cases as `DynamicSkip` when the
+ shape is unclear.
See [#60](https://github.com/Aaronontheweb/ShellSyntaxTree/issues/60) for
details.
-
-#### 0.2.0-alpha May 19th 2026 ####
+#### 0.2.0-alpha May 19th 2026
First **PowerShell** parser. ShellSyntaxTree now ships two `IShellParser`
implementations — `BashParser` (unchanged) and the new `PwshParser` — both
@@ -107,6 +102,32 @@ or reflected over its declared members is affected.
confirms the alias table has no gaps.
- `tools/PwshCorpusTool` — the corpus authoring aid (see `TOOLING.md`).
+## Added
+
+- **Added source-ordered clause-element provenance (`Clause.Elements`) for richer approvals (#62, #68)**
+ Clause-level elements now preserve source order and metadata such as spans,
+ decoded values, path facts, redirects, and verb-relative placement for both
+ Bash and PowerShell. This adds additive, shell-neutral data for downstream
+ security consumers and preserves compatibility with prior AST shapes.
+ See [#62](https://github.com/Aaronontheweb/ShellSyntaxTree/issues/62) and
+ [#68](https://github.com/Aaronontheweb/ShellSyntaxTree/issues/68).
+
+- **Preserved path-shaped command operands after native chains (#65)**
+ Path-shaped operands now remain intact through native option parsing, so
+ command strings that mix native options and path-like inputs keep their
+ intended argument shape instead of being split or dropped by parser heuristics.
+ See [#65](https://github.com/Aaronontheweb/ShellSyntaxTree/issues/65).
+
+## Fixed
+
+- **Preserved static `Invoke-Expression` payload parsing in PowerShell (#63, #67)**
+ Static `Invoke-Expression` / `iex` command strings now follow the same
+ safe-recursion path as `pwsh -Command`: known-safe payloads recurse with the
+ existing depth/size limits, while dynamic content stays conservative via
+ `DynamicSkip` / `IsUnparseable` and remains safe-fail for approvals.
+ See [#63](https://github.com/Aaronontheweb/ShellSyntaxTree/issues/63) and
+ [#67](https://github.com/Aaronontheweb/ShellSyntaxTree/issues/67).
+
---
#### 0.1.5 May 16th 2026 ####