Repository navigation
Home
Wiki Keeper (Grok Bot) edited this page Oct 26, 2026
·
25 revisions

Spike and neuromodulator wire protocol and IPC transports for Limen-Neural SNN runtimes: wire models, IpcBackend / RustBackend, optional ZeroMQ binary readout and structured IpcMessage PUB/SUB (zmq), and an optional Axum 0.8 REST binary (server) under the v0.2 contract.
| Version |
0.2.1 on main (Cargo.toml, CHANGELOG [0.2.1] - 2026-10-26, #69, date corrected in #70). 0.2.1 is published on crates.io (2026-10-26 2:35 AM CT, built from b12059f, rust-version 1.85) and is the newest release. 0.2.0 (published 2026-10-25 8:14 PM CT) is yanked because it declared rust-version 1.99.0 by mistake. 0.1.0 remains unyanked. |
| Tip (main) |
b12059f (2026-10-26 01:55 CT; #70: 0.2.1 CHANGELOG date and wording corrected, LIM-1547) |
| Latest git tag / release | tags v0.2.0 and v0.1.0; no v0.2.1 tag at this refresh even though 0.2.1 is on crates.io |
| MSRV / Edition |
Rust 1.85 / 2024 (rust-version, the floor edition 2024 sets; CI still builds with the 1.99.0 toolchain) |
| Features |
default = [], zmq, server
|
| License | MIT OR Apache-2.0 |
| crates.io | https://crates.io/crates/corpus-ipc |
| docs.rs | https://docs.rs/corpus-ipc |
| Repo | https://github.com/Limen-Neural/corpus-ipc |
Important
Wiki refreshed to main @ b12059f (0.2.1, published). Prior refresh was 22ba2e4.
-
#70 (
b12059f) (CHANGELOG only, no code change): the 0.2.1 entry is now dated 2026-10-26, and it no longer calls the packaged code identical to 0.2.0. It says three call sites that used post-1.85 std APIs were rewritten in equivalent 1.85-compatible forms, MSRV-only with no intended API or behavior changes. 0.2.1 has since been published to crates.io from this commit. -
#69 (
22ba2e4): version 0.2.1 withrust-version = "1.85". The CHANGELOG says 0.2.0 declared 1.99.0 by accident and was yanked from crates.io. Three call sites were rewritten in 1.85-compatible forms (MSRV-only, no intended API or behavior change): the let-chain insrc/compatibility.rsbecame a singlematches!guard,is_multiple_ofinsrc/zmq_readout.rsbecame% 4 != 0, andfuzz/src/lib.rsdroppedis_multiple_ofandas_chunks.fuzz/Cargo.locknow pins the path dependency at 0.2.1, andtests/compatibility.rsadds a test for a duplicate payload key with nowire_version(the decoder returns the legacy payload error). CI jobs still install Rust 1.99.0; no CI job builds on 1.85. See 7 and 1.1. -
#66 (
b460c5b) (docs only, no API or wire change): the README "Stimulus and neuromodulator ingress" section no longer names downstream repositories or draws their pipeline; it states that a producer encodes withencode_canonical_ipc_messageand a consumer decodes withdecode_ipc_message_json. The 0.2.0 CHANGELOG notes the change. See 4.4. -
#65 (
0a5b6a5): removedbuild.rsandsrc/zmq_api_lock.cpp(and theirincludeentries) because a dependency's link args never reach downstream binaries and the script failed on clang-only Linux hosts; the shared process-wide context stays. README badges now show the live Codacy grade, Qlty maintainability, and CodeRabbit reviews instead of static placeholders. See 7.1. -
#64 (
1820b1a): shippedCargo.lockmoves totokio1.54.1 (1.54.0 yanked for RUSTSEC-2026-0384); the 0.2.0 CHANGELOG and a new README section record the vendored libzmq 4.3.4 known issue and thatscripts/cxx-libzmq-pipefix.shis repository-only and rewrites the shared registry copy ofzeromq-src. See 7.3. -
62be2ae(no code change): the 0.2.0 CHANGELOG now records the MSRV move to Rust 1.99.0 (0.1.0 required 1.98.1; LIM-1515) and says "Wire version stays 1" instead of "crate version stays 0.1.0"; theCargo.tomldocs.rs comment notes docs.rs passes--cfg docsrs. The commit says no tag or publish. See 7.1. -
Version 0.2.0 in
Cargo.tomland the CHANGELOG ([0.2.0] - 2026-10-26, re-dated in #68; compare links forv0.1.0...v0.2.0), README install snippets now"0.2", and docs.rs now builds withall-features = trueso thezmqandserverAPIs are documented (#62). 0.2.0 was later taggedv0.2.0, published, and yanked; see #69 above. See 1.1 and 7.1. -
libzmq crash fixes for the
zmqfeature (#62): every socket now uses one process-wide libzmq context (privatesrc/zmq_context.rs). (#62 also added a Linuxbuild.rsAPI lock, removed in #65.) CI, coverage, fuzz, andscripts/verify.shcompile vendored libzmq 4.3.4 throughscripts/cxx-libzmq-pipefix.sh, which patches thepipe.cppshutdown double-free (libzmq#4806) and 64-byte-alignsyqueue.hppchunks. See 3.2, 3.4, and 7.3. -
Python and Julia wire-v1 conformance harnesses in
conformance/read the hashed golden corpus and check the same decode,f32normalization,neuron_idalias, and negative outcomes as the Rust vector tests; a separate Linux CI jobwire-v1-conformanceruns them on Python 3.15 and Julia 1.13 (#59 / LIM-1327). They are not part of the crate build. See 7.2.1 and 7.3. -
scripts/qualify-package.shqualifies the packaged.crate(inventory check, extracted per-feature tests, three consumer crates, feature-boundary probes, publish dry-run; never uploads) (2b5e18b…4b3b95e/ LIM-1452). It is local tooling, not a CI job. See 7.3. The code always wins over DeepWiki and Notion. -
thiserror2.x as the direct dependency (was 1.0) with compatible lockfile updates (5e4562b/ LIM-1451). Error Display text,Error::source, and variant matches are unchanged and now pinned by unit tests insrc/error.rs. Axum stays 0.8. See 2.4 and 7.1. -
Rust 1.99.0 CI toolchain (was 1.98.1; #57 / LIM-1515). #57 also set
rust-versionto 1.99.0, which #69 put back to 1.85. -
Repository-only cargo-fuzz targets in
fuzz/(fuzz_ipc_message_json,fuzz_zmq_readout_frame,fuzz_zmq_message_frame), a Linux-onlyFuzz smokeworkflow, and stable regression replay intests/fuzz_regressions.rs(#58 / LIM-1277). The published crate is unchanged. See 7.2 and 7.3. -
Structured ZeroMQ
IpcMessagetransport (ZmqMessagePublisher/ZmqMessageSubscriber/ZmqTransportConfig/ZmqHybridFlowBackend,ZmqMessageError,STRUCTURED_MAX_FRAME_BYTES= 512 MiB) behind featurezmq(#55 / LIM-1278). See 3.4. -
BackendError::Protocol(ProtocolError)for unexpected inboundIpcMessagevariants on hybrid receive (#55). See 2.4. -
ZmqIpcBackenddoes not implementHybridFlowBackend; binary readout stays separate from structured PUB/SUB. See 2.2 and 3.2. - Earlier: canonical wire-v1, wire-v1 goldens, bounded ZMQ readout parser, latest-value drain + reconnect, v0.2 REST / Axum 0.8,
scripts/verify.sh(see prior refresh notes on those pages).
| Section | What's inside |
|---|---|
| 1. Overview | What the crate is, modules, feature gates |
| 2. Core Abstractions |
IpcBackend, HybridFlowBackend, factory, errors |
| 3. Backend Implementations |
RustBackend, ZmqIpcBackend, readout parser, structured ZMQ |
| 4. IPC Protocol and Data Models |
IpcMessage and batch types |
| 5. Validation and Wire Compatibility | Limits, validation errors, envelope, canonical wire-v1 |
| 6. corpus_ipc_server HTTP Server | v0.2 REST, Axum 0.8, env / deploy |
| 7. Build, Dependencies, and Quality Gates | Features, tests, CI, verify.sh
|
| 8. Project History and Licensing | Renames and licenses |
| 9. Glossary | Terms |
Full index
- 1. Overview
- 1.1. Getting Started
- 1.2. Architecture Overview
- 1.3. Crate Exports and Module Map
- 2. Core Abstractions
- 2.1. IpcBackend Trait
- 2.2. HybridFlowBackend Trait
- 2.3. BackendFactory and BackendType
- 2.4. Error Handling
- 3. Backend Implementations
- 3.1. RustBackend
- 3.2. ZmqIpcBackend
- 3.3. ZMQ Readout Parsing and Golden Frames
- 3.4. Structured ZeroMQ IpcMessage Transport (new @ 08d2f28 / #55)
- 4. IPC Protocol and Data Models
- 4.1. IpcMessage Protocol
- 4.2. Batch Data Types
- 4.3. NeuromodulatorSnapshot and Neuromodulator Packet
- 4.4. StimulusBatch and Runtime Ingress
- 4.5. Deserialization Hooks and Model Compat Aliases
- 5. Validation and Wire Compatibility
- 5.1. Validation Framework and ProtocolLimits
- 5.2. ValidationError and ValidationKind
- 5.3. WireCompatibility and Envelope Decoding
- 5.4. Canonical Wire-v1 Encoding
- 6. corpus_ipc_server HTTP Server
- 6.1. REST API Endpoints
- 6.2. Server Configuration and Deployment
- 7. Build, Dependencies, and Quality Gates
- 7.1. Cargo Features and Dependency Isolation
- 7.2. Testing Strategy
- 7.2.1. Wire-v1 Golden Test Vectors
- 7.2.2. Property-Based Wire Tests
- 7.3. CI, Coverage, and Release Qualification
- 8. Project History and Licensing
- 8.1. Naming History and Completed Renames
- 8.2. Licensing
- 9. Glossary
- Home
- 1. Overview
- 1.1. Getting Started
- 1.2. Architecture Overview
- 1.3. Crate Exports and Module Map
- 2. Core Abstractions
- 2.1. IpcBackend Trait
- 2.2. HybridFlowBackend Trait
- 2.3. BackendFactory and BackendType
- 2.4. Error Handling
- 3. Backend Implementations
- 3.1. RustBackend
- 3.2. ZmqIpcBackend
- 3.3. ZMQ Readout Parsing and Golden Frames
- 3.4. Structured ZeroMQ IpcMessage Transport
- 4. IPC Protocol and Data Models
- 4.1. IpcMessage Protocol
- 4.2. Batch Data Types
- 4.3. NeuromodulatorSnapshot and Neuromodulator Packet
- 4.4. StimulusBatch and Runtime Ingress
- 4.5. Deserialization Hooks and Model Compat Aliases
- 5. Validation and Wire Compatibility
- 5.1. Validation Framework and ProtocolLimits
- 5.2. ValidationError and ValidationKind
- 5.3. WireCompatibility and Envelope Decoding
- 5.4. Canonical Wire-v1 Encoding
- 6. corpus_ipc_server HTTP Server
- 6.1. REST API Endpoints
- 6.2. Server Configuration and Deployment
- 7. Build, Dependencies, and Quality Gates
- 7.1. Cargo Features and Dependency Isolation
- 7.2. Testing Strategy
- 7.2.1. Wire-v1 Golden Test Vectors
- 7.2.2. Property-Based Wire Tests
- 7.3. CI, Coverage, and Release Qualification
- 8. Project History and Licensing
- 8.1. Naming History and Completed Renames
- 8.2. Licensing
- 9. Glossary