RippleEffect
Every outlined region of s cells holds 1 to s, each exactly once. And the rule it is named for: if the same value k shows up twice in one row or one column, the two cells must be more than k apart — a 1 needs one clear cell between them, a 5 needs five. Click a cell to cycle through its region's values, or select it and type a digit.
A row is not one graph, it is one graph per value
In Sudoku a row is an all-different clique and stays that clique no matter which digit you are holding. Here the row splits into overlapping windows of width k+1, and the window depends on k: the conflict graph for 1s (neighbours only) shares no edges with the graph for 5s beyond its own. One board carries as many line-conflict graphs as it has distinct values, and a propagator that only knows about the row cannot express any of them.
The partition is already the puzzle
Before a single number is written, the region partition can be unsatisfiable. The smallest example: two size-1 regions sitting side by side. Both are forced 1s, one step apart, and 1s need a gap. The counting version is bigger and does far more damage — every region of size v or more must spend exactly one v, while each row holds at most ⌈n/(v+1)⌉ of them. Cut a 6×6 board into eighteen dominoes and it is over: eighteen regions want a 2 and the board has room for twelve.
Most randomly drawn partitions die this way. The numbers are in the repository's stats output, and they are the reason the generator draws a skeleton and asks "does this have any solution" before it ever thinks about givens.
The strongest rule never shows up in a difficulty rating
Demand against capacity, applied line by line, is the sharpest thing in
this solver — and on a board that already carries its givens it decides
almost nothing extra, because by then the cheaper rules have got there
first. Not one board in the shipped bank is labelled
lines. Its whole contribution is upstream, on the
skeleton, deciding which boards get to exist. A rule can be
indispensable to the generator and dead weight to the solver, and the
difficulty column will never tell you.
Givens are monotone, skeletons are not
A given is written on a cell whose value the intended solution already fixes, so adding one cannot change that solution — it can only remove rivals. Termination is free: in the worst case every cell becomes a given. The partition has no such courtesy, which is why it is drawn first, tested, and thrown away wholesale when it fails.