All notable changes to this project are documented in this file.
Format follows Keep a Changelog. This project adheres to Semantic Versioning.
Purge policy: This file retains the latest 10 releases in reverse chronological order. Older entries are archived to
docs/releases/v<semver>.mdand removed from this file. For individual release summaries, seeRELEASE_NOTES.md.
- TypeScript async peer surface:
AsyncPeer,AsyncListener,recvAsync,recvOnAsync, async channel receivers, and promise-based send/ping/shutdown backed by RustAsyncPeer; includesAbortSignalcancellation for pending receives and Node/Bun timer-liveness coverage.
0.2.1 — 2026-04-04
Windows named pipe transport (sync + async), CI/releng expansion, and developer experience improvements.
- Windows named pipes (sync):
NamedPipeListenerandNamedPipeStreamreplace theUnavailableplaceholder inipcprims-transport; peer connect/listen paths wired to named pipes on Windows - Windows named pipes (async):
AsyncNamedPipeStreamtransport wrapper; async peer/platform gates lifted soAsyncPeer/AsyncPeerListener/async_connectcompile and work on Windows - Named pipe timeouts: Overlapped I/O enforcement of read/write timeouts on Windows named pipes, with timeout reset/clamp tests
- Named pipe access control: Owner-only DACL for Windows named-pipe listener instances (aligns with Unix 0o600 semantics)
- Windows test coverage: Multi-client reconnect, DACL verification, async transport roundtrip, timeout behavior, peer unsupported-behavior tests
- Windows CLI dogfood:
cli-matrix.shsupports Windows named pipe paths with retry helper and explicit process tracking - Windows CI/releng:
windows-test,windows-test-async,windows-dogfoodjobs in CI; Windows CLI build jobs (x64 + arm64) in release workflow - Dev tooling:
make doctor-envtarget for environment diagnostics;make check-unix-clippyfor cross-host lint coverage of Unix-gated code - Documentation:
docs/guides/windows-dev-setup.md,docs/guides/windows-arm64-rough-edges.md,docs/guides/npm-publishing.md - Roles:
devrevrole definition for code review agents
- Peer disconnect handling:
BrokenPipeandConnectionResetframe errors classified asDisconnected(notFatal) — fixes echo server exit on Windows pipe closure - CI windows-cross-check: Scoped to foundation crates (
ipcprims-transport,ipcprims-frame) to match localmake check-windows*targets - npm publish: Idempotent — skips already-published versions; OIDC npmrc fix ported from sysprims; registry API used for package verification
- cbindgen: 0.29.0 → 0.29.2; header refreshed
- RUSTSEC-2026-0049:
rustls-webpki0.103.9 → 0.103.10 (CRL distribution point matching) - npm publish E404:
setup-nodealways-auth=trueoverride fixed by writing cleanNPM_CONFIG_USERCONFIG - Windows prepush: Unix-gated clippy paths caught via
make check-unix-clippyon Windows hosts - Named pipe write-timeout test: Handle
Ok(0)to prevent infinite loop on pipe close
- Transitive dep duplication:
getrandom(0.2 + 0.3) andwindows-sys(0.60 + 0.61) viajsonschemadep tree. No functional impact.
0.2.0 — 2026-02-26
Tokio-native async API on Unix (UDS), MSRV consistency fixes, and dev tooling improvements.
- Async (Tokio, Unix-only):
ipcprims-transportasync UDS transport (AsyncUnixDomainSocket,AsyncIpcStream),ipcprims-frameasync codec (IpcCodecfortokio_util::codec::Framed*), andipcprims-peerasync peer API (AsyncPeerwith split Tx/Rx). (feature:async) - Async test hardening:
tokio_util::codec::Framedintegration test forIpcCodec, oversize-length rejection regression test, and async UDS hardening parity tests. - AsyncPeer cancellation: optional external
CancellationTokenwiring for structured shutdown, and reader task cancellation on drop (prevents leaked background read tasks). - Dev tooling:
scripts/commit-template-ai.txthelper for correct AI-assisted commit trailers. - Makefile:
check-windows,check-windows-msvc,check-windows-gnu,check-windows-arm64-msvctargets for local Windows targetcargo check(no link) of core crates — mirrors CIwindows-cross-checkwithRUSTFLAGS="-Dwarnings". - CI MSRV: tag-triggered
msrv-matrix.ymlworkflow for release-time MSRV confirmation (Linux/macOS/Windows). - ADR-0001: accepted design decision for async peer receive model (arrival-ordered global queue vs per-channel fanout).
- PeerConfig: added
enable_any_delivery(async-only; defaults to enabled) to allow construction-time disabling of the arrival-orderedany_rxqueue for channel-only consumers. - MSRV policy: README badge updated to
1.85+; core crate MSRV remains 1.85.0;ipcprims-napioverrides to 1.88.0 (napi-build requirement). - Makefile: added
make msrvtarget for local MSRV verification (excludesipcprims-napi).
- AsyncPeer: reader task now cancels on drop (fixes resource leak for background read tasks).
- MSRV alignment: envinfo test fixture updated to 1.85.0; NAPI Cargo.toml override documented.
0.1.2 — 2026-02-15
Release pipeline: multi-platform FFI build matrix, SBOM generation, and structured draft releases — matching the sysprims/docprims release pattern.
- release.yml: Complete rewrite from 4-job skeleton to 14 release-specific jobs (35 total including CI call) — multi-platform FFI builds, cbindgen header, CycloneDX SBOM, FFI bundle packaging, and draft GitHub release with platform matrix table
- ipcprims-peer: cfg-gated Unix-specific imports behind
#[cfg(unix)]soipcprims-fficompiles on Windows targets; non-Unix builds return explicitUnsupportederrors (no fake runtime support)
- release.yml known issue: Resolved the v0.1.1 known issue — release pipeline now produces full multi-platform FFI bundles instead of the minimal skeleton
- Go prebuilt libs: Not yet populated —
go-bindings.ymlmust run before tagging to create prebuilt libs PR. Tracked as v0.1.2 pre-tag checklist item (d4-02). - Transitive dep duplication:
getrandom(0.2 + 0.3) andwindows-sys(0.60 + 0.61) viajsonschemadep tree. No functional impact.
0.1.1 — 2026-02-15
Infrastructure release: cross-language binding scaffolds (FFI, Go, TypeScript) and CI/release pipeline maturation.
- ipcprims-ffi: C-ABI crate with
staticlib+cdyliboutputs; exports for init, listener, peer, frame, schema;cbindgen-generated header (be2dd5d) - Go bindings: CGo module at
bindings/go/ipcprimswith Listener, Peer, SchemaRegistry; stub FFI bridge for platforms without prebuilt libs (965fbf1) - TypeScript bindings: NAPI-RS package
@3leaps/ipcprimsatbindings/typescriptwith Listener, Peer, SchemaRegistry; 5-platform prebuild matrix (319d037) - CI:
windows-cross-checkjob —cargo checkfor 3 Windows targets (msvc x64, gnu x64, msvc arm64) without SDK - CI:
test-musljob — build + test onx86_64-unknown-linux-musl - CI:
ffijob — cbindgen header generation + C smoke test (Linux, macOS) - CI:
go-bindingsjob — Go build + lint + test (Linux, macOS) - CI:
typescript-bindingsjob — NAPI build + test + typecheck (Linux, macOS) - Workflows:
go-bindings.yml— multi-platform FFI build pipeline with PR creation for prebuilt libs - Workflows:
typescript-bindings.yml— cross-platform test matrix (4 OS + Alpine musl) - Workflows:
typescript-napi-prebuilds.yml— build.nodeprebuilds for 5 platforms via zig cross-compilation - Workflows:
typescript-npm-publish.yml— OIDC trusted publishing to npm - Release scripts: download, upload, checksum scripts now handle FFI bundles, C headers, and SBOM artifacts
- Go workspace: root
go.mod+go.workfor repo-level Go tooling compatibility - actionlint config:
.github/actionlint.yamlwith self-hosted runner labels
- RELEASE_CHECKLIST.md: Added Go bindings pre-tag workflow and TypeScript post-signing publish steps
- Makefile: Binding workflow instructions replace v0.2.0 stubs
- cbindgen.toml: Updated from placeholder to production configuration for ipcprims-ffi
- FFI
map_peer_errormatch exhaustiveness under Cargo workspace feature unification (error.rs) - FFI
ipc_schema_registry_freeneedless-return lint under conditional compilation (schema.rs) - TypeScript test file: replaced
anytypes with typed interfaces (ipcprims.test.ts) - TypeScript loader: replaced
&&chain with optional chaining (index.js) - goneat assess config: disabled shellcheck, added Go linting note (sysprims parity)
- Async API: Feature flags declared but no async code exists. Planned for v0.2.0.
- Transitive dep duplication:
getrandom(0.2 + 0.3) andwindows-sys(0.60 + 0.61) viajsonschemadep tree. No functional impact. - release.yml: Still uses minimal v0.1.0 skeleton (validate + create release). Multi-platform build matrix planned for v0.1.2.
- Go prebuilt libs: Not yet populated —
go-bindings.ymlworkflow creates the PR. Stub bridge compiles but FFI calls returnErrFFIUnavailablewithout prebuilts.
0.1.0 — 2026-02-13
First functional release. Transport, framing, schema validation, peer management, and CLI.
- ipcprims-transport: Unix domain socket transport with bind/accept/connect, hardened default permissions (0o600), automatic socket cleanup on drop (
aff997d,5557234) - ipcprims-frame: Length-prefixed wire format codec (
[magic:2][length:4 LE][channel:2 LE][payload]), sync FrameReader/FrameWriter with partial-read handling and configurable timeouts (aff997d) - ipcprims-frame: Built-in channel constants (CONTROL=0, COMMAND=1, DATA=2, TELEMETRY=3, ERROR=4) with user-defined range 256-65535 (
aff997d) - ipcprims-schema: JSON Schema 2020-12 validation via SchemaRegistry with strict mode, directory loading, symlink rejection, and file-size limits (
46fa086) - ipcprims-peer: Handshake protocol over CONTROL channel with version negotiation, channel intersection, and optional auth token (
3e50d00) - ipcprims-peer: Peer API with send/recv/recv_on/request patterns, bounded per-channel buffering, control flood protection, ping/pong, graceful shutdown (
67c0da0) - ipcprims (CLI): P0 commands —
listen,send,echo,versionwith--format json|table|pretty|rawoutput and rsfulmen-aligned exit codes (33ea05a) - ipcprims (CLI): P1 commands —
info,doctor,envinfo,version --extendedwith build provenance (f1bff63) - ipcprims (CLI):
send --waitwith--wait-timeoutand ERROR channel negotiation (175319f) - ipcprims (CLI):
echo --validatewith JSON error payloads on ERROR channel (e6124dd) - Examples:
echo-serverandmulti-channelin umbrella crate (39ed82f) - Dogfooding infrastructure:
scripts/dogfood/cli-matrix.sh, guide atdocs/guides/cli-dogfooding.md,make dogfood-clitarget (64d7b92) - Decision records: DDR-0001 (transport scope), DDR-0002 (CLI precepts), SDR-0001 through SDR-0005 (security boundaries) (
5c92612,7c8869d,9220e93) - Architecture overview at
docs/architecture.md(5c92612) - CI/CD: GitHub Actions workflows for CI and release, Makefile with quality gates (
f084488) - Agentic roles: devlead, deliverylead, secrev, qa, releng, cicd, infoarch (
5557234,39ed82f)
- FrameReader now propagates WouldBlock as IO error instead of retrying unconditionally, restoring Peer timeout semantics on macOS (
175319f) send --waitnegotiates ERROR channel for validation error responses (175319f)echo --validatesends schema error payloads on ERROR channel and continues serving (e6124dd)send --waitreceives on sent channel viarecv_oninstead of any channel (e6124dd)- Auth token no longer exposed via
handshake_result()accessor; requires explicittake_client_auth_token()(044a23a) - Auth token redacted from Debug output of HandshakeResult (
32dab4d) - Schema directory loading hardened: symlink rejection, file-size cap, schema-count cap (
bd428fb) - Windows file-identity check added for schema loader race hardening (
691067b) - Peer and transport defaults hardened per SDR-0002 (
9c4b213) - Build target triple exported for
envinfovia build.rs (7d94887) - Envinfo version test made dynamic via CARGO_PKG_VERSION (
67a70df) - Doctor non-Unix platform transport check made explicit (
67a70df)
- Async feature flags (
async) are declared across crates but no async code exists yet. Planned for v0.2.0. - Transitive dependency duplication:
getrandom(0.2 + 0.3) andwindows-sys(0.60 + 0.61) viajsonschemadependency tree. No functional impact; tracked for supply chain awareness. cbindgen.tomlis present as a placeholder; theffi/crate does not exist yet. Shipped in v0.1.1.