Repository navigation
Epic: 11.0.0 #147
Description
Goal
Open the .NET 11 line: net11.0, EF Core 11, Npgsql 11, PostgreSQL 16+. It ships as 11.0.0-preview.N from main once v10.0.0 is tagged (one preview per .NET 11 RC), and as 11.0.0 after .NET 11 GA. There is no preview branch (#280).
Decision (2026-10-18): two parallel lines, one per platform major, as EntglDb/BLite and EFCore.ComplexIndexes do. 10.x is the LTS line on .NET 10 (supported to 2028-11). 11.x is where the surface changes: the five range variants become C# 15 closed hierarchies or union types, which is the one change that justifies a separate major rather than a net11.0 TFM in the same package.
In scope and out of scope
In scope: the retarget, the compile probe and the rewrite of the variants, the native HasWithoutOverlaps/HasPeriod documentation, the two-line policy and release wiring, and the CI matrix with PostgreSQL floor legs.
Added 2026-10-19 (maintainer): #275, the per-domain range set types (Int32RangeSet, DateRangeSet, …) that replace RangeSet<TRange, T>. With #149 non-breaking, this is the breaking surface change the 11 line carries; 10.0.0 ships with "nothing removed or renamed" and the set family differs between the lines from then on.
Out of scope: the 14 silent fixes (#58) — they land on main first and are merged forward. The 10.0.0 features (#58: scheduling and parity themes, the Float32/Float64 family #153) — they land on main and are merged forward like the fixes. Later additions ship as 10.x minors within the window #178 sets. ltree — it belongs in the sibling hierarchies package, not here (research 2026-10-18: Npgsql's LTree is translation-only and its maintainers declined client-side semantics three times; no .NET package fills the gap; the domain is label paths, not intervals).
Sequence
- At the
v10.0.0tag: cutrelease/10.x, then retargetmain(11.0.0-preview.1: retarget main to net11.0 / EF Core 11 / Npgsql 11 after the v10.0.0 tag, with the four behaviour changes as named tests #103). Fixes for both go tomainfirst and are cherry-picked with-x. 11.0.0-preview.1= pure retarget, identical public API.11.0.0-preview.2= the unions markedclosed(Mark the range unions closed (C# 15) for compile-time exhaustiveness, on both lines #149;closednotunion, decided after the Compile probe: C# 15 closed hierarchies and union types for the five variants, on net10.0 and net11.0 #148 probe). Not platform-bound: it also ships on 10.x as a minor after .NET 11 GA, inside the additions window (10.x takes additions for six months after v11.0.0, not only until it #178), so the two lines are driven by EF Core 11 / Npgsql 11, not by the language feature.11.0.0-preview.3= the per-domain range set types (Per-domain range set types (Int32RangeSet, DateRangeSet, …) replace RangeSet<TRange, T> #275) replacingRangeSet<TRange, T>;docs/migration.mdv10.x gets the rename.
Done when
- every sub-issue is closed
11.0.0-preview.Nhas been published for each .NET 11 RC that was current while the line was open- the root changelog opens 11.0.0 with the platform floor, the variants migration and the "what can break you" list, and
docs/migration.mdhas a v10.x section v11.0.0is tagged onmainand the four packages are on NuGetrelease/10.xexists, CONTRIBUTING and SECURITY.md name both linesrelease/10.xcarries the same branch protection asmain(GitHub settings, done by hand; CONTRIBUTING promises it)
Activity
CaffeinatedCoder commentedon Oct 18, 2026
Two scope notes from 2026-10-18: (1) 10.x takes additions for six months after
v11.0.0(#178, PR #180), so #149's 10.x half fits. (2) The 10.0.0 epic (#58) now carries the scheduling and parity themes and the Float32/Float64 family (#153), so the 'Additions such as DoubleRange ship in a 10.x minor' line in the out-of-scope section is out of date: they ship in 10.0.0 and are merged forward like the fixes.24:00:00parses as00:00:00andT24:00:00as the next day #286RangeSet.ContainsintoQueryable.Containsover the range type and throwsArgumentException#287jsonb_set_lax: the value set refusal names the column instead of the path, and a reason that no longer applies #289text:operator does not exist: text && int4range#290ToStringtraps (SIGTRAP) in the defaultIFormattable.ToStringofIValueSetFactory<TSet, T>#291_ordcolumn to the range type (NULL::int4range AS _ord) #319RangeSetContains.Equivalenthands any other one-argumentContainsonRangeSetto the value overload #320claims.jsonnamesComplexIndexesCrossTestsas holding 11 claims, but the test is compiled out on net11 #321EFCore.ComplexIndexes.PostgreSQLcannot be installed beside the net11 packages yet #322