Skip to content

Generate collection-shape drill-in overloads (#6185) - #6218

Merged
thomhurst merged 6 commits into
mainfrom
feat/6185-value-collection-drillin
Jun 11, 2026
Merged

Generate collection-shape drill-in overloads (#6185)#6218
thomhurst merged 6 commits into
mainfrom
feat/6185-value-collection-drillin

Conversation

@thomhurst

Copy link
Copy Markdown
Owner

What & why

Fixes #6185: when a dictionary value is itself a collection, await Assert.That(dict).ContainsKey(k).And.Value.Count() failed to compile (CS0411) because the .Value drill-in returned a scalar ValueAssertion lacking the collection surface, so .Count() bound to LINQ's Enumerable.Count.

Because DictionaryValueSource<T> and AssertionContext<T> are invariant, every value shape needs its own overload — hand-writing that is ~90+ methods per call site and drifts (e.g. ReadOnlyList.HasItemAt has an IEqualityComparer param the IList one doesn't). The same "one method per collection shape" boilerplate already existed in three places, all keyed off the same shape→assertion-source map.

Approach

New Roslyn incremental generator CollectionShapeFanOutGenerator — one hardcoded shape→source→seed registry (11 rows) + symbol reflection — with three emitters:

  • A — .Value drill-in, full surface. [GenerateCollectionShapeDrillIns] on a drill-in source emits the full shape-specific surface (Count/Contains/HasItemAt/IsSubsetOf/ContainsKey/…) onto DictionaryValueSource<Shape>. Signatures are reflected from each shape's assertion source, so per-shape differences are always correct and new methods are picked up automatically. Reusable: any arity-1 drill-in source opts in with one attribute.
  • B — replaces CollectionItemSatisfiesExtensions.cs (per-shape Satisfies).
  • C — replaces the .Count(itemAssertion) per-item overload loses specialised source #5707 Count(itemAssertion) block in AssertionExtensions.cs.

Concrete value shapes (List<T>/Dictionary<K,V>) upcast their context via a generated Upcast helper that preserves PendingPreWork, so the ContainsKey pre-work still runs first (a missing key fails with the normal "contain key" message instead of reading default).

API impact

  • Sites B & C reproduce their existing public API exactly — PublicAPI snapshots show zero removals across all 4 TFMs.
  • Emitter A is a deliberate full-surface expansion (the .Value drill-in now exposes the complete per-shape collection surface).

Validation

  • Builds on netstandard2.0 / net8.0 / net9.0 / net10.0 (only IReadOnlySet rows are #if NET5_0_OR_GREATER; the Satisfies file is #if !NETSTANDARD2_0).
  • 2168 assertions tests + 69 source-generator tests pass.
  • PublicAPI approval snapshots re-accepted for all TFMs (zero removals for B/C).
  • New tests cover list HasItemAt, set IsSubsetOf, nested-dict ContainsKey, array, and concrete List<T>/Dictionary<K,V> incl. the missing-key pre-work path; plus a generator content-assertion test.

Notes

  • The registry intentionally excludes Memory/ReadOnlyMemory/IAsyncEnumerable (not collection drill-in targets) — documented inline.
  • Dictionary IsOrderedBy<TKey>/IsOrderedByDescending<TKey> are not forwarded onto dict drill-ins (method type param collides with the source's TKey) — a documented niche gap.

Adds CollectionShapeFanOutGenerator, a Roslyn incremental generator that
replaces hand-written "one method per collection shape" boilerplate at three
sites, driven by a single shape->source registry plus symbol reflection.

- Emitter A: [GenerateCollectionShapeDrillIns] on a drill-in source emits the
  full shape-specific assertion surface (Count/Contains/HasItemAt/IsSubsetOf/
  ContainsKey/...) onto DictionaryValueSource<Shape>. Fixes the CS0411 where
  `.Value.Count()` bound to LINQ Enumerable.Count when a dictionary value is
  itself a collection. Signatures are reflected from each shape's assertion
  source, so per-shape differences (e.g. the comparer param on
  ReadOnlyList.HasItemAt that IList lacks) are always correct.
- Emitter B: replaces CollectionItemSatisfiesExtensions.cs.
- Emitter C: replaces the #5707 Count(itemAssertion) block in AssertionExtensions.

Concrete value shapes (List<T>/Dictionary<K,V>) upcast their context via a
generated helper that preserves PendingPreWork, so the ContainsKey pre-work
still runs before the value is read.

Sites B and C reproduce their existing public API exactly (PublicAPI net-zero);
Emitter A is a deliberate full-surface expansion.
@codacy-production

codacy-production Bot commented Jun 10, 2026

Copy link
Copy Markdown

Not up to standards ⛔

🔴 Issues 1 high · 1 minor

Alerts:
⚠ 2 issues (≤ 0 issues of at least minor severity)

Results:
2 new issues

Category Results
ErrorProne 1 high
CodeStyle 1 minor

View in Codacy

🟢 Metrics 78 complexity

Metric Results
Complexity 78

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review — PR #6218: Generate collection-shape drill-in overloads

This is a well-architected PR that solves a real problem elegantly. Using a Roslyn incremental generator to eliminate ~90+ hand-written per-shape forwarding methods per call site is the right structural approach — and the reflection-based method collection from real IMethodSymbols means per-shape signature differences (the IEqualityComparer on ReadOnlyList.HasItemAt vs. IList.HasItemAt) are always correct without manual upkeep.

Overall: approve-ready, with a few items worth considering.


What works well

  • Incremental generator designWithTrackingName on each pipeline stage, fully equatable ImmutableEquatableArray-based models, no ISymbol stored across the incremental boundary. This is textbook correct incremental generator practice.
  • Upcast + PendingPreWork preservation — the concrete-shape upcast (List<T> → IList<T>) chains the pre-work lambdas so a missing key still surfaces the clean "contain key" failure. The sequencing of existing and preWork is correct.
  • Zero removals on Emitters B & C — the PublicAPI snapshots confirm exact API parity with the hand-written code they replace.
  • CollectMethods most-derived-wins walk — stops before Assertion<T> / object, deduplicates by Name + param types, and skips Obsolete members. All correct.
  • Test depth — snapshot tests for generator output fidelity, integration tests covering the original bug, missing-key pre-work path, and concrete (List<T>/Dictionary<K,V>) shapes.

Issues

1. Emitter B / C trigger multiplicity — silent duplicate-file risk

fires once per item in the pipeline. If a second method ever carries (now or in a future refactor), Roslyn will try to add twice → CS8785 duplicate hint name diagnostic. The same applies to Emitter C.

The fix is cheap — deduplicate with and emit once:

This is low risk today since each attribute appears exactly once, but a single misplaced attribute could cause a confusing build failure.

2. Three types are now public API

The PublicAPI snapshot now includes , , and as public types. If these are only intended as internal generator triggers (no downstream library author would ever apply them to their own types), marking them would avoid confusion and API churn.

If they are intentional extensibility points — so that consumers can write their own drill-in sources — they should be documented as such. The current XML docs describe what the generator does but not whether the attribute is intended for public use.

3. is fragile without explanation of each entry

A new assertion method added to a source class whose name isn't in this set will silently appear on all drill-in surfaces. The reverse — a needed method accidentally blocked — is harder to notice. A short grouped comment categorising why each name is excluded ("generic value-shape methods", "infrastructure / lifecycle", "System.Object") would help a future maintainer decide where a new entry belongs. Alternatively, an attribute-based approach () on the sources themselves would be self-documenting and easier to audit.

4. helper is always emitted even when no upcast shapes are needed

If a drill-in source only maps to interface-shaped collection types (no / concrete shapes in the Rows registry), the helper is dead code in that file. Minor, but emitting it conditionally based on whether any row actually produced methods for this model would keep generated files cleaner.


Minor observation

The documented gap — "Dictionary / are not forwarded onto dict drill-ins (method type param collides with the source's )" — is correctly handled and documented inline. No action needed, just flagging it as confirmed correct behavior.


Summary: The architecture is sound, tests are thorough, and public API impact is controlled. Items 1 and 2 are the ones most worth addressing before merge; 3 and 4 are lower priority.

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review — PR #6218: Generate collection-shape drill-in overloads

This is a well-architected PR that solves a real problem elegantly. Using a Roslyn incremental generator to eliminate ~90+ hand-written per-shape forwarding methods per call site is the right structural approach — and the reflection-based method collection from real IMethodSymbols means per-shape signature differences (the IEqualityComparer on ReadOnlyList.HasItemAt vs. IList.HasItemAt) are always correct without manual upkeep.

Overall: approve-ready, with a few items worth considering.


What works well

  • Incremental generator designWithTrackingName on each pipeline stage, fully equatable ImmutableEquatableArray-based models, no ISymbol stored across the incremental boundary. Textbook correct incremental generator practice.
  • Upcast + PendingPreWork preservation — the concrete-shape upcast (List<T> to IList<T>) chains the pre-work lambdas so a missing key still surfaces the clean "contain key" failure. The sequencing of existing and preWork is correct.
  • Zero removals on Emitters B & C — the PublicAPI snapshots confirm exact API parity with the hand-written code they replace.
  • CollectMethods most-derived-wins walk — stops before Assertion<T> / object, deduplicates by Name + param types, and skips Obsolete members. All correct.
  • Test depth — snapshot tests for generator output fidelity, integration tests covering the original bug, missing-key pre-work path, and concrete (List<T> / Dictionary<K,V>) shapes.

Issues

1. Emitter B / C trigger multiplicity — silent duplicate-file risk

RegisterSourceOutput fires once per item in the pipeline. If a second method ever carries [GenerateCollectionShapeItemSourceOverloads] (now or in a future refactor), Roslyn will try to add CollectionItemSatisfiesExtensions.g.cs twice — CS8785 duplicate hint name. The same applies to Emitter C.

The fix is cheap — deduplicate with .Collect() and emit once:

context.RegisterSourceOutput(
    itemSourceTrigger.Collect(),
    static (spc, items) => { if (items.Length > 0) EmitItemSourceOverloads(spc); });

This is low risk today since each attribute appears exactly once, but a single misplaced attribute would produce a confusing build failure with no obvious cause.

2. Three Generate*Attribute types are now public API

The PublicAPI snapshot now includes GenerateCollectionShapeDrillInsAttribute, GenerateCollectionShapeCountOverloadsAttribute, and GenerateCollectionShapeItemSourceOverloadsAttribute as public types. If these are only intended as internal generator triggers (no downstream library author would ever apply them), marking them internal would avoid API churn and consumer confusion.

If they are intentional extensibility points — so that consumers can write their own drill-in sources — they should be documented as such. The current XML docs describe what the generator does but do not clarify whether downstream use is supported.

3. ExcludedNames is fragile without rationale for each entry

A new assertion method added to a source class whose name is not in this set will silently appear on all drill-in surfaces. The reverse — a needed method accidentally blocked — is harder to notice. Grouped comments explaining why each name is excluded (e.g. "generic value-shape methods already on IAssertionSource", "infrastructure / lifecycle", "System.Object inherited") would help a future maintainer decide where a new entry belongs.

4. Upcast helper always emitted regardless of whether upcast shapes appear

The private Upcast<TFrom, TTo> helper (~15 lines) is emitted unconditionally at the top of every generated file. If a drill-in source produces no UpcastCtor-seeded methods (no List<T> or Dictionary<K,V> concrete shapes in the output), the helper is dead code in that file. Minor, but emitting it conditionally based on whether any UpcastCtor row produced methods would keep generated files cleaner.


Minor observation

The documented gap — "Dictionary IsOrderedBy<TKey> / IsOrderedByDescending<TKey> are not forwarded onto dict drill-ins (method type param collides with the source's TKey)" — is correctly handled and explained inline. Confirmed as expected behavior.


Summary: The architecture is sound, tests are thorough, and API impact is controlled. Items 1 and 2 are most worth addressing before merge; 3 and 4 are lower-priority cleanup.

…nerator

Renames the codegen vocabulary to match the repo's "source"/"assertion" terms
instead of the ad-hoc "DrillIn"/"FanOut"/"ItemSource" coinages:

- CollectionShapeFanOutGenerator        -> CollectionShapeAssertionGenerator
- [GenerateCollectionShapeDrillIns]     -> [GenerateCollectionShapeAssertions]
- [GenerateCollectionShapeItemSourceOverloads] -> [GenerateCollectionShapeSatisfiesOverloads]
- generated {Wrapper}CollectionShapeDrillInExtensions -> {Wrapper}CollectionShapeAssertions
- internal model/method names (DrillInModel/BuildDrillInModel/EmitDrillIn ->
  WrapperModel/BuildWrapperModel/EmitWrapperAssertions)

Pure rename: generated output and behaviour are unchanged. PublicAPI snapshots
are a symmetric rename (5 names in/out, no other surface change).

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Follow-up Review — PR #6218

This is a follow-up to the two prior reviews (both posted 2026-06-10). All four issues raised remain unaddressed in the current code. Summarising the outstanding items:


1. Emitter B / C trigger multiplicity — still unresolved

RegisterSourceOutput still fires once per item without .Collect() deduplication:

// Current (fragile):
context.RegisterSourceOutput(satisfiesTrigger, static (spc, _) => EmitSatisfiesOverloads(spc));
context.RegisterSourceOutput(countTrigger,    static (spc, _) => EmitCountOverloads(spc));

If a second method ever carries either attribute, Roslyn will attempt to add the same hint name twice → CS8785, with no obvious error pointing back to this code. The fix is a one-liner:

context.RegisterSourceOutput(satisfiesTrigger.Collect(),
    static (spc, items) => { if (items.Length > 0) EmitSatisfiesOverloads(spc); });

2. Three Generate*Attribute types still public API

GenerateCollectionShapeAssertionsAttribute, GenerateCollectionShapeSatisfiesOverloadsAttribute, and GenerateCollectionShapeCountOverloadsAttribute are all public sealed class. If these are purely internal generator triggers (no intended downstream use), they should be internal to avoid locking in an accidental API surface. If they are intended extensibility points, they need documentation saying so.

3. ExcludedNames still lacks per-entry rationale

The block comment ("Names already present on IAssertionSource<T> / ValueAssertion<T> / Assertion<T> / object, or that are pure infrastructure") is too generic to guide future decisions. When a new assertion method is added, a maintainer can't tell from this comment whether to include or exclude it — and a wrong call silently changes the public API surface of all drill-in types. Short grouped comments (or an attribute-based opt-out on the source class itself) would make this self-documenting.

4. Upcast helper still emitted unconditionally

The private Upcast\<TFrom, TTo\> helper is emitted at the top of every EmitWrapperAssertions output file regardless of whether any SeedKind.UpcastCtor shape actually appears. Only two of the eleven rows use UpcastCtor (List<T> and Dictionary<K,V>); for drill-in sources that produce no methods from those shapes, the helper is dead code in the generated file.


Priority: Issues 1 and 2 are the ones most worth fixing before merge — 1 is a latent build-breaker, 2 is an API decision that's expensive to reverse. Issues 3 and 4 are lower-priority cleanup. The core architecture remains solid.

…-set docs

- Collect() the Satisfies/Count trigger pipelines so each single output file is
  emitted exactly once even if a second method ever carries the trigger
  attribute (avoids a CS8785 duplicate-hint-name build failure).
- Group ExcludedNames with per-group rationale (IAssertionSource members /
  Assertion<T> infrastructure / System.Object) so a future maintainer knows
  where a new entry belongs.

Generator-internal only; generated output and public API are unchanged.

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This is a well-structured solution to the CS0411 ambiguity bug. The approach of using a Roslyn incremental generator to replace hand-written fan-out is clearly the right architectural direction — it eliminates 3 separate copy-paste sites and makes new collection-shape assertion methods automatically available on all drill-in targets.

Correctness

Upcast + PendingPreWork transfer is correct. The Upcast helper correctly handles the two-step context flow: when .Value is accessed, Context.Map<TValue>() consumes the PendingLink (the ContainsKey assertion) and stores it as PendingPreWork on the new value context. Later, when Upcast calls context.Map(upcast) internally, it doesn't re-consume a PendingLink (already gone), but the helper manually reads context.PendingPreWork and threads it into mapped.PendingPreWork. This correctly ensures the ContainsKey check fires first regardless of which collection-shape extension is used. The test Dictionary_ContainsKey_And_Value_Collection_Fails_When_Key_Missing covers this path.

Set SeedKind.FromContext vs Ctor distinction is justified. SetAssertion, HashSetAssertion, and ReadOnlySetAssertion have private protected context constructors (not internal), so the generator can't emit new SetAssertion<T>(ctx) from the generated extension file. The FromContext static factory methods added in this PR bridge that gap cleanly without widening constructor visibility.

Emitter C constructs sources with new SourceClosed(item, expression) — this is safe. For set shapes in Emitter C, new SetAssertion<TInner>(item, expression) uses the public SetAssertion(ISet<TItem>? value, string expression) ctor which is accessible. This is consistent with how the hand-written code worked before.

Design Observations

Three-Emitter architecture is sensible but slightly surprising. Emitters B and C are triggered by attributes on methods ([GenerateCollectionShapeSatisfiesOverloads], [GenerateCollectionShapeCountOverloads]) and use a static precomputed ItemShapes table rather than symbol reflection. This means they never have per-compilation data — they'll produce identical output on every compilation where the trigger attribute is present. The Collect() trick to deduplicate the hint name is correct but slightly unusual. Consider a brief inline comment (beyond what's already there) explaining why the attribute-on-a-method trigger pattern was chosen over a simpler assembly-level attribute, since it's not immediately obvious.

GenerateCollectionShapeCountOverloadsAttribute and GenerateCollectionShapeSatisfiesOverloadsAttribute are public. These two attributes appear in the PublicAPI snapshots and are placed on interface/private members, so end users cannot usefully apply them. They're purely internal wiring. Consider making them internal sealed to avoid cluttering the public API surface. GenerateCollectionShapeAssertionsAttribute is correctly public since it's documented as reusable.

The hardcoded Rows table is the right trade-off, but the maintenance coupling is worth documenting. Rows is used in three places: BuildWrapperModel (Emitter A, via symbol reflection), BuildItemShapes (Emitter B/C, via string formatting). If a new collection shape is added to TUnit, a developer must update Rows — which is a single place, so the coupling is minimal. However, Emitters B and C additionally embed constructor call syntax (new SourceClosed(item, ...)) which assumes each arity-1 shape has a public (TCollection, string) constructor. This invariant isn't enforced anywhere. A comment alongside Rows documenting this assumption (or a validator in BuildItemShapes) would make future additions safer.

int.Parse in BuildItemShapes is reliable but fragile. The arity is parsed from the metadata name substring after the backtick (\11). Since Rowsis a controlled static list this won't fail in practice, but a brief comment noting the dependency (or replacing withrow.SourceMetadataName.EndsWith("``1")` pattern matching) would guard against copy-paste errors when someone adds a new row.

CancellationToken is only checked per-row in BuildWrapperModel, not inside CollectMethods. For codebases where a single assertion source has many public methods, the inner foreach in CollectMethods could be slow without cancellation checks. Adding ct.ThrowIfCancellationRequested() inside CollectMethods would make the generator more IDE-responsive.

Minor

  • The context.PendingPreWork after Map is not cleared in source.Context — this is fine because Assertion.ExecuteCoreAsync clears it on first run and DictionaryValueSource is not expected to be stored and re-used.
  • The CollectionShapeAssertionSource<T> test data has Context { get; } = null!; which would NPE at runtime, but it's never executed — it's only compiled for the snapshot test. This is correct and common in generator test data.
  • The ExcludedNames set correctly covers all public methods of ValueAssertion<T> (the base of DictionaryValueSource) so no double-forwarding occurs.

Summary

The approach is architecturally sound, the correctness is well-tested, and the PR description is exceptionally thorough. The two points worth addressing before merge are:

  1. Make GenerateCollectionShapeCountOverloadsAttribute and GenerateCollectionShapeSatisfiesOverloadsAttribute internal to avoid unnecessary public API surface.
  2. Add a comment alongside Rows documenting the (TCollection, string) constructor assumption for Emitters B and C.

Everything else is either already documented or minor style.

The three GenerateCollectionShape* trigger attributes are internal generator
plumbing, not a public extensibility point, so mark them internal — removing
them from the public API surface.

They are applied only within TUnit.Assertions itself. The generator matches
triggers by metadata name, so the generator snapshot test's TestData declares a
same-named local stand-in attribute rather than depending on the internal one
(strong naming makes InternalsVisibleTo to the unsigned test project impractical
— the same wall TUnit.Mocks hit).

PublicAPI snapshots updated: removal of the three attribute types only.

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review — PR #6218 (Follow-up: Issues Resolved)

This is a follow-up to the three prior reviews posted 2026-06-10. All critical and high-priority issues have been addressed in the current code.


Issues resolved since last review

✅ Issue #1 — Emitter B/C trigger multiplicity
Both satisfiesTrigger and countTrigger now use .Collect() with a triggers.Length > 0 guard:

context.RegisterSourceOutput(satisfiesTrigger, static (spc, triggers) =>
{
    if (triggers.Length > 0) EmitSatisfiesOverloads(spc);
});

A duplicate [GenerateCollectionShape*] attribute on a second method will no longer silently cause a CS8785 duplicate hint name at build time.

✅ Issue #2Generate*Attribute types now internal sealed
All three attributes (GenerateCollectionShapeAssertionsAttribute, GenerateCollectionShapeSatisfiesOverloadsAttribute, GenerateCollectionShapeCountOverloadsAttribute) are internal sealed. The PublicAPI snapshots no longer include them, and the API surface is smaller and cleaner.

✅ Issue #3ExcludedNames now has grouped rationale comments
Each exclusion group is now explained: re-forwarding-would-be-ambiguous, lifecycle/infrastructure, and System.Object inherited members. A future maintainer adding a new assertion method can now decide whether to include or exclude it with confidence.


Remaining minor item

Issue #4Upcast helper still emitted unconditionally (minor)

In EmitWrapperAssertions (line 438 of the generator), the private Upcast<TFrom, TTo> helper (~15 lines) is always emitted at the top of every generated file, even when no SeedKind.UpcastCtor-seeded shape produces any methods. Only two of the eleven Rows entries use UpcastCtor (List<T> and Dictionary<K,V>). For a drill-in source whose model.Shapes produce no upcast-seeded methods, the helper is dead code in the output file.

The fix is adding a bool HasUpcastShapes field to WrapperModel:

private sealed record WrapperModel(
    string WrapperName,
    string WrapperOpenType,
    ImmutableEquatableArray<ShapeModel> Shapes,
    bool HasUpcastShapes);  // <-- new

Set it in BuildWrapperModel when any UpcastCtor row produced at least one method, and gate the emission in EmitWrapperAssertions:

if (model.HasUpcastShapes)
{
    sb.AppendLine("    private static global::TUnit.Assertions.Core.AssertionContext<TTo> Upcast...");
    ...
}

This is purely a cleanliness concern — the generated code is functionally correct as-is and the compiler will warn on unused private members in consuming code anyway. It does not block merge.


Summary

The three blocking/high-priority issues from prior reviews are fully resolved. The architecture is sound, the incremental generator model is correctly equatable with no ISymbol stored across the boundary, the API surface is now clean, and test coverage is thorough.

Verdict: approve-ready. Issue #4 is a nice-to-have that can be addressed in a follow-up if desired.

…nerator

Addresses static-analysis nits on the new generator (matches the repo's
always-brace convention; no brace-less single-line ifs elsewhere in the
generators):
- Add braces to all single-line if statements.
- Derive shape arity from the metadata-name digit instead of int.Parse
  (no FormatException path, no culture dependency).

Generator-internal only; generated output is unchanged.

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review — Follow-up (Round 6)

Previous reviews flagged four issues; three were resolved in commits 2 and 3 (emit-once guard, internal sealed attributes, ExcludedNames rationale comments). This round verifies the remaining open item and checks the latest styling commit.

Issue #4Upcast helper always emitted (still open, still minor)

The helper is emitted unconditionally at the top of EmitWrapperAssertions before any shape is visited:

// CollectionShapeAssertionGenerator.cs — EmitWrapperAssertions
sb.AppendLine("    private static global::TUnit.Assertions.Core.AssertionContext<TTo> Upcast<TFrom, TTo>(");
// ... always appended regardless of model.Shapes contents

Because the current Rows table always includes UpcastCtor entries (List<T> and Dictionary<K,V>), in practice the helper is never dead code today. The risk is if a future caller uses [GenerateCollectionShapeAssertions] on a source that happens not to map any upcast shapes — they'd get an unused private method in the generated file. This is a minor aesthetic issue (and won't cause a compile error in C#), not a correctness concern. Can be addressed in a follow-up if desired.

A simple guard would be:

bool hasUpcastShapes = model.Shapes.Any(s => s.Methods.Any(/* seed was UpcastCtor */));
// or, since ShapeModel doesn't carry that flag, just:
bool hasUpcastShapes = model.Shapes
    .SelectMany(s => s.Methods)
    .Any(m => m.Body.Contains("Upcast<"));
if (hasUpcastShapes) { /* emit Upcast helper */ }

Latest commit — styling pass looks clean

The braces-normalization and arity adjustments in the final commit are purely mechanical and correct. No new issues introduced.

Ctor assumption

The SeedKind.Ctor branch emits new {sourceClosed}(source.Context) — silently assuming every assertion source has a single-arg (AssertionContext<T>) constructor. The Rows table comment describes what each row is, but not why the ctor is assumed to accept a single context argument. Adding a one-liner like // All Ctor seeds must have a public .ctor(AssertionContext<T>) near the SeedKind.Ctor case would make this contract explicit for future maintainers. Non-blocking.


Summary

All previously blocking issues (Issues 1–3) are resolved. Issue #4 (unconditional Upcast emission) and the undocumented ctor assumption are both non-blocking and can be addressed in a follow-up. The core logic — Upcast+PendingPreWork transfer, reflection-driven method surface, per-shape #if guards, and the Collect() deduplication for Emitters B/C — is correct. The PR is approve-ready.

…work helper

Design cleanup for the collection-shape codegen (no public API or behaviour change;
PublicAPI snapshots unchanged):

- Split the single multi-purpose generator into two single-purpose ones sharing a
  named registry:
  - CollectionShapeRegistry — the one shape -> source -> seed table + emit helpers
    (single source of truth; documents the per-SeedKind ctor/FromContext contract).
  - CollectionShapeAssertionGenerator — reflection-driven full wrapper surface (Emitter A).
  - CollectionShapeOverloadGenerator — the fixed per-shape Satisfies/Count templates (B/C).

- Move the pre-work-preserving identity upcast out of the generated output into a real
  internal AssertionContext.MapPreservingPreWork<TNew> helper. Generated concrete-shape
  seeds now call it instead of each file emitting a ~15-line Upcast helper, so the output
  is smaller and the logic is real, testable source. This also removes the need to
  conditionally emit that helper.

Generator-A snapshots updated (helper removed, shorter seeds); behaviour verified by the
existing value/#5707/Satisfies tests.
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.

[Feature]: Add more Dictionary assertions

1 participant