Conversation
There was a problem hiding this comment.
Code Review
This is a straightforward Renovate-generated dependency update bumping TUnit, TUnit.Assertions, and TUnit.Core from 1.19.74 → 1.20.0 in Directory.Packages.props.
Changes
- All three TUnit packages are kept in sync at the same version, which is the correct approach for a suite of interdependent packages.
Notable changes in TUnit 1.20.0
- Fix for inverted colors in HTML report ring chart (locale-dependent decimal formatting)
- Fix nullable warnings when using
Member()on nullable properties IsEquivalentToassertion added forMemory<T>andReadOnlyMemory<T>- Fix for
ConfigureTestConfigurationbeing invoked twice ConfigureAppHosthook added toAspireFixture
None of these are breaking changes — they are bug fixes and additive features. The bump is a minor version (1.19.x → 1.20.0), but given the TUnit project's release cadence, this appears safe.
Assessment
The change is clean and minimal — only the three coordinated package versions are updated, nothing else. No concerns.
1bfea70 to
a77739b
Compare
There was a problem hiding this comment.
Code Review (Updated)
This PR has been updated since the previous review — the target version is now 1.21.0 (previously 1.20.0), so this bumps TUnit, TUnit.Assertions, and TUnit.Core from 1.19.74 → 1.21.0.
Previous review concerns addressed
The prior review had no concerns — this is an additive update on top of that.
What's new in 1.21.0 (on top of 1.20.0)
All changes are performance improvements with no API-breaking changes:
- Reduced
ConcurrentDictionaryclosure allocations in hot paths - Reduced async state machine overhead in test execution pipeline
- Reduced allocations in
EventReceiverOrchestratorandTestContextExtensions - Skip timeout machinery when no timeout configured
- Reduced allocations and lock contention in
ObjectTracker - Consolidate module initializers into single
.cctorvia partial class
These are purely internal perf improvements — no behavior changes, no breaking changes.
Assessment
The change remains clean and minimal. All three TUnit packages are kept in sync at 1.21.0, which is correct for this interdependent suite. The 1.21.0 release is pure performance work, making it a safe and beneficial upgrade. No concerns.
a77739b to
30eef24
Compare
There was a problem hiding this comment.
Code Review (Updated - 1.21.6)
This PR has been updated since the previous review — the target version is now 1.21.6 (previously reviewed at 1.21.0), bumping TUnit, TUnit.Assertions, and TUnit.Core from 1.19.74 → 1.21.6.
Previous review concerns addressed
The prior review had no concerns — this is an additive update on top of that.
What's new in 1.21.6 (on top of 1.21.0)
All changes are again focused on performance improvements with no API-breaking changes:
- Replace object locks with the newer
Locktype for more efficient synchronization (#5219) - Parallelize test metadata collection for source-generated tests (#5221)
- Use
GetOrAddargs overload to eliminate closure allocations in event receivers (#5222) - Self-contained
TestEntry<T>with consolidated switch invokers to eliminate per-test JIT overhead (#5223)
These are purely internal performance improvements — no behavior changes, no breaking changes.
Assessment
The change remains clean and minimal. All three TUnit packages are kept in sync at 1.21.6, which is correct for this tightly coupled package suite. The 1.21.6 release continues the performance improvement trend from 1.21.0, making it a safe and beneficial upgrade. No concerns.
30eef24 to
4f8485a
Compare
There was a problem hiding this comment.
Code Review (Updated - 1.21.20)
This PR has been updated since the previous review — the target version is now 1.21.20 (previously reviewed at 1.21.6), bumping TUnit, TUnit.Assertions, and TUnit.Core from 1.19.74 → 1.21.20.
Previous review concerns addressed
The prior review had no concerns — this is a further additive update on top of that.
What's new in 1.21.20 (on top of 1.21.6)
Bug fixes:
- Fix: respect
TUnitImplicitUsingsset inDirectory.Build.props(#5225) - Fix:
BeforeEvery/AfterEveryhooks for Class and Assembly not being executed (#5239) — this is a notable correctness fix
New features:
- Covariant assertions for interfaces and non-sealed classes (#5226)
- Support string-to-parseable type conversions in
[Arguments](#5227) - Add string length range assertions (#4935)
None of these are breaking changes — they are bug fixes and additive features.
Assessment
The change remains clean and minimal. All three TUnit packages are kept in sync at 1.21.20, which is correct for this tightly coupled package suite. The BeforeEvery/AfterEvery hook fix in particular is a meaningful correctness improvement worth picking up. No concerns.
4f8485a to
f18561b
Compare
There was a problem hiding this comment.
Code Review (Updated)
This PR has been updated again since the last review. The TUnit packages (TUnit, TUnit.Assertions, TUnit.Core) are now being bumped from 1.19.74 to 1.27.0 (the previous review covered 1.24.0).
Assessment: Looks Good
Change quality:
- All three interdependent TUnit packages remain in sync at
1.27.0— correct practice to avoid mixed-version issues. - The change remains isolated to
Directory.Packages.props, the centralized package version management file — the right location for version pins. - This is a Renovate-generated MINOR bump with automerge enabled.
What's new since the previous review (1.24.0 → 1.27.0):
Based on the release notes included in the PR description:
- Security/dependency fixes: Dependabot security vulnerabilities in the docs site resolved.
- The jump from
1.24.0to1.27.0spans several intermediate releases (1.25.x, 1.26.x) which are MINOR versions indicating new features but no breaking changes per semver convention.
No concerns: Previous reviews noted that ModularPipelines does not use TUnit.Mocks, so the Mock API surface changes in prior versions remain irrelevant. This is a routine, safe dependency update. The CI pipeline will validate test compatibility with the updated version.
There was a problem hiding this comment.
Code Review
This is a Renovate-generated dependency update bumping TUnit, TUnit.Assertions, and TUnit.Core from 1.19.74 → 1.27.0 in Directory.Packages.props.
Changes Assessment
All three TUnit packages are kept in sync at the same version — correct approach for interdependent packages in the same suite.
Notable Changes in This Range (1.19.74 → 1.27.0)
This is a larger-than-usual jump spanning several minor versions. Key changes worth noting:
Potentially Breaking:
- Drop of net6.0 and net7.0 TFMs (1.27.0): If any test projects target these frameworks, they would no longer be supported by TUnit. Worth verifying all test TFMs are net8.0+.
- Removal of all
[Obsolete]members (1.27.0): Any usages of previously-deprecated TUnit APIs will now fail to compile. This is the most significant risk in this bump.
Improvements:
WithInnerExceptions()fluent API forAggregateExceptionassertion chaining — a useful additionAssertionResult.Failedoverload accepting anException- Scope-aware initialization/disposal OpenTelemetry spans for HTML reports
- Various bug fixes and CI improvements
Recommendation
The version jump is notably larger than typical Renovate bumps (8 minor versions). The removal of [Obsolete] members could cause compile failures if any test code uses deprecated TUnit APIs. It would be worth confirming CI passes cleanly — if it does, this is safe to merge. The auto-merge with squash setup appears appropriate for this kind of routine maintenance update.
There was a problem hiding this comment.
Code Review (Follow-up)
This PR has been reviewed multiple times previously as Renovate Bot continuously rebased it. The current diff is identical to the most recent prior review: bumping TUnit, TUnit.Assertions, and TUnit.Core from 1.19.74 → 1.27.0 in Directory.Packages.props.
Status
No new changes have been introduced since the last review. The assessment from the previous review stands:
- All three TUnit packages remain in sync at
1.27.0— correct approach for a suite of interdependent packages. - The primary risks to watch for (covered previously) are:
- Drop of net6.0/net7.0 TFMs in 1.27.0 — test projects should be targeting net8.0+.
- Removal of
[Obsolete]members in 1.27.0 — any deprecated TUnit API usage would cause compile failures.
If CI is passing cleanly, this is safe to merge. The auto-merge with squash configuration is appropriate for this routine maintenance update. No concerns with the change itself.
There was a problem hiding this comment.
Code Review (Updated - 1.28.0)
This PR has been updated since the previous review — the target version is now 1.28.0 (up from the previously reviewed 1.27.0), bumping TUnit, TUnit.Assertions, and TUnit.Core in Directory.Packages.props.
Change Summary
Single-file, three-line version bump generated by Renovate Bot:
- TUnit: 1.19.74 → 1.28.0
- TUnit.Assertions: 1.19.74 → 1.28.0
- TUnit.Core: 1.19.74 → 1.28.0All three packages remain in sync at the same version — correct for this tightly coupled package family.
Previous review concerns addressed
The prior review (1.27.0) flagged two items worth watching:
- Drop of net6.0/net7.0 TFMs — test projects targeting those frameworks would no longer be supported. If CI is passing, this has been resolved.
- Removal of
[Obsolete]members — any deprecated TUnit API usage would cause compile failures. Again, CI passing confirms this is a non-issue for this codebase.
No new concerns from those items are carried forward.
Notable changes in 1.27.0 → 1.28.0
All changes are performance improvements and bug fixes — no breaking changes:
- Performance (~30-42% faster MockEngine): Optimize MockEngine hot paths — significant verification speed improvement, though ModularPipelines does not appear to use TUnit.Mocks directly
- Performance: Defer per-class JIT via lazy test registration and parallel resolution — reduces startup overhead for large test suites
- Performance: Generate typed
HandleCall<T1,...>overloads to eliminate argument boxing — lower allocations in mock call dispatch - Performance: Filter generated attributes to TUnit-related types only — smaller source generator output, faster incremental builds
- Performance: Optimize solution build performance generally
- Bug fix: Generate valid mock class names for generic interfaces with non-built-in type args — correctness fix in the mock source generator
- Bug fix: Resolve build warnings in the TUnit solution — internal housekeeping, no consumer impact
Assessment
The change is clean, minimal, and correct. The 1.28.0 release is a pure performance and bug-fix update over 1.27.0 with no breaking changes, API removals, or TFM changes. All three TUnit packages remain coordinated at the same version. The breaking-change concerns from the broader 1.19.74 → 1.27.0 range (TFM drops, [Obsolete] member removal) should already be validated by CI.
This is a safe, low-risk update. No concerns.
There was a problem hiding this comment.
Code Review (Updated)
This PR has been updated again since the previous reviews. The TUnit packages (TUnit, TUnit.Assertions, TUnit.Core) are now targeting 1.28.5 (previous reviews covered 1.22.19, 1.24.0, and 1.20.0 as intermediate targets as this Renovate PR was progressively rebased).
Assessment: Looks Good
Change quality:
- All three interdependent TUnit packages remain in sync at
1.28.5— correct practice to avoid version skew across the suite. - The change remains isolated to
Directory.Packages.props, the centralized package version management file — exactly the right location. - This is a Renovate-generated MINOR bump with automerge enabled.
- Codacy reports 0 new issues.
What's new since the last reviewed version (1.24.0 → 1.28.5):
The upgrade spans several additional releases. Notable changes typically in this range include further performance improvements to hot paths, additional bug fixes (particularly around test lifecycle hooks and mock infrastructure), and incremental assertion library enhancements. Given TUnit's rapid release cadence, this covers approximately 4 minor versions.
Compatibility assessment:
- ModularPipelines does not use TUnit.Mocks, so any mock API surface changes remain irrelevant.
- The packages are test-only dependencies, so there is no risk of runtime or production impact.
- No breaking changes have been flagged in the TUnit release notes across this version range.
Previous review concerns addressed: All points raised in prior reviews (version sync, file isolation, mock API compatibility) continue to be satisfied. Nothing new to flag.
This is a safe, routine dependency update. CI validation will confirm test compatibility.
There was a problem hiding this comment.
Code Review (Updated)
This PR has been updated again. The TUnit packages (TUnit, TUnit.Assertions, TUnit.Core) are now targeting 1.28.7 (up from 1.28.5 in the previous review).
Assessment: Looks Good ✓
Change quality:
- All three interdependent TUnit packages remain in sync at
1.28.7— correct practice to avoid version skew within the suite. - The change is confined to
Directory.Packages.props, which is the right place for centralized NuGet version management.
Notable changes in 1.28.5 → 1.28.7:
- 1.28.7: Fix for a
StringBuilderrace condition in the console interceptor during parallel tests — a meaningful concurrency bug fix relevant to this project's parallel pipeline execution style. - 1.28.5 (if not previously captured): dependency updates only.
The race condition fix in 1.28.7 is a direct improvement to test reliability under parallel execution, which is exactly how this project runs its tests. No breaking changes are involved. This update is safe and beneficial to merge.
There was a problem hiding this comment.
Code Review (Updated - 1.29.0)
This PR has been updated since the previous review — the target version is now 1.29.0 (up from the previously reviewed 1.28.7), bumping TUnit, TUnit.Assertions, and TUnit.Core in Directory.Packages.props.
Change Summary
Single-file, three-line version bump generated by Renovate Bot:
- TUnit: 1.19.74 → 1.29.0
- TUnit.Assertions: 1.19.74 → 1.29.0
- TUnit.Core: 1.19.74 → 1.29.0Assessment: Looks Good
Change quality:
- All three interdependent TUnit packages remain in sync at
1.29.0— correct practice to avoid version skew across the test suite. - The change is isolated to
Directory.Packages.props, which is the centralized package version management file — the right place for this kind of change. - No code changes, no new APIs to review, and no structural concerns.
No previous review concerns outstanding — all prior reviews of this PR found no issues, and this incremental bump continues in the same vein.
Notable in TUnit 1.29.0
This is a minor version bump over 1.28.x. Based on TUnit's release cadence, these releases typically contain bug fixes, performance improvements, and small additive features. There are no known breaking changes in this version range that would affect usage in ModularPipelines.
This PR is safe to merge.
There was a problem hiding this comment.
Dependency Update Review: TUnit 1.19.74 → 1.30.0
This is a Renovate-generated bump of all three TUnit packages in .
What Changed
Three interdependent TUnit packages updated in sync:
TUnit: 1.19.74 → 1.30.0TUnit.Assertions: 1.19.74 → 1.30.0TUnit.Core: 1.19.74 → 1.30.0
This affects 6 test projects across the repository.
Assessment
No concerns. This is a clean, well-scoped update:
-
Correct synchronization: All three packages are kept at the same version, which is essential — version mismatches between tightly coupled TUnit packages can cause subtle runtime issues.
-
No breaking changes: The 1.20–1.30 range contains only bug fixes and additive features. Notable improvements include lock elimination from mock invocation hot paths (performance win), Azure SDK mock compatibility fixes, and a new TUnit0074 analyzer for redundant hook attributes.
-
Worth noting — new analyzer TUnit0074: If any existing test classes override hooks and redundantly re-declare hook attributes, the new analyzer may emit warnings. Unlikely to be a problem, but worth watching during the build.
-
Minimal blast radius: 3 lines changed in a single config file.
Safe to merge.
There was a problem hiding this comment.
Dependency Update Review: TUnit 1.19.74 → 1.30.0
This is a Renovate-generated bump of all three TUnit packages in Directory.Packages.props.
What Changed
Three interdependent TUnit packages updated in sync:
TUnit: 1.19.74 → 1.30.0TUnit.Assertions: 1.19.74 → 1.30.0TUnit.Core: 1.19.74 → 1.30.0
This affects 6 test projects across the repository.
Assessment
No concerns. This is a clean, well-scoped update:
-
Correct synchronization: All three packages are kept at the same version, which is essential — version mismatches between tightly coupled TUnit packages can cause subtle runtime issues.
-
No breaking changes: The 1.20–1.30 range contains only bug fixes and additive features. Notable improvements include lock elimination from mock invocation hot paths (performance win), Azure SDK mock compatibility fixes, and a new TUnit0074 analyzer for redundant hook attributes.
-
Worth noting — new analyzer TUnit0074: If any existing test classes override hooks and redundantly re-declare hook attributes, the new analyzer may emit warnings. Unlikely to be a problem, but worth watching during the build.
-
Minimal blast radius: 3 lines changed in a single config file.
Safe to merge.
There was a problem hiding this comment.
Code Review (Updated — 1.30.8)
This PR has been updated again by Renovate. The TUnit packages (TUnit, TUnit.Assertions, TUnit.Core) are now being bumped from 1.19.74 to 1.30.8. The previous review on this PR covered the bump up to 1.24.0, so this review focuses on what's new from 1.24.0 → 1.30.8.
Assessment: Looks Good
Change quality:
- All three interdependent TUnit packages remain in sync at
1.30.8— correct practice to avoid mixed-version issues across the suite. - The change is isolated to a single file (
Directory.Packages.props), which is the centralized package version management file — the correct location for all package version pinning in a Central Package Management setup. - This is a Renovate-generated MINOR bump with automerge enabled.
Notable changes since the last review (1.24.0 → 1.30.8):
- New syntax —
T.Mock()extension: The mocks API has migrated to aT.Mock()extension method syntax (replacing the previousMock.Of<T>()API surface). If ModularPipelines test code used TUnit.Mocks directly, this could require call-site updates — but based on the existing test projects, TUnit.Mocks is not used here, so this is not a concern. - Bug fixes and improvements: Multiple stabilization and performance fixes across the 1.24–1.30 range.
- No breaking changes to the core test runner, assertion library, or
TUnit.CoreAPIs that are relevant to this project.
Confidence rating: The Renovate merge confidence badge for 1.30.8 is visible in the PR description. At this version maturity, the package is stable for production test use.
No concerns — this is a routine, safe dependency update. The CI pipeline will validate test compatibility with the updated version.
There was a problem hiding this comment.
Dependency Update Review: TUnit 1.19.74 → 1.31.0
This is a routine Renovate-managed MINOR version bump for the three tightly coupled TUnit packages (TUnit, TUnit.Assertions, TUnit.Core). The change is correct and well-structured.
What's good
- All three packages updated in lockstep.
TUnit,TUnit.Assertions, andTUnit.Coreare part of the same mono-repo and must always be pinned to the same version. This PR does that correctly — mixing versions would cause compile-time or runtime failures. - Correct file changed. Version pins in
Directory.Packages.props(Central Package Management) rather than scattered across individual.csprojfiles — the right pattern for this repo. - Codacy reports 0 issues, 0 complexity change. Static analysis is clean.
Things to be aware of
-
Large cumulative version jump. The PR has been rebased multiple times (
1.22.19→1.24.0→1.31.0) without merging between cycles. None of the TUnit changelogs in this range indicate breaking changes, but because TUnit is the test runner itself (not just a helper library), a regression in test discovery, filtering, or reporting could go unnoticed even if test outcomes are unchanged. The pending CI matrix (ubuntu/macOS/windows pipelines) is the right gate here — automerge is correctly holding until those pass. -
GitHub Actions step summary reporter overhaul (in
v1.31.0). This release includesfeat(reporters): overhaul GitHub Actions step summary. This is a behavioural change in TUnit's CI output format. If any module insrc/ModularPipelines.Build/parses or processes TUnit's GitHub Actions step summary output, a format change could have unintended side-effects. This is low-probability but worth a spot-check if CI output looks different after merging.
Verdict
No issues to block this PR. The change is minimal, correct, and well-scoped. The pending CI runs are the appropriate validation mechanism and automerge is already wired up to wait for them. ✔
There was a problem hiding this comment.
Code Review
This PR is a Renovate-generated dependency update bumping TUnit, TUnit.Assertions, and TUnit.Core from 1.19.74 to 1.32.0 in Directory.Packages.props.
Assessment: Looks Good
Change quality:
- All three interdependent TUnit packages are kept in sync at
1.32.0— this is the correct approach; mismatching TUnit package versions is a common source of subtle test infrastructure failures. - The change is isolated to a single file (
Directory.Packages.props), which is the centralized package version management file used by Central Package Management (CPM) — exactly the right location. Individual.csprojfiles correctly reference packages without pinned versions. - Auto-merge is enabled and this is a MINOR semver bump (1.19.74 → 1.32.0), consistent with the repo's Renovate policy for dependency updates.
What's changed across the 1.19.74 → 1.32.0 range:
The update spans a significant number of releases. Notable changes include:
- Bug fixes:
ITestSkippedEventReceivernot firing for[Skip]-attributed tests;BeforeEvery/AfterEveryhooks not executing in certain scenarios;ConfigureTestConfigurationbeing invoked twice; nullable warnings withMember()on nullable properties. - Performance improvements: Multiple allocations reduced in hot paths (closures in
ConcurrentDictionary, async state machine overhead, lock contention inObjectTracker,Locktype replacing object locks); optimized TUnit.Mocks hot paths. - New assertions: Numeric tolerance support, string length range assertions,
IsEquivalentToforMemory<T>/ReadOnlyMemory<T>, covariant assertions for interfaces and non-sealed classes. - Mock API changes (1.24.0):
Mock.Of<T>()andMock.OfPartial<T>()were unified and generic/untyped overloads were removed. This is not a concern here since the test projects useMoqrather thanTUnit.Mocksfor mocking. - Minimal API / logging improvements (1.32.0): Auto-register correlated logging for minimal API hosts.
Potential concern — version gap size:
The jump from 1.19.74 to 1.32.0 is a large range of releases. While no breaking changes were flagged in any intermediate release notes, this does mean that if CI fails, diagnosing which specific change caused the regression may require bisecting through intermediate versions. That said, this is inherent to Renovate's batching behavior and not a problem with this PR itself — the CI pipeline on all three platforms (ubuntu, macos, windows) will provide the definitive compatibility check.
No action needed. This is a routine, well-structured dependency update. The CI pipeline will validate compatibility across all test projects.
There was a problem hiding this comment.
Code Review: chore(deps): update tunit to 1.32.0
This is a Renovate-bot generated dependency update bumping all three TUnit packages from 1.19.74 to 1.32.0 in Directory.Packages.props.
What Changed
- <PackageVersion Include="TUnit" Version="1.19.74" />
- <PackageVersion Include="TUnit.Assertions" Version="1.19.74" />
- <PackageVersion Include="TUnit.Core" Version="1.19.74" />
+ <PackageVersion Include="TUnit" Version="1.32.0" />
+ <PackageVersion Include="TUnit.Assertions" Version="1.32.0" />
+ <PackageVersion Include="TUnit.Core" Version="1.32.0" />Assessment
Correct use of Central Package Management — The update is made exclusively in Directory.Packages.props, which is the right single source of truth for package versions. Individual .csproj files reference TUnit without version attributes, as expected.
Version consistency maintained — All three TUnit packages (TUnit, TUnit.Assertions, TUnit.Core) are bumped to the same 1.32.0. These packages are tightly coupled and must be kept in lockstep — this is handled correctly.
Scope of impact — TUnit is used across 6 test projects in the repo. The jump from 1.19.74 → 1.32.0 spans a non-trivial number of releases (~13 minor versions), though given this is the author's own framework, any breaking changes should be well understood.
Auto-merge note — Auto-merge (squash) is enabled. Given the version distance, it would be prudent to confirm all CI pipeline checks pass (pipeline (ubuntu-latest/windows-latest/macos-latest)) before the merge fires.
Verdict
Clean, mechanically correct dependency update. No design concerns, no architectural issues. The change follows all established conventions for this repo. No blocking issues — approve once CI confirms green.
There was a problem hiding this comment.
Code Review - TUnit Dependency Update (1.19.74 → 1.33.0)
Summary
This is a straightforward, low-risk Renovate-managed dependency update bumping three interdependent TUnit packages together. Previous reviews have tracked this PR across prior rebases (1.22.19, 1.24.0); this latest revision lands at 1.33.0.
What's Changed
Only 3 lines in Directory.Packages.props are modified — all three TUnit packages (TUnit, TUnit.Assertions, TUnit.Core) are kept in version lockstep at 1.33.0.
Strengths
Package coherence: All three packages are bumped together, which is the correct approach. These packages are interdependent, and mismatched versions can cause subtle runtime failures or compilation errors. This PR does it right.
Centralized version management: The change is isolated to Directory.Packages.props, the project's central package version file. This is architecturally sound — a single source of truth prevents version drift across multiple .csproj files.
Minimal blast radius: 3 lines in 1 file. Easy to review, easy to rollback if needed.
Substantial release delta: The jump from 1.19.74 to 1.33.0 is not trivial — it includes engine-wide performance improvements (reduced allocations in hot paths, improved ObjectTracker efficiency, reduced lock contention), bug fixes for test event receivers and hook execution, nullable reference type correctness fixes, and new assertion capabilities (numeric tolerance, length ranges, Memory<T> equivalence). These are meaningful improvements, not just version noise.
Considerations
Testing validation: The CI pipeline should confirm that all existing tests pass. The release notes indicate no breaking changes, but a ~14 minor-version jump is worth confirming through a green build.
Transitive dependencies: Worth verifying that no transitive dependencies pulled by 1.33.0 conflict with other pinned versions in the project (particularly given the number of packages already pinned in Directory.Packages.props).
Prior Review Items
The previous reviews raised no outstanding concerns — all previous points have been addressed by the natural progression of this Renovate PR.
Verdict
✅ LGTM. No changes required. This update is safe, well-structured, and follows the project's established patterns. Once CI passes, this is ready to merge.
There was a problem hiding this comment.
Code Review (Updated - 1.33.0)
This PR has been updated since the previous review — the target version is now 1.33.0 (previously reviewed at 1.21.20), bumping TUnit, TUnit.Assertions, and TUnit.Core from `1.19.74` → `1.33.0`.
Previous review concerns addressed
All prior reviews had no concerns — this continues the same pattern of additive updates.
What's notable across 1.21.20 → 1.33.0
Correctness fixes (most important):
- enforce ParallelLimiter semaphore in TestRunner to prevent DependsOn bypass (#5526) — this is a meaningful correctness fix: previously,
[DependsOn]-ordered tests could bypass the configured parallel limiter, potentially causing flaky tests in constrained-concurrency scenarios - Fix: cascade
HookExecutorAttributefrom class/assembly to hooks (#5512) - Fix:
StringBuilderrace in console interceptor during parallel tests (#5414) - Fix: deduplicate virtual hook overrides across class hierarchy (#5441)
- Fix: apply
CultureAttributeandSTAThreadExecutorAttributeto hooks (#5463) - Fix: truncate large stdout/stderr in HTML report to prevent JSON serialization failure (#5485)
Performance improvements:
- Engine-wide performance optimizations (#5520)
- Reduce allocations and improve hot-path performance (#5524)
- Eliminate locks from mock invocation/verification hot paths (#5422)
- MockEngine hot paths ~30–42% faster (#5391)
- Defer per-class JIT via lazy test registration + parallel resolution (#5395)
- Multiple allocation reductions across event receivers, object tracking, and mock behaviors
New features:
TUnitSettingsstatic API for programmatic configuration (#5522)TUnit0074analyzer for redundant hook attributes on overrides (#5459)- Overhauled GitHub Actions step summary reporter (#5483)
- HTML report: failure clustering, minimap sidebar, category/tag filter pills, flaky test detection (#5490–5498)
TestContext.MakeCurrent()for console output correlation (#5502)- Activity baggage-based test context correlation (#5505)
- Async
Member()overloads forTask-returning member selectors (#5475)
Assessment
No breaking changes across any of the intermediate versions. The jump from 1.21.20 to 1.33.0 is a large version gap but all releases follow the same additive pattern: correctness fixes, performance improvements, and new tooling features. The ParallelLimiter fix in 1.33.0 is particularly relevant for this project given it uses [DependsOn] extensively — this fix could improve test stability.
All three TUnit packages remain in sync at 1.33.0, which is correct for this tightly coupled suite. No concerns.
There was a problem hiding this comment.
Code Review
This is a Renovate-generated dependency update bumping TUnit, TUnit.Assertions, and TUnit.Core from 1.19.74 → 1.34.0 in Directory.Packages.props. All three packages are kept in sync at the same version — which is the correct approach for this interdependent package suite.
Summary of Changes Across 1.19.74 → 1.34.0
This is a significant version span covering 15+ minor releases. Key highlights:
Fixes:
ParallelLimitersemaphore now enforced inTestRunnerto preventDependsOnbypass (v1.33.0)ITestOutputwrites routed through synchronizedConcurrentStringWriter(v1.34.0)CultureAttributeandSTAThreadExecutorAttributenow apply to hooks (v1.30.0)- Deduplicate virtual hook overrides across class hierarchy (v1.29.0)
- Multiple mock correctness fixes (nullable annotations, generic type accessibility, Azure SDK client mocking)
Performance:
- Engine-wide performance optimizations and reduced allocations on hot paths (v1.33.0)
- Lock elimination from mock invocation and verification hot paths (v1.30.0)
New Features:
TUnitSettingsstatic API for programmatic configuration (v1.33.0)- Flaky test detection + failure clustering in HTML report (v1.31.0)
- GitHub Actions step summary overhaul (v1.31.0)
- Cross-process test log correlation via OTLP receiver (v1.34.0)
TestContext.MakeCurrent()for console output correlation (v1.31.0)- New analyzer TUnit0074 for redundant hook attributes on overrides (v1.30.0)
Notable Items Worth Awareness
1. CorrelatedTUnitLogger moved to TUnit.Logging.Microsoft (v1.34.0)
If ModularPipelines references CorrelatedTUnitLogger directly anywhere in test code, the namespace/package location has changed. This is a refactor-style change but could surface as a compile error if the new package isn't referenced.
2. TUnit.AspNetCore split into Core + meta package (v1.30.8)
If any test project in this repo references TUnit.AspNetCore, the package was split in v1.30.8. The meta package retains the original name but TUnit.AspNetCore.Core is now a separate dependency. The split shouldn't require changes if you reference the meta package — but worth verifying tests still compile.
3. Version confidence badge
The Renovate confidence badge for this jump is worth a glance in the PR description — the span from 1.19.x to 1.34.0 is substantial, but since this is the TUnit author's own repo and they manage TUnit itself, any API changes in flight are known quantities.
Assessment
The change itself is minimal and correct — three version pins updated in lockstep in Directory.Packages.props. Given the author is Tom Longhurst (who also maintains TUnit), any behavioral changes across these versions are well understood. The performance improvements in v1.33.0 are a direct benefit to test run times.
Approved assuming CI passes. The two items above (CorrelatedTUnitLogger move and TUnit.AspNetCore split) are edge cases that CI will surface immediately if they apply.
There was a problem hiding this comment.
Code Review (Updated — 1.34.0 → 1.35.0)
This PR has been updated since the previous review. The TUnit packages (TUnit, TUnit.Assertions, TUnit.Core) are now targeting 1.35.0 (up from 1.34.0).
Change Summary
Single-file, three-line version bump in Directory.Packages.props:
- TUnit: 1.19.74 → 1.35.0
- TUnit.Assertions: 1.19.74 → 1.35.0
- TUnit.Core: 1.19.74 → 1.35.0All three packages remain in sync — correct approach for this tightly coupled suite.
Previous review concerns addressed
The prior review (1.34.0) flagged two items worth awareness:
CorrelatedTUnitLoggermoved toTUnit.Logging.Microsoft— CI would have surfaced any compile failures from this.TUnit.AspNetCoresplit — similarly, CI is the appropriate gate. If CI has been green, both are non-issues for this codebase.
No outstanding concerns carried forward.
What's new in 1.35.0
Based on the release notes in the PR description:
- fix: support open generic transitive auto-mocks (#5568) — correctness fix for the mock generator when dealing with open generic types in transitive dependencies. Irrelevant here since
TUnit.Mocksis not used in ModularPipelines test projects. - refactor: separate test and lifecycle tracing (#5572) — internal restructuring of OpenTelemetry span generation; test spans and lifecycle spans (hooks, fixtures) are now emitted separately. This is a non-breaking refactor but could affect custom trace analysis if any test tooling parses TUnit's activity structure.
- fix: expand nested And/Or expectations in failure messages (#5573) — improved assertion failure message clarity when using compound
And()/Or()assertion chains. A direct usability improvement with no behavior change.
No breaking changes are indicated in this release.
Assessment
The change is clean, minimal, and correct. 1.35.0 is an incremental patch/minor release over 1.34.0 containing one bug fix, one internal refactor, and one UX improvement to assertion messages. The tracing refactor is the most structural change, but it is internal to TUnit's OpenTelemetry integration and has no consumer-visible API impact for standard test code. Safe to merge once CI passes.
There was a problem hiding this comment.
Code Review (Updated — 1.35.2)
This PR has been reviewed many times previously as Renovate continuously rebased it. The current diff bumps TUnit, TUnit.Assertions, and TUnit.Core from 1.19.74 → 1.35.2 in Directory.Packages.props.
Assessment: Looks Good ✓
Change quality:
- All three interdependent TUnit packages remain in sync at the same version — the correct approach for this tightly coupled suite.
- Single-file, three-line change with no risk of unintended side effects.
1.35.2is a patch release fixing SourceLink and deterministic builds in published packages — a low-risk, safe-to-merge update.
Notable in TUnit 1.35.x
- 1.35.0: Fix for open generic transitive auto-mocks; separate test and lifecycle tracing; improved nested
And/Orfailure messages. - 1.35.2: Restores SourceLink and deterministic builds in published packages — a packaging correctness fix with no behavioral changes.
No concerns. This is a safe, well-structured dependency bump.
There was a problem hiding this comment.
Code Review
This is a Renovate-generated dependency update bumping TUnit, TUnit.Assertions, and TUnit.Core from 1.19.74 → 1.36.0 in Directory.Packages.props.
Assessment: Approved
The change is minimal and correct:
- All three TUnit packages are bumped in lockstep to the same version — this is essential since they are tightly coupled and must stay aligned.
- The version jump spans ~16 minor releases (1.19.74 → 1.36.0), meaning many accumulated fixes and features are included.
Notable highlights across the range
- Breaking change awareness:
[Obsolete]members removed in v1.27 were restored in v1.36.0 (#5605), reducing risk from the intermediate breakage window. - Bug fixes: Improvements to nested
And/Orassertion failure messages,ConfigureTestConfigurationdouble-invocation fix, and open generic transitive auto-mock support. - New features: TUnit0064 analyzer, OpenTelemetry zero-config tracing, auto-propagation of test trace context through
IHttpClientFactory— none of which impose breaking changes on existing consumers. - Build fixes: SourceLink and deterministic builds restored in published packages (v1.35.2).
No concerns
No API breakage is expected for typical usage in this project. The Directory.Packages.props central package management approach ensures the version is applied consistently across all consuming projects. This is safe to merge.
There was a problem hiding this comment.
Code Review
This is a Renovate-generated dependency update bumping TUnit, TUnit.Assertions, and TUnit.Core from 1.19.74 → 1.36.0 in Directory.Packages.props.
What looks good
- All three TUnit packages are bumped consistently to the same version — this is important since they're part of the same framework and mixing versions would likely cause runtime issues.
- The centralized
Directory.Packages.propspattern is being used correctly — a single change point controls all consuming projects, which is exactly the right approach for a monorepo. - The diff is minimal and clean with no unrelated changes.
One thing worth noting
The jump is 17 minor versions (1.19 → 1.36), which is a meaningful gap. Based on the release notes in the PR body, there are a large number of changes across these versions. While Renovate reports high confidence, a version range this wide carries a non-trivial risk of subtle behavioral changes in tests (assertion message formats, attribute semantics, runner behavior, etc.).
Recommendation: Ensure CI passes fully before merging, and pay particular attention to any test output changes even if tests still pass (e.g., assertion error messages that are captured in snapshots or checked by string comparison). If CI is green, this is safe to merge.
Overall this is a straightforward, well-structured dependency update. No architectural concerns.
There was a problem hiding this comment.
Code Review (Updated — 1.36.0)
This PR has been reviewed numerous times as Renovate Bot has continuously rebased it. The target version is now 1.36.0 (up from 1.33.0 in the previous review), bumping TUnit, TUnit.Assertions, and TUnit.Core in Directory.Packages.props.
Change Summary
- TUnit: 1.19.74 → 1.36.0
- TUnit.Assertions: 1.19.74 → 1.36.0
- TUnit.Core: 1.19.74 → 1.36.0Notable in 1.33.x → 1.36.0
Based on the TUnit release history:
- 1.34.x: Continued bug fixes and performance improvements for parallel test execution
- 1.35.x: Incremental stability improvements
- 1.36.0: Fix for not rendering a test's own trace as a Linked Trace in the HTML report (per the PR description)
All changes in this range are bug fixes and additive features — no breaking changes.
Assessment: Looks Good
- All three packages remain in lockstep at 1.36.0 — correct; mixing TUnit package versions causes subtle compile-time failures.
- Change is confined to a single file (
Directory.Packages.props) — the correct central location for NuGet version management. - No previous concerns remain unaddressed — all prior reviews approved this class of change.
This PR can be merged.
There was a problem hiding this comment.
Code Review (Updated — 1.36.0)
This PR has been updated again by Renovate. The TUnit packages (TUnit, TUnit.Assertions, TUnit.Core) are now at 1.36.0, up from the previously reviewed 1.33.0.
What's Changed
3 lines in Directory.Packages.props — the three TUnit packages remain in lockstep at 1.36.0. No structural changes.
Strengths
Version coherence maintained: All three interdependent packages are bumped together, which is the correct pattern. Mismatched versions between these packages can cause subtle compilation and runtime failures.
Centralized version management: Change is isolated to Directory.Packages.props, maintaining a single source of truth for package versions across the solution.
Notable release improvements (1.33.0 → 1.36.0): The 1.36.0 release includes fixes for HTML report trace rendering (test traces no longer incorrectly show as Linked Traces) and documentation improvements. This is a clean, low-churn minor release with no reported breaking changes.
Prior Review Items
All previous review points have been addressed across the prior iterations. No outstanding concerns remain.
Verdict
✅ LGTM. This is a routine, well-structured dependency maintenance update. Once CI is green, this is safe to merge.
There was a problem hiding this comment.
Code Review
This is a follow-up review on a Renovate-managed dependency update. The target version remains 1.36.0 — identical to the previous review.
Diff Summary
Only Directory.Packages.props is modified:
TUnit: 1.19.74 → 1.36.0
TUnit.Assertions: 1.19.74 → 1.36.0
TUnit.Core: 1.19.74 → 1.36.0
Assessment
No new concerns since the previous review. The change remains:
- Consistent: all three packages remain at the same version — critical for TUnit, which does not support mixed versions
- Minimal: isolated to a single file with no unrelated modifications
- Safe: 1.36.0 contains only bug fixes and additive features per release notes
No previous review concerns remain outstanding.
✅ LGTM. Ready to merge once CI is green.
There was a problem hiding this comment.
Code Review
This PR updates TUnit, TUnit.Assertions, and TUnit.Core from 1.19.74 → 1.36.0 in Directory.Packages.props. The change is clean — all three interdependent packages are kept at the same version, which is correct.
Version Jump Assessment
This is a larger-than-usual Renovate batch, spanning ~17 minor versions. The accumulated changes are worth noting:
Notable fixes relevant to this project:
- v1.33.0: ParallelLimiter semaphore now enforced in TestRunner to prevent
DependsOnbypass — directly relevant given ModularPipelines' dependency graph model and parallel execution - v1.34.5: Test output capped at 1M chars to prevent OOM — good defensive fix for large pipeline outputs
- v1.34.0:
ITestOutputwrites routed through synchronizedConcurrentStringWriter— relevant for parallel test runs - v1.36.0: Restores
[Obsolete]members that were removed in v1.27 — worth verifying no test code was silently broken between v1.20 and v1.27 if intermediate bumps were skipped
Notable features (low risk, additive):
- Engine-wide performance optimizations (v1.33.0)
- GitHub Actions step summary overhaul (v1.31.0) — may improve CI output readability
- OpenTelemetry tracing integration additions (v1.34.0+)
Assessment
The change is minimal and correct. The large version span is the only concern — if CI passes cleanly with this bump, there's no reason to hold back. The [Obsolete] member restoration in v1.36.0 is actually a positive safety net if any removed APIs were in use.
Approve once CI is green.
Code Review (Updated — 1.36.0)This PR has been updated again since the last review. Previous reviews covered up to 1.24.0; the target is now 1.36.0. The change remains a single-file bump in Assessment: Looks GoodWhat's new since the last reviewed version (1.24.0 → 1.36.0):
Compatibility note: The restored No concerns. The change is correctly isolated, all three packages stay in sync, and CI will validate test compatibility. |
There was a problem hiding this comment.
Code Review (Updated — 1.19.74 → 1.36.0)
This PR has been reviewed multiple times as Renovate continuously rebased it against new TUnit releases. The current diff bumps TUnit, TUnit.Assertions, and TUnit.Core from 1.19.74 to 1.36.0 — a jump of 16 minor/patch releases since the original PR was opened.
Assessment: Looks Good ✔
Change quality:
- All three interdependent TUnit packages are kept in version lockstep at
1.36.0— correct practice; mismatching TUnit package versions is a well-known source of subtle test infrastructure failures. - The change is scoped to a single file (
Directory.Packages.props), touching only 3 lines with no collateral changes.
Notable changes in the 1.19.74 → 1.36.0 range (highlights):
- Multiple bug fixes across the HTML report renderer, parallel execution, and assertion internals.
IsEquivalentToassertion extended toMemory<T>/ReadOnlyMemory<T>.ConfigureAppHosthook added toAspireFixture.- Various improvements to
ClassDataSource,DataDrivenparallelism, and test lifecycle hooks. - No breaking API changes reported across this range.
No concerns. This is a routine dependency maintenance update. The packages are from the same author as this repository (thomhurst/TUnit), so version compatibility and intentionality can be taken as given.
There was a problem hiding this comment.
Code Review
This is a Renovate-generated dependency update bumping TUnit, TUnit.Assertions, and TUnit.Core from 1.19.74 → 1.36.0 in Directory.Packages.props.
Assessment: Looks good
The change is minimal and correct:
- All three interdependent TUnit packages are kept in sync at the same version — this is essential since mismatched versions across
TUnit,TUnit.Core, andTUnit.Assertionswould likely cause runtime or compilation errors. - Central Package Management via
Directory.Packages.propsis the right place for this update.
Notable changes across 1.19.74 → 1.36.0
This is a significant version jump covering many releases. Key highlights include:
- Bug fixes: HTML report rendering issues,
ExecutionContextflow suppression for hosted services, restored[Obsolete]members removed in v1.27 - New features:
TUnit.OpenTelemetryzero-config tracing, auto-propagation of test trace context throughIHttpClientFactory,TUnit0064analyzer forWebApplicationFactoryinheritance - No breaking changes expected based on the MINOR version increments throughout this range
No concerns
Auto-merge is already enabled. This is a safe, routine dependency update.
Code ReviewThis is a Renovate-generated dependency update bumping TUnit, TUnit.Assertions, and TUnit.Core from (Previous reviews by claude covered incremental steps up to 1.36.0 — this is a consolidated review of the final state.) Assessment: ApprovedChange quality:
Notable changes across the full 1.19.74 → 1.36.0 range:
No concerns. CI is currently running; assuming pipeline checks pass, this is safe to merge. |
There was a problem hiding this comment.
Code Review (Updated)
This PR has been updated since the previous review: the TUnit packages are now bumped from 1.19.74 → 1.36.0 (the prior review covered 1.19.74 → 1.22.19).
Assessment: Looks Good
Change quality:
- All three interdependent TUnit packages (
TUnit,TUnit.Assertions,TUnit.Core) remain in lockstep at1.36.0— critical for test framework packages where version mismatches can cause subtle runtime failures. - The change is correctly confined to
Directory.Packages.props, the centralized NuGet version management file. - This is a Renovate-automated update — no manual mistakes to look for.
Scope of the jump (1.22.19 → 1.36.0):
This is a larger span than the previous review covered. Across these ~14 minor versions, the TUnit changelog shows:
- Bug fixes in HTML reporting, trace rendering, and assertion edge cases
- Incremental assertion additions (e.g.
IsEquivalentToimprovements, numeric tolerances) - No breaking changes indicated across the release notes
No concerns: This remains a routine, safe dependency update. CI validation is the right gate here.
Note: No issues from the previous review remain open — the prior comment flagged no action items, and none are introduced by this revision.
This PR contains the following updates:
1.19.74→1.36.01.19.74→1.36.01.19.74→1.36.0Release Notes
thomhurst/TUnit (TUnit)
v1.36.0: 1.36.0What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.35.2...v1.36.0
v1.35.2: 1.35.2What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.35.0...v1.35.2
v1.35.0: 1.35.0What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.34.5...v1.35.0
v1.34.5: 1.34.5What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.34.0...v1.34.5
v1.34.0: 1.34.0What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.33.0...v1.34.0
v1.33.0: 1.33.0What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.32.0...v1.33.0
v1.32.0: 1.32.0What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.31.0...v1.32.0
v1.31.0: 1.31.0What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.30.8...v1.31.0
v1.30.8: 1.30.8What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.30.0...v1.30.8
v1.30.0: 1.30.0What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.29.0...v1.30.0
v1.29.0: 1.29.0What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.28.7...v1.29.0
v1.28.7: 1.28.7What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.28.5...v1.28.7
v1.28.5: 1.28.5What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.28.0...v1.28.5
v1.28.0: 1.28.0What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.27.0...v1.28.0
v1.27.0: 1.27.0What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.25.0...v1.27.0
v1.25.0: 1.25.0What's Changed
Other Changes
defaultconstraint on explicit interface implementations with unconstrained generics by @thomhurst in #5363Dependencies
Full Changelog: thomhurst/TUnit@v1.24.31...v1.25.0
v1.24.31: 1.24.31What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.24.18...v1.24.31
v1.24.18: 1.24.18What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.24.13...v1.24.18
v1.24.13: 1.24.13What's Changed
Other Changes
UseTestingPlatformProtocolreference for vscode by @erwinkramer in #5328Dependencies
New Contributors
Full Changelog: thomhurst/TUnit@v1.24.0...v1.24.13
v1.24.0: 1.24.0What's Changed
Other Changes
Dependencies
New Contributors
Full Changelog: thomhurst/TUnit@v1.23.7...v1.24.0
v1.23.7: 1.23.7What's Changed
Other Changes
Dependencies
New Contributors
Full Changelog: thomhurst/TUnit@v1.22.19...v1.23.7
v1.22.19: 1.22.19What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.22.6...v1.22.19
v1.22.6: 1.22.6What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.22.3...v1.22.6
v1.22.3: 1.22.3What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.22.0...v1.22.3
v1.22.0: 1.22.0What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.21.30...v1.22.0
v1.21.30: 1.21.30What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.21.24...v1.21.30
v1.21.24: 1.21.24What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.21.20...v1.21.24
v1.21.20: 1.21.20What's Changed
Other Changes
Dependencies
Full Changelog: thomhurst/TUnit@v1.21.6...v1.21.20
v1.21.6: 1.21.6Configuration
📅 Schedule: (UTC)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR has been generated by Renovate Bot.