Skip to content
Wiki Keeper (Grok Bot) edited this page Oct 26, 2026 · 25 revisions

corpus-ipc

Banner

DeepWiki

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 with rust-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 in src/compatibility.rs became a single matches! guard, is_multiple_of in src/zmq_readout.rs became % 4 != 0, and fuzz/src/lib.rs dropped is_multiple_of and as_chunks. fuzz/Cargo.lock now pins the path dependency at 0.2.1, and tests/compatibility.rs adds a test for a duplicate payload key with no wire_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 with encode_canonical_ipc_message and a consumer decodes with decode_ipc_message_json. The 0.2.0 CHANGELOG notes the change. See 4.4.
  • #65 (0a5b6a5): removed build.rs and src/zmq_api_lock.cpp (and their include entries) 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): shipped Cargo.lock moves to tokio 1.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 that scripts/cxx-libzmq-pipefix.sh is repository-only and rewrites the shared registry copy of zeromq-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"; the Cargo.toml docs.rs comment notes docs.rs passes --cfg docsrs. The commit says no tag or publish. See 7.1.
  • Version 0.2.0 in Cargo.toml and the CHANGELOG ([0.2.0] - 2026-10-26, re-dated in #68; compare links for v0.1.0...v0.2.0), README install snippets now "0.2", and docs.rs now builds with all-features = true so the zmq and server APIs are documented (#62). 0.2.0 was later tagged v0.2.0, published, and yanked; see #69 above. See 1.1 and 7.1.
  • libzmq crash fixes for the zmq feature (#62): every socket now uses one process-wide libzmq context (private src/zmq_context.rs). (#62 also added a Linux build.rs API lock, removed in #65.) CI, coverage, fuzz, and scripts/verify.sh compile vendored libzmq 4.3.4 through scripts/cxx-libzmq-pipefix.sh, which patches the pipe.cpp shutdown double-free (libzmq#4806) and 64-byte-aligns yqueue.hpp chunks. 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, f32 normalization, neuron_id alias, and negative outcomes as the Rust vector tests; a separate Linux CI job wire-v1-conformance runs 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.sh qualifies 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.
  • thiserror 2.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 in src/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-version to 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-only Fuzz smoke workflow, and stable regression replay in tests/fuzz_regressions.rs (#58 / LIM-1277). The published crate is unchanged. See 7.2 and 7.3.
  • Structured ZeroMQ IpcMessage transport (ZmqMessagePublisher / ZmqMessageSubscriber / ZmqTransportConfig / ZmqHybridFlowBackend, ZmqMessageError, STRUCTURED_MAX_FRAME_BYTES = 512 MiB) behind feature zmq (#55 / LIM-1278). See 3.4.
  • BackendError::Protocol(ProtocolError) for unexpected inbound IpcMessage variants on hybrid receive (#55). See 2.4.
  • ZmqIpcBackend does not implement HybridFlowBackend; 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).

Start here

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

Clone this wiki locally