Status
Four genres (Akari, Sudoku, Slitherlink, Takuzu) run end-to-end on a
single CSP engine, on CLI + eframe. OR-Tools wired in as a
cross-check oracle. Canonical/wire layer ingests external puzzle
formats via puzzlehound. Tagged-serialization (puzzle blobs) and
the saved-game wire format (puzzle + marks envelope) both ship,
with round-trip tests across every genre via the single
Puzzle::from_tagged_json[_with_marks] path. The Tier 1
presentation surface (MarkRenderStyle, Material, material,
cell_clue, is_play_target, format_value on Puzzle;
marks / get / set / clear on Game) lives on the trait,
and eframe consumes it (per-genre HashMap mark stores collapsed
into the generic tagged::Marks).
Open frontiers — designs documented in this book that haven’t yet landed in the code:
-
Substrate reification +
Pinconstraint. Documented in the Substrates and Constraints chapters; not yet implemented. The big move: collapseSUBSTRATES/coords()/coord_bg()/los_blocks()/rows()/cols()into onesubstrate()accessor returning aSubstratestruct with four direct layer fields.BgbecomesMaterial; the discriminator enum renamesSubstrate→Layer. Givens collapse into the constraint list asPin(single-coord) orExactCount/Sum(count-shaped); per-genreclues: HashMapfields stay as editor scaffolding only. -
Constraint owns its regions +
Region.presentation. Documented in the Constraints chapter (Regions section) and Decorations, Themes and Colors; not yet implemented.region: Regionbecomesregions: Vec<Region>onConstraint— owned by the constraint, no separate region registry.Regionwraps aRegionShapeplus an optionalRegionPresentation(border / fill / label / shaded / decoration). The renderer’s per-genre paint code collapses to a single walk:puzzle.constraints().iter().flat_map(|c| &c.regions), painting whateverpresentationis set. -
Generic grid widget. Once
Region.presentationand substrate land, eframe’s per-genredraw_grid/paint_edgecollapse onto a single widget that dispatches onMARK_RENDERfor marks and walksconstraintsfor region presentations. -
WASM bindings, discovery / coverage CLI verbs, expanding the genre catalog, and deciding the registry shape the website will want — all open work.
Shape, traits, and module layout will keep iterating; this book is the current snapshot, not a contract.