Pipecircuit CLI
Create and run a native program with a pure core, a semantic program, and a physical CLI:
The default starter is a counter with exact addition and overflow outcomes,
Client and Counting pipe contracts, an exhaustive CounterProgram, and a
bounded Mio installation. An ordinary CLI thread fulfills the client contract;
the counter authority runs inline. Wakes drive progress without polling sleeps.
A final read and explicit peer close complete the program. Its README walks
through author responsibilities, changing behavior, and placement obligations.
The default uses pinned crates.io releases. For framework development,
--framework-path /path/to/Pipecircuit/pipecircuit selects a checkout with its
sibling Mio and visualization crates instead. Missing local manifests are refused
before creating the destination. Generation never contacts the registry; Cargo
resolves the selected dependencies when you build the new program.
Use --name my-program when the destination's final directory component should
not be the package name. Generated source uses stable dependency aliases, and
hyphenated package names work in the included Rust documentation tests.
The dependency direction is src -> programs -> core. Both libraries are
no_std; all packages inherit the same strict Rust and Clippy rules. A project
may grow additional local or shared core/program libraries. Generation refuses
an existing destination and validates portable project names. Templates are
embedded in the executable; generation performs no network requests, Cargo
execution, or Git initialization. On an I/O failure, the new partial directory
is retained for inspection.
tools/check-scaffold formats, compiles, lints, and tests the generated workspace,
runs its CLI, checks that core cannot import the program, and checks its fuzz
workspace. Runtime tests exercise one-slot queue reuse, overflow, invalid input,
and orderly completion; compile-fail examples guard missing/incorrect pipe
installations. The source-derived architecture snapshot is executable evidence.
The proof/fuzz placeholders do not claim completed proof or fuzz coverage.
Render a state machine from the current crate: