Skip to content

Commit 14ef1e3

Browse files
release(v2.1): prepare 2.1.0-RC.3 - green suites, every arm re-measured, metadata and docs aligned
Verification (recorded in docs/2.1.0-RC.3_WHAT_CHANGED.md and plan section 8d): - 16/16 test suites green, run unfiltered through the MTP hosts in Release on net11.0: 2,897 tests, 0 failed, 0 errors, 16 skipped (core 1,916; VectorSearch 248; Provider.Sync 135; EF Core 116; Analytics 81; EventSourcing 72; Graph.Advanced 65; CQRS 64; Search 58; Identity 53; Functional 38; Functional.Linq2DB 24; Projections 15; HybridSearch 6; Functional.Dapper 3; Functional.EntityFrameworkCore 3). - Write-path regression gate PASSED (nothing slower than baseline x 1.50); the three "watch" entries sit inside the run's own 2.08x rep spread. - Product-default regime, no SHARPCOREDB_* switch set (banner-confirmed). Fair PK: fixed-width UPDATE 324,560 and DELETE 736,046 against SQLite 258,213 / 342,452 - 0.8x and 0.5x, i.e. ahead; INSERT 108,661 against 156,946 - 1.4x behind, unchanged. Pure default: 96,266 / 55,533 / 79,337 / 208,722, so UPDATE 3.6x behind (the documented NoEncryptMode mechanism). PageBased fixed-width: INSERT 175,562 at parity, UPDATE 58,464 - 4.9x behind, improved from 5.7x. Comparative SQL / Direct / StructRow reported separately: 85,560/67,482/63,853/107,871, 124,976/139,840/98,421/235,605, 133,023/108,602. Multi-row batched 52,742 rows/s, 18.96 us/row, 4,341-4,343 B/row, 1,840,000 B data file, 488,890 B arena - the deterministic figures match the committed default. - The machine was loaded, so the ratios are the comparable part: SQLite's own reference moved (fair-PK INSERT 202,292 on 09-16 against 156,946 here). Recorded rather than glossed. Release mechanics: - All 46 csproj files are on 2.1.0-RC.3 (a single distinct <Version>); the two IsPackable=false benchmark projects had stale 2.0.0.2 AssemblyVersion/FileVersion, now 2.1.0.0. - 17 packable projects carried the inherited v2.0.0.2 PackageReleaseNotes boilerplate - replaced with a 2.1.0-RC.3 note; Aspire.Hosting's own note bumped. - 18 package READMEs still described 2.0.0.2 as the current release - titles, "current release" lines and install commands now name 2.1.0-RC.3 (and the install commands no longer carry a "v" prefix, which a first pass introduced and this commit corrects). The core README gained a "What's New in 2.1.0-RC.3" section and a footer that no longer claims 1,700+ tests. - SharpCoreDB.Aspire.Hosting was missing from SharpCoreDB.CI.slnf, so "Manual NuGet Publish" would never have pushed it; added. publish-manual.yml Layer 3 pushed a "SharpCoreDB.Server.*" nupkg that cannot exist - replaced with the Aspire pattern. - src/SharpCoreDB.Server is IsPackable=false and is NOT on nuget.org, yet the READMEs told consumers to "dotnet add package SharpCoreDB.Server". Corrected to SharpCoreDB.Server.Core and Server.Protocol plus the executable and container-image routes (root README, Server README and its NuGet.README.md). - NUGET_PUBLISHING_GUIDE.md: RC.3 click-by-click, the packVersion input, a current line-state table, and the core-only vs full-package-set distinction. - dotnet pack on SharpCoreDB.CI.slnf produces 27 packages, all at 2.1.0-RC.3, 0 errors; the full solution builds with 0 errors. Docs: new docs/2.1.0-RC.3_WHAT_CHANGED.md (validation table, highlights, every measured arm, and the open gaps stated plainly); CHANGELOG promotes [Unreleased] to [2.1.0-RC.3] - 2026-09-17 and drops an empty duplicate heading; INDEX, PROJECT_STATUS, FEATURE_MATRIX and README updated; the performance plan's section 0 records that release mechanics are now authorised. Provenance: the four results/*.json from this run are committed, per plan item 13.
1 parent 88bc2f4 commit 14ef1e3

53 files changed

Lines changed: 811 additions & 138 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/NUGET_PUBLISHING_GUIDE.md‎

Lines changed: 59 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -61,20 +61,55 @@ order (with `--skip-duplicate`):
6161
|---|---|
6262
| `reason` | Free-text note shown in the run summary |
6363
| `versionSuffix` | Optional NuGet pre-release suffix. **Empty** → stable version from the `.csproj` files (e.g. `2.0.0.0`). **`preview.1`**, **`rc.1`**, **`beta.1`** → `2.0.0.0-preview.1` etc. |
64+
| `packVersion` | Explicit full package version (e.g. `2.1.0-RC.3`) passed as `/p:Version=…` to the whole pack. Leave empty to use the version each project declares. |
6465

65-
### Scenario B2: Publishing the 2.0.0.0 release (click-by-click)
66+
This workflow packs **`SharpCoreDB.CI.slnf`**, i.e. every packable package in the family, and pushes
67+
them in dependency layers (core → dependents → mid-level → top-level → remaining).
68+
69+
> `src/SharpCoreDB.Server` is **not** in that set: it is `IsPackable=false` (a standalone executable
70+
> shipped as the `sharpcoredb-server` binary and the `ghcr.io/mpcoredeveloper/sharpcoredb-server`
71+
> container image). Its packable libraries are `SharpCoreDB.Server.Core` and
72+
> `SharpCoreDB.Server.Protocol`, both of which *are* published.
73+
74+
### Scenario B2: Publishing the 2.1.0-RC.3 release (click-by-click)
75+
76+
1. Go to **https://github.com/MPCoreDeveloper/SharpCoreDB → Actions** (tab on top)
77+
2. In the left sidebar, select **"Manual NuGet Publish"**
78+
3. Click the blue **"Run workflow"** button (top right)
79+
4. In the dialog:
80+
- **Branch**: `release/v2.1.0.0-RC.3` (the net11.0 / C# 15 preview RC line)
81+
- **packVersion**: `2.1.0-RC.3`
82+
- **versionSuffix**: leave **empty** (an explicit `packVersion` is supplied)
83+
- **reason**: e.g. `2.1.0-RC.3 – validated RC of the net11.0 line (2,897 tests green)`
84+
5. Click **"Run workflow"**
85+
6. Open the run to watch it: the **Publish** job logs show `↗ Pushing <package>` per `.nupkg`, grouped in
86+
dependency layers (core → dependents → mid-level → top-level).
87+
7. Verify: **https://www.nuget.org/packages/SharpCoreDB/** — `2.1.0-RC.3` should appear (`2.1.0-rc.3`
88+
normalized). Other packages in the family should show the same version.
89+
90+
> The v2.1 RC line is **pre-release**: NuGet will not select `2.1.0-RC.3` unless a consumer asks for it
91+
> explicitly or ticks *Include prerelease*.
92+
93+
### Scenario B3: Publishing only the core package (quick path)
94+
95+
The branch workflow `.github/workflows/ci-net11.yml` triggers on `release/v2.1.0.0-*` and has a
96+
`workflow_dispatch` **publish** job that packs and pushes **only** `src/SharpCoreDB/SharpCoreDB.csproj`
97+
at its declared version. Use it when only the core package changed; use Scenario B2 for a full release.
98+
99+
### Scenario B4: Publishing the 2.0.0.2 release (click-by-click)
66100

67101
1. Go to **https://github.com/MPCoreDeveloper/SharpCoreDB → Actions** (tab on top)
68102
2. In the left sidebar, select **"Manual NuGet Publish"**
69103
3. Click the blue **"Run workflow"** button (top right)
70104
4. In the dialog:
71-
- **Branch**: `master` (the v2.0.0.0 trunk — SharpCoreDB v2 is now the leading line)
72-
- **versionSuffix**: leave **empty** for the stable `2.0.0.0` release
73-
- **reason**: e.g. `2.0.0.0 – performance-first V2 release`
105+
- **Branch**: `master` (the v2.0 stable trunk)
106+
- **versionSuffix**: leave **empty** for the stable `2.0.0.2` release
107+
- **packVersion**: leave **empty** (each project declares its own version)
108+
- **reason**: e.g. `2.0.0.2 – performance-first v2 release`
74109
5. Click **"Run workflow"**
75110
6. Open the run to watch it: the **Publish** job logs show `↗ Pushing <package>` per `.nupkg`, grouped in
76111
dependency layers (core → dependents → mid-level → top-level).
77-
7. Verify: **https://www.nuget.org/packages/SharpCoreDB/** — the `2.0.0.0` version should appear.
112+
7. Verify: **https://www.nuget.org/packages/SharpCoreDB/** — the `2.0.0.2` version should appear.
78113

79114
> **Requires** the `NUGET_API_KEY` repository secret (`Settings → Secrets and variables → Actions`). If it was
80115
> used for the 1.9.7 publish it is already configured.
@@ -92,17 +127,29 @@ on:
92127
93128
## Version Management
94129
95-
SharpCoreDB uses **4-part versions** (`n.n.n.n`, e.g. `2.0.0.0`). The versions come from the `<Version>` tags
96-
in `.csproj` files, but the **single source of truth for the SharpCoreDB package family is
97-
`<SharpCoreDBVersion>` in `Directory.Packages.props`** (used by all central package references).
130+
SharpCoreDB uses **4-part versions** (`n.n.n.n`, e.g. `2.0.0.0`) for its stable lines, and a
131+
**3-part version plus a prerelease label** for the pre-release lines (`2.1.0-RC.3`). The versions come
132+
from the `<Version>` tags in `.csproj` files, but the **single source of truth for the SharpCoreDB
133+
package family is `<SharpCoreDBVersion>` in `Directory.Packages.props`** (used by all central package
134+
references).
135+
136+
**Current line state (2026-09-17):**
137+
138+
| Line | Branch | Version | Latest published |
139+
|---|---|---|---|
140+
| v2.1 RC (net11.0 / C# 15 preview) | `release/v2.1.0.0-RC.3` | `2.1.0-RC.3` | `2.1.0-rc.1` (RC.3 not yet pushed) |
141+
| v2.0 stable (net10.0 / C# 14) | `master` | `2.0.0.3` | `2.0.0.3` |
142+
143+
Every one of the **46 `.csproj` files on the v2.1 RC branch** carries the same `<Version>` — the
144+
release checklist is `git grep "<Version>" -- '*.csproj'` and it must return exactly one distinct value.
98145

99146
Each packable project file carries the same version:
100147

101148
```xml
102149
<PropertyGroup>
103-
<Version>2.0.0.0</Version>
104-
<AssemblyVersion>2.0.0.0</AssemblyVersion>
105-
<FileVersion>2.0.0.0</FileVersion>
150+
<Version>2.1.0-RC.3</Version>
151+
<AssemblyVersion>2.1.0.0</AssemblyVersion>
152+
<FileVersion>2.1.0.0</FileVersion>
106153
</PropertyGroup>
107154
```
108155

@@ -238,4 +285,4 @@ For questions:
238285
---
239286

240287
**Created**: 2025-01-28
241-
**Last Updated**: 2025-01-28
288+
**Last Updated**: 2026-09-17 (v2.1.0-RC.3 release preparation)

‎.github/workflows/ci-net11.yml‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,11 @@ jobs:
7373
GITHUB_ACTIONS: "true"
7474

7575
# Manual publish to NuGet.org (only via workflow_dispatch, using the repo's
76-
# NUGET_API_KEY secret). Packs the net11.0 (C# 15 preview) core at the version pinned in the csproj.
76+
# NUGET_API_KEY secret). This packs the net11.0 (C# 15 preview) CORE package at the version pinned
77+
# in the csproj. For the full package set (all ~26 SharpCoreDB packages, in dependency order) use
78+
# the "Manual NuGet Publish" workflow (publish-manual.yml), which packs SharpCoreDB.CI.slnf.
7779
publish:
78-
name: Pack + Publish to NuGet.org
80+
name: Pack + Publish core to NuGet.org
7981
runs-on: ubuntu-latest
8082
if: github.event_name == 'workflow_dispatch'
8183
timeout-minutes: 30

‎.github/workflows/publish-manual.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ on:
1212
required: false
1313
default: ''
1414
packVersion:
15-
description: 'Explicit full package version (e.g. 2.1.0-RC.2). Leave empty to use the version each project declares.'
15+
description: 'Explicit full package version (e.g. 2.1.0-RC.3). Leave empty to use the version each project declares.'
1616
required: false
1717
default: ''
1818

@@ -133,8 +133,8 @@ jobs:
133133
"SharpCoreDB.Projections.*.nupkg"
134134
135135
push_layer "Layer 3 (top-level)" \
136-
"SharpCoreDB.Server.[0-9]*.nupkg" \
137136
"SharpCoreDB.Graph.Advanced.*.nupkg" \
137+
"SharpCoreDB.Aspire.Hosting.*.nupkg" \
138138
"SharpCoreDB.Provider.Sync.*.nupkg" \
139139
"SharpCoreDB.Provider.YesSql.*.nupkg" \
140140
"SharpCoreDB.Functional.Dapper.*.nupkg" \

‎README.md‎

Lines changed: 69 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,22 @@ Use it when you need:
2424
- Fast embedded storage with **AES-256-GCM encryption** and ACID guarantees
2525
- A secure network database via **gRPC (HTTP/2 + HTTP/3)**
2626
- Built-in **vector search**, **advanced analytics**, and **GraphRAG/graph algorithms**
27-
- A production-focused stack validated by a **1,777-test core suite** (0 failed; plus CQRS, VectorSearch, EF Core and Linq2DB suites) and **backward compatibility**
28-
29-
> **Current release: v2.0.0.2 (2026-09-04)** — the v2.x engine line: fixed-width record layout is the
27+
- A production-focused stack validated by a **1,916-test core suite** (0 failed; **2,897 tests across
28+
16 suites** in total) and **backward compatibility**
29+
30+
> **🚧 Current pre-release: v2.1.0-RC.3 (2026-09-17) — the .NET 11 / C# 15 preview line.** Available on
31+
> the `release/v2.1.0.0-RC.3` branch, `net11.0` only. Highlights: the fixed-width inline capacity
32+
> ships at 16 by default on both storage paths (+12–19 % on the batched multi-row INSERT shape, per
33+
> the tracked measurement), the overflow arena appends a row's payloads in one call instead of one
34+
> file open per value, and in-place UPDATE/DELETE with deferred index maintenance put the
35+
> fixed-width fair-PK layout **ahead of SQLite on UPDATE (0.8×) and DELETE (0.5×)**.
36+
> Validated by **2,897 tests across 16 suites (0 failed, 16 skipped)** and the write-path regression
37+
> gate (PASSED). Honest caveats: INSERT is still ~1.4× behind SQLite on the fair-PK shape, the
38+
> PageBased engine's UPDATE is 4.9× behind, and the pure default (encrypted) config is 1.3–1.6×
39+
> behind the `NoEncryptMode` raw-speed posture. Full notes:
40+
> [`docs/2.1.0-RC.3_WHAT_CHANGED.md`](docs/2.1.0-RC.3_WHAT_CHANGED.md).
41+
42+
> **Current stable release: v2.0.0.2 (2026-09-04)** — the v2.x engine line: fixed-width record layout is the
3043
> default for new PK tables, UPDATE/DELETE run in-place with commit-time tombstones, and a reopen
3144
> data-integrity hardening batch closed silent-data-loss edge cases (empty-value overflow reload,
3245
> single-file fixed-width arena markers, legacy 1.x delete-after-update purge).
@@ -106,7 +119,7 @@ Headline changes:
106119
- ⚡ **Removed hidden `D:\*.log` debug writes** that throttled every SELECT/execute/transaction/INSERT
107120
- 🛡️ **Native AOT readiness** — AOT-safe `TypeConverter`, `Option<T>` reader, `[RequiresDynamicCode]` annotations,
108121
source-generated DTOs/JSON (`tools/SharpCoreDB.AotSmoke` publishes + runs, exit 0)
109-
- ✅ validated by a **1,777-test core suite (0 failed)** plus CQRS (64), VectorSearch (143), EF Core (116) and Functional.Linq2DB (24)
122+
- ✅ validated by a **1,916-test core suite (0 failed)** — **2,897 tests across 16 suites** in total (CQRS 64, VectorSearch 248, EF Core 116, Provider.Sync 135, Search 58, HybridSearch 6, Functional.Linq2DB 24, …)
110123
- 🛡️ **Envelope encryption + full at-rest metadata encryption** — password-based per-file DEK (PBKDF2-HMAC-SHA256), encrypted block registry / FSM / WAL, key & password rotation APIs (#341 follow-on)
111124
- 🗜️ **Block-level Brotli/GZip compression** for single-file (`.scdb`) storage — transparent, per-block, applied before encryption / removed after decryption (#344)
112125
- ⚙️ **Configurable metadata region sizing** — `FsmSizePages` / `BlockRegistrySizePages` / `TableDirectorySizePages` remove the 512 MB single-file ceiling; byte-based file extension (~10 MB regardless of `PageSize`) (#345)
@@ -153,10 +166,15 @@ gRPC endpoint: `https://localhost:5001`
153166
Install client/server packages:
154167

155168
```bash
156-
dotnet add package SharpCoreDB.Server --version 2.0.0.2
169+
dotnet add package SharpCoreDB.Server.Core --version 2.0.0.2
157170
dotnet add package SharpCoreDB.Client --version 2.0.0.2
158171
```
159172

173+
> The server host is a standalone executable (`src/SharpCoreDB.Server`), distributed as the
174+
> `sharpcoredb-server` binary and the `ghcr.io/mpcoredeveloper/sharpcoredb-server` container image —
175+
> it is **not** published as the `SharpCoreDB.Server` NuGet package. The packable server-side
176+
> libraries are `SharpCoreDB.Server.Core` and `SharpCoreDB.Server.Protocol`.
177+
160178

161179
---
162180

@@ -170,14 +188,58 @@ dotnet add package SharpCoreDB.Client --version 2.0.0.2
170188
171189
---
172190

173-
## Available NuGet packages (v2.0.0.2)
191+
## Available NuGet packages
192+
193+
### v2.1.0-RC.3 — pre-release (`release/v2.1.0.0-RC.3`, net11.0 / C# 15 preview)
194+
195+
```bash
196+
# Core
197+
dotnet add package SharpCoreDB --version 2.1.0-RC.3
198+
199+
# Server/client
200+
dotnet add package SharpCoreDB.Server.Core --version 2.1.0-RC.3
201+
dotnet add package SharpCoreDB.Client --version 2.1.0-RC.3
202+
203+
# Engines and extensions
204+
dotnet add package SharpCoreDB.Analytics --version 2.1.0-RC.3
205+
dotnet add package SharpCoreDB.VectorSearch --version 2.1.0-RC.3
206+
dotnet add package SharpCoreDB.Search --version 2.1.0-RC.3
207+
dotnet add package SharpCoreDB.HybridSearch --version 2.1.0-RC.3
208+
dotnet add package SharpCoreDB.Graph --version 2.1.0-RC.3
209+
dotnet add package SharpCoreDB.Graph.Advanced --version 2.1.0-RC.3
210+
dotnet add package SharpCoreDB.Distributed --version 2.1.0-RC.3
211+
dotnet add package SharpCoreDB.Provider.Sync --version 2.1.0-RC.3
212+
dotnet add package SharpCoreDB.EntityFrameworkCore --version 2.1.0-RC.3
213+
dotnet add package SharpCoreDB.Extensions --version 2.1.0-RC.3
214+
215+
# Optional architecture packages
216+
dotnet add package SharpCoreDB.EventSourcing --version 2.1.0-RC.3
217+
dotnet add package SharpCoreDB.Projections --version 2.1.0-RC.3
218+
dotnet add package SharpCoreDB.CQRS --version 2.1.0-RC.3
219+
220+
# Optional functional adapters
221+
dotnet add package SharpCoreDB.Functional --version 2.1.0-RC.3
222+
dotnet add package SharpCoreDB.Functional.Dapper --version 2.1.0-RC.3
223+
dotnet add package SharpCoreDB.Functional.EntityFrameworkCore --version 2.1.0-RC.3
224+
dotnet add package SharpCoreDB.Functional.Linq2DB --version 2.1.0-RC.3
225+
```
226+
227+
> Pre-release versions are **not** selected by default — request the version explicitly (as above) or
228+
> tick *Include prerelease* in Visual Studio.
229+
>
230+
> The **server host is a standalone executable**, not a NuGet package: run
231+
> `dotnet run --project src/SharpCoreDB.Server -c Release` or use the
232+
> `ghcr.io/mpcoredeveloper/sharpcoredb-server` container image. The packable server-side libraries are
233+
> `SharpCoreDB.Server.Core` (hosting) and `SharpCoreDB.Server.Protocol` (wire contracts).
234+
235+
### v2.0.0.2 — stable (`master`, net10.0 / C# 14)
174236

175237
```bash
176238
# Core
177239
dotnet add package SharpCoreDB --version 2.0.0.2
178240

179241
# Server/client
180-
dotnet add package SharpCoreDB.Server --version 2.0.0.2
242+
dotnet add package SharpCoreDB.Server.Core --version 2.0.0.2
181243
dotnet add package SharpCoreDB.Client --version 2.0.0.2
182244

183245
# Engines and extensions

‎SharpCoreDB.CI.slnf‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"projects": [
55
"src\\SharpCoreDB\\SharpCoreDB.csproj",
66
"src\\SharpCoreDB.Analytics\\SharpCoreDB.Analytics.csproj",
7+
"src\\SharpCoreDB.Aspire.Hosting\\SharpCoreDB.Aspire.Hosting.csproj",
78
"src\\SharpCoreDB.Client\\SharpCoreDB.Client.csproj",
89
"src\\SharpCoreDB.Client.Protocol\\SharpCoreDB.Client.Protocol.csproj",
910
"src\\SharpCoreDB.CQRS\\SharpCoreDB.CQRS.csproj",

0 commit comments

Comments
 (0)