Repository navigation
Epic: 10.1.0 #296
Description
Goal
10.1.0 is the first release on the 10.x LTS line after 10.0.0, shipped from release/10.x. It is a minor, not a patch, because it carries one silent fix (#300) and the policy ships those only in a minor that opens with ### Changed answers (CONTRIBUTING.md, "A fix that changes an answer"; decided 2026-10-19). It fixes what consumers of the released 10.0.0 meet on the EF Core 10 patches and the .NET 11 toolchain they actually get — versions above the floor this repository's CI pins — and makes the line's CI see those versions, so the next upstream servicing change is found by CI rather than by chance.
In scope
Fixes, in the order they reach consumers. Each loud one is on main in PR #292, which is a single commit holding the whole .NET 11 retarget, so each port is a hand-extracted commit naming the PR — or #292 is split before it merges so cherry-pick -x works.
- 10.x:
Any/Countover an empty captured list of ranges or value sets fails with42883: operator does not exist: text && int4rangeon EF Core 10.0.2 and later (dotnet/efcore#37216) #302Any/Countover an empty captured list of ranges or value sets fails on the server (42883: operator does not exist: text && int4range) on EF Core 10.0.2 and later (EF Core 10: InvalidOperationException doing primitive list join when list is empty dotnet/efcore#37216). Live today: Npgsql EF 10.0.1–10.0.3 require EF Core ≥ 10.0.4. Measured 2026-10-19 on EF Core 10.0.13 / Npgsql EF 10.0.3 against the 10.0.0 code: 4 translation and 5 integration tests fail;AppContext.SetSwitch("Microsoft.EntityFrameworkCore.Issue37216", true)is the measured stopgap. The port keeps the 10.0.0 path for the floor. - 10.x:
RangeSet.ContainsthrowsArgumentExceptionon the EF Core 10 patch that carries dotnet/efcore#37081 #288RangeSet.ContainsthrowsArgumentExceptionon the EF Core 10 patch that carries [release/10.0] Fix Contains handling for read-only collections dotnet/efcore#39114 — milestone 10.0.15, so pending; stopgapMicrosoft.EntityFrameworkCore.Issue37081. Reported upstream as CollectionContainsnormalization rewrites anyContainsoverload and guesses the element type from the first type argument dotnet/efcore#39329. - 10.x: Native AOT published with the .NET 11 SDK traps (SIGTRAP) on the first value set
ToString(dotnet/runtime#136073) #299 Native AOT published with the .NET 11 SDK traps (SIGTRAP) on the first value setToString(NativeAOT (.NET 11 RC2, osx-arm64): SIGTRAP in the instantiating stub of a default interface IFormattable.ToString on a shared-generic interface dotnet/runtime#136073). Measured against the released 10.0.0 package; the workaround is surface-neutral. - 10.x: on Npgsql EF 10.0.3 with PostgreSQL 16 configured, the JSON-setter refusal names the column instead of the path, and gives a reason that no longer holds (
jsonb_set_lax) #303 on Npgsql EF 10.0.3 withSetPostgresVersion(16, 0)or higher, the JSON-setter refusal names the column instead of the property path and gives a reasonjsonb_set_laxmakes false (Fix JSON null partial updates npgsql/efcore.pg#3855). Still refused in every case; cosmetic, severity/low. Measured: 6 of 7ExecuteUpdateGuardTestsfail with the version configured and all pass with it unset (Npgsql EF 10 assumes 14), which is why the suites did not see it. - 10.x on the .NET 11 runtime reads an hour of 24:
{24:00:00}parses as{00:00:00}andT24:00:00as the next day #300 the released 10.0.0 on the .NET 11 runtime reads an hour of 24 as midnight:{24:00:00}parses as{00:00:00}andT24:00:00as the next day, where .NET 10 throws.silent, severity/medium, the reason this is a minor. Its PR adds the### Changed answersrow at the top of the## [10.1.0]section and the## Changed answers in 10.1.0section ofdocs/migration.md;pr-hygiene.shrefuses asilentPR without the row and reads the version from the branch, so it comes after Release 10.1.0: open the version on release/10.x, date the changelogs and tag v10.1.0 #301 step 1.
CI
- 10.x CI: run the EF Core suites on the newest EF Core / Npgsql 10 patch and the daily servicing builds, not only the floor #297 the EF suites on
release/10.xalso run on the newest EF Core / Npgsql 10 patch (PR test: run the EF suites on the newest EF Core / Npgsql EF 10 patch as well as the floor #311). The run against the daily servicing builds moved to 10.x CI: run the EF suites weekly against EF Core's staged 10.0 servicing build (darc-pub feed), scheduled from main #312 in the backlog on 2026-10-19: thedotnet10feed holds no servicing build, andschedulefires only frommain. The one-off run that found 10.x:Any/Countover an empty captured list of ranges or value sets fails with42883: operator does not exist: text && int4rangeon EF Core 10.0.2 and later (dotnet/efcore#37216) #302 is the mechanism to start from (described on the issue); a .NET 11 runtime roll-forward leg would catch 10.x on the .NET 11 runtime reads an hour of 24:{24:00:00}parses as{00:00:00}andT24:00:00as the next day #300.
Release
- Release 10.1.0: open the version on release/10.x, date the changelogs and tag v10.1.0 #301 open 10.1.0 on
release/10.x(version, ApiCompat baseline, SECURITY.md row, changelog sections), then date the changelogs and tagv10.1.0.
Sequence
- Release 10.1.0: open the version on release/10.x, date the changelogs and tag v10.1.0 #301 step 1 (open the version) merges first, so every fix PR adds its line under
## [10.1.0]and the hygiene check sees a minor. - build: retarget main to .NET 11 for 11.0.0-preview.1 #292 merges into
main— every fix exists there first (CONTRIBUTING.md) — then one PR per fix againstrelease/10.x: 10.x:Any/Countover an empty captured list of ranges or value sets fails with42883: operator does not exist: text && int4rangeon EF Core 10.0.2 and later (dotnet/efcore#37216) #302, 10.x:RangeSet.ContainsthrowsArgumentExceptionon the EF Core 10 patch that carries dotnet/efcore#37081 #288, 10.x: Native AOT published with the .NET 11 SDK traps (SIGTRAP) on the first value setToString(dotnet/runtime#136073) #299, 10.x: on Npgsql EF 10.0.3 with PostgreSQL 16 configured, the JSON-setter refusal names the column instead of the path, and gives a reason that no longer holds (jsonb_set_lax) #303, 10.x on the .NET 11 runtime reads an hour of 24:{24:00:00}parses as{00:00:00}andT24:00:00as the next day #300. Each proves itself by reverting: its tests fail on the newest patch (for 10.x: Native AOT published with the .NET 11 SDK traps (SIGTRAP) on the first value setToString(dotnet/runtime#136073) #299 under the .NET 11 SDK, for 10.x on the .NET 11 runtime reads an hour of 24:{24:00:00}parses as{00:00:00}andT24:00:00as the next day #300 on the .NET 11 runtime), the floor stays green. - 10.x CI: run the EF Core suites on the newest EF Core / Npgsql 10 patch and the daily servicing builds, not only the floor #297 lands so the newest-patch leg guards the fixes from then on. Its done-when and 10.x:
RangeSet.ContainsthrowsArgumentExceptionon the EF Core 10 patch that carries dotnet/efcore#37081 #288's are measurable today; the re-check against EF Core 10.0.15 is a comment when that patch ships, never a gate. - Release 10.1.0: open the version on release/10.x, date the changelogs and tag v10.1.0 #301 steps 3–4: date, tag, close the 10.x-only issues by hand, add the 10.1.0 section to
main's changelogs.
Not in scope
- Registry of EF Core servicing off switches (IssueNNNN) between the floor and the newest 10.0 patch, each with a verdict #298 (the registry of EF Core off switches with a verdict each): classifies upstream changes without changing the packages, so it lives under the oracle theme (Epic: Systematic bug finding with generated oracles #36). Its two verdicts so far point here (
Issue37216→ 10.x:Any/Countover an empty captured list of ranges or value sets fails with42883: operator does not exist: text && int4rangeon EF Core 10.0.2 and later (dotnet/efcore#37216) #302,Issue37081→ 10.x:RangeSet.ContainsthrowsArgumentExceptionon the EF Core 10 patch that carries dotnet/efcore#37081 #288). - Native AOT compiled models (dbcontext optimize --nativeaot) fail: plugin type mappings have no public static Default #209 (Native AOT compiled models): needs a public
Defaulton the mappings, an addition with its own design; a later 10.x minor. - Inventory where public types meet framework name/interface heuristics, and sweep every type × heuristic pair #293, Every EF Core 11 behaviour-change test records whether the upstream change was backported to 10.0 #294, Sweep the EF translators for name-only dispatch and default operand classification #295: the oracle theme (Epic: Systematic bug finding with generated oracles #36), not bound to a release.
- Additions beyond the fixes (a 10.x minor may carry them inside the window CONTRIBUTING.md sets, but none is planned here), and anything
breaking.
Release
Tag v10.1.0 on release/10.x. The root changelog section opens with ### Changed answers (one row, #300) before the fixes. Issues fixed only there are closed by hand (Closes #n acts only on main).
Activity
RangeSet.ContainsthrowsArgumentExceptionon the EF Core 10 patch that carries dotnet/efcore#37081 #288ToString(dotnet/runtime#136073) #299Any/Countover an empty captured list of ranges or value sets fails with42883: operator does not exist: text && int4rangeon EF Core 10.0.2 and later (dotnet/efcore#37216) #302jsonb_set_lax) #303[-]Epic: 10.0.1[/-][+]Epic: 10.1.0[/+]{24:00:00}parses as{00:00:00}andT24:00:00as the next day #300CaffeinatedCoder commentedon Oct 19, 2026
Released: 10.1.0 (2026-10-19)
v10.1.0is tagged onrelease/10.xat 2044bae (#329). Release run 39272654666 published all four packages to nuget.org, and the GitHub release is marked Latest.maincarries the 10.1.0 sections and now validates against the 10.1.0 baseline (#330, 1364a27).Shipped
DateTimeorDateTimeOffsetwith an hour of 24 now throws on the .NET 11 runtime too (10.x on the .NET 11 runtime reads an hour of 24:{24:00:00}parses as{00:00:00}andT24:00:00as the next day #300,silent).ToStringon value sets under the .NET 11 SDK (10.x: Native AOT published with the .NET 11 SDK traps (SIGTRAP) on the first value setToString(dotnet/runtime#136073) #299, 10.x: the default IFormattable.ToString of IValueSetFactory still compiles to a trap under Native AOT with the .NET 11 SDK; only the per-family overrides from #299 keep it out (dotnet/runtime#136073) #315).Any/Countover an empty captured list of ranges or value sets fails with42883: operator does not exist: text && int4rangeon EF Core 10.0.2 and later (dotnet/efcore#37216) #302).RangeSet.Containson the EF Core 10 patch that carries IReadOnlySet<T>.Contains not translated into parameterized query dotnet/efcore#37081, planned as 10.0.15 (10.x:RangeSet.ContainsthrowsArgumentExceptionon the EF Core 10 patch that carries dotnet/efcore#37081 #288).jsonb_set_laxandNULLIFrefusals (10.x: on Npgsql EF 10.0.3 with PostgreSQL 16 configured, the JSON-setter refusal names the column instead of the path, and gives a reason that no longer holds (jsonb_set_lax) #303).Verified before the tag: the whole candidate passed on the .NET 11.0.0-rc.2 runtime by roll-forward, on the floor and on EF Core 10.0.13 / Npgsql EF 10.0.3. With the #300 fix stripped, 7 grammar rows fail there (#324 has the table).
Left outside this epic
_ordcolumn to the range type on EF Core 10.0.2 and later (port of #319) #325 and 10.x:RangeSetContains.Equivalenthands any other one-argumentContainsto the value overload (port of #320) #326 (ports of main: the empty-root rewrite casts EF Core's_ordcolumn to the range type (NULL::int4range AS _ord) #319 and main:RangeSetContains.Equivalenthands any other one-argumentContainsonRangeSetto the value overload #320), Type the plugin's NULL constants in its type mappings instead of matching EF Core's empty-root shape #327 (typed NULL in the type mappings), Open 10.2.0 on release/10.x #331 (open the next 10.x version, which also movesrelease/10.x's SECURITY.md row)._ordcolumn to the range type (NULL::int4range AS _ord) #319–main: leftovers of the .NET 11 retarget: README runtime line, preview SDK pin, a stale remark, the smoke script's second footer #323.RangeSet.ContainsthrowsArgumentExceptionon the EF Core 10 patch that carries dotnet/efcore#37081 #288 against it in a comment; it is not a gate.