Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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

Expand Down Expand Up @@ -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: |
Expand All @@ -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 }}
Expand All @@ -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

Expand Down
71 changes: 45 additions & 26 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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`.
4 changes: 2 additions & 2 deletions docs/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -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` |

Expand Down
6 changes: 3 additions & 3 deletions docs/packaging.md
Original file line number Diff line number Diff line change
Expand Up @@ -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` |
Expand Down Expand Up @@ -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` |

Expand Down
4 changes: 2 additions & 2 deletions docs/portability.md
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions docs/releases.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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:

Expand All @@ -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.

Expand Down
2 changes: 1 addition & 1 deletion protocol/compatibility.json
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion scripts/validate-docker-shared-memory.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ function Invoke-DockerCleanConsumerValidation {
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="SharedMemoryStore" Version="1.0.1" />
<PackageReference Include="SharedMemoryStore" Version="1.0.2" />
</ItemGroup>
</Project>
'@
Expand Down
4 changes: 2 additions & 2 deletions scripts/validate-docs.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down
4 changes: 2 additions & 2 deletions src/SharedMemoryStore/SharedMemoryStore.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<Deterministic>true</Deterministic>
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
<PackageId>SharedMemoryStore</PackageId>
<Version>1.0.1</Version>
<Version>1.0.2</Version>
<Authors>SharedMemoryStore contributors</Authors>
<Company>SharedMemoryStore</Company>
<Description>A bounded named shared-memory key-value store for opaque binary values.</Description>
Expand All @@ -19,7 +19,7 @@
<RepositoryType>git</RepositoryType>
<RepositoryUrl>https://github.com/rantri/SharedMemoryStore</RepositoryUrl>
<PackageReadmeFile>README.md</PackageReadmeFile>
<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>
<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.</PackageReleaseNotes>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<AssemblyName>SharedMemoryStore</AssemblyName>
Expand Down