release: v0.3.4 — Tier-2 cleanup from v0.3.3 code-review pass#233
Merged
Conversation
The README's "Database access" example called sync ExecuteReader inside Try.Run. The repo's own BannedSymbols.txt blocks sync I/O in library code, and CONTRIBUTING.md's "Async-First Enforcement" section makes async-first the documented stance. A README example that uses sync ADO inside Try.Run signals the wrong default. Converted the example to await Try.RunAsync with ExecuteReaderAsync / OpenAsync / ReadAsync and a CancellationToken parameter. The following "Async database access" example was renamed to "Async query returning a list" to avoid two sections sharing the same name, and likewise gained a CancellationToken parameter for parity. Consumer code is still unbound by the banned-API rule, but the README's examples should model the convention the library itself enforces. Closes #221
The src project ships net10.0 as a target; benchmark numbers should reflect what consumers on the modern runtime actually see. Bumps the benchmarks csproj and the benchmarks.yaml SDK install to match. The .github/workflows/benchmarks.yaml change makes this a protected- file PR — needs admin-bypass merge per protected-file-pr-split. Closes #220
The top-level PublicAPI.Shipped.txt held Wolfgang.TryPattern.Result<T>.Value.get -> T which doesn't match the modern (net5+) signature (the getter returns T?, not T, behind #if NET5_0_OR_GREATER in Result.cs). The analyzer was silently accepting it because RS0017 matches on member name, not return-type signature — so a future regression of Value's return type would not have been caught. Moves the entry into the existing per-TFM manifest split: - src/Wolfgang.TryPattern/PublicAPI.Shipped.txt — drops Value.get - src/Wolfgang.TryPattern/PublicApi/modern/... — adds Value.get -> T? - src/Wolfgang.TryPattern/PublicApi/legacy/... — adds Value.get -> T Matches the convention already used for Try.Run<T> / Try.RunAsync<T> / Result<T>.Failure / Result<T>.Success in the same project. See reference_publicapi_per_tfm_split (validated on PR #211). Release build green across all 4 src TFMs (net462/netstandard2.0/ net8.0/net10.0), 0 warnings, 0 errors. Closes #219
…-example-v2 docs(readme): convert database example to async-first (#221)
perf(benchmarks): bump TargetFramework net8.0 → net10.0 (#220)
…fm-value fix(api): move Result<T>.Value.get to per-TFM PublicAPI manifests (#219)
Moves the net8/9/10 ItemGroup runner from 3.0.0 to 3.1.5 (latest GA on the 3.x line). The xunit core packages stay at 2.9.3 — runner 3.x explicitly supports xunit 1.x / 2.x / 3.x test discovery, so the mismatched-major shape is a non-issue on real GA releases. Earlier round of this PR mistakenly tried to downgrade to 2.8.2 on the basis of a CLAUDE.md note saying "3.x is incompatible with xunit v2." The note dates from the 3.0.0-pre.* era, when v2 discovery actually was broken; the GA 3.x line restored it. 2.8.2 is the *ceiling* of the 2.x line (no newer 2.x exists), so the alleged fix was actually sacrificing ~14 months of runner maintenance. Upgrading instead. Verified locally: 88/88 tests pass on net8.0, net9.0, and net10.0 with runner 3.1.5 + xunit 2.9.3. Follow-up: CLAUDE.md's xunit runner rule needs to be updated to reflect that 3.x GA is compatible (separate change, not in this PR). Closes #218
chore(tests): bump xunit.runner.visualstudio 3.0.0 → 3.1.5 (#218)
…c namespace Aligns the test project directory, csproj filename, assembly name, and root namespace under a single Wolfgang.TryPattern.Tests.Unit identity. Before: directory was tests/Wolfgang.TryPattern.Tests/ but csproj was Wolfgang.TryPattern.Tests.Unit.csproj and the .cs files declared 'namespace Wolfgang.TryPattern.Tests;' — three different names for the same project. Changes: - git mv tests/Wolfgang.TryPattern.Tests -> tests/Wolfgang.TryPattern.Tests.Unit (csproj keeps its existing Wolfgang.TryPattern.Tests.Unit.csproj name) - TryPattern.sln L16: project path updated - stryker-config.json L5: test-projects path updated - Person.cs / ResultOfTTests.cs / ResultTests.cs / RunActionTests.cs / RunAsyncActionTests.cs / RunAsyncFuncTests.cs / RunFuncTests.cs: 'namespace Wolfgang.TryPattern.Tests;' -> 'namespace Wolfgang.TryPattern.Tests.Unit;' Assembly output name unchanged (Wolfgang.TryPattern.Tests.Unit.dll — matches csproj filename, which was already correct). Workflows / scripts don't reference the directory by name (they glob tests/** and TestResults/**), so no further changes needed. Verified locally: dotnet build -c Release clean (0 errors, 3 unrelated NuGet TFM-support warnings on test net5/6/7), dotnet test -c Release -f net10.0 passes 88/88. Closes #222
chore(tests): rename test dir to Wolfgang.TryPattern.Tests.Unit + sync namespace (#222)
Tier-2 cleanup round surfaced by the v0.3.3 AI code-review pass. No public API change in Wolfgang.TryPattern itself; PATCH bump per SemVer. Contents this release: - Docs: README database example converted to Try.RunAsync / ExecuteReaderAsync (#226, closes #221) - Perf: benchmarks project bumped net8.0 -> net10.0 + workflow SDK install bumped to 10.0.x (#227, closes #220) - Fix: PublicApiAnalyzer manifest — Result<T>.Value.get moved into per-TFM split (modern: T?, legacy: T); the previous top-level entry was silently wrong against modern builds (#228, closes #219) - Chore: xunit.runner.visualstudio bumped 3.0.0 -> 3.1.5 (latest 3.x GA; xunit core 2.9.3 stays put — 3.x runner supports xunit 1/2/3) (#229, closes #218) - Chore: test directory + namespace aligned under single Wolfgang.TryPattern.Tests.Unit identity (directory, csproj, assembly, namespace, sln + stryker config) (#231, closes #222) - Fix: scripts/build-pr.ps1 restored -UseBasicParsing on Invoke-WebRequest (#230, merged directly to main)
Chris-Wolfgang
added a commit
that referenced
this pull request
Jun 30, 2026
…-net10-sdk ci(benchmarks): bump setup-dotnet SDK 8.0.x → 10.0.x (protected-only ahead of #233)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
PATCH bump (0.3.3 → 0.3.4). All five Tier-2 sub-issues filed during the v0.3.3 AI code-review pass have been resolved. No public API or runtime behaviour change in
Wolfgang.TryPattern.What ships in 0.3.4
Try.RunAsyncwithExecuteReaderAsync/OpenAsync/ReadAsync+CancellationToken; sibling example renamed<TargetFramework>net8.0 → net10.0;benchmarks.yamlSDK install bumped to10.0.xResult<T>.Value.getmoved into per-TFM split (modern:T?, legacy:T); top-level entry was silently wrong against modern buildsxunit.runner.visualstudio3.0.0 → 3.1.5 (latest GA; xunit core 2.9.3 stays — runner 3.x supports xunit 2.x)Wolfgang.TryPattern.Tests.Unitscripts/build-pr.ps1-UseBasicParsingrestored (merged direct to main)Test plan
dotnet build -c Releaseclean (0 errors; 3 unrelated NuGet TFM-support warnings on test net5/6/7)dotnet test -c Release -f net10.0— 88/88 passing<Version>bumped to 0.3.4 insrc/Wolfgang.TryPattern.csprojAssemblyVersionremains pinned at1.0.0.0(binding stability per C4)CHANGELOG.mdpopulated with the 0.3.4 entryDetect .NET ProjectsPASS (no protected-file diff —benchmarks.yamlalready merged via admin-bypass in perf(benchmarks): bump TargetFramework net8.0 → net10.0 (#220) #227)After merge
v0.3.4viagh release create v0.3.4 --target main(release.yaml fires onrelease: published, not on tag push)curl -sIo /dev/null -w '%{http_code}\n' https://api.nuget.org/v3-flatcontainer/wolfgang.trypattern/0.3.4/wolfgang.trypattern.0.3.4.nupkghttps://chris-wolfgang.github.io/Try-Pattern/versions/v0.3.4/vNextbranch (auto on merge if branch-deletion-on-merge is on).