pipecircuit 0.0.23

Correct. Robust. Fast. Portable. Pick four.
Documentation
# Pipecircuit

> **HERE BE DRAGONS**
>
> You probably shouldn't be using this, yet.

Correct. Robust. Fast. Portable.\
Pick four.

A Rust framework for software development that's strict enough to hand to an
agent, with performance you'll be proud to ship.

The `storage` feature provides bounded primary-indexed structure-of-arrays
through `pipecircuit::storage::warp_table`. The default
`secondary-indexes` feature adds declared Roaring-backed secondary indexes,
fluent set-algebra queries over opaque selections, and ordered selections
ranked by bit-sliced range indexes. Query results resolve to
flat generated row references containing `id` beside the declared row fields;
internal stable membership and bitmap representations never enter the public
query surface.

The present storage and secondary-query implementation uses `alloc`. A future
feature boundary should let consumers select fixed-capacity and alloc-backed
storage/query facilities independently; the current API does not pre-empt that
design.

A `Pipe` names independent inbound and outbound semantic families. An
`InstalledPipe<Protocol, Transport>` installs concrete access to that contract.
A local implementation can be a core machine that does not implement `Pipe`:

```rust
use pipecircuit::{Inline, InstalledPipe, Pipe, StateMachine, StepInputOf};

struct Counter(u8);
impl StateMachine for Counter {}
struct Read;
impl StepInputOf<Counter> for Read {
    type Outcome = u8;
    fn step(self, counter: &mut Counter) -> u8 { counter.0 }
}

struct Counting;
impl Pipe for Counting {
    type In<'message> = Read;
    type Out<'message> = u8;
}

let mut installed = InstalledPipe::<Counting, _>::new(Inline::for_pipe(Counter(7)));
assert_eq!(installed.send(Read), 7);
```

`Inline` proves one synchronous step returns exactly the pipe's output.
Other transports implement `TransportTo` and `TransportFrom` independently:
submission is a physical fact, not a promise of an immediate semantic response.
A foreign program can fulfill the contract without running Pipecircuit.

The 0.0.17 API renames `Participant` to `Pipe`, the former installed `Pipe`
to `InstalledPipe`, and `DuplexFitting` to `DuplexTransport`. `PipeIn` and
`PipeOut` select directional codec families. `Inline::new` retains the direct
machine-as-contract form; `Inline::for_pipe` selects a separate contract.