Skip to content

feat(v0.3.0): add PoseRenderer and refresh family dependency lockstep#22

Merged
JohnVerheij merged 1 commit into
mainfrom
feat/v0.3.0-pose-renderer
May 14, 2026
Merged

feat(v0.3.0): add PoseRenderer and refresh family dependency lockstep#22
JohnVerheij merged 1 commit into
mainfrom
feat/v0.3.0-pose-renderer

Conversation

@JohnVerheij
Copy link
Copy Markdown
Owner

@JohnVerheij JohnVerheij commented May 14, 2026

Summary

Adds MathAssertions.Render.PoseRenderer, the first concrete renderer under the family-shared *.Render namespace convention. It turns a 3D pose (Vector3 position and / or Quaternion orientation) into deterministic, snapshot-friendly text, self-contained with no SnapshotAssertions dependency, rendering the quaternion sign verbatim so a sign flip surfaces as a snapshot diff. Also refreshes the dependency pins back into lockstep with the rest of the assertion family. Both packages bump to 0.3.0; the public surface grows by one additive namespace.

Type of change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update
  • Performance improvement
  • Refactor (no functional change)
  • Build / tooling change

Checklist

  • Tests added or updated for the change
  • dotnet build passes with zero warnings (TreatWarningsAsErrors=true)
  • dotnet test passes
  • CHANGELOG.md updated (under ## [0.3.0], per the release flow)
  • Public API changes documented in XML doc comments
  • If this is a breaking change, the version bump and migration notes are clear

Related issues

None.

Summary by CodeRabbit

  • New Features

    • Added PoseRenderer for deterministic, snapshot-friendly rendering of position and orientation poses with fixed-point formatting.
  • Documentation

    • Updated version references to v0.3.0 across README, CHANGELOG, and security policy.
    • Added "pin a pose as a snapshot" usage pattern documentation.
  • Tests

    • Added comprehensive test coverage for pose rendering functionality.
  • Chores

    • Updated NuGet dependencies (SourceLink, analyzers) and API validation baseline.
    • Bumped package version to 0.3.0.

Review Change Stack

Adds MathAssertions.Render.PoseRenderer, a pure static renderer that turns
a 3D pose (Vector3 position and / or Quaternion orientation) into
deterministic, snapshot-friendly text. Render(Vector3, Quaternion, double)
emits a two-line pos/quat block; the position-only and orientation-only
overloads emit one line. It is the first concrete renderer under the
family-shared *.Render namespace convention, self-contained with no
SnapshotAssertions dependency, and renders the quaternion sign verbatim so
a sign flip surfaces as a snapshot diff.

Also brings the dependency pins back into lockstep with the rest of the
assertion family:
- DotNetProjectFile.Analyzers 1.13.1 -> 1.14.0
- Meziantou.Analyzer 3.0.78 -> 3.0.84
- Microsoft.SourceLink.GitHub 10.0.203 -> 10.0.300

Tests: PoseRendererTests pins the output contract in the framework-agnostic
core suite; PoseRendererCoverageExercise is the with-coverage main-suite
touchpoint (the renderer lives in the core assembly, which the CI coverage
gate instruments only via that suite); PoseRendererSnapshotTests is the
end-to-end MatchesSnapshot() pairing test against a committed baseline.
Line coverage 99.22%, branch 98.90%.

No breaking changes; the public surface grows by one additive namespace.
Both packages bump to 0.3.0; ApiCompat strict-mode baseline advances to 0.2.0.
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 14, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: a80f6fb2-f03b-4d1a-970e-533a23529e13

📥 Commits

Reviewing files that changed from the base of the PR and between e35824a and 472fbde.

📒 Files selected for processing (22)
  • .github/ISSUE_TEMPLATE/bug_report.yml
  • CHANGELOG.md
  • Directory.Packages.props
  • README.md
  • SECURITY.md
  • src/MathAssertions.TUnit/CompatibilitySuppressions.xml
  • src/MathAssertions.TUnit/MathAssertions.TUnit.csproj
  • src/MathAssertions.TUnit/README.md
  • src/MathAssertions.TUnit/packages.lock.json
  • src/MathAssertions/CompatibilitySuppressions.xml
  • src/MathAssertions/MathAssertions.csproj
  • src/MathAssertions/Render/PoseRenderer.cs
  • src/MathAssertions/packages.lock.json
  • tests/MathAssertions.TUnit.SmokeTest/MathAssertions.TUnit.SmokeTest.csproj
  • tests/MathAssertions.TUnit.SnapshotTests/PoseRendererSnapshotTests.cs
  • tests/MathAssertions.TUnit.SnapshotTests/Snapshots/PublicApiTests.MathAssertionsPublicApiHasNotChangedAsync.expected.txt
  • tests/MathAssertions.TUnit.SnapshotTests/Snapshots/RenderedPose.expected.txt
  • tests/MathAssertions.TUnit.SnapshotTests/packages.lock.json
  • tests/MathAssertions.TUnit.Tests/PoseRendererCoverageExercise.cs
  • tests/MathAssertions.TUnit.Tests/packages.lock.json
  • tests/MathAssertions.Tests/PoseRendererTests.cs
  • tests/MathAssertions.Tests/packages.lock.json

📝 Walkthrough

Walkthrough

This PR introduces MathAssertions.Render.PoseRenderer for deterministic, snapshot-friendly pose rendering, advances both packages to v0.3.0 with strict API baseline validation against v0.2.0, adds comprehensive unit and integration tests, synchronizes dependencies, and updates all documentation artifacts.

Changes

PoseRenderer v0.3.0 Release

Layer / File(s) Summary
PoseRenderer public API and implementation
src/MathAssertions/Render/PoseRenderer.cs
Introduces PoseRenderer static class with three public Render overloads: position+orientation (two-line output), position-only, and orientation-only (single-line output), using invariant-culture F6 formatting, explicit LF termination, and no quaternion sign canonicalization.
ApiCompat baseline and suppression configuration
src/MathAssertions/MathAssertions.csproj, src/MathAssertions.TUnit/MathAssertions.TUnit.csproj, src/MathAssertions/CompatibilitySuppressions.xml, src/MathAssertions.TUnit/CompatibilitySuppressions.xml
Updates PackageValidationBaselineVersion from 0.1.0 to 0.2.0 for strict API baseline validation; adjusts suppression entries to target PoseRenderer (CP0001) and assembly version 0.2.0.0 (CP0003), removing obsolete CP0002.
Comprehensive test coverage for PoseRenderer
tests/MathAssertions.Tests/PoseRendererTests.cs, tests/MathAssertions.TUnit.SnapshotTests/PoseRendererSnapshotTests.cs, tests/MathAssertions.TUnit.Tests/PoseRendererCoverageExercise.cs, tests/MathAssertions.TUnit.SnapshotTests/Snapshots/RenderedPose.expected.txt
Adds 116 lines of unit tests covering full-pose rendering, position-only, orientation-only, six-decimal F6 formatting, non-canonicalized quaternion signs, LF-only line endings, and invariant-culture tolerance format; integration snapshot test matching "RenderedPose" baseline; smoke-test coverage exercise.
Package version and project file updates
.github/ISSUE_TEMPLATE/bug_report.yml, src/MathAssertions/MathAssertions.csproj, src/MathAssertions.TUnit/MathAssertions.TUnit.csproj, tests/MathAssertions.TUnit.SmokeTest/MathAssertions.TUnit.SmokeTest.csproj, tests/MathAssertions.TUnit.SnapshotTests/Snapshots/PublicApiTests.MathAssertionsPublicApiHasNotChangedAsync.expected.txt
Bumps package versions to 0.3.0 in both primary projects; updates bug report template placeholder; pins smoke-test dependency float to 0.3.0-*; captures three new PoseRenderer.Render overloads in public API snapshot.
Analyzer and SourceLink dependency upgrades
Directory.Packages.props, src/MathAssertions.TUnit/packages.lock.json, src/MathAssertions/packages.lock.json, tests/MathAssertions.TUnit.SnapshotTests/packages.lock.json, tests/MathAssertions.TUnit.Tests/packages.lock.json, tests/MathAssertions.Tests/packages.lock.json
Upgrades DotNetProjectFile.Analyzers (1.13.1 → 1.14.0), Meziantou.Analyzer (3.0.78 → 3.0.84), and Microsoft.SourceLink.GitHub (10.0.203 → 10.0.300) with transitive dependency and contentHash updates synchronized across all lock files.
Documentation and changelog reflecting v0.3.0 status
CHANGELOG.md, README.md, SECURITY.md, src/MathAssertions.TUnit/README.md
Adds 0.3.0 release entry documenting PoseRenderer, tests, and dependency lockstep; introduces "pin a pose as a snapshot" cookbook pattern; updates supported-version table (0.3.x current, 0.2.x previous stable); updates project READMEs and baseline documentation.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • JohnVerheij/MathAssertions.TUnit#14: Both PRs modify ApiCompat diagnostic suppression configuration via CompatibilitySuppressions.xml with assembly/version-targeted suppression entries.
  • JohnVerheij/MathAssertions.TUnit#19: The main PR's suppression updates shift targeted types from MathFailureMessage and MathTolerance.HasAxisAngleApproximately to PoseRenderer and advance the baseline accordingly.

Poem

🐰 A pose now renders with precision clear,
Two lines of text, snapshot-friendly and sincere,
From zero-point-two to three we leap,
With baselines locked and tests so deep,
Quaternions speak in lines so fine,

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 78.57% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat(v0.3.0): add PoseRenderer and refresh family dependency lockstep' clearly and specifically summarizes the main changes: introducing PoseRenderer and updating dependencies for version 0.3.0.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/v0.3.0-pose-renderer

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov-commenter
Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@JohnVerheij JohnVerheij merged commit 79fd604 into main May 14, 2026
6 checks passed
@JohnVerheij JohnVerheij deleted the feat/v0.3.0-pose-renderer branch May 14, 2026 13:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants