Skip to content
Draft
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
36 changes: 36 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,42 @@

Notable user-visible changes are recorded here. SpWKit follows semantic versioning for package releases while the public C ABI remains explicitly versioned through `SPWKIT_API_VERSION_*`.

## v0.7.0 — 2026-09-11

Behavioral/backend-contract hardening release. v0.7 defines the software-visible semantics that virtual and future physical providers must preserve, adds requirement-level ECSS SpaceWire software-conformance traceability, and makes performance-regression acceptance an explicit release gate.

### Added

- reusable public backend-contract execution for the deterministic DRIVER/reference provider (#211);
- versioned backend behavioral-equivalence matrix `v1-r1` and aggregate proof across SIMULATOR, VSPW-TP/UDP, Linux DEVICE/VSPD and DRIVER (#214);
- project-owned ECSS-E-ST-50-12C Rev.1 applicability/traceability matrix `v0.7-r2`, with seven specifically enumerated `Software verified` requirements and explicit provider/hardware-delegated, not-applicable and not-implemented/future dispositions;
- release-performance comparison tooling against immutable release baselines, repeated hosted screening and controlled same-runner aggregation;
- explicit pre-v1 ECSS-E-ST-40 and ECSS-Q-ST-80 sequencing in the v0.8/v0.9 roadmap.

### Changed

- defined and enforced same-handle serialization expectations, distinct-handle concurrency scope, lifecycle behavior, complete-operation timeout semantics, canonical result meanings, bounded-resource semantics and reset-safe zero-copy ownership epochs (#212);
- constrained the represented ECSS time-code profile to six-bit counts with `control_flags == 0`;
- removed duplicate generic packet-shape validation from the LOOPBACK backend after the public core validation path became authoritative;
- retained the zero-copy ownership guard after controlled batched measurement isolated its actual cost at approximately **+2.06 invariant-counter ticks per acquire+release pair**, while a semantics-preserving direct rewrite measured slightly slower;
- aligned package/API versioning and installed consumer requirements on the `0.7` package line.

### Verification

- common backend-contract evidence covers copied packet paths, zero-length packets, EOP/EEP, receive capacity retention, time codes, zero-copy interoperability, lifecycle, timeout/error/resource semantics and reset ownership behavior across the applicable backend families;
- controlled v0.7 performance campaigns compare against immutable `v0.6.1` at `03869c0b3bc9e895e0fe61a36f24cff2ace7d527` on matched hosts/toolchains/counters;
- post-cleanup controlled measurements show no recurring LOOPBACK regression, no recurring significant UDP regression, effectively flat DRIVER copied/lifecycle behavior, and DEVICE variation consistent with hosted measurement noise rather than a reproducible source-correlated regression;
- the existing NUCLEO-H755ZI-Q DMA2/Cortex-M7 cache qualification and immutable CCSDSPack `v2.0.0` integration baseline remain part of the provider/integration evidence;
- scoped ECSS conformance claims are backed by executable tests and limited to the requirement rows explicitly marked `Software verified`.

### Scope

- SpWKit v0.7.0 conforms to the specifically enumerated ECSS-E-ST-50-12C Rev.1 requirements/subclauses marked `Software verified` in the release matrix for the tested endpoint/link software abstraction;
- physical-layer, encoding, concrete controller/link-engine, flow-control, link-initialization/recovery, electrical and complete node time-code-engine requirements remain delegated to concrete providers/hardware;
- distributed interrupts, standardized node-management parameters and the SpaceWire MIB/service are not part of the v0.7 positive claim and are evaluated before the v1.0 API freeze;
- generic router implementation remains outside the core endpoint/link product scope;
- ECSS-E-ST-40 and ECSS-Q-ST-80 applicability/compliance work is planned for v0.8/v0.9 and is not claimed by v0.7.0.

## v0.6.1 — 2026-09-10

Maintenance and performance-consolidation release on the v0.6 line. It preserves the existing public application/backend contract while recording the completed profiling infrastructure, accepted performance optimizations, and synchronized post-v0.6 documentation.
Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.20)
# public C ABI and is never required by the runtime implementation.
project(
spwkit
VERSION 0.6.1
VERSION 0.7.0
DESCRIPTION "SpaceWire Development & Integration Toolkit"
LANGUAGES C
)
Expand Down
31 changes: 17 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ The runtime is C11. The optional C++17 layer is header-only and forwards to the

## Project status

### Stable: v0.6.1
### Stable: v0.7.0

`v0.6.1` is a maintenance and performance-consolidation release on the v0.6 software contract. It preserves the public application/backend API while completing profiling metadata, incorporating accepted transport/readiness optimizations, and synchronizing the post-v0.6 documentation.
`v0.7.0` hardens the software-visible backend contract before the planned v0.8 API/ABI cleanup phase. It defines stable threading, lifecycle, timeout, error, resource, and zero-copy ownership semantics; makes simulator-to-backend behavioral equivalence executable; introduces scoped ECSS-E-ST-50-12C Rev.1 software-conformance traceability; and closes the release with a controlled performance-regression gate against immutable `v0.6.1`.

Highlights:

Expand All @@ -41,20 +41,23 @@ Highlights:
- packet EOP/EEP preservation, time codes, link lifecycle/state, readiness, statistics, deterministic timing/fault support, and optional zero-copy ownership;
- C11 authoritative runtime with caller-owned/no-heap construction;
- optional header-only C++17 consumer layer;
- portable `SPW_BACKEND_DRIVER` callback/configuration contract;
- portable `SPW_BACKEND_DRIVER` callback/configuration contract with a reusable public backend-contract test suite;
- DMA-capable driver ownership mapped onto the existing `spw_buffer_t` API;
- deterministic reference-driver and freestanding/no-heap evidence;
- explicit same-handle serialization, distinct-handle concurrency, complete-operation timeout, result-code, reset, and zero-copy ownership-epoch semantics;
- versioned `v1-r1` backend behavioral-equivalence evidence across SIMULATOR, VSPW-TP/UDP, Linux DEVICE/VSPD, and DRIVER;
- scoped ECSS-E-ST-50-12C Rev.1 `v0.7-r2` traceability with seven specifically enumerated `Software verified` requirements and explicit delegated/future/not-applicable boundaries;
- accepted CCSDSPack `v2.0.0` baseline at `c2f318c330c564429bcc565a8acbff22728b2851`;
- CCSDSPack PUS-C TC/TM interoperability over installed-package UDP, Linux DEVICE/VSPD, and a two-node Docker Compose topology;
- physical NUCLEO-H755ZI-Q Cortex-M7 DMA/cache/zero-copy qualification;
- completed profiling host/build/counter metadata and explicit backend coverage classification;
- controlled VSPW-TP 4096-byte RX paired overhead reduction from 60,281 to 25,032 invariant-TSC ticks (58.5%) after reassembly optimization;
- physical NUCLEO-H755ZI-Q Cortex-M7 DMA/cache/zero-copy qualification through the public driver boundary;
- controlled release-performance comparison against immutable `v0.6.1`, including removal of duplicate LOOPBACK validation and quantified retention of the reset-safe zero-copy ownership guard;
- controlled VSPW-TP 4096-byte RX paired overhead reduction from 60,281 to 25,032 invariant-TSC ticks (58.5%) retained from the v0.6 performance work;
- POSIX UDP and Linux DEVICE/VSPD optimistic-ready I/O paths that remove avoidable poll-first work while preserving timeout/error semantics;
- Debian/GHCR publication for `amd64`, `arm64`, `armhf`, and `riscv64` hosted targets.
- Debian/GHCR publication support for `amd64`, `arm64`, `armhf`, and `riscv64` hosted targets.

See the [v0.6.1 release notes](docs/releases/v0.6.1.md) and [current project status](docs/current-status.md).
See the [v0.7.0 release notes](docs/releases/v0.7.0.md), [current project status](docs/current-status.md), and [ECSS conformance boundary](docs/ecss-conformance.md).

The v0.6 public boundary deliberately stops before proprietary FPGA/HDL implementation details and before physical SpaceWire PHY/electrical interoperability claims. Hosted profiling values are reference evidence for their named environments, not physical SpaceWire performance specifications.
The public software claim deliberately stops before proprietary FPGA/HDL implementation details and before physical SpaceWire controller/PHY/electrical interoperability claims. Hosted profiling values are reference evidence for their named environments, not physical SpaceWire performance specifications.

## Supported backends

Expand Down Expand Up @@ -213,7 +216,7 @@ This is real MCU DMA/cache evidence. It is not SpaceWire PHY/electrical HIL.

CCSDSPack is an optional upper-layer integration dependency, not a dependency of `libspwkit`.

SpWKit v0.6 pins the interoperability fixture to:
SpWKit v0.7 pins the interoperability fixture to:

```text
CCSDSPack v2.0.0
Expand Down Expand Up @@ -256,25 +259,25 @@ cmake --build build-freestanding

## Installation and consumers

Stable v0.6 consumers use the exported C target:
Stable v0.7 consumers use the exported C target:

```cmake
find_package(SpWKit 0.6 CONFIG REQUIRED)
find_package(SpWKit 0.7 CONFIG REQUIRED)
target_link_libraries(my_app PRIVATE spwkit::spwkit)
```

When the package was built with `SPWKIT_ENABLE_CPP=ON`:

```cmake
find_package(SpWKit 0.6 CONFIG REQUIRED)
find_package(SpWKit 0.7 CONFIG REQUIRED)
target_link_libraries(my_cpp_app PRIVATE spwkit::cpp)
```

Standalone installed-package examples live under `examples/installed*`, distributed peers under `examples/distributed*`, and upper-layer/platform integrations under `integrations/`.

## Binary releases

`v0.6.1` publishes Debian packages for:
`v0.7.0` publishes Debian packages for:

```text
amd64
Expand Down
20 changes: 16 additions & 4 deletions benchmarks/v0.7.0-performance-evidence.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,21 @@ The primary release baseline is:

The runtime candidate measured after the LOOPBACK duplicate-validation cleanup is:

- candidate: `23eceeb0389e02d66febf5a0f027cc3e9153b14a`
- measured runtime candidate: `23eceeb0389e02d66febf5a0f027cc3e9153b14a`

The candidate commit contains the same v0.7 runtime-contract/backend-equivalence implementation as `develop` plus the narrow LOOPBACK hot-path cleanup from PR #226. Documentation-only commits after this measurement do not change the measured runtime source.
The cleanup and evidence were integrated to `develop` by PR #226 at:

- merged runtime/evidence integration point: `b89ef7871d583923dd58beb9913c1a50a4c9af2d`

The pre-v1 ECSS roadmap was then merged without runtime changes at:

- release-preparation base: `aa16b3e9abbf05e8c543e16643d3cf99f8d9189d`

The v0.7.0 package/API/release-document preparation reached the evidence-freeze point at:

- release-preparation metadata candidate: `bb2dd94aef8a0cb4aa0ba9e665937e7a637b0b39`

The commits after `23eceeb0389e02d66febf5a0f027cc3e9153b14a` do not alter the measured runtime implementation. PR #226 integrates that runtime cleanup; the later roadmap/release-preparation changes are documentation, package-version, API-version-macro, and installed-consumer requirement updates. They do not add or modify a runtime hot path. The exact final release-preparation PR head is recorded in #224 after this evidence annotation and its complete CI fan-out are green, avoiding a meaningless self-referential commit-SHA requirement inside the file that defines the final commit.

## Controlled repeated campaign

Expand Down Expand Up @@ -91,8 +103,8 @@ The original +24-tick per-call observation is retained as useful evidence about

## Release-performance conclusion

The v0.7 candidate has no unexplained reproducible software regression that warrants additional runtime optimization before release. The one attributable new fixed cost, zero-copy RX ownership validation, is approximately two architectural counter ticks per acquire+release pair in the batched probe and is required by the new reset-safe/cross-port ownership semantics.
The v0.7 runtime candidate has no unexplained reproducible software regression that warrants additional runtime optimization before release. The one attributable new fixed cost, zero-copy RX ownership validation, is approximately two architectural counter ticks per acquire+release pair in the batched probe and is required by the new reset-safe/cross-port ownership semantics.

PR #226's LOOPBACK cleanup is justified because it removes validation already performed by the public core while preserving backend-specific state, packet-size and resource checks; repeated profiling shows the LOOPBACK path back within normal v0.6.1 variation.

Final release acceptance still requires the post-merge candidate to pass the complete functional/platform/profiling CI suite and the final release-candidate evidence to be frozen before tagging `v0.7.0`.
The final v0.7.0 release-preparation head must pass the complete functional/platform/profiling and release-performance CI suites. #224 records that exact head after those checks complete and is closed before the `v0.7.0` tag may be created.
Loading
Loading