Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 + Pin constraint. Documented in the Substrates and Constraints chapters; not yet implemented. The big move: collapse SUBSTRATES / coords() / coord_bg() / los_blocks() / rows() / cols() into one substrate() accessor returning a Substrate struct with four direct layer fields. Bg becomes Material; the discriminator enum renames SubstrateLayer. Givens collapse into the constraint list as Pin (single-coord) or ExactCount / Sum (count-shaped); per-genre clues: HashMap fields 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: Region becomes regions: Vec<Region> on Constraint — owned by the constraint, no separate region registry. Region wraps a RegionShape plus an optional RegionPresentation (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 whatever presentation is set.

  • Generic grid widget. Once Region.presentation and substrate land, eframe’s per-genre draw_grid / paint_edge collapse onto a single widget that dispatches on MARK_RENDER for marks and walks constraints for 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.