Skip to content

feat(mocks): experimental compile-time internals access (#6514 Tier 2) - #6520

Merged
thomhurst merged 10 commits into
mainfrom
feat/mocks-internals-access-experimental
Jul 30, 2026
Merged

feat(mocks): experimental compile-time internals access (#6514 Tier 2)#6520
thomhurst merged 10 commits into
mainfrom
feat/mocks-internals-access-experimental

Conversation

@thomhurst

@thomhurst thomhurst commented Jul 30, 2026

Copy link
Copy Markdown
Owner

Summary

The "Tier 2" follow-up to #6519's runtime auto-stubs for #6514, now fully productionized. Behind TUnitMocksExperimentalInternalsAccess, internal types of selected referenced assemblies become first-class mockable — nameable in test code, source-generated typed mocks, setups, matchers, verification — with zero InternalsVisibleTo required from the target assembly. That exceeds runtime-proxy libraries: NSubstitute/Moq can auto-substitute such types (when the SDK grants IVT to Castle) but can never let the test configure one, because the test cannot write the type's name.

<PropertyGroup>
  <TUnitMocksExperimentalInternalsAccess>true</TUnitMocksExperimentalInternalsAccess>
</PropertyGroup>
<ItemGroup>
  <TUnitMocksInternalsAccess Include="Microsoft.Azure.Functions.Worker.Core" />
</ItemGroup>
var bindings = IFunctionBindingsFeature.Mock();          // internal to the SDK
features.Get<IFunctionBindingsFeature>().Returns(bindings.Object);
features.Get<IFunctionBindingsFeature>().WasCalled(Times.Once);

Mechanism

The established publicizer pattern (Krafs.Publicizer / IgnoresAccessChecksToGenerator), wired into the TUnit.Mocks package:

  1. PublicizeAssemblyReferences (Mono.Cecil MSBuild task) rewrites each selected reference so internals are public, preserving assembly identity (name/version/public key). The implementation assembly is the rewrite source — Roslyn ref assemblies strip internal members when no IVT exists (internal ctors vanish), which surfaced as TM006 on internal classes during test hardening.
  2. The swap targets ReferencePathWithRefAssemblies — the compiler's view and nothing else. ReferencePath, copy-local, and deps.json keep the originals; the runtime loads the real assembly, where the task-emitted IgnoresAccessChecksTo makes the compiled IL (generated mock classes implementing internal interfaces included) valid.
  3. Zero source-generator changes — through the publicized reference the types simply look public.

Productionization

  • Packaging: task multi-targets net472 (VS MSBuild) + net8.0 (dotnet msbuild), selected via $(MSBuildRuntimeType); ships with Mono.Cecil under tasks/<tfm>/; TUnit.Mocks.InternalsAccess.targets packed to buildTransitive/<tfm>/ and imported by TUnit.Mocks.targets — consumers need only the opt-in. Fully inert otherwise (full TUnit.Mocks.Tests suite unaffected: 1186/1186).
  • Tests (10/10, Debug and Release/NoBuild CI-mode): end-to-end pipeline against a strong-named stand-in SDK with zero IVT grants — internal interface, closed-generic internal interface, internal class partial mock (internal ctor), typed setups/matchers/verification of calls made inside the SDK, manual implementations (type-load proof) — plus unit tests of the task itself: publicizing + identity preservation down to the public-key token, incrementality, generated-source content, TUMIA001 for unresolved names.
  • Package-level verification: packed the real nupkg, extracted it, and consumed the buildTransitive targets from a standalone console implementing an internal interface — works, including under PublishTrimmed (full trim mode).
  • CI: projects in TUnit.CI.slnx; RunMockInternalsAccessTestsModule runs the suite.
  • Docs: new Internals Access (experimental) section in the mocking docs.

Remaining caveats

  • IgnoresAccessChecksToAttribute is CoreCLR-honored but not a documented contract (foundation of several long-lived OSS packages; low-but-nonzero risk).
  • .NET Framework test targets: inert with warning TUMIA002 (the runtime doesn't honor the attribute).
  • Native AOT unverified (no MSVC linker on the dev machine); trimmed publish verified.
  • Publicizer scope: types + methods (fields untouched; explicit interface impls stay private as IL requires).

Runtime auto-stubs (#6519) satisfy SDK-internal generic requests with
functional defaults, but the test can never configure or verify such a
type — it cannot write the type's name. This prototype removes that
constraint: behind TUnitMocksExperimentalInternalsAccess, internal
types of selected referenced assemblies become first-class mockable —
nameable in test code, source-generated typed mocks, setups, matchers,
verification — with zero InternalsVisibleTo required from the target
assembly.

Mechanism (the established publicizer pattern, wired for TUnit.Mocks):
a Mono.Cecil MSBuild task rewrites the selected references so internals
are public, preserving assembly identity, and swaps them into
ReferencePathWithRefAssemblies only — the compiler's view. deps.json
and copy-local keep the originals, so the runtime loads the real
assembly, where the task-emitted IgnoresAccessChecksTo attribute makes
the compiled IL (including generated mock classes implementing internal
interfaces) valid. The mocks source generator needs no changes: through
the publicized reference the types simply look public.

Validated end to end against a fake-SDK library that grants no IVT to
anyone (the exact case runtime stubs cannot reach): naming, mocking,
typed setup/matcher/verification of an internal interface requested by
SDK-internal code, and a hand-written implementation proving the
runtime honors the attribute at type load. Incremental builds stay
no-op; cold builds order correctly via project references.

Experimental caveats documented in the project README: undocumented
(but ecosystem-established) runtime attribute, inert on .NET Framework,
AOT unverified, packaging not yet done.
@claude

claude Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Review: Tier 2 internals-access prototype (#6514)

Solid prototype — the ReferencePathWithRefAssemblies-only swap (leaving ReferencePath/deps.json untouched) is the right insight, and the README is unusually good at documenting the reasoning and known gaps up front. A few things worth addressing before this graduates out of experimental:

1. No exception handling around the Cecil rewrite (PublicizeAssemblyReferences.cs:131-164)
Execute()/Publicize() call ModuleDefinition.ReadModule/Write with nothing catching failures. A locked file (AV scan, another build node), a mixed-mode/obfuscated assembly, or any Cecil parse failure will surface as a raw unhandled-exception stack trace from the task rather than a clean MSBuild diagnostic. Worth wrapping the body in try/catch and reporting via Log.LogErrorFromException(ex, showStackTrace: true) so failures are actionable instead of crashing the build host.

2. Reimplementing an established pattern instead of depending on it
The code and README both cite Krafs.Publicizer / IgnoresAccessChecksToGenerator as the prior art this mirrors. Hand-rolling the Cecil rewrite (and pulling Mono.Cecil into Directory.Packages.props for the whole solution) means edge cases those packages already solved — fields (explicitly left untouched here), generic variance, custom attributes whose arguments reference internal types, multi-TFM ref-assembly quirks — have to be rediscovered independently as this hardens. If this is meant to graduate past "experimental," it's worth a deliberate note on why a custom task was chosen over depending on (or vendoring) one of the existing packages, since that would shrink the surface this project has to maintain long-term.

3. Duplicate-attribute collision risk
WriteIgnoresAccessChecksToSource unconditionally emits an IgnoresAccessChecksToAttribute definition into every consuming project's compilation. This is a well-known enough trick that a test project could plausibly already reference another package defining the same type (the real IgnoresAccessChecksToGenerator, Fody, etc.) — that's a duplicate-type compile error, not a graceful fallback. Worth guarding generation on whether the compilation already declares the type before this leaves prototype status.

4. Silent first-match on simple-name resolution (PublicizeAssemblyReferences.cs:94-95)
ReferencePaths.FirstOrDefault(...) picks the first reference matching the requested simple name. In a diamond-dependency scenario with two same-named assemblies at different paths/versions on the resolved reference list, this silently publicizes whichever sorts first rather than flagging the ambiguity — could produce a confusing "it compiled against the wrong version" failure mode that's hard to trace back to this task.

Nothing here blocks the prototype's purpose (proving the mechanism), and the test coverage (zero-IVT target lib + 4 tests covering naming/mocking/generic dispatch/matchers/manual impl) is a good validation story for the concept. These are mainly hardening items for the productionization pass already called out in the PR description.

… task, tests, CI, docs

Graduates the #6514 Tier 2 prototype into the TUnit.Mocks package:

- The publicizer task multi-targets net472 (Visual Studio's .NET
  Framework MSBuild) and net8.0 (dotnet msbuild), selected via
  $(MSBuildRuntimeType); MSBuild references are compile-time only and
  pinned to a version shipping both assets. Task and Mono.Cecil ship
  under tasks/<tfm>/ in the nupkg (NU5100 suppressed — task assemblies
  are exactly the thing that must not live in lib/).
- TUnit.Mocks.InternalsAccess.targets moved into src/TUnit.Mocks, packed
  to buildTransitive/<tfm>/ and build/, and imported by
  TUnit.Mocks.targets — consumers need only the opt-in property and
  item. Fully inert otherwise (verified: full TUnit.Mocks.Tests suite
  unaffected). Dual-path task resolution covers packaged and repo-local
  layouts.
- Correctness fix surfaced by new coverage: publicize the
  IMPLEMENTATION assembly (%(OriginalPath)), not the reference assembly
  — Roslyn ref assemblies strip internal members when no IVT exists, so
  internal constructors vanished and internal classes emitted TM006.
  The compiler-facing item (the ref assembly) is still what gets
  swapped out.
- Coverage expanded: internal class partial mocks (internal ctor),
  closed-generic internal interfaces, strong-named target assembly
  (identity preservation asserted down to the public key token), and
  unit tests of the task itself — publicizing, incrementality, the
  generated IgnoresAccessChecksTo source, and TUMIA001 for unresolved
  names. Build-order edges use SetTargetFramework per task TFM
  (SkipGetTargetFrameworkProperties alone leaks the referencing
  TargetFramework and breaks the outer build).
- Verified against the produced nupkg: extracted-package buildTransitive
  import compiles and runs a consumer implementing an internal
  interface, including under PublishTrimmed (full trim mode). Native
  AOT remains unverified.
- CI: projects added to TUnit.CI.slnx and a RunMockInternalsAccessTests
  pipeline module runs the suite; docs gain an "Internals Access
  (experimental)" section.
@thomhurst
thomhurst marked this pull request as ready for review July 30, 2026 01:49
Comment thread src/TUnit.Mocks/TUnit.Mocks.InternalsAccess.targets Outdated
Comment thread src/TUnit.Mocks.InternalsAccess.Tasks/PublicizeAssemblyReferences.cs Outdated
@greptile-apps

greptile-apps Bot commented Jul 30, 2026

Copy link
Copy Markdown

Greptile Summary

Introduces experimental compile-time access to internal types for selected assemblies.

  • Adds a Mono.Cecil MSBuild task that publicizes compiler-only reference copies while preserving runtime assembly identity.
  • Integrates the task through transitive TUnit.Mocks build targets with opt-in configuration and runtime access-check attributes.
  • Adds strong-name, identity-resolution, metadata-preservation, incrementality, packaging, and end-to-end tests.
  • Adds CI coverage and documentation for configuration, behavior, and platform caveats.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

Filename Overview
src/TUnit.Mocks.InternalsAccess.Tasks/PublicizeAssemblyReferences.cs Implements identity-aware reference selection, content-hash incrementality, metadata-preserving publicization, and runtime-implementation resolution; the displayed prior defects are addressed.
src/TUnit.Mocks/TUnit.Mocks.InternalsAccess.targets Adds the opt-in MSBuild pipeline and limits rewritten references to the compiler-facing item group.
src/TUnit.Mocks/TUnit.Mocks.csproj Packages the runtime-specific task binaries, dependencies, and transitive targets.
tests/TUnit.Mocks.InternalsAccess.Tests/PublicizeAssemblyReferencesTaskTests.cs Covers duplicate requests, compiler metadata, multiple identities, implementation selection, strong names, and stale-cache invalidation.
tests/TUnit.Mocks.InternalsAccess.Tests/InternalsAccessTests.cs Exercises typed mocking and runtime access to internal interfaces, generics, and classes.
docs/docs/writing-tests/mocking/advanced.md Documents setup, mechanics, compatibility limitations, and experimental status.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
    A[Selected assembly reference] --> B[Resolve matching implementation identity]
    B --> C[Create publicized compiler-only copy]
    C --> D[Replace compiler reference]
    B --> E[Keep original runtime asset]
    F[Generated IgnoresAccessChecksTo attribute] --> G[Test assembly]
    D --> G
    G --> E
Loading

Reviews (9): Last reviewed commit: "fix(mocks): identity-first reference loo..." | Re-trigger Greptile

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b3b321588a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +81 to +82
var originalPath = reference.GetMetadata("OriginalPath");
var source = string.IsNullOrEmpty(originalPath) ? reference.ItemSpec : originalPath;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Resolve NuGet ref assets to implementation assemblies

When a PackageReference supplies ref/<tfm>/Foo.dll directly as its compile asset, OriginalPath is not populated because MSBuild did not substitute that reference in this target. This fallback therefore publicizes the reference assembly itself, where the internal members this feature needs have already been stripped, so opting into internals access still leaves those APIs unavailable. Resolve the corresponding runtime/implementation asset instead of treating a missing OriginalPath as proof that ItemSpec is an implementation assembly.

Useful? React with 👍 / 👎.

Log.LogMessage(MessageImportance.Low, $"TUnitMocksInternalsAccess: '{destination}' is up to date.");
}

var item = new TaskItem(destination);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve compiler metadata on replacement references

When the selected reference has compiler-significant metadata such as Aliases or EmbedInteropTypes, constructing a fresh TaskItem discards it before the target replaces the original item. For example, an assembly referenced only through an extern alias becomes an ordinary global reference and the existing extern alias no longer resolves. Copy the original reference metadata onto the replacement before overriding the copy-local fields.

Useful? React with 👍 / 👎.

var source = string.IsNullOrEmpty(originalPath) ? reference.ItemSpec : originalPath;
var destination = Path.Combine(OutputDirectory, Path.GetFileName(source));

if (!File.Exists(destination) || File.GetLastWriteTimeUtc(destination) < File.GetLastWriteTimeUtc(source))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Invalidate publicized copies by content rather than timestamp

When a dependency is downgraded or replaced by a different assembly whose timestamp is equal to or older than the existing output, this check reuses the previous publicized DLL. The compiler can then compile against the prior assembly's API while copy-local output and runtime resolution use the new original, causing missing-member or type-load failures until obj is cleaned. Track a content hash or assembly identity rather than assuming newer timestamps imply identical input.

Useful? React with 👍 / 👎.

- Preserve original reference metadata (Aliases, EmbedInteropTypes) on the
  swapped compiler reference via CopyMetadataTo
- Content-hash (.sig) incrementality instead of timestamp comparison, so
  downgrades/equal-timestamp replacements re-publicize; sig files in FileWrites
- Resolve implementation assembly from runtime/copy-local assets when the
  compile asset is a ref assembly with no OriginalPath (TUMIA003 when absent)
- Warn TUMIA004 on ambiguous simple-name matches instead of silent first-pick
- Wrap resolve/publicize in try/catch -> TUMIA005 error instead of unhandled
  Cecil exception crashing the build host
- TUnitMocksInternalsAccessEmitAttributeDefinition=false suppresses the
  IgnoresAccessChecksToAttribute definition when another package injects it
- README: diagnostics table + rationale for custom task vs Krafs.Publicizer
@thomhurst

Copy link
Copy Markdown
Owner Author

All review findings addressed in 5ea2559:

Metadata drop on reference swap (Greptile P1 / Codex P2) — valid, fixed. The replacement item now carries the original reference's metadata via CopyMetadataTo (then re-overrides Private/CopyLocal), so Aliases/EmbedInteropTypes survive the swap. Test asserts both round-trip.

Timestamp-only cache (Greptile P2 / Codex P2) — valid, fixed. Incrementality is now content-based: a .sig sidecar records the resolved source path + SHA256; any content change (downgrade, equal-or-older timestamp replacement) re-publicizes. Sig files added to FileWrites. Test manipulates content with a backdated timestamp.

Ref assembly as compile asset with no OriginalPath (Codex P1) — valid, fixed. The task now takes the runtime/copy-local assets (RuntimeCopyLocalItems + ReferenceCopyLocalPaths); when the chosen source carries ReferenceAssemblyAttribute it publicizes the implementation asset instead, and warns TUMIA003 when none exists. Both paths tested (Cecil-forged ref assembly).

Cecil exception handling (Claude #1) — fixed. Resolve+publicize wrapped per assembly; failures surface as TUMIA005 with the exception detail at low verbosity instead of an unhandled stack trace. Tested against a non-PE file.

Duplicate attribute definition (Claude #3) — fixed. TUnitMocksInternalsAccessEmitAttributeDefinition=false suppresses the generated attribute class (the [assembly:...] applications remain). Documented in README + docs.

Silent first-match ambiguity (Claude #4) — fixed. Multiple distinct paths matching one simple name now warn TUMIA004 listing all candidates; first still wins deterministically.

Custom task vs Krafs.Publicizer dependency (Claude #2) — README now carries the rationale: those packages are consumer-facing MSBuild wiring, not library APIs; TUnit needs the step riding transparently inside its own package (single opt-in, buildTransitive, dual MSBuild hosts, RPWRA-only swap). Revisit if scope grows.

Suite: 17/17 including e2e targets pipeline.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5ea2559eae

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

continue;
}

method.Attributes = (method.Attributes & ~MethodAttributes.MemberAccessMask) | MethodAttributes.Public;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep private methods out of the publicized API

When a selected assembly contains a public type with a private overload, this unconditional rewrite exposes that overload too, even though the feature promises access to internals. For example, adding a private M(string) beside public M(object) causes an existing consumer call such as M(null) to bind to the formerly private overload whenever internals access is enabled, silently changing behavior in unrelated code. Promote only assembly-visible members (and the constructors/accessors required for internal types), while preserving genuinely private members.

Useful? React with 👍 / 👎.

@claude

claude Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Code review

Followed up on the prior review round (5ea2559) — verified each of the six previously-flagged fixes against the current code, plus a fresh pass for new issues and CLAUDE.md compliance.

CLAUDE.md compliance: No violations found. This PR is isolated MSBuild tooling (no core engine metadata collection, no source-gen output changes, no VSTest, no blocking-on-async, tests/CI/docs updated alongside the source change).

Previously-flagged issues: Confirmed fixed — metadata preservation (CopyMetadataTo), content-hash .sig incrementality, ref-assembly/implementation-assembly resolution via RuntimeCopyLocalItems/ReferenceCopyLocalPaths, Cecil try/catch → TUMIA005, and the EmitAttributeDefinition opt-out all check out.

One fix looks incomplete — ambiguous simple-name match (TUMIA004)

$"{string.Join(", ", matches.Select(m => m.ItemSpec))}. Using the first; " +
"if that is the wrong one, resolve the version conflict in the project.");
}
var reference = matches[0];
string source;

When two resolved references share a simple name, the task now warns (TUMIA004) but still only records matches[0] as Original (L100, L143). In the targets file, Remove only strips that one item:

over. -->
<ReferencePathWithRefAssemblies Remove="@(_TUnitMocksPublicizedReference->'%(Original)')" />
<ReferencePathWithRefAssemblies Include="@(_TUnitMocksPublicizedReference)" />

So the second matching reference is never removed from ReferencePathWithRefAssemblies — the compiler ends up seeing both the untouched duplicate and the publicized copy (same assembly identity, two paths), which is the classic CS1703 "assembly already imported" scenario rather than a clean "first wins" resolution. The task-level unit test (Ambiguous_Simple_Name_Warns_With_TUMIA004) only asserts the task's own output, so it doesn't catch this — it never exercises the targets-file integration. Suggest also removing the non-selected matches (or filtering ReferencePathWithRefAssemblies to just the winner) so the ambiguous case degrades to "picks one, cleanly" instead of a build break.

Minor/lower-confidence: IgnoresAccessChecksTo is emitted using the requested simple name rather than the true assembly identity read via Cecil (module.Assembly.Name.Name) — fine whenever the file name matches the assembly name (the common case), but would silently fail to suppress the access check if they ever diverge. Not blocking, just worth a note given the task already has the real identity in hand.

…ll ambiguous matches

Review round 3:
- TUMIA004 now supersedes ALL same-simple-name matches, not just the winner —
  a leftover duplicate shared the publicized copy's assembly identity (CS1703).
  New SupersededReferences task output feeds the targets Remove.
- Publicize promotes only internal/protected internal/private protected;
  private and protected members are untouched, so a formerly-private overload
  can no longer capture existing calls in consuming code.
- IgnoresAccessChecksTo is emitted with the assembly's real identity read from
  the resolved file, not the file-derived requested name.
@thomhurst

Copy link
Copy Markdown
Owner Author

Round 3 addressed in 55e5049:

Ambiguous-match removal incomplete (CS1703) — valid, fixed. The task now outputs SupersededReferences — every same-simple-name match, winner included — and the targets removes all of them from ReferencePathWithRefAssemblies before adding the publicized copy. The ambiguous case now degrades to "first wins, cleanly". Test asserts both duplicate paths are superseded.

Publicizer promoted private members (Codex P2) — valid, fixed. Promotion is now scoped to assembly-visible surface only: internal / protected internal / private protected types and methods become public; private and protected stay untouched. A formerly-private Describe(string) beside a public Describe(object) can no longer capture Describe(null) in consuming code. Covered by a fixture class exercising all five visibilities plus nested types.

IgnoresAccessChecksTo identity (minor) — fixed. The attribute is emitted with the assembly identity read from the resolved file (AssemblyName.GetAssemblyName), not the file-derived requested name. Test renames the file and asserts the real identity is used.

Suite: 19/19 including e2e targets pipeline.

Comment thread src/TUnit.Mocks.InternalsAccess.Tasks/PublicizeAssemblyReferences.cs Outdated
Comment thread src/TUnit.Mocks.InternalsAccess.Tasks/PublicizeAssemblyReferences.cs Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 55e5049ab0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +126 to +129
var signaturePath = destination + ".sig";
var signature = source + "\n" + HashFile(source);

if (!File.Exists(destination) || !File.Exists(signaturePath) || File.ReadAllText(signaturePath) != signature)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Include the publicizer version in the cache signature

When TUnit.Mocks is upgraded while the selected dependency remains unchanged, this signature still matches because it contains only the dependency path and content hash. Any fixes to the rewriting rules—such as changing which members are promoted—will therefore continue using the copy produced by the older task until the consumer cleans obj, so the compiler can see a stale publicized API. Include a transformation/task version in the signature to invalidate outputs when the publicizer changes.

Useful? React with 👍 / 👎.

@claude

claude Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Code review

Follow-up on the prior two review rounds — checked whether the issues flagged after 5ea2559e were addressed in the latest commit (55e5049a), plus a fresh pass over the delta.

Previously-flagged issue: confirmed fixed, with solid test coverage

The ambiguous simple-name match / CS1703 risk from the last round is now properly closed:

/// <summary>
/// Every resolved reference superseded by a publicized copy — the selected match plus any
/// same-simple-name duplicates. The targets file Removes all of these so an ambiguous match
/// degrades to "first wins, cleanly" instead of the compiler seeing the same assembly
/// identity twice (CS1703).
/// </summary>
[Output]
public ITaskItem[] SupersededReferences { get; set; } = [];

SupersededReferences now carries every same-simple-name match (not just the winner), and the targets file removes all of them from ReferencePathWithRefAssemblies instead of only the selected one:

</PublicizeAssemblyReferences>
<ItemGroup>
<!-- Swap ONLY the compiler's view (ReferencePathWithRefAssemblies feeds Csc and nothing
else). ReferencePath stays untouched, so copy-local outputs and deps.json keep the
original assembly and the runtime binds to it — where IgnoresAccessChecksTo takes
over. Superseded = the selected reference plus any same-simple-name duplicates; a
leftover duplicate would carry the publicized copy's assembly identity (CS1703). -->
<ReferencePathWithRefAssemblies Remove="@(_TUnitMocksSupersededReference)" />
<ReferencePathWithRefAssemblies Include="@(_TUnitMocksPublicizedReference)" />
<Compile Include="$(_TUnitMocksIactSourceFile)" />
<FileWrites Include="$(_TUnitMocksIactSourceFile)" />

This closes the gap the previous review pointed out (the task-level test only asserted the task's own output, not the targets-file integration) — the new Ambiguous_Simple_Name_Warns_With_TUMIA004 assertions now check SupersededReferences directly, which is what actually feeds the Remove.

The "minor/lower-confidence" note from the last round (identity emitted from the requested name rather than the real assembly identity) is also fixed — assemblyName is now read via AssemblyName.GetAssemblyName(source).Name, with a dedicated regression test (Generated_Source_Uses_Real_Assembly_Identity_When_File_Name_Differs).

Bonus hardening beyond what was asked: member promotion is now scoped to internal/protected internal/private protected only (IsAssemblyVisibleType/IsAssemblyVisibleMethod), so a formerly-private overload can no longer sneak into overload resolution for consuming code. Well covered by Publicize_Promotes_Only_Assembly_Visible_Members. README's diagnostics table was updated to match.

CLAUDE.md compliance: No violations — still isolated MSBuild tooling, no core engine/source-gen/VSTest/async-blocking concerns.

Two non-blocking edge cases worth a look before this leaves experimental (both narrow enough that they don't meet the bar for a blocking issue, but touch the exact code path this round just changed, so flagging for visibility):

  1. Metadata loss on the non-winning ambiguous match (PublicizeAssemblyReferences.cs:154) — CopyMetadataTo only copies matches[0]'s metadata, but all matches are now removed from the compiler's reference list. If the discarded match carried different compiler-significant metadata (e.g. Aliases) than the winner, that's now silently dropped rather than just "wrong version picked." Given TUMIA004 already tells the user this is an unresolved conflict they should fix in their project, this is edge-of-an-edge-case — but worth a one-line comment/README caveat if not worth handling.

  2. Duplicate AssembliesToPublicize entries (PublicizeAssemblyReferences.cs:84) — if the same simple name appears twice in @(TUnitMocksInternalsAccess), the loop runs twice and appends two TaskItems with the identical destination path to PublicizedReferences. Whether that round-trips through Csc cleanly isn't verified either way here. A cheap, architecturally cleaner fix if this is worth guarding: dedupe AssembliesToPublicize by simple name once at the top of Execute(), rather than handling it ad hoc later — same fix shape as the simple-name matching already used for matches.

Neither blocks this PR; both are quick to close out in a follow-up if you want zero remaining rough edges before promoting past experimental.

…etadata, version the cache signature

- Duplicate TUnitMocksInternalsAccess items (same simple name, any case) now
  produce a single publicized reference instead of handing Csc the same
  rewritten assembly twice.
- When multiple resolved references share the requested simple name, extern
  aliases are unioned and EmbedInteropTypes kept if any match set it, so
  compiler-significant metadata carried only by a non-selected match survives
  the swap.
- The incrementality signature now includes the task version, so a TUnit.Mocks
  upgrade re-publicizes instead of reusing a copy produced by older rewrite
  rules.
@thomhurst

Copy link
Copy Markdown
Owner Author

Round 4 addressed in 05cdf1e:

Duplicate opt-in items duplicate compiler references (Greptile P1) — valid, fixed. Requested names are now deduped (OrdinalIgnoreCase) at the top of Execute(), so the same TUnitMocksInternalsAccess item included twice — multi-imported props included — yields exactly one publicized reference and one IgnoresAccessChecksTo application. Test: Duplicate_Requests_Produce_Single_Publicized_Reference.

Non-winning ambiguous match loses compiler metadata (Greptile P1 / Claude edge case 1) — valid, fixed. Since every same-simple-name match leaves ReferencePathWithRefAssemblies, metadata carried only by a non-selected match is now merged onto the replacement item: extern aliases are unioned (global visibility preserved when any match had no alias) and EmbedInteropTypes kept if any match set it. TUMIA004 text and README updated. Test: Ambiguous_Matches_Union_Compiler_Metadata — alias and interop flag live only on the loser, asserts global,sdkalias + EmbedInteropTypes=true on the publicized item.

Cache signature missing publicizer version (Codex P2) — valid, fixed. The .sig now leads with the task's informational version, so upgrading TUnit.Mocks re-publicizes even when the referenced assembly is byte-identical — rewrite-rule fixes are never masked by a stale obj copy. Test: Task_Version_Change_Invalidates_Publicized_Copy (tampered version line + backdated output → re-publicized).

Suite: 22/22 (task-level + e2e targets pipeline).

This was referenced Aug 1, 2026
ncosentino pushed a commit to ncosentino/NexusLabs.Framework that referenced this pull request Aug 2, 2026
Updated [Dapper](https://github.com/DapperLib/Dapper) from 2.1.66 to
2.1.79.

<details>
<summary>Release notes</summary>

_Sourced from [Dapper's
releases](https://github.com/DapperLib/Dapper/releases)._

## 2.1.79

## What's Changed
* fix CI by @​mgravell in DapperLib/Dapper#2196
* Fix segfault when ICustomQueryParameter is a value type (#​2189) by
@​andreasblueher in DapperLib/Dapper#2198
* Update dependencies by @​mgravell in
DapperLib/Dapper#2202
* Make private & internal classes sealed and less enumeration of lists &
LINQ by @​Henr1k80 in DapperLib/Dapper#2197
* Fix/prefer typehandlers for enums by @​andreasblueher in
DapperLib/Dapper#2200
* keep deps up to date by @​mgravell in
DapperLib/Dapper#2204
* Add ReferenceTrimmer and remove unused references by @​dfederm in
DapperLib/Dapper#2191

## New Contributors
* @​andreasblueher made their first contribution in
DapperLib/Dapper#2198
* @​Henr1k80 made their first contribution in
DapperLib/Dapper#2197
* @​dfederm made their first contribution in
DapperLib/Dapper#2191

**Full Changelog**:
DapperLib/Dapper@2.1.72...2.1.79

## 2.1.72

## What's Changed
* TFM packaging for .NET 10 by @​mgravell in
DapperLib/Dapper#2195
* Fix and clarify OrWhere caveats in SqlBuilder docs by @​jnoordsij in
DapperLib/Dapper#2149
* OutputExpression wasn't working for methods that use QueryRowAsync by
@​ri-rgb in DapperLib/Dapper#2156
* CI: use preinstalled sdk by @​kbth in
DapperLib/Dapper#2160
* CI: serialize DB-dependent tests by @​kbth in
DapperLib/Dapper#2163

## New Contributors
* @​jnoordsij made their first contribution in
DapperLib/Dapper#2149
* @​ri-rgb made their first contribution in
DapperLib/Dapper#2156
* @​kbth made their first contribution in
DapperLib/Dapper#2160

**Full Changelog**:
DapperLib/Dapper@2.1.66...2.1.72

Commits viewable in [compare
view](DapperLib/Dapper@2.1.66...2.1.79).
</details>

Updated [MySql.Data](https://dev.mysql.com/downloads/) from 9.7.0 to
26.7.0.

Updated [TUnit](https://github.com/thomhurst/TUnit) from 1.61.38 to
1.63.0.

<details>
<summary>Release notes</summary>

_Sourced from [TUnit's
releases](https://github.com/thomhurst/TUnit/releases)._

## 1.63.0

<!-- Release notes generated using configuration in .github/release.yml
at v1.63.0 -->

## What's Changed
### Other Changes
* fix(mocks): dispatch abstract indexers through the engine instead of
calling base by @​thomhurst in
thomhurst/TUnit#6517
* feat(mocks): experimental compile-time internals access (#​6514 Tier
2) by @​thomhurst in thomhurst/TUnit#6520
* feat(mocks): make the async-factory Returns alias available below
net9.0 by @​thomhurst in thomhurst/TUnit#6518
* +semver:minor - feat(mocks): runtime auto-stubs for interfaces the
source generator cannot see by @​thomhurst in
thomhurst/TUnit#6519
### Dependencies
* chore(deps): update tunit to 1.62.0 by @​thomhurst in
thomhurst/TUnit#6508
* chore(deps): update dependency mockolate to 3.4.0 by @​thomhurst in
thomhurst/TUnit#6512
* chore(deps): update dependency cliwrap to 3.10.4 by @​thomhurst in
thomhurst/TUnit#6513
* chore(deps): update dependency stackexchange.redis to 3.0.25 by
@​thomhurst in thomhurst/TUnit#6522
* chore(deps): update dependency brace-expansion to v5.0.9 by
@​thomhurst in thomhurst/TUnit#6523
* chore(deps): update dependency microsoft.build.utilities.core to v18
by @​thomhurst in thomhurst/TUnit#6525


**Full Changelog**:
thomhurst/TUnit@v1.62.0...v1.63.0

## 1.62.0

<!-- Release notes generated using configuration in .github/release.yml
at v1.62.0 -->

## What's Changed
### Other Changes
* fix(docs): make Mermaid lifecycle diagrams readable by @​thomhurst in
thomhurst/TUnit#6485
* fix(mocks): strip nullable annotation from constructor dispatch
patterns by @​thomhurst in thomhurst/TUnit#6498
* fix(mocks): skip interfaces with inaccessible abstract members by
@​thomhurst in thomhurst/TUnit#6502
* feat(mocks): accept an async factory in Returns() on async members by
@​thomhurst in thomhurst/TUnit#6503
* fix(mocks): report TM006 instead of CS1729 for unsubclassable classes
by @​thomhurst in thomhurst/TUnit#6501
* fix(mocks): emit the setup surface into the globally-imported
namespace by @​thomhurst in thomhurst/TUnit#6504
* fix(mocks): reference TUnit.Mocks once in snapshot test compilations
by @​thomhurst in thomhurst/TUnit#6506
* fix(mocks): make generated identifier sanitization injective by
@​thomhurst in thomhurst/TUnit#6507
### Dependencies
* chore(deps): update tunit to 1.61.38 by @​thomhurst in
thomhurst/TUnit#6479
* chore(deps): update dependency brace-expansion to v5.0.8 by
@​thomhurst in thomhurst/TUnit#6478
* chore(deps): update dependency cliwrap to 3.10.3 by @​thomhurst in
thomhurst/TUnit#6482
* chore(deps): bump postcss from 8.5.10 to 8.5.22 in /docs by
@​dependabot[bot] in thomhurst/TUnit#6480
* chore(deps): update dependency fscheck to 3.3.4 by @​thomhurst in
thomhurst/TUnit#6486
* chore(deps): update dependency minimatch to v10.2.6 by @​thomhurst in
thomhurst/TUnit#6490
* chore(deps): update actions/stale action to v11 by @​thomhurst in
thomhurst/TUnit#6496
* chore(deps): update microsoft.testing to 2.3.3 by @​thomhurst in
thomhurst/TUnit#6499
* chore(deps): update mstest to 4.3.3 by @​thomhurst in
thomhurst/TUnit#6500


**Full Changelog**:
thomhurst/TUnit@v1.61.38...v1.62.0

Commits viewable in [compare
view](thomhurst/TUnit@v1.61.38...v1.63.0).
</details>

Updated [TUnit.Assertions](https://github.com/thomhurst/TUnit) from
1.61.38 to 1.63.0.

<details>
<summary>Release notes</summary>

_Sourced from [TUnit.Assertions's
releases](https://github.com/thomhurst/TUnit/releases)._

## 1.63.0

<!-- Release notes generated using configuration in .github/release.yml
at v1.63.0 -->

## What's Changed
### Other Changes
* fix(mocks): dispatch abstract indexers through the engine instead of
calling base by @​thomhurst in
thomhurst/TUnit#6517
* feat(mocks): experimental compile-time internals access (#​6514 Tier
2) by @​thomhurst in thomhurst/TUnit#6520
* feat(mocks): make the async-factory Returns alias available below
net9.0 by @​thomhurst in thomhurst/TUnit#6518
* +semver:minor - feat(mocks): runtime auto-stubs for interfaces the
source generator cannot see by @​thomhurst in
thomhurst/TUnit#6519
### Dependencies
* chore(deps): update tunit to 1.62.0 by @​thomhurst in
thomhurst/TUnit#6508
* chore(deps): update dependency mockolate to 3.4.0 by @​thomhurst in
thomhurst/TUnit#6512
* chore(deps): update dependency cliwrap to 3.10.4 by @​thomhurst in
thomhurst/TUnit#6513
* chore(deps): update dependency stackexchange.redis to 3.0.25 by
@​thomhurst in thomhurst/TUnit#6522
* chore(deps): update dependency brace-expansion to v5.0.9 by
@​thomhurst in thomhurst/TUnit#6523
* chore(deps): update dependency microsoft.build.utilities.core to v18
by @​thomhurst in thomhurst/TUnit#6525


**Full Changelog**:
thomhurst/TUnit@v1.62.0...v1.63.0

## 1.62.0

<!-- Release notes generated using configuration in .github/release.yml
at v1.62.0 -->

## What's Changed
### Other Changes
* fix(docs): make Mermaid lifecycle diagrams readable by @​thomhurst in
thomhurst/TUnit#6485
* fix(mocks): strip nullable annotation from constructor dispatch
patterns by @​thomhurst in thomhurst/TUnit#6498
* fix(mocks): skip interfaces with inaccessible abstract members by
@​thomhurst in thomhurst/TUnit#6502
* feat(mocks): accept an async factory in Returns() on async members by
@​thomhurst in thomhurst/TUnit#6503
* fix(mocks): report TM006 instead of CS1729 for unsubclassable classes
by @​thomhurst in thomhurst/TUnit#6501
* fix(mocks): emit the setup surface into the globally-imported
namespace by @​thomhurst in thomhurst/TUnit#6504
* fix(mocks): reference TUnit.Mocks once in snapshot test compilations
by @​thomhurst in thomhurst/TUnit#6506
* fix(mocks): make generated identifier sanitization injective by
@​thomhurst in thomhurst/TUnit#6507
### Dependencies
* chore(deps): update tunit to 1.61.38 by @​thomhurst in
thomhurst/TUnit#6479
* chore(deps): update dependency brace-expansion to v5.0.8 by
@​thomhurst in thomhurst/TUnit#6478
* chore(deps): update dependency cliwrap to 3.10.3 by @​thomhurst in
thomhurst/TUnit#6482
* chore(deps): bump postcss from 8.5.10 to 8.5.22 in /docs by
@​dependabot[bot] in thomhurst/TUnit#6480
* chore(deps): update dependency fscheck to 3.3.4 by @​thomhurst in
thomhurst/TUnit#6486
* chore(deps): update dependency minimatch to v10.2.6 by @​thomhurst in
thomhurst/TUnit#6490
* chore(deps): update actions/stale action to v11 by @​thomhurst in
thomhurst/TUnit#6496
* chore(deps): update microsoft.testing to 2.3.3 by @​thomhurst in
thomhurst/TUnit#6499
* chore(deps): update mstest to 4.3.3 by @​thomhurst in
thomhurst/TUnit#6500


**Full Changelog**:
thomhurst/TUnit@v1.61.38...v1.62.0

Commits viewable in [compare
view](thomhurst/TUnit@v1.61.38...v1.63.0).
</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
ncosentino added a commit to ncosentino/eve-client that referenced this pull request Aug 2, 2026
Updated
[defaultdocumentation.console](https://github.com/Doraku/DefaultDocumentation)
from 1.2.2 to 1.2.5.

<details>
<summary>Release notes</summary>

_Sourced from [defaultdocumentation.console's
releases](https://github.com/Doraku/DefaultDocumentation/releases)._

## 1.2.5

## Bug fixes
- fixed nint and nuint handling (#​255)
- replaced HTML numeric entities with literal Unicode arrows

- [api nuget
package](https://www.nuget.org/packages/DefaultDocumentation.Api/1.2.5)
- [markdown nuget
package](https://www.nuget.org/packages/DefaultDocumentation.Markdown/1.2.5)
- [msbuild task nuget
package](https://www.nuget.org/packages/DefaultDocumentation/1.2.5)
- [dotnet tool nuget
package](https://www.nuget.org/packages/DefaultDocumentation.Console/1.2.5)


## 1.2.4

- fixed msbuild task issue (#​237)

- [api nuget
package](https://www.nuget.org/packages/DefaultDocumentation.Api/1.2.4)
- [markdown nuget
package](https://www.nuget.org/packages/DefaultDocumentation.Markdown/1.2.4)
- [msbuild task nuget
package](https://www.nuget.org/packages/DefaultDocumentation/1.2.4)
- [dotnet tool nuget
package](https://www.nuget.org/packages/DefaultDocumentation.Console/1.2.4)


## 1.2.3

- added net10 support for DefaultDocumentation.Console
- fixed ValueType appearing in definition constrains

- [api nuget
package](https://www.nuget.org/packages/DefaultDocumentation.Api/1.2.3)
- [markdown nuget
package](https://www.nuget.org/packages/DefaultDocumentation.Markdown/1.2.3)
- [msbuild task nuget
package](https://www.nuget.org/packages/DefaultDocumentation/1.2.3)
- [dotnet tool nuget
package](https://www.nuget.org/packages/DefaultDocumentation.Console/1.2.3)


Commits viewable in [compare
view](https://github.com/Doraku/DefaultDocumentation/compare/1.2.2...1.2.5).
</details>

Updated [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest)
from 18.6.0 to 18.8.1.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.NET.Test.Sdk's
releases](https://github.com/microsoft/vstest/releases)._

## 18.8.1

## What's Changed
* Fix protocol negotiation timeout when STJ reflection is disabled
(18.8.1) by @​nohwnd in https://github.com/microsoft/vstest/pull/16281


**Full Changelog**:
https://github.com/microsoft/vstest/compare/v18.8.0...v18.8.1

## 18.8.0

## What's Changed
* Migrate from Newtonsoft.Json to System.Text.Json / Jsonite (merge to
main) by @​nohwnd in https://github.com/microsoft/vstest/pull/15687
- For more detail refer to
https://devblogs.microsoft.com/dotnet/vs-test-is-removing-its-newtonsoft-json-dependency/
* Create source-only filter package by @​Youssef1313 in
https://github.com/microsoft/vstest/pull/15638
* Add ARM64 msdia140.dll support to test platform packages by @​nohwnd
in https://github.com/microsoft/vstest/pull/15692
* Fix mutex cleanup crash on macOS/Linux by @​nohwnd in
https://github.com/microsoft/vstest/pull/15684
* Restrict artifact temp directory permissions on Unix by @​nohwnd in
https://github.com/microsoft/vstest/pull/15729
* Add support for filtering uncategorized tests with TestCategory=None
by @​Evangelink in https://github.com/microsoft/vstest/pull/15727
* Fix SCI binding failure in DTA hosts (main) by @​nohwnd in
https://github.com/microsoft/vstest/pull/15724
* Fix HTML logger parallel file collision by @​nohwnd in
https://github.com/microsoft/vstest/pull/15435
* Improve error message when testhost cannot be found by @​nohwnd in
https://github.com/microsoft/vstest/pull/16053
* Fix HTML logger exception on invalid XML chars in test display names
by @​nohwnd in https://github.com/microsoft/vstest/pull/16051

**Full Changelog**:
https://github.com/microsoft/vstest/compare/v18.7.0...v18.8.0

## 18.7.0

## What's Changed
* Add ARM64 msdia140.dll support to test platform packages by
@​jamesmcroft in https://github.com/microsoft/vstest/pull/15689
* Update System.Memory from 4.5.5 to 4.6.3 by @​nohwnd in
https://github.com/microsoft/vstest/pull/15706

## New Contributors
* @​jamesmcroft made their first contribution in
https://github.com/microsoft/vstest/pull/15689

**Full Changelog**:
https://github.com/microsoft/vstest/compare/v18.6.0...v18.7.0

Commits viewable in [compare
view](https://github.com/microsoft/vstest/compare/v18.6.0...v18.8.1).
</details>

Updated [Microsoft.SourceLink.GitHub](https://github.com/dotnet/dotnet)
from 10.0.300 to 10.0.301.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.SourceLink.GitHub's
releases](https://github.com/dotnet/dotnet/releases)._

## 10.0.301

You can build .NET 10.0 from the repository by cloning the release tag
`v10.0.301` and following the build instructions in the [main
README.md](https://github.com/dotnet/dotnet/blob/v10.0.301/README.md#building).

Alternatively, you can build from the sources attached to this release
directly.
More information on this process can be found in the [dotnet/dotnet
repository](https://github.com/dotnet/dotnet/blob/v10.0.301/README.md#building-from-released-sources).

Attached are PGP signatures for the GitHub generated tarball and
zipball. You can find the public key at https://dot.net/release-key-2023

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/compare/v10.0.300...v10.0.301).
</details>

Updated [nbgv](https://github.com/dotnet/Nerdbank.GitVersioning) from
3.7.115 to 3.10.91.

<details>
<summary>Release notes</summary>

_Sourced from [nbgv's
releases](https://github.com/dotnet/Nerdbank.GitVersioning/releases)._

## 3.10.91

## What's Changed

* Retry file operations on access denied errors by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1408


**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.10.85...v3.10.91

## 3.10.85

## What's Changed

* Avoid writing server.json multiple times in a single pack by @​AArnott
in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1391

**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.10.70...v3.10.85

## 3.10.70

## What's Changed

### Fixes

* Fix case insensitivity for the managed engine on git worktrees, and
implement for libgit2 by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1334
* Fix native heap corruption in GitPackIndexMappedReaderTests by
@​AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1360

### Enhancements

* Add prerelease property to inheriting version.json files by @​Copilot
in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1317
* Add NBGV_SetCloudBuildVersionVars property to disable cloud build
variable output by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1324
* Add --what-if option to prepare-release command for simulating version
changes by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1242
* Build nbgv CLI tool for .NET 9 and 10 by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1369


**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.50...v3.10.70

## 3.10.44-alpha

## What's Changed

### Fixes

* Fix case insensitivity for the managed engine on git worktrees, and
implement for libgit2 by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1334

### Enhancements

* Add --what-if option to prepare-release command for simulating version
changes by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1242
* Add NBGV_SetCloudBuildVersionVars property to disable cloud build
variable output by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1324


### Dependency updates

* chore(deps): update dependency microsoft.build.locator to 1.11.2 by
@​renovate[bot] in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1304
* chore(deps): update dotnet monorepo by @​renovate[bot] in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1309
* Update dotnet monorepo by @​renovate[bot] in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1338


**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.10.8-alpha...v3.10.44-alpha

## 3.10.8-alpha

## What's Changed
* Add prerelease property to inheriting version.json files by @​Copilot
in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1317


**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.50...v3.10.8-alpha

## 3.9.50

## What's Changed
* Add `versionHeightOffsetAppliesTo` property to version.json by
@​Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1279
* Fix `nbgv prepare-release` command to honor inheriting version.json
files by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1281
* Automatically disable git engine for Dependabot environments by
@​Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1284
* Add --what-if switch to nbgv tag command to preview tag names by
@​Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1287
* Auto-disable git engine for GitHub Copilot environments by @​Copilot
in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1291
* Allow uppercase letters in pre-release version identifiers by
@​Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1293

## New Contributors
* @​micheloliveira-com made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1277

**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.8.118...v3.9.50

## 3.9.37-alpha

## What's Changed
* Auto-disable git engine for GitHub Copilot environments by @​Copilot
in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1291


**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.32-alpha...v3.9.37-alpha

## 3.9.32-alpha

## What's Changed

* Automatically disable git engine for Dependabot environments by
@​Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1284
* Add --what-if switch to nbgv tag command to preview tag names by
@​Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1287

**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.17-alpha...v3.9.32-alpha

## 3.9.17-alpha

## What's Changed
* Fix `nbgv prepare-release` command to honor inheriting version.json
files by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1281


**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.15-alpha...v3.9.17-alpha

## 3.9.15-alpha

## What's Changed

* Add `versionHeightOffsetAppliesTo` property to version.json by
@​Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1279

## New Contributors
* @​micheloliveira-com made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1277

**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.8.118...v3.9.15-alpha

## 3.8.118

## Fixes

* Don't try to disable CA2243 warnings in the generated version info
files for F# by @​Numpsy in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1174
* Catch a more general JsonException. by @​ANGEL-OF-DEV in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191
* Retarget links to migrated docs by @​bencemali in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193
* Check MSBuild items with case insensitivity by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1213
* Fix inconsistent CLI output format for GitCommitDate by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1246
* Fix version height computed as 0 when project path has non-canonical
casing by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1244
* When generating the GitCommitDate field in the AssemblyInfo for F#, d…
by @​Numpsy in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1253
* Only do Android version check on applications by @​dotMorten in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256
* Fix `nbgv set-version` to write to the best version.json file in scope
by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1264

## Enhancements

* Add msbuild-provided prerelease identifiers by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1153
* Add support for stamping version on server.json for MCP servers with
0.0.0-placeholder replacement by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1270 and by
@​AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1271
* Add option to set / skip CloudBuildNumber by @​MattKotsenas in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1190
* Add Central Package Management (CPM) support to nbgv install command
by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208
* Add --public-release argument to nbgv get-version command by @​Copilot
in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1245
* Invoke PrivateP2PCaching.proj fewer times by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1263

## Other changes

* Update dependency Cake.Core to v5 by @​renovate[bot] in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1183

## New Contributors
* @​ANGEL-OF-DEV made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191
* @​bencemali made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193
* @​Copilot made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208
* @​dotMorten made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256
* @​emmanuel-ferdman made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1145

**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.7.115...v3.8.118

## 3.8.106-alpha

## What's Changed

### Enhancements

* Add option to set / skip CloudBuildNumber by @​MattKotsenas in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1190
* Add Central Package Management (CPM) support to nbgv install command
by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208
* Add --public-release argument to nbgv get-version command by @​Copilot
in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1245
* Invoke PrivateP2PCaching.proj fewer times by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1263

### Fixes

* Catch a more general JsonException. by @​ANGEL-OF-DEV in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191
* Retarget links to migrated docs by @​bencemali in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193
* Check MSBuild items with case insensitivity by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1213
* Fix inconsistent CLI output format for GitCommitDate by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1246
* Fix version height computed as 0 when project path has non-canonical
casing by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1244
* When generating the GitCommitDate field in the AssemblyInfo for F#, d…
by @​Numpsy in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1253
* Only do Android version check on applications by @​dotMorten in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256
* Fix `nbgv set-version` to write to the best version.json file in scope
by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1264

### Other changes

* Update dependency Cake.Core to v5 by @​renovate[bot] in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1183

## New Contributors
* @​ANGEL-OF-DEV made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191
* @​bencemali made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193
* @​Copilot made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208
* @​dotMorten made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256

**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.8.38-alpha...v3.8.106-alpha

## 3.8.38-alpha

## Fixes

* Don't try to disable CA2243 warnings in the generated version info
files for F# by @​Numpsy in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1174

## Enhancements

* Add msbuild-provided prerelease identifiers by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1153

## New Contributors
* @​emmanuel-ferdman made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1145

**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.7.115...v3.8.38-alpha

Commits viewable in [compare
view](https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.7.115...v3.10.91).
</details>

Updated
[Nerdbank.GitVersioning](https://github.com/dotnet/Nerdbank.GitVersioning)
from 3.7.115 to 3.10.91.

<details>
<summary>Release notes</summary>

_Sourced from [Nerdbank.GitVersioning's
releases](https://github.com/dotnet/Nerdbank.GitVersioning/releases)._

## 3.10.91

## What's Changed

* Retry file operations on access denied errors by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1408


**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.10.85...v3.10.91

## 3.10.85

## What's Changed

* Avoid writing server.json multiple times in a single pack by @​AArnott
in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1391

**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.10.70...v3.10.85

## 3.10.70

## What's Changed

### Fixes

* Fix case insensitivity for the managed engine on git worktrees, and
implement for libgit2 by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1334
* Fix native heap corruption in GitPackIndexMappedReaderTests by
@​AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1360

### Enhancements

* Add prerelease property to inheriting version.json files by @​Copilot
in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1317
* Add NBGV_SetCloudBuildVersionVars property to disable cloud build
variable output by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1324
* Add --what-if option to prepare-release command for simulating version
changes by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1242
* Build nbgv CLI tool for .NET 9 and 10 by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1369


**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.50...v3.10.70

## 3.10.44-alpha

## What's Changed

### Fixes

* Fix case insensitivity for the managed engine on git worktrees, and
implement for libgit2 by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1334

### Enhancements

* Add --what-if option to prepare-release command for simulating version
changes by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1242
* Add NBGV_SetCloudBuildVersionVars property to disable cloud build
variable output by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1324


### Dependency updates

* chore(deps): update dependency microsoft.build.locator to 1.11.2 by
@​renovate[bot] in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1304
* chore(deps): update dotnet monorepo by @​renovate[bot] in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1309
* Update dotnet monorepo by @​renovate[bot] in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1338


**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.10.8-alpha...v3.10.44-alpha

## 3.10.8-alpha

## What's Changed
* Add prerelease property to inheriting version.json files by @​Copilot
in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1317


**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.50...v3.10.8-alpha

## 3.9.50

## What's Changed
* Add `versionHeightOffsetAppliesTo` property to version.json by
@​Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1279
* Fix `nbgv prepare-release` command to honor inheriting version.json
files by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1281
* Automatically disable git engine for Dependabot environments by
@​Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1284
* Add --what-if switch to nbgv tag command to preview tag names by
@​Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1287
* Auto-disable git engine for GitHub Copilot environments by @​Copilot
in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1291
* Allow uppercase letters in pre-release version identifiers by
@​Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1293

## New Contributors
* @​micheloliveira-com made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1277

**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.8.118...v3.9.50

## 3.9.37-alpha

## What's Changed
* Auto-disable git engine for GitHub Copilot environments by @​Copilot
in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1291


**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.32-alpha...v3.9.37-alpha

## 3.9.32-alpha

## What's Changed

* Automatically disable git engine for Dependabot environments by
@​Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1284
* Add --what-if switch to nbgv tag command to preview tag names by
@​Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1287

**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.17-alpha...v3.9.32-alpha

## 3.9.17-alpha

## What's Changed
* Fix `nbgv prepare-release` command to honor inheriting version.json
files by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1281


**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.15-alpha...v3.9.17-alpha

## 3.9.15-alpha

## What's Changed

* Add `versionHeightOffsetAppliesTo` property to version.json by
@​Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1279

## New Contributors
* @​micheloliveira-com made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1277

**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.8.118...v3.9.15-alpha

## 3.8.118

## Fixes

* Don't try to disable CA2243 warnings in the generated version info
files for F# by @​Numpsy in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1174
* Catch a more general JsonException. by @​ANGEL-OF-DEV in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191
* Retarget links to migrated docs by @​bencemali in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193
* Check MSBuild items with case insensitivity by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1213
* Fix inconsistent CLI output format for GitCommitDate by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1246
* Fix version height computed as 0 when project path has non-canonical
casing by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1244
* When generating the GitCommitDate field in the AssemblyInfo for F#, d…
by @​Numpsy in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1253
* Only do Android version check on applications by @​dotMorten in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256
* Fix `nbgv set-version` to write to the best version.json file in scope
by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1264

## Enhancements

* Add msbuild-provided prerelease identifiers by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1153
* Add support for stamping version on server.json for MCP servers with
0.0.0-placeholder replacement by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1270 and by
@​AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1271
* Add option to set / skip CloudBuildNumber by @​MattKotsenas in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1190
* Add Central Package Management (CPM) support to nbgv install command
by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208
* Add --public-release argument to nbgv get-version command by @​Copilot
in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1245
* Invoke PrivateP2PCaching.proj fewer times by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1263

## Other changes

* Update dependency Cake.Core to v5 by @​renovate[bot] in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1183

## New Contributors
* @​ANGEL-OF-DEV made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191
* @​bencemali made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193
* @​Copilot made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208
* @​dotMorten made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256
* @​emmanuel-ferdman made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1145

**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.7.115...v3.8.118

## 3.8.106-alpha

## What's Changed

### Enhancements

* Add option to set / skip CloudBuildNumber by @​MattKotsenas in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1190
* Add Central Package Management (CPM) support to nbgv install command
by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208
* Add --public-release argument to nbgv get-version command by @​Copilot
in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1245
* Invoke PrivateP2PCaching.proj fewer times by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1263

### Fixes

* Catch a more general JsonException. by @​ANGEL-OF-DEV in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191
* Retarget links to migrated docs by @​bencemali in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193
* Check MSBuild items with case insensitivity by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1213
* Fix inconsistent CLI output format for GitCommitDate by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1246
* Fix version height computed as 0 when project path has non-canonical
casing by @​Copilot in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1244
* When generating the GitCommitDate field in the AssemblyInfo for F#, d…
by @​Numpsy in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1253
* Only do Android version check on applications by @​dotMorten in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256
* Fix `nbgv set-version` to write to the best version.json file in scope
by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1264

### Other changes

* Update dependency Cake.Core to v5 by @​renovate[bot] in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1183

## New Contributors
* @​ANGEL-OF-DEV made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191
* @​bencemali made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193
* @​Copilot made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208
* @​dotMorten made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256

**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.8.38-alpha...v3.8.106-alpha

## 3.8.38-alpha

## Fixes

* Don't try to disable CA2243 warnings in the generated version info
files for F# by @​Numpsy in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1174

## Enhancements

* Add msbuild-provided prerelease identifiers by @​AArnott in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1153

## New Contributors
* @​emmanuel-ferdman made their first contribution in
https://github.com/dotnet/Nerdbank.GitVersioning/pull/1145

**Full Changelog**:
https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.7.115...v3.8.38-alpha

Commits viewable in [compare
view](https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.7.115...v3.10.91).
</details>

Updated
[NexusLabs.Framework.Analyzers](https://github.com/ncosentino/NexusLabs.Framework)
from 0.2.6 to 0.2.9.

<details>
<summary>Release notes</summary>

_Sourced from [NexusLabs.Framework.Analyzers's
releases](https://github.com/ncosentino/NexusLabs.Framework/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/ncosentino/NexusLabs.Framework/commits).
</details>

Updated [TUnit](https://github.com/thomhurst/TUnit) from 1.53.0 to
1.63.0.

<details>
<summary>Release notes</summary>

_Sourced from [TUnit's
releases](https://github.com/thomhurst/TUnit/releases)._

## 1.63.0

<!-- Release notes generated using configuration in .github/release.yml
at v1.63.0 -->

## What's Changed
### Other Changes
* fix(mocks): dispatch abstract indexers through the engine instead of
calling base by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6517
* feat(mocks): experimental compile-time internals access (#​6514 Tier
2) by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6520
* feat(mocks): make the async-factory Returns alias available below
net9.0 by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6518
* +semver:minor - feat(mocks): runtime auto-stubs for interfaces the
source generator cannot see by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6519
### Dependencies
* chore(deps): update tunit to 1.62.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6508
* chore(deps): update dependency mockolate to 3.4.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6512
* chore(deps): update dependency cliwrap to 3.10.4 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6513
* chore(deps): update dependency stackexchange.redis to 3.0.25 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6522
* chore(deps): update dependency brace-expansion to v5.0.9 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6523
* chore(deps): update dependency microsoft.build.utilities.core to v18
by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6525


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.62.0...v1.63.0

## 1.62.0

<!-- Release notes generated using configuration in .github/release.yml
at v1.62.0 -->

## What's Changed
### Other Changes
* fix(docs): make Mermaid lifecycle diagrams readable by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6485
* fix(mocks): strip nullable annotation from constructor dispatch
patterns by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6498
* fix(mocks): skip interfaces with inaccessible abstract members by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6502
* feat(mocks): accept an async factory in Returns() on async members by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6503
* fix(mocks): report TM006 instead of CS1729 for unsubclassable classes
by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6501
* fix(mocks): emit the setup surface into the globally-imported
namespace by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6504
* fix(mocks): reference TUnit.Mocks once in snapshot test compilations
by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6506
* fix(mocks): make generated identifier sanitization injective by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6507
### Dependencies
* chore(deps): update tunit to 1.61.38 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6479
* chore(deps): update dependency brace-expansion to v5.0.8 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6478
* chore(deps): update dependency cliwrap to 3.10.3 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6482
* chore(deps): bump postcss from 8.5.10 to 8.5.22 in /docs by
@​dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6480
* chore(deps): update dependency fscheck to 3.3.4 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6486
* chore(deps): update dependency minimatch to v10.2.6 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6490
* chore(deps): update actions/stale action to v11 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6496
* chore(deps): update microsoft.testing to 2.3.3 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6499
* chore(deps): update mstest to 4.3.3 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6500


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.61.38...v1.62.0

## 1.61.38

<!-- Release notes generated using configuration in .github/release.yml
at v1.61.38 -->

## What's Changed
### Other Changes
* fix: apply 'unmanaged' constraint handling to remaining source
generators by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6474
* feat: expose data source attributes on TestContext by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6477
### Dependencies
* chore(deps): update tunit to 1.61.35 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6475


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.61.35...v1.61.38

## 1.61.35

<!-- Release notes generated using configuration in .github/release.yml
at v1.61.35 -->

## What's Changed
### Other Changes
* fix(mocks): omit 'struct' constraint when type parameter has
'unmanaged' constraint by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6473
### Dependencies
* chore(deps): bump fast-uri from 3.1.2 to 3.1.4 in /docs by
@​dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6466
* chore(deps): update tunit to 1.61.29 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6467
* chore(deps): update dependency verify.tool to v0.8.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6470
* chore(deps): update dependency docusaurus-plugin-llms to ^0.5.1 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6472


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.61.29...v1.61.35

## 1.61.29

<!-- Release notes generated using configuration in .github/release.yml
at v1.61.29 -->

## What's Changed
### Other Changes
* perf: remove EnumerableAsyncProcessor dependency by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6465
### Dependencies
* chore(deps): bump shell-quote from 1.8.4 to 1.10.0 in /docs by
@​dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6462
* chore(deps): bump body-parser from 1.20.5 to 1.20.6 in /docs by
@​dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6461
* chore(deps): bump webpack-dev-server from 5.2.5 to 5.2.6 in /docs by
@​dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6460
* chore(deps): update dependency microsoft.kiota.abstractions to v2 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6464
* chore(deps): update tunit to 1.61.23 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6463


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.61.23...v1.61.29

## 1.61.23

<!-- Release notes generated using configuration in .github/release.yml
at v1.61.23 -->

## What's Changed
### Other Changes
* fix(mocks): emit 'where T : default' for interface-constrained generic
methods by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6458
### Dependencies
* chore(deps): update tunit to 1.61.15 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6450
* chore(deps): update actions/checkout action to v7.0.1 by @​thomhurst
in https://github.com/thomhurst/TUnit/pull/6453
* chore(deps): update verify to 31.26.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6454
* chore(deps): update verify to 31.27.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6457
* chore(deps): update react to ^19.2.8 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6459


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.61.15...v1.61.23

## 1.61.15

<!-- Release notes generated using configuration in .github/release.yml
at v1.61.15 -->

## What's Changed
### Other Changes
* feat: Allow disabling the automatic html report upload to
upload-artifacts@​v7 by @​Crashdummyy in
https://github.com/thomhurst/TUnit/pull/6447
* fix: stop retrying artifact upload on non-retryable status codes by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6449
### Dependencies
* chore(deps): update tunit to 1.61.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6437
* chore(deps): update verify to 31.24.3 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6438
* chore(deps): update dependency
opentelemetry.instrumentation.aspnetcore to 1.17.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6440
* chore(deps): update verify to 31.25.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6442
* chore(deps): update dependency docusaurus-plugin-llms to ^0.5.0 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6443
* chore(deps): update opentelemetry to 1.17.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6441

## New Contributors
* @​Crashdummyy made their first contribution in
https://github.com/thomhurst/TUnit/pull/6447

**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.61.0...v1.61.15

## 1.61.0

<!-- Release notes generated using configuration in .github/release.yml
at v1.61.0 -->

## What's Changed
### Other Changes
* docs: revamp README with feature showcase and auto-updating benchmarks
by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6430
* docs: align docs homepage messaging with revamped README by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6431
* fix(engine): emit ECMA-335 metadata-format type names in
TestMethodIdentifierProperty by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6433
* fix(benchmarks): make SetupTeardownTests JSON tests Native AOT
compatible by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6434
* Organize repository into conventional .NET layout by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6435
### Dependencies
* chore(deps): update dependency polyfill to v11 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6418
* chore(deps): update dependency tunit.aspire to 1.6* by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6419
* chore(deps): update tunit to 1.6* by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6420
* chore(deps): update dependency polyfill to 11.0.1 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6421
* chore(deps): update dependency polyfill to 11.0.1 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6422
* chore(deps): update verify to 31.24.2 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6424
* chore(deps): update microsoft.build to 18.8.2 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6426
* chore(deps): update dependency microsoft.net.stringtools to 18.8.2 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6425
* chore(deps): update actions/setup-dotnet action to v6 by @​thomhurst
in https://github.com/thomhurst/TUnit/pull/6427
* chore(deps): bump websocket-driver from 0.7.4 to 0.7.5 in /docs by
@​dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6429
* chore(deps): update opentelemetry to 1.17.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6432


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.60.0...v1.61.0

## 1.60.0

<!-- Release notes generated using configuration in .github/release.yml
at v1.60.0 -->

## What's Changed
### Other Changes
* feat: cross-process test report aggregation — merged HTML report +
single GitHub summary by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6415
### Dependencies
* chore(deps): update tunit to 1.59.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6398
* chore(deps): update verify to 31.24.1 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6399
* chore(deps): update microsoft.testing to 2.3.2 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6401
* chore(deps): update mstest to 4.3.2 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6402
* chore(deps): update actions/setup-node action to v7 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6403
* chore(deps): update dependency microsoft.net.test.sdk to 18.8.0 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6404
* chore(deps): update dependency microsoft.net.test.sdk to 18.8.1 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6405
* chore(deps): update dependency fsharp.core to 10.1.302 by @​thomhurst
in https://github.com/thomhurst/TUnit/pull/6406
* chore(deps): update dependency microsoft.templateengine.authoring.cli
to v10.0.302 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6407
* chore(deps): update dependency microsoft.entityframeworkcore to
10.0.10 by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6410
* chore(deps): update dependency dotnet-sdk to v10.0.302 by @​thomhurst
in https://github.com/thomhurst/TUnit/pull/6409
* chore(deps): update dependency system.commandline to 2.0.10 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6412
* chore(deps): update dependency
microsoft.templateengine.authoring.templateverifier to 10.0.302 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6411
* chore(deps): update microsoft.aspnetcore to 10.0.10 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6413
* chore(deps): update microsoft.extensions to 10.0.10 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6414
* chore(deps): update microsoft.extensions to 10.8.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6416
* chore(deps): update dependency polyfill to v11 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6417


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.59.0...v1.60.0

## 1.59.0

<!-- Release notes generated using configuration in .github/release.yml
at v1.59.0 -->

## What's Changed
### Other Changes
* Fix typed MethodDataSource provider instances by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6378
* Fix instance MethodDataSource isolation by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6379
* fix(mocks): CS9262 in generated mock members on VS 17.14 (Roslyn 4.14)
by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6392
* Remove EqualTo alias documentation by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6396
* fix(aspnetcore): guard hosted-service stop against concurrent double
Host.StopAsync by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6397
* Add single-item assertion chaining by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6395
* Improve test framework migrations by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6381
* Add -f/--framework support to TUnit template with .NET Framework
handling by @​thomhurst with @​Copilot in
https://github.com/thomhurst/TUnit/pull/6262
### Dependencies
* chore(deps): update tunit to 1.58.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6351
* chore(deps): update dependency tunit.core to 1.58.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6352
* chore(deps): update dependency picomatch to v4.0.5 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6354
* chore(deps): update dependency testcontainers.postgresql to 4.13.0 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6356
* chore(deps): update dependency testcontainers.redis to 4.13.0 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6357
* chore(deps): update dependency testcontainers.kafka to 4.13.0 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6355
* chore(deps): update dependency gitversion.tool to v6.8.1 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6359
* chore(deps): update dependency typescript to v7 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6372
* chore(deps): update mstest to 4.3.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6374
* chore(deps): update dependency messagepack to 3.1.8 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6376
* chore(deps): update dependency opentelemetry.instrumentation.runtime
to 1.16.0 by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6380
* chore(deps): update dependency vogen to 8.0.6 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6382
* chore(deps): update dependency gitversion.tool to v6.8.2 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6384
* chore(deps): update dependency npgsql.entityframeworkcore.postgresql
to 10.0.3 by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6385
* chore(deps): update docusaurus to v3.10.2 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6386
* chore(deps): update dependency stackexchange.redis to 3.0.17 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6387
* chore(deps): update dependency dompurify to v3.4.12 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6389
* chore(deps): update dependency svgo to v4.0.2 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6390
* chore(deps): update dependency nsubstitute to v6 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6394
* chore(deps): update verify to 31.24.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6367
* chore(deps): update microsoft.testing by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6369


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.58.0...v1.59.0

## 1.58.0

<!-- Release notes generated using configuration in .github/release.yml
at v1.58.0 -->

## What's Changed
### Other Changes
* feat(aspire): opt-in live forwarding of resource logs into test output
(#​6341) by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6345
* fix(aspire): fail fast on Finished-state crashes during startup
(#​6342) by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6346
* fix(engine): keep per-test timeout token source alive through teardown
(#​6339) by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6349
* feat(aspire): resource-diagnostics helpers + retained log buffer
(#​6343) by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6350
* feat(aspire): surface exception detail in routed OTLP logs (#​6347) by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6348
### Dependencies
* chore(deps): update tunit to 1.57.17 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6344


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.57.17...v1.58.0

## 1.57.17

<!-- Release notes generated using configuration in .github/release.yml
at v1.57.17 -->

## What's Changed
### Other Changes
* fix(engine): reset test cancellation token before After hooks on
timeout path (#​6339) by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6340
### Dependencies
* chore(deps): update tunit to 1.57.14 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6336


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.57.14...v1.57.17

## 1.57.14

<!-- Release notes generated using configuration in .github/release.yml
at v1.57.14 -->

## What's Changed
### Other Changes
* fix(engine): apply --treenode-filter to --list-tests by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6334
* feat(aspire): dump resource error logs on test failure + warn on
missing telemetry wiring by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6323
### Dependencies
* chore(deps): update dependency stackexchange.redis to 3.0.11 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6324
* chore(deps): update tunit to 1.57.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6322
* chore(deps): update dependency brace-expansion to v5.0.7 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6326
* chore(deps): update dependency polyfill to 10.11.1 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6327
* chore(deps): update dependency polyfill to 10.11.1 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6329
* chore(deps): update dependency polyfill to 10.11.2 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6330
* chore(deps): update dependency polyfill to 10.11.2 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6331
* chore(deps): update dependency serialize-javascript to v7.0.7 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6333
* chore(deps): update dependency gitversion.tool to v6.8.0 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6335


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.57.0...v1.57.14

## 1.57.0

<!-- Release notes generated using configuration in .github/release.yml
at v1.57.0 -->

## What's Changed
### Other Changes
* perf(sourcegen): consolidate per-file ModuleInitializers into merged
.cctor (#​6226) by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6286
* fix: resolve CS0121 IsEqualTo ambiguity on .NET 8 SDK (#​6296) by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6313
* chore(docs): apply Codacy markdownlint fixes by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6284
* fix(mocks): generate mock for qualified-name X.Mock() calls (#​6298)
by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6314
### Dependencies
* chore(deps): update tunit to 1.56.35 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6306
* chore(deps): update dependency stackexchange.redis to 3.0.7 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6307
* chore(deps): update dependency opentelemetry.instrumentation.http to
1.16.0 by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6308
* chore(deps): update dependency
opentelemetry.instrumentation.aspnetcore to 1.16.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6309
* chore(deps): update dependency qs to v6.15.3 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6310
* chore(deps): update dependency polyfill to 10.11.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6312
* chore(deps): update dependency polyfill to 10.11.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6311
* chore(deps): bump http-proxy-middleware from 2.0.9 to 2.0.10 in /docs
by @​dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6303


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.56.35...v1.57.0

## 1.56.35

<!-- Release notes generated using configuration in .github/release.yml
at v1.56.35 -->

## What's Changed
### Other Changes
* feat(aspire): tear down Aspire on test-run abort via session
cancellation token by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6292
### Dependencies
* chore(deps): update tunit to 1.56.25 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6294
* chore(deps): update dependency
microsoft.visualstudio.threading.analyzers to v18 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6297
* chore(deps): update dependency microsoft.net.test.sdk to 18.7.0 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6300
* chore(deps): update dependency microsoft.playwright to 1.61.0 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6302
* chore(deps): update actions/cache action to v6 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6301
* chore(deps): update dependency azure.storage.blobs to 12.29.1 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6304


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.56.25...v1.56.35

## 1.56.25

<!-- Release notes generated using configuration in .github/release.yml
at v1.56.25 -->

## What's Changed
### Other Changes
* feat(aspire): actionable diagnostics when resources fail to start by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6293
### Dependencies
* chore(deps): update tunit to 1.56.18 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6285
* chore(deps): update aspire to 13.4.6 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6287
* chore(deps): update dependency mockolate to 3.3.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6291


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.56.18...v1.56.25

## 1.56.18

<!-- Release notes generated using configuration in .github/release.yml
at v1.56.18 -->

## What's Changed
### Other Changes
* fix(mocks): mock deep interface hierarchies (#​6264) by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6283
* feat: artifact retention for auto-uploaded HTML report (#​6266) by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6270
* fix(mocks): forward asymmetric `new`-hidden property slots
per-accessor (#​6263) by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6281
* fix: honor OverloadResolutionPriority on net8 consumers (#​6276,
#​6280) by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6282
### Dependencies
* chore(deps): update tunit to 1.56.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6259
* chore(deps): update dependency streamjsonrpc to 2.25.29 by @​thomhurst
in https://github.com/thomhurst/TUnit/pull/6258
* chore(deps): update aspire to 13.4.5 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6267
* chore(deps): bump launch-editor from 2.12.0 to 2.14.1 in /docs by
@​dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6268
* chore(deps): bump @​babel/core from 7.28.5 to 7.29.7 in /docs by
@​dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6269
* chore(deps): update dependency dompurify to v3.4.11 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6271
* chore(deps): update dependency serialize-javascript to v7.0.6 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6272
* chore(deps): update actions/checkout action to v7 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6277
* chore(deps): update verify to 31.20.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6278
* chore(deps): bump webpack-dev-server from 5.2.4 to 5.2.5 in /docs by
@​dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6273


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.56.0...v1.56.18

## 1.56.0

<!-- Release notes generated using configuration in .github/release.yml
at v1.56.0 -->

## What's Changed
### Other Changes
* fix(aspnetcore): serialize WithWebHostBuilder to stop
_derivedFactories race (flaky disposal NRE) by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6251
* fix(mocks): wrap a real object whose class has no parameterless ctor
(#​6253) by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6255
* fix(mocks): implement `new`-hidden base interface members in wrapper
(#​6252) by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6256
* fix(mocks): mocking a method with more params than Func/Action arity
(#​6254) by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6257
### Dependencies
* chore(deps): update tunit to 1.55.2 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6248
* chore(deps): update aspire to 13.4.4 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6249
* chore(deps): update dependency stackexchange.redis to v3 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6250


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.55.2...v1.56.0

## 1.55.2

<!-- Release notes generated using configuration in .github/release.yml
at v1.55.2 -->

## What's Changed
### Other Changes
* fix(aspire): publish TUnit.Aspire.Core package (#​6246) by @​thomhurst
in https://github.com/thomhurst/TUnit/pull/6247
### Dependencies
* chore(deps): update tunit to 1.55.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6245


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.55.0...v1.55.2

## 1.55.0

<!-- Release notes generated using configuration in .github/release.yml
at v1.55.0 -->

## What's Changed
### Other Changes
* feat(aspire): add TUnit.Aspire.Core without TUnit metapackage
dependency (#​5471) by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6243
* fix(analyzers): scope TUnit0031 async-void rule to tests and hooks
(#​6190) by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6244
### Dependencies
* chore(deps): update dependency streamjsonrpc to 2.25.28 by @​thomhurst
in https://github.com/thomhurst/TUnit/pull/6232
* chore(deps): update tunit to 1.54.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6233
* chore(deps): bump joi from 17.13.3 to 17.13.4 in /docs by
@​dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6234
* chore(deps): update dependency polyfill to 10.9.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6238
* chore(deps): update _tunitpolyfillversion to 10.9.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6237
* chore(deps): update dependency polyfill to 10.10.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6242
* chore(deps): update _tunitpolyfillversion to 10.10.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6241


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.54.0...v1.55.0

## 1.54.0

<!-- Release notes generated using configuration in .github/release.yml
at v1.54.0 -->

## What's Changed
### Other Changes
* Generate collection-shape drill-in overloads (#​6185) by @​thomhurst
in https://github.com/thomhurst/TUnit/pull/6218
* feat(mocks): setup/verify on secondary interfaces of multi-type mocks
by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6230
* perf: reduce allocations in source-gen test building hot paths by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6228
* perf: shrink generated TestEntry builder IL via shared TUnit.Core
factory helpers by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6231
### Dependencies
* chore(deps): update tunit to 1.53.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6199
* chore(deps): update verify to 31.19.1 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6200
* chore(deps): update dependency messagepack to 3.1.7 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6203
* chore(deps): update dependency fsharp.core to 10.1.301 by @​thomhurst
in https://github.com/thomhurst/TUnit/pull/6202
* chore(deps): update dependency microsoft.entityframeworkcore to 10.0.9
by @​thomhurst in https://github.com/thomhurst/TUnit/pull/6205
* chore(deps): update dependency dotnet-sdk to v10.0.301 by @​thomhurst
in https://github.com/thomhurst/TUnit/pull/6204
* chore(deps): update dependency microsoft.templateengine.authoring.cli
to v10.0.301 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6206
* chore(deps): update dependency
microsoft.templateengine.authoring.templateverifier to 10.0.301 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6207
* chore(deps): update microsoft.aspnetcore to 10.0.9 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6209
* chore(deps): update dependency system.commandline to 2.0.9 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6208
* chore(deps): update microsoft.extensions by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6211
* chore(deps): update dependency dompurify to v3.4.9 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6213
* chore(deps): bump shell-quote from 1.8.3 to 1.8.4 in /docs by
@​dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6210
* chore(deps): update dependency polly to 8.7.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6214
* chore(deps): update dependency microsoft.net.stringtools to 18.7.1 by
@​thomhurst in https://github.com/thomhurst/TUnit/pull/6215
* chore(deps): update microsoft.build to 18.7.1 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6216
* chore(deps): update opentelemetry to 1.16.0 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6217
* chore(deps): update dependency dompurify to v3.4.10 by @​thomhurst in
https://github.com/thomhurst/TUnit/pull/6229


**Full Changelog**:
https://github.com/thomhurst/TUnit/compare/v1.53.0...v1.54.0

Commits viewable in [compare
view](https://github.com/thomhurst/TUnit/compare/v1.53.0...v1.63.0).
</details>

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Nick Cosentino <nbcosentino@gmail.com>
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.

1 participant