chore(family): Release Notes pipeline, CONVENTIONS v0.5, codecov 90%, CoC v3.0#24
Conversation
… CoC v3.0 Five-item family sweep proven on JsonAssertions v0.2.0 (auto-extract validated end-to-end on the nuget.org Release Notes tab) and rolled across the four sibling repos identically. - Directory.Build.targets (NEW, repo root): RoslynCodeTaskFactory inline C# task that runs BeforeTargets="GenerateNuspec", reads CHANGELOG.md, matches '## [<Version>]', captures the body up to the next '## [' or EOF, prepends 'View the rendered release notes: <url>' pointing at the matching GitHub Release, and overrides <PackageReleaseNotes>. nuget.org's Release Notes tab is driven by <PackageReleaseNotes> (not by shipping CHANGELOG.md in the nupkg), so this is the mechanism that surfaces the per-version notes on the package page. The prepended URL works around NuGet/NuGetGallery#8889 (the open feature request to render markdown in the Release Notes tab; gallery currently still plaintext-with-line-breaks). When no matching CHANGELOG section is found, the task emits an MSBuild Warning and the csproj fallback is preserved. - src/<Core>/<Core>.csproj + src/<Adapter>/<Adapter>.csproj: <PackageReleaseNotes> flipped from 'See CHANGELOG.md' (rendered as literal placeholder text on nuget.org) to $(RepositoryUrl)/releases/tag/v$(Version). The URL is auto-linked by nuget.org, so the no-match case still gives consumers a one-click route to the matching GitHub Release notes. A descriptive comment block above the property documents the auto-extract override. - CONVENTIONS.md v0.4 -> v0.5: adds the CHANGELOG conventions section (10 rules formalising Keep a Changelog 1.1.0 usage: user-facing-only content, the six standard headers, header order, past-tense bullets, leading-API formatting, breaking-change marking, no-edit-published- sections, ISO-8601 dates, always-present Unreleased section, reference-link footer in lockstep) and the PackageReleaseNotes auto-extract convention (documenting the Directory.Build.targets mechanism + the fallback URL + the two caveats: plaintext rendering on nuget.org and future-releases-only effect). File copied identically across the five family repos. - codecov.yml: patch.default.target 80% -> 90%. The four sibling repos still had 80% inherited from the family pattern at the time the gate was set; bumped in lockstep so the family enforces a uniform 90% patch-coverage gate. - CODE_OF_CONDUCT.md: upgraded to Contributor Covenant v3.0 (from v2.1; spec at https://www.contributor-covenant.org/version/3/0/code_of_conduct/). The maintainer contact link is now the GitHub profile URL rather than 'the email address listed on the project owner's GitHub profile'. John keeps his primary email private on GitHub, so referencing a private email created a dead-end pointer. No source or test changes; format / build / test gate re-run for sanity.
📝 WalkthroughWalkthroughThis PR updates community governance to Contributor Covenant v3.0, documents and implements automated release notes extraction from CHANGELOG.md into NuGet package metadata via MSBuild, configures the GitHub release URL fallback in both project files, and increases code coverage patch requirements to 90%. ChangesRelease Notes, Governance, and Quality Updates
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
CODE_OF_CONDUCT.md (1)
7-7: ⚡ Quick winUse a stable, repo-controlled reporting channel.
Routing reports through GitHub profile contact options is fragile because those options can change or disappear. Please add a dedicated, explicit contact method (or a fallback path) directly in this file.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@CODE_OF_CONDUCT.md` at line 7, The "To report a concern..." line currently points to a personal GitHub profile contact which is fragile; update this to a stable, repo-controlled reporting channel by adding an explicit, durable contact method (e.g., a repository-maintained email address, a SECURITY.md link, or a dedicated issue/incident template) and include a fallback path; replace the GitHub-profile URL text with the chosen channel and keep the note that reports are handled confidentially so readers know where to send concerns reliably.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@CODE_OF_CONDUCT.md`:
- Line 7: The "To report a concern..." line currently points to a personal
GitHub profile contact which is fragile; update this to a stable,
repo-controlled reporting channel by adding an explicit, durable contact method
(e.g., a repository-maintained email address, a SECURITY.md link, or a dedicated
issue/incident template) and include a fallback path; replace the GitHub-profile
URL text with the chosen channel and keep the note that reports are handled
confidentially so readers know where to send concerns reliably.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 8b2f8345-df14-46ba-a784-20f22d337e6b
📒 Files selected for processing (6)
CODE_OF_CONDUCT.mdCONVENTIONS.mdDirectory.Build.targetscodecov.ymlsrc/MathAssertions.TUnit/MathAssertions.TUnit.csprojsrc/MathAssertions/MathAssertions.csproj
Summary
Five-item family sweep. Proven on JsonAssertions.TUnit v0.2.0 (the auto-extract pipeline is validated end-to-end on the live nuget.org Release Notes tab) and rolled identically across the four sibling family repos.
The five items
Directory.Build.targets(NEW, repo root): aRoslynCodeTaskFactoryinline C# task that runsBeforeTargets="GenerateNuspec", readsCHANGELOG.md, matches^## \[<Version>\], captures the body up to the next## [or EOF, prepends aView the rendered release notes: <url>line pointing at the matching GitHub Release, and overrides<PackageReleaseNotes>. nuget.org's Release Notes tab is driven by<PackageReleaseNotes>(not by shippingCHANGELOG.mdin the nupkg), so this is the mechanism that surfaces the per-version notes on the package page. When no matching CHANGELOG section is found, the task emits an MSBuild Warning and the csproj fallback is preserved.csproj
<PackageReleaseNotes>in bothsrc/<Core>/<Core>.csprojandsrc/<Adapter>/<Adapter>.csproj: flipped from the literalSee CHANGELOG.mdplaceholder to$(RepositoryUrl)/releases/tag/v$(Version). The URL is auto-linked by nuget.org, so the no-match case still gives consumers a one-click route to the matching GitHub Release notes. A short comment block above the property documents the auto-extract override.CONVENTIONS.mdv0.4 → v0.5: adds the CHANGELOG conventions section (10 rules formalising Keep a Changelog 1.1.0 usage) and thePackageReleaseNotesauto-extract convention (documenting the mechanism + fallback URL + two caveats). File copied identically across all five family repos.codecov.ymlpatch.default.target80% → 90%: brings the patch-coverage gate in line with the project-coverage gate. Encourages adding tests for new code rather than coasting on the overall percentage.CODE_OF_CONDUCT.mdupgraded to Contributor Covenant v3.0 (from v2.1; spec at https://www.contributor-covenant.org/version/3/0/code_of_conduct/). The maintainer contact link is now the GitHub profile URL rather than referencing a private email (GitHub keeps the primary email private).Two caveats consumers should know (Release Notes pipeline)
View the rendered release notes: <url>line gives consumers a one-click route to the rendered-markdown version on GitHub.<PackageReleaseNotes>value was in the original pack.Verification
No source or test changes; gate re-run for sanity:
dotnet format --verify-no-changesclean.dotnet build -c Release0 warnings / 0 errors.dotnet test -c Releaseall tests pass.dotnet packconfirms the<releaseNotes>element in the generated nuspec carries the prepended URL line plus the matching CHANGELOG body (where a## [<Version>]section exists in the repo's current CHANGELOG).Out of scope
## [<Version>]section is present at pack time; nothing breaks if there is no entry for the current version yet (the warning fires and the URL fallback ships).Summary by CodeRabbit
Documentation
Chores