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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
protocol/fixtures/v1.2/*.snapshot.json text eol=lf
protocol/fixtures/v2.0/*.json text eol=lf
protocol/fixtures/v2.0/offline/*.json text eol=lf
protocol/fixtures/v2.0/offline/*.bin binary
16 changes: 11 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ jobs:
with:
dotnet-version: 10.0.x

- name: Validate SMS2-only qualification policy
shell: pwsh
run: |
./scripts/validate-lock-free-os.ps1 -Command self-test -Configuration Release -ValidateOnly
./scripts/run-lock-free-qualification.ps1 -Tier pr -Configuration Release -ValidateOnly

- name: Restore
run: dotnet restore SharedMemoryStore.slnx

Expand All @@ -51,7 +57,7 @@ jobs:
shell: pwsh
run: ./scripts/validate-docs.ps1

- name: Validate package consumption
- name: Validate SMS2 package consumption
shell: pwsh
run: ./scripts/validate-package-consumption.ps1 -Configuration Release

Expand All @@ -72,7 +78,7 @@ jobs:
with:
dotnet-version: 10.0.x

- name: Validate Docker sharing
- name: Validate SMS2 Docker sharing
shell: pwsh
run: ./scripts/validate-docker-shared-memory.ps1 -Configuration Release

Expand All @@ -89,7 +95,7 @@ jobs:
- name: Check out source
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Validate CMake build, tests, install, and clean consumer
- name: Validate SMS2 CMake build, tests, install, and clean consumer
shell: pwsh
run: ./scripts/validate-native.ps1 -Configuration Release

Expand All @@ -114,7 +120,7 @@ jobs:
- name: Install Python build frontend
run: python -m pip install --upgrade build

- name: Validate source tests, wheel contents, and clean installation
- name: Validate SMS2 source tests, distributions, and clean installation
shell: pwsh
run: ./scripts/validate-python.ps1 -Configuration Release

Expand Down Expand Up @@ -142,7 +148,7 @@ jobs:
with:
python-version: '3.12'

- name: Validate all ordered runtime pairs and stress lifecycles
- name: Validate all ordered SMS2 runtime pairs and stress lifecycles
shell: pwsh
run: >-
./scripts/validate-interoperability.ps1
Expand Down
4 changes: 1 addition & 3 deletions .specify/feature.json
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
{
"feature_directory": "specs/009-lock-free-publish-read"
}
{"feature_directory":"specs\\010-lock-free-only-multilang"}
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<!-- SPECKIT START -->
For additional context about technologies to be used, project structure,
shell commands, and other important information, read the current plan
at specs/009-lock-free-publish-read/plan.md
at specs/010-lock-free-only-multilang/plan.md
<!-- SPECKIT END -->
48 changes: 48 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,54 @@ chronological order.

## Unreleased

## 3.0.0 - 2026-07-16

### Breaking changes

- NuGet `SharedMemoryStore` now creates and reads only SMS2 layout `2.0`,
resource protocol `2`, required-feature mask `7`, and optional-feature mask
`0`.
- Removed the alternate layout selector, compatibility creator, fallback
engine, and retired mapped-record surface. Ordinary
`SharedMemoryStoreOptions.Create(...)` and `CalculateRequiredBytes(...)` are
the only managed sizing and creation helpers.
- A noncurrent, unknown, or malformed mapping is rejected with
`IncompatibleLayout` before key, descriptor, payload, slot, lease, or
participant projection. There is no in-place conversion.

### Added

- Completed independent native `SharedMemoryStore` `1.0.0` and Python
`shared-memory-store` `1.0.0` distributions on the same SMS2 protocol.
- Advanced the fixed-width native boundary to C ABI `2.0`, including
participant-aware layout sizing, protocol identity, cancellation, expanded
diagnostics, lifecycle operations, and ownership-safe opaque tokens.
- Added complete C++, Python, and nine ordered .NET/C++/Python interoperability
coverage for publication, reservations, leases, removal/reuse, recovery,
participant capacity, diagnostics, corruption rejection, and held-cold-lock
progress.

### Changed

- Hot publish, segmented publish, reserve, commit, abort, acquire, release,
remove, reclaim, recovery help, and diagnostics use mapped lock-free atomics
and bounded helping; OS synchronization is limited to cold create/open/close
coordination.
- Managed diagnostics now expose the canonical five-field protocol identity,
SMS2 participant and directory state, and local retry/help/token/recovery
telemetry without obsolete tombstone or compaction fields.
- Updated NuGet metadata and XML documentation for version `3.0.0`, CMake
metadata for version `1.0.0`/ABI `2.0`, and Python metadata for version
`1.0.0`/required ABI `2.0`.

### Migration

- Stop writers and readers, drain leases and reservations, close every handle,
remove or replace the noncurrent physical store, create a fresh SMS2 store,
and republish values from an application-owned authoritative source.
- A side-by-side cutover must use a distinct public store name. Current clients
do not read an old mapping as a migration source.

## 2.0.0 - 2026-07-13

### Added
Expand Down
19 changes: 18 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,27 @@ cmake_minimum_required(VERSION 3.20)

project(
SharedMemoryStore
VERSION 0.1.0
VERSION 1.0.0
DESCRIPTION "Cross-process shared memory value store"
LANGUAGES CXX)

if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
message(FATAL_ERROR "SharedMemoryStore SMS2 requires a 64-bit process.")
endif()
string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" _sms_system_processor)
if(NOT _sms_system_processor MATCHES "^(amd64|x86_64|x64)$")
message(
FATAL_ERROR
"SharedMemoryStore SMS2 requires x86-64; detected '${CMAKE_SYSTEM_PROCESSOR}'.")
endif()
unset(_sms_system_processor)
include(TestBigEndian)
test_big_endian(_sms_is_big_endian)
if(_sms_is_big_endian)
message(FATAL_ERROR "SharedMemoryStore SMS2 requires little-endian x86-64.")
endif()
unset(_sms_is_big_endian)

include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
find_package(Threads REQUIRED)
Expand Down
Loading