diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index bdfb4eb..f6992fd 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -11,7 +11,7 @@ body:
id: version
attributes:
label: Unsga3 version / commit
- placeholder: "0.2.0 or git SHA"
+ placeholder: "0.2.1 or git SHA"
validations:
required: true
- type: textarea
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5a4e953..d6d800d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,16 +9,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
### Added
+- Optional **TypeSafe / Jev System One** pass (`tools/typesafe-pareto`) for Score + Choice judgments over a small Pareto candidate sample. Additive semantic layer — does not replace NSGA-III / U-NSGA-III objectives. Live calls only when `TYPESAFE_API_KEY` is set; CI uses mocks. Metrics append to `metrics/typesafe-runs.jsonl`.
+
+### Changed
+
+- Docs and XML comments describe `initialPopulation` and hybrid loops in generic terms (domain-adapter warm-start / grid-seed). No product-repo names.
+
+## [0.2.1] — 2026-10-01
+
+`net8.0`+`net10.0`, GD+, DocFX, and the matched DTLZ2 Wilcoxon table (`n_var=12` on C# and pymoo). **Defaults stay unconstrained `RankNicheDistance`, independent mating, and single-layer `DasDennis`.** GitHub Packages is still the only publish target. No new ZDT2 Wilcoxon numbers.
+
+### Added
+
- `PerformanceIndicators.GenerationalDistancePlus` (Ishibuchi GD+): mean modified distance from each obtained point to the nearest reference point. Hand-case unit tests. No new benchmark IGD table.
- API reference via DocFX. From a clean checkout: `dotnet tool restore && dotnet docfx docfx.json`. CI job `api-docs` builds `_site/`.
- Measured 15-seed tables for OSY, TNK, and C1-DTLZ1 (feasible non-dominated IGD vs pymoo `UNSGA3`) and for mating opt-ins (`TwoShuffledPasses`, `Algorithm2`, and both) in `docs/NEW-SURFACES-RESULTS.md`. Protocol is in `docs/EQUIVALENCE.md`. Package defaults are unchanged.
-- Optional **TypeSafe / Jev System One** pass (`tools/typesafe-pareto`) for Score + Choice judgments over a small Pareto candidate sample. Additive semantic layer — does not replace NSGA-III / U-NSGA-III objectives. Live calls only when `TYPESAFE_API_KEY` is set; CI uses mocks. Metrics append to `metrics/typesafe-runs.jsonl`.
### Changed
- The library, tests, and BasicUsage sample multi-target `net8.0` and `net10.0`. `tools/OracleCompare` stays `net10.0`. GitHub Packages is still the only publish target.
- `docs/WILCOXON-RESULTS.md` is the matched DTLZ2 re-run (`n_var=12` on C# and pymoo). ZDT2 stays out of that table (quality bar is gens=250 + `PymooCompatible`). No invented ZDT2 Wilcoxon numbers.
-- Docs and XML comments describe `initialPopulation` and hybrid loops in generic terms (domain-adapter warm-start / grid-seed). No product-repo names.
## [0.2.0] — 2026-09-30
@@ -116,7 +126,8 @@ Forensic-audit wave (G1–G10): document known gaps against pymoo and Seada & De
- Benchmarks: ZDT1–4/6, DTLZ1–4/7, Sphere / Ackley / Rosenbrock
- Metrics: IGD, GD, 2-D HV; self-tests + GitHub Packages publish workflow
-[Unreleased]: https://github.com/AppSprout-dev/Unsga3/compare/v0.2.0...HEAD
+[Unreleased]: https://github.com/AppSprout-dev/Unsga3/compare/v0.2.1...HEAD
+[0.2.1]: https://github.com/AppSprout-dev/Unsga3/compare/v0.2.0...v0.2.1
[0.2.0]: https://github.com/AppSprout-dev/Unsga3/compare/v0.1.5...v0.2.0
[0.1.5]: https://github.com/AppSprout-dev/Unsga3/compare/v0.1.4...v0.1.5
[0.1.4]: https://github.com/AppSprout-dev/Unsga3/compare/v0.1.3...v0.1.4
diff --git a/CITATION.cff b/CITATION.cff
index 88fa287..a3fc65c 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -21,8 +21,8 @@ keywords:
- C#
- .NET
license: MIT
-version: 0.2.0
-date-released: "2026-09-30"
+version: 0.2.1
+date-released: "2026-10-01"
references:
- type: article
authors:
diff --git a/Directory.Build.props b/Directory.Build.props
index 82c997c..343c9cc 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -12,7 +12,7 @@
https://github.com/AppSprout-dev/Unsga3
https://github.com/AppSprout-dev/Unsga3
optimization;nsga;nsga3;unsga3;multi-objective;evolutionary;moea
- 0.2.0
+ 0.2.1
README.md
diff --git a/README.md b/README.md
index 46dc600..3480d61 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
**U-NSGA-III** (Unified NSGA-III) for .NET — single-, multi-, and many-objective evolutionary optimization with Das–Dennis reference directions, SBX crossover, polynomial mutation, and **niching-based tournament selection** ([Seada & Deb, 2016](https://ieeexplore.ieee.org/document/7271063)).
-> **v0.2.0** — opt-in two-shuffle mating, Algorithm 2 tournament, odd-N pairing, feasible-only niching, equal-CV Deb fix, two-layer Das–Dennis, and OSY/TNK/C1-DTLZ1. Defaults stay unconstrained `RankNicheDistance`, independent mating, and single-layer Das–Dennis. Unreleased work adds `net8.0`+`net10.0`, GD+, and DocFX.
+> **v0.2.1** — `net8.0`+`net10.0`, Ishibuchi GD+, DocFX, and the matched DTLZ2 Wilcoxon re-run (`n_var=12` on C# and pymoo). Defaults stay unconstrained `RankNicheDistance`, independent mating, and single-layer Das–Dennis.
> **15-seed IGD vs pymoo `UNSGA3`:** ZDT1 **median 0.053173 vs 0.0695884** (MWU *p*=0.0512394) compares the full C# non-dominated front with pymoo `res.F`. DTLZ2 **median 0.00451168 vs 0.00388327** (ratio 1.16183, MWU *p*=0.0225311) uses **n_var=12** on both sides. ZDT2 has no Wilcoxon table. Notes: [`docs/WILCOXON-RESULTS.md`](docs/WILCOXON-RESULTS.md).
> Details: [`docs/WILCOXON-RESULTS.md`](docs/WILCOXON-RESULTS.md) · single-seed notes: [`docs/ORACLE-RESULTS.md`](docs/ORACLE-RESULTS.md) · constrained + mating opt-ins: [`docs/NEW-SURFACES-RESULTS.md`](docs/NEW-SURFACES-RESULTS.md)