Skip to content

Epic: 5.5.0 — EFCore.ComplexIndexes stays the EF Core 10 package #36

Closed
58 of 58 issues completed
Closed

Description

@CaffeinatedCoder

Goal

Decided 2026-10-19; this replaces the 10.0.0 rename the epic held until then.

The existing ids stay on EF Core 10 / .NET 10 (LTS, supported to 2028-11). They are not renamed or renumbered. The rename happens at the EF Core 11 boundary instead, as a new package, CodoMetis.EFCore.SchemaKit, starting at 11.0.0 (#37).

That way a consumer swaps packages once, in the same upgrade in which they move to EF Core 11 and its native complex-type indexes. The old plan had them rename on EF Core 10 and rewrite again on 11.

5.5.0 is the last minor with a change of its own: it makes the line refuse EF Core 11. After it, release/5.x takes fixes only. The features ROADMAP.md planned for 5.5.0 (4.1 descriptor differ, 4.2 delete constraints, 4.3) move to SchemaKit.

In scope

Out of scope

Done when

Activity

  1. added this to the 10.0.0 milestone on Oct 18, 2026
  2. added
    epicTracks a release or a theme; its sub-issues are the work
    area/releaseVersioning, changelogs, release wiring
    on Oct 18, 2026
  3. changed the title [-]Epic: 10.0.0[/-] [+]Epic: 5.5.0 — EFCore.ComplexIndexes stays the EF Core 10 package[/+] on Oct 19, 2026
  4. CaffeinatedCoder commented on Oct 19, 2026

    @CaffeinatedCoder
    OwnerAuthor

    After #62 merges: release and cut steps for the maintainer

    #62 (closes #55) carries the guard and opens 5.5.0. The steps below are the maintainer's: the tag, the nuget approval and the repository settings. I read the settings on 2026-10-19.

    1. Tag and publish

    git switch main && git pull --ff-only
    git tag v5.5.0
    git push origin v5.5.0

    release.yml runs verify (the full suite, then pack). Approve the nuget environment and publish pushes the three packages. release then creates the GitHub release from ## 5.5.0 and attaches the SBOMs. The environment's deployment policy already allows v* tags, so later v5.5.x tags from release/5.x need no change.

    2. Cut release/5.x at the tag

    git push origin v5.5.0^{commit}:refs/heads/release/5.x

    dotnet.yml and pr-hygiene.yml already run on release/**.

    3. Copy main's branch protection to release/5.x

    As read from main: strict status checks Test (ubuntu-latest), Pack, Integration (PostgreSQL 18) and Consumer smoke test; PR required with 0 approvals; admins enforced; no force pushes, no deletions.

    gh api -X PUT repos/CaffeinatedCoder/EFCore.ComplexIndexes/branches/release/5.x/protection --input - <<'JSON'
    {
      "required_status_checks": { "strict": true, "contexts": ["Test (ubuntu-latest)", "Pack", "Integration (PostgreSQL 18)", "Consumer smoke test"] },
      "enforce_admins": true,
      "required_pull_request_reviews": { "required_approving_review_count": 0, "dismiss_stale_reviews": false, "require_code_owner_reviews": false },
      "restrictions": null,
      "allow_force_pushes": false,
      "allow_deletions": false
    }
    JSON
    gh api repos/CaffeinatedCoder/EFCore.ComplexIndexes/branches/release/5.x/protection -q '.required_status_checks.contexts'

    Approvals stay at 0, as on main. The tag ruleset "Release tags are immutable" already covers every v* tag.

    4. Open 5.5.1 on release/5.x, in the first PR into it

    Move Version to 5.5.1 and PackageValidationBaselineVersion to 5.5.0. In SECURITY.md, change the table to 5.5.x ✅ / < 5.5 ❌. SecurityPolicyConsistencyTests holds that row to the baseline, so it moves in the same commit.

    5. main becomes the SchemaKit line (#38)

    From here main takes no more 5.x work. #38 lists what changes there: the ids, net11.0, the version, docs and publishing. Two things from #62 that #38 has to handle on main:

    • EfCoreVersionGuard refuses every EF Core major except 10. On main it has to go, or move to the SchemaKit major.
    • The 5.x README sentence and the bug form's 10.x-only "EF Core version" field point at SchemaKit. On main they belong to SchemaKit's own README and form.

    CONTRIBUTING.md's "Branches and releases" section and AGENTS.md still describe the old 10.0.0 rename and the net11 branch. #38 lists CONTRIBUTING's branch section; AGENTS.md's "Branches" bullet needs the same rewrite.

  5. 49 remaining items

  6. CaffeinatedCoder commented on Oct 20, 2026

    @CaffeinatedCoder
    OwnerAuthor

    Pre-tag gate, 5.5.0 (v5.4.1..934ec55)

    Verdict: hold the tag until #150 and #151 are settled, and #141, #142, #144 and #145 (with #143) have landed. Their PRs #146–#149 are open.

    Hold the tag

    Before the tag, but not blocking it: docs #152, #153, #154; tests #155, #156, #157. The tests are the three seeded defects the 569-test unit suite did not catch.

    Clean

    • Upgrade from 5.4.1: real v5.4.1 snapshots for PostgreSQL, SQL Server and SQLite, compiled and diffed. The first diff matched docs/upgrading.md exactly, and the second was empty. On PostgreSQL 18, the 5.4.1 create script, then Up → Down → Up, all applied, and the derived TPC table enforced its index and constraint (23505, 23P01).
    • Typed filters against C# evaluation: 52 + 27 lambdas, applied on PostgreSQL 18, with identical rows. The typed expression and JSON member indexes were picked by the planner for EF's own query.
    • EF Core 11 RC guard: all 12 entry points throw. 10.0.x patches pass.
    • SQLite wrapper (SQLite: re-create complex indexes after a table rebuild instead of refusing the migration #95): the refusal, the wired re-create and the unwired apply all behave as documented.
    • TPC × name checks, the identifier length, the SQL Server clustered slot, case-insensitive names, the relation namespace.
    • CI gate, release.yml → dotnet.yml, the newest-patch float (deps.json at 10.0.13/10.0.3), the release-notes rendering.
    • Seeded defects: 46, of which 43 were caught. Baseline: 569 unit tests and 25 PostgreSQL 16/18 integration tests, all passing.

    Not covered: SQL Server live apply (amd64 image), Windows MSBuild .targets.

    Doubts, not filed

    • Wired SQLite rebuilds are not atomic, because of EF's PRAGMA foreign_keys. EF's own indexes have the same limitation.
    • The nightly's dispatched release/5.x run shares a concurrency group with pushes, so a cancelled run might open a spurious "Nightly CI failed" issue.
    • Successor package naming: the satellite changelogs say CodoMetis.EFCore.SchemaKit.SqlServer, the guard message says CodoMetis.EFCore.SchemaKit.
  7. CaffeinatedCoder commented on Oct 20, 2026

    @CaffeinatedCoder
    OwnerAuthor

    Pre-tag sweep, 5.5.0 (934ec55..eff80b4)

    I ran five lenses over the fixes since the gate (#146–#149, #162), #158, and the docs and tests (#159, #160, #165, #166). I reproduced every issue below on eff80b4 myself.

    Verdict: hold the tag for #167 and #170. Settle #168 and #169 before the tag too, because the answer goes into the published packages.

    Holds the tag

    Decide before the tag

    Before the tag, not blocking

    Clean

    Not covered: SQL Server live apply (none of the findings needed it, so nothing was dispatched), Windows MSBuild, an EF Core 11 refusal from a packed consumer, and the README's C# samples compiled verbatim.

    Doubts, not filed

    • Shortened copy names can move from ~ to ~1 when a sibling table sorts first. That rebuilds a copy through drop/create, which is correct but unneeded.
    • On PostgreSQL 18, an explicit constraint name equal to a generated …_not_null constraint name would pass every check. Not reproduced.
  8. CaffeinatedCoder commented on Oct 20, 2026

    @CaffeinatedCoder
    OwnerAuthor

    5.5.0 released (2026-10-20)

    Done-when, checked:

    • 5.5.0 is on NuGet.
    • release/5.x is cut at v5.5.0 and protected like main.

    Next on this line: 5.5.1 takes fixes only (#137, #161). main becomes the SchemaKit line (#38).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/releaseVersioning, changelogs, release wiringepicTracks a release or a theme; its sub-issues are the work

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions