Library structure
One core crate, two shipped frontends, one planned:
- CLI —
penmark <verb> <genre>for every operation: solve, generate, scaffold, grade, enumerate, profile-eval/init, import, list-impls. The actual verb set lives in the CLI chapter. - eframe desktop app — local GUI for the same operations: build a puzzle, watch it solve, browse the dataset, browse the db.
- WASM (not built yet) — eventual wasm-bindgen surface so the
website at
ordo/editcan call the same engine in-browser. Solving- grading + library introspection only; DB and enumeration stay CLI-side. The wire format on both sides is the tagged envelope described in the Tagged serialization chapter.
CLI and eframe call into the same core directly via Rust types — see the Dispatching chapter for the routing approach.