diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index b035fae..1c6fd9d 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -4,7 +4,7 @@ on:
workflow_dispatch:
inputs:
version:
- description: Version to publish; must match the project (for example, 1.0.1)
+ description: Version to publish; must match the project (for example, 1.2.3)
required: true
type: string
@@ -19,15 +19,16 @@ jobs:
validate:
name: Validate and package
runs-on: ubuntu-latest
+ timeout-minutes: 90
outputs:
version: ${{ steps.version.outputs.value }}
steps:
- name: Check out source
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Set up .NET 10
- uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4
+ uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0
with:
dotnet-version: 10.0.x
@@ -104,7 +105,7 @@ jobs:
-OutputPath artifacts/release/release-notes.md
- name: Preserve release artifacts
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: nuget-release-${{ steps.version.outputs.value }}
path: |
@@ -118,6 +119,7 @@ jobs:
name: Publish NuGet and GitHub release
needs: validate
runs-on: ubuntu-latest
+ timeout-minutes: 15
environment:
name: release
url: https://www.nuget.org/packages/SharedMemoryStore/${{ needs.validate.outputs.version }}
@@ -127,14 +129,14 @@ jobs:
steps:
- name: Download release artifacts
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: nuget-release-${{ needs.validate.outputs.version }}
path: artifacts/release
- name: Exchange GitHub identity for a temporary NuGet API key
id: nuget
- uses: NuGet/login@ebc737b6fc418a6ca0073cf116ec8dc156d8b81e # v1
+ uses: NuGet/login@8d196754b4036150537f80ac539e15c2f1028841 # v1.2.0
with:
user: rantri
diff --git a/CHANGELOG.md b/CHANGELOG.md
index af7c78d..65a6054 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,44 +5,63 @@ chronological order.
## Unreleased
+## 1.0.2 - 2026-07-10
+
### Added
- Added an independently versioned CMake `SharedMemoryStore` `0.1.0`
distribution with a C++20 protocol core, Windows and Linux adapters,
- fixed-width C ABI `1.0`, move-only C++ RAII wrappers, dependency-free native
- tests, install/export rules, clean-consumer project, and basic sample.
-- Added the Python `shared-memory-store` `0.1.0` source and wheel configuration
- for Python 3.10 or newer. Its standard-library `ctypes` API packages and
- validates the native library beside the Python modules and exposes
- context-managed stores, leases, reservations, recovery, waits, and
- diagnostics.
-- Added the canonical language-neutral protocol boundary for layout `1.2`,
- resource naming `1`, exact conformance fixtures, compatibility metadata, and
- test-only .NET, C++, and Python JSON-lines participants.
-- Added an ordered 3x3 core exchange harness plus native and Python contract,
- lifecycle, ABI, diagnostics, and package tests.
+ fixed-width C ABI `1.0`, move-only C++ RAII wrappers, install/export rules,
+ native tests, a clean-consumer project, and a basic sample.
+- Added the independently versioned Python `shared-memory-store` `0.1.0`
+ distribution sources for Python 3.10 or newer. Its standard-library `ctypes`
+ API loads the packaged native library and exposes context-managed stores,
+ leases, reservations, recovery, bounded waits, and diagnostics.
+- Added canonical language-neutral specifications and conformance fixtures for
+ mapped layout `1.2` and resource naming `1`, plus a complete ordered 3x3
+ .NET/C++/Python interoperability harness.
+
+### Fixed
+
+- Corrected managed Linux opening of an existing store so the actual backing
+ file is mapped before layout validation; mismatched capacities now report
+ `IncompatibleLayout` instead of a mapping failure.
+- Made the managed implementation reject non-64-bit or non-little-endian
+ processes with `UnsupportedPlatform` before opening platform resources.
+
+### Packaging
+
+- Updated the release workflow to Node 24-based immutable action pins while
+ retaining trusted NuGet publishing and draft-first GitHub release behavior.
### Security
-- Preserved the trusted same-host participant boundary across all three
- distributions. Native and Python callers receive lifecycle and layout
- validation, but no implementation claims protection from a malicious writer
- that already has legitimate access to the shared resources.
- Restricted Python native loading to the library packaged beside its modules;
it does not search the current directory, `PATH`, or system library paths.
+- Preserved the trusted same-host participant boundary across all three
+ implementations; no implementation claims protection from a malicious writer
+ that already has legitimate access to the shared resources.
+
+### Validation
+
+- Validated native configure, build, CTest, install, clean CMake consumption,
+ Python source and installed-wheel behavior, and ordered .NET/C++/Python
+ interoperability on Windows x64 and Linux x64.
+- Validated mixed lifecycle, bounded-contention, crash-recovery, diagnostics,
+ Linux ownership cleanup, protocol fixtures, package consumption, and existing
+ managed regression scenarios.
### Compatibility
-- NuGet `SharedMemoryStore` remains `1.0.1`; its public managed API, status
- numbers, BCL-only runtime dependency surface, and layout `1.2` behavior are
- unchanged. The native and Python artifacts are sibling distributions and are
- not included in the NuGet package.
-- NuGet, CMake, and Python versions advance independently. Cross-runtime
- compatibility is declared through layout `1.2`, resource naming `1`, and C
- ABI `1.0` where applicable.
-- The native and Python `0.1.0` lines are alpha. Registry publication and full
- Windows/Linux ordered-pair release evidence remain explicit publication
- gates rather than claims made by this entry.
+- NuGet `SharedMemoryStore` advances to `1.0.2` while preserving the managed
+ public API, status values, .NET BCL-only runtime dependency surface, mapped
+ layout `1.2`, and resource naming `1`.
+- CMake `SharedMemoryStore` and Python `shared-memory-store` remain independently
+ versioned `0.1.0` alpha sibling distributions. They are not included in the
+ NuGet package, and this release does not publish them to PyPI or a native
+ package registry.
+- All three runtimes interoperate through mapped layout `1.2` and resource
+ naming `1`; the native and Python distributions use C ABI `1.0`.
## 1.0.1 - 2026-07-10
diff --git a/README.md b/README.md
index 4e3ac47..9f4b765 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@ payloads through a broker process.
Distribution identities:
-- NuGet: `SharedMemoryStore` `1.0.1`, targeting `net10.0` with .NET BCL
+- NuGet: `SharedMemoryStore` `1.0.2`, targeting `net10.0` with .NET BCL
runtime dependencies only.
- CMake: `SharedMemoryStore` `0.1.0`, exposing a C++20 RAII API and fixed-width
C ABI `1.0` over the native shared library.
@@ -248,5 +248,5 @@ pwsh ./scripts/validate-interoperability.ps1 -Configuration Release -Stress
Documentation changes must keep package metadata, README content, release notes,
support policy, security policy, compatibility metadata, and contract links
-aligned across managed `1.0.1`, native `0.1.0`, Python `0.1.0`, ABI `1.0`, and
+aligned across managed `1.0.2`, native `0.1.0`, Python `0.1.0`, ABI `1.0`, and
layout `1.2`.
diff --git a/docs/getting-started.md b/docs/getting-started.md
index 30807ca..e608aaf 100644
--- a/docs/getting-started.md
+++ b/docs/getting-started.md
@@ -15,13 +15,13 @@ remove, and close workflow. All three use layout `1.2` and resource naming `1`.
- Docker Engine or Docker Desktop only when validating same-host container
sharing.
-The managed package version is `1.0.1`; the native and Python distributions are
+The managed package version is `1.0.2`; the native and Python distributions are
independently versioned `0.1.0`. If an artifact has not been published to its
ecosystem feed, build it locally from the repository.
| Consumer | Artifact | Public entry point |
|----------|----------|--------------------|
-| .NET | NuGet `SharedMemoryStore` `1.0.1` | `MemoryStore` |
+| .NET | NuGet `SharedMemoryStore` `1.0.2` | `MemoryStore` |
| C++ | CMake `SharedMemoryStore` `0.1.0` | `shared_memory_store::memory_store` |
| Python | wheel `shared-memory-store` `0.1.0` | `shared_memory_store.MemoryStore` |
diff --git a/docs/packaging.md b/docs/packaging.md
index 2b704cc..958bf29 100644
--- a/docs/packaging.md
+++ b/docs/packaging.md
@@ -11,14 +11,14 @@ and targets `net10.0`. Runtime dependencies are limited to the .NET BCL.
| Field | Value |
|-------|-------|
| `PackageId` | `SharedMemoryStore` |
-| `Version` | `1.0.1` |
+| `Version` | `1.0.2` |
| `TargetFramework` | `net10.0` |
| `Description` | `A bounded named shared-memory key-value store for opaque binary values.` |
| `PackageTags` | `shared-memory;memory-mapped-file;zero-copy;linux;windows;docker;library` |
| `PackageLicenseExpression` | `MIT` |
| `PackageProjectUrl` | `https://github.com/rantri/SharedMemoryStore` |
| `PackageReadmeFile` | `README.md` |
-| `PackageReleaseNotes` | `Linux, Windows, and same-host Docker support hardening remains the managed 1.0.1 package scope. The repository also adds independently versioned native C++ and Python sibling distributions over layout 1.2 and C ABI 1.0; they are not included in the NuGet package, whose public API and runtime dependency surface remain unchanged.` |
+| `PackageReleaseNotes` | `NuGet SharedMemoryStore 1.0.2 preserves Linux, Windows, and same-host Docker support, corrects Linux layout-mismatch reporting, and rejects unsupported managed processes early while preserving the public API, status values, BCL-only runtime surface, layout 1.2, and resource naming 1. Repository source adds independently versioned native C++ and Python 0.1.0 sibling distributions using C ABI 1.0, validated with .NET on Windows and Linux; v1.0.2 neither includes them in NuGet nor publishes them to PyPI or a native package registry.` |
| `RepositoryType` | `git` |
| `RepositoryUrl` | `https://github.com/rantri/SharedMemoryStore` |
| `SymbolPackageFormat` | `snupkg` |
@@ -95,7 +95,7 @@ pwsh ./scripts/validate-python.ps1 -Configuration Release
| Distribution | Version | ABI requirement | Creates/reads | Resource naming |
|--------------|---------|-----------------|---------------|-----------------|
-| NuGet `SharedMemoryStore` | `1.0.1` | Not applicable | layout `1.2` | `1` |
+| NuGet `SharedMemoryStore` | `1.0.2` | Not applicable | layout `1.2` | `1` |
| CMake `SharedMemoryStore` | `0.1.0` | provides C ABI `1.0` | layout `1.2` | `1` |
| Python `shared-memory-store` | `0.1.0` | requires C ABI `1.0` | layout `1.2` | `1` |
diff --git a/docs/portability.md b/docs/portability.md
index c05c3e4..da15a34 100644
--- a/docs/portability.md
+++ b/docs/portability.md
@@ -19,7 +19,7 @@ Detailed sources:
## Current Baseline
-- Managed distribution: NuGet `SharedMemoryStore` `1.0.1`, targeting
+- Managed distribution: NuGet `SharedMemoryStore` `1.0.2`, targeting
`net10.0`.
- Native distribution: CMake `SharedMemoryStore` `0.1.0`, C++20, C ABI `1.0`.
- Python distribution: `shared-memory-store` `0.1.0`, Python 3.10 or newer,
@@ -95,7 +95,7 @@ the public API.
Windows uses named operating-system memory mappings and named synchronization.
An explicit `Global\` mapping name uses global synchronization in managed
-`1.0.1` and native `0.1.0`. All participants must implement compatible
+`1.0.2` and native `0.1.0`. All participants must implement compatible
resource-naming version `1` behavior. Ordinary unqualified and explicit
`Local\` names retain session-local synchronization.
Linux uses deterministic files in a shared runtime memory location such as
diff --git a/docs/releases.md b/docs/releases.md
index 2cfe3ed..76035ee 100644
--- a/docs/releases.md
+++ b/docs/releases.md
@@ -2,7 +2,7 @@
This guide is the maintainer checklist for preparing independently versioned
managed, native, and Python releases. The current source identities are NuGet
-`SharedMemoryStore` `1.0.1`, CMake `SharedMemoryStore` `0.1.0`, Python
+`SharedMemoryStore` `1.0.2`, CMake `SharedMemoryStore` `0.1.0`, Python
`shared-memory-store` `0.1.0`, C ABI `1.0`, mapped layout `1.2`, and resource
naming `1`. Update this guide when any distribution, ABI, protocol, support,
security, documentation, or sample contract changes.
@@ -273,7 +273,7 @@ dotnet run --project benchmarks/SharedMemoryStore.Benchmarks/SharedMemoryStore.B
dotnet run --project benchmarks/SharedMemoryStore.Benchmarks/SharedMemoryStore.Benchmarks.csproj -c Release -- --filter *SegmentedPublish*
```
-## Native and Python 0.1.0 Preparation Notes (Unreleased)
+## Native and Python 0.1.0 Publication Preparation Notes
The repository now contains the implementation and packaging inputs for:
@@ -287,7 +287,7 @@ The repository now contains the implementation and packaging inputs for:
conformance fixtures, test-only JSON-lines agents, and the ordered 3x3 core
exchange harness.
-These sibling distributions do not change the managed `1.0.1` public API,
+These sibling distributions do not change the managed `1.0.2` public API,
status numbers, NuGet runtime dependencies, or mapped layout. Their `0.1.0`
versions are alpha lines and are not included in the NuGet package.
diff --git a/protocol/compatibility.json b/protocol/compatibility.json
index 72b43c7..19762c8 100644
--- a/protocol/compatibility.json
+++ b/protocol/compatibility.json
@@ -10,7 +10,7 @@
{
"name": "SharedMemoryStore",
"ecosystem": "NuGet",
- "version": "1.0.1",
+ "version": "1.0.2",
"creates_layouts": ["1.2"],
"reads_layouts": ["1.2"],
"resource_naming": 1,
diff --git a/scripts/validate-docker-shared-memory.ps1 b/scripts/validate-docker-shared-memory.ps1
index c732fd3..636d605 100644
--- a/scripts/validate-docker-shared-memory.ps1
+++ b/scripts/validate-docker-shared-memory.ps1
@@ -110,7 +110,7 @@ function Invoke-DockerCleanConsumerValidation {
enable
-
+
'@
diff --git a/scripts/validate-docs.ps1 b/scripts/validate-docs.ps1
index 6f01090..ded221d 100644
--- a/scripts/validate-docs.ps1
+++ b/scripts/validate-docs.ps1
@@ -264,7 +264,7 @@ function Assert-PackageMetadata {
$expected = @{
TargetFramework = "net10.0"
PackageId = "SharedMemoryStore"
- Version = "1.0.1"
+ Version = "1.0.2"
Description = "A bounded named shared-memory key-value store for opaque binary values."
PackageLicenseExpression = "MIT"
PackageReadmeFile = "README.md"
@@ -304,7 +304,7 @@ function Assert-PackageMetadata {
}
Assert-Contains "README.md" "SharedMemoryStore" "package README identity"
- Assert-Contains "README.md" "1.0.1" "package version alignment"
+ Assert-Contains "README.md" "1.0.2" "package version alignment"
Assert-Contains "README.md" "net10.0" "target framework alignment"
Assert-Contains "README.md" "MIT" "license alignment"
Assert-Contains "LICENSE" "MIT License" "license metadata alignment"
diff --git a/src/SharedMemoryStore/SharedMemoryStore.csproj b/src/SharedMemoryStore/SharedMemoryStore.csproj
index c86ddac..2c43658 100644
--- a/src/SharedMemoryStore/SharedMemoryStore.csproj
+++ b/src/SharedMemoryStore/SharedMemoryStore.csproj
@@ -9,7 +9,7 @@
true
true
SharedMemoryStore
- 1.0.1
+ 1.0.2
SharedMemoryStore contributors
SharedMemoryStore
A bounded named shared-memory key-value store for opaque binary values.
@@ -19,7 +19,7 @@
git
https://github.com/rantri/SharedMemoryStore
README.md
- Linux, Windows, and same-host Docker support hardening remains the managed 1.0.1 package scope. The repository also adds independently versioned native C++ and Python sibling distributions over layout 1.2 and C ABI 1.0; they are not included in the NuGet package, whose public API and runtime dependency surface remain unchanged.
+ NuGet SharedMemoryStore 1.0.2 preserves Linux, Windows, and same-host Docker support, corrects Linux layout-mismatch reporting, and rejects unsupported managed processes early while preserving the public API, status values, BCL-only runtime surface, layout 1.2, and resource naming 1. Repository source adds independently versioned native C++ and Python 0.1.0 sibling distributions using C ABI 1.0, validated with .NET on Windows and Linux; v1.0.2 neither includes them in NuGet nor publishes them to PyPI or a native package registry.
true
snupkg
SharedMemoryStore