From b3d047ba6e7fc9382130d0764a320451627dc01c Mon Sep 17 00:00:00 2001 From: Dsssyc Date: Fri, 30 Oct 2026 03:41:29 +0800 Subject: [PATCH] Record verified 0.2.4 publication and Windows checks Fill the 0.2.4 release record with the exact-source Run Tests and Release Artifacts runs, the MSVC compile fix, the Windows x64 check before publication, the publication runs, registry hash verification and consumer checks. Date the changelog entry and update the verification scope of the native memory report. --- CHANGELOG.md | 4 +- docs/releases/0.2.4.md | 113 ++++++++++++++++++---------- docs/reports/0.2.4-native-memory.md | 8 +- 3 files changed, 82 insertions(+), 43 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93ae998..df5f500 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,14 +2,14 @@ All notable changes to `fastdb` and its bindings are documented here. Release entries are retained after publication. Historical implementation notes below preserve the evidence available at their original date. -## 0.2.4 — release preparation +## 0.2.4 — 2026-10-29 - Fix ownership of standalone native database factories and standalone feature-reference factories in the Python binding. Repeated truncate/fill/save/close and file load/read/close cycles release their native allocations. - Pin borrowed buffers in the native database's release callback; release the export and shared mapping after its layers. Tables, rows, numeric arrays and chunks keep backing alive independently of the engine. Closing a RecordEngine releases its references; callers control checked-owner invalidation with `invalidate`. - Obtain bulk numeric columns directly from the native table address and field offset without creating per-row feature and geometry caches. Checked aliases follow snapshot remaps and reject stale row/column access. - Cache column accessors and arrays without table or fill-handler reference cycles, release obsolete builders, and attach NumPy chunk-array owners in C so cleanup is immediate with cyclic GC disabled. Engine-dependent writes after RecordEngine closure report a clear error; retained writable arrays remain usable. - Synchronize Python, Rust, TypeScript/WASM and the Core bundle at version 0.2.4. The Core bundle version is derived from the shared package manifests. -- Local validation and memory measurements are recorded in [the native memory report](docs/reports/0.2.4-native-memory.md). Exact-source CI, release artifacts and publication remain pending in [the 0.2.4 draft release record](docs/releases/0.2.4.md). +- Memory measurements are in [the native memory report](docs/reports/0.2.4-native-memory.md). Release evidence is tracked in [the 0.2.4 release record](docs/releases/0.2.4.md). ## 0.2.3 — 2026-10-21 diff --git a/docs/releases/0.2.4.md b/docs/releases/0.2.4.md index e31cde5..fd2bb5e 100644 --- a/docs/releases/0.2.4.md +++ b/docs/releases/0.2.4.md @@ -1,43 +1,80 @@ -# FastDB 0.2.4 release record — draft +# FastDB 0.2.4 release record + +The coordinated release uses immutable tag `v0.2.4`, source +`f82fa13adeae2b87a295bf984821c85c44b55a3d`, for Python `fastdb4py`, npm +`fastdb4ts`, Rust `fastdb`/`fastdb-sys` and the Core SDK. 0.2.4 addresses standalone native database ownership, numeric column cache -retention, and mapped backing lifetime. The design, prior measurements, and -validation boundary are in the [native memory report](../reports/0.2.4-native-memory.md). - -The coordinated release covers Python `fastdb4py`, npm `fastdb4ts`, Rust -`fastdb` and `fastdb-sys`, and the Core SDK bundles from one source commit. -Package manifests and lockfiles carry 0.2.4. Core bundle metadata derives the -version from the package manifests. - -## Validation - -Local checks pass 403 Python tests, compileall, sdist/wheel builds, 45 native -ASan/UBSan tests, 21 Rust unit/integration tests and one compile-fail doctest, -58 TypeScript/WASM tests, and both 117-symbol ABI checks on macOS ARM64. -Installed wheels on CPython 3.10 and 3.13 each pass all 403 Python tests. -Six-cycle, 15,498,593-row read/write -probes with cyclic GC disabled show bounded memory in the native memory report. -The release requires complete `tests.yml` and `release-artifacts.yml` runs for the -same final source on `main`, followed by exact-source consumer verification. - -| Evidence | Value | Status | -| --- | --- | --- | -| Final source SHA | | Pending | -| Successful `tests.yml` run | | Pending | -| Successful `release-artifacts.yml` run | | Pending | -| Candidate manifest digest and artifact IDs | | Pending | -| Complete archive inventory and hashes | | Pending | -| Immutable `v0.2.4` tag and GitHub release assets | | Pending | -| PyPI workflow and published inventory | | Pending | -| crates.io workflow and archive hashes | | Pending | -| npm workflow and tarball hash | | Pending | -| Installed published-consumer checks | | Pending | - -The candidate inventory comprises 35 Python wheels, one sdist, four Core -bundles, two Rust crates, and one npm tarball. Verify the native C++/C ABI/Rust -and installed-wheel consumers on Windows ARM64, along with the remaining -required platform and language gates. Record publication and installed -consumer evidence after the exact source and artifact identity checks pass. +retention, and mapped backing lifetime. The design, memory measurements and +local validation are in the [native memory report](../reports/0.2.4-native-memory.md). +The verified candidate keeps the 0.2.3 inventory of 43 archives: 35 Python +wheels, one sdist, four Core bundles, two Rust crates and one npm tarball. +Portable payload semantics and ABI-117 are unchanged. + +## Exact-source validation + +- [Run Tests 40932272066](https://github.com/world-in-progress/fastdb/actions/runs/40932272066): complete success, including sanitizers. +- [Release Artifacts 40932272107](https://github.com/world-in-progress/fastdb/actions/runs/40932272107): complete success; one retained 43-archive candidate. The native Windows x64 and ARM64 jobs each passed 41 C++ tests, including `legacy.lifetime`, and the ABI export check. + +Release Artifacts for the version merge `8f24619` +([run 40926228094](https://github.com/world-in-progress/fastdb/actions/runs/40926228094)) +failed to compile `tests/cpp/test_legacy_lifetime.cpp` with MSVC. The test +included `windows.h` after private headers that use `namespace std`, so the RPC +`byte` typedef was ambiguous with `std::byte`. +[PR #45](https://github.com/world-in-progress/fastdb/pull/45) defines +`WIN32_LEAN_AND_MEAN`. Pull-request CI does not build native Windows targets, +so the run above is the first Windows compile of the fix. + +The combined candidate is artifact `12922534983`; its GitHub ZIP digest is +`sha256:f7cb6fdf7e408d4b282f6baff7ea41001a3315d16fad88d1a14501068262b6bc`. +The exact CI `release-manifest.json` is 13,092 bytes, SHA-256 +`8a07ab93409811bb5e11418876ba082594758c2b3b87a766699c447586a9c5bf`. +The Python fragment is artifact `12924197817`. The candidate passed the +release verifier for its source SHA. + +## Windows x64 check before publication + +A Windows 11 x64 machine installed the candidate CPython 3.10 wheel from this +run into a fresh environment. + +- With cyclic GC disabled, six write cycles and six read cycles of a + 15,498,593-row F32 table kept the process commit charge (`PrivateUsage`) + flat: write cycles changed it by 0 bytes and read cycles by at most 4 KiB. + The published 0.2.3 wheel grew by 374–379 MiB per write cycle and + 312–317 MiB per read cycle in the same script. Removing the data file after + the cycles succeeded. +- The full Python suite passed 397 tests and skipped one. The five failures + are Windows shared-memory defects that also fail with 0.2.3 and its tests: + - `ObjectEngine.share()` closes its only handle, which deletes a Windows + named mapping before `ObjectEngine.load` opens it (four tests). + - `FastSerializer.loads_shm` compares the requested range with the + page-rounded size of an opened Windows mapping. The out-of-range test + therefore reaches the native loader, which raises + `Invalid FastDB database buffer.` instead of the size error; 0.2.3 raised + `AttributeError` there. + +These Windows defects are not regressions and remain open. + +## Publication + +- [PyPI 40940243958](https://github.com/world-in-progress/fastdb/actions/runs/40940243958): the tag push reused the exact-source Python artifact. +- [npm 40940925984](https://github.com/world-in-progress/fastdb/actions/runs/40940925984) and [Rust 40940920531](https://github.com/world-in-progress/fastdb/actions/runs/40940920531) published and verified the tested archives. + +The [GitHub release](https://github.com/world-in-progress/fastdb/releases/tag/v0.2.4) +retains the candidate archives, exact CI manifest, CI proof and publication +receipt. + +All 39 public registry files were downloaded and matched the CI manifest by +size and SHA-256: 36 PyPI files, one npm tarball and two Rust crates. +Consumer checks against the published bytes: + +- Python 3.10 on macOS ARM64 installed `fastdb4py==0.2.4` with + `--only-binary=:all:` into a fresh environment and passed all 403 Python + tests from the release source. +- The public npm tarball passed the packed `fastdb4ts/payload` inventory and + Wasm smoke check of `tests/ci/check_ts_payload_package.py`. +- No registry-only Rust consumer was built for this release. Both published + crates are byte-identical to the tested candidate. See [publishing](publishing.md) for the source-bound publication process and the [0.2.3 record](0.2.3.md) for the previous platform matrix. diff --git a/docs/reports/0.2.4-native-memory.md b/docs/reports/0.2.4-native-memory.md index ec38d7b..33a6e97 100644 --- a/docs/reports/0.2.4-native-memory.md +++ b/docs/reports/0.2.4-native-memory.md @@ -121,8 +121,10 @@ doctest, 58 TypeScript/WASM tests and 117-symbol native and WASM ABI checks. The three shutdown scripts each return zero twice in both Python runtimes. The six retained-view/release scenarios and chained writes pass on CPython 3.10. Release policy tests pass 105 cases and 98 subtests. -Windows, Linux, macOS x86_64 and free-threaded Python have -not been executed for this fix. Registry artifacts and the complete release -matrix remain subject to the [publishing process](../releases/publishing.md). +Pull-request CI ran the Python suite on Linux x86_64 with CPython 3.12 and +free-threaded 3.13. Release Artifacts built every wheel, ran its read/write +smoke and payload tests, and ran the native Core tests on Windows x64 and +ARM64. Before publication, a Windows x64 machine ran the full Python suite and +the memory loops; see the [0.2.4 release record](../releases/0.2.4.md). Raw logs, measurements and build archives are kept outside the source repository.