Kropki
Fill the grid so every row and every column holds each digit exactly once. A white dot joins consecutive digits, a black dot joins a digit and its double, and no dot means neither — the silence is a rule too. Click a cell and type a digit (or click to cycle); right-click erases. Given digits are fixed.
Every constraint lives inside a line
The Latin rule binds a row or a column. Every dot joins two orthogonal neighbours — which also share a row or a column. So no constraint in Kropki ever crosses a line, and that shapes the whole solver: the strongest propagating rule here simply answers the exact question per line — which digits extend to a complete, dot-respecting permutation of this row or column? — by a bitmask dynamic program run in both directions. Anything that rule cannot finish is genuinely row-by-column coupling, and only a probe (assume a digit, watch the lines refute it) reaches into it.
The silence between the dots
Classic Kropki shows all dots, so a plain edge is a negative constraint: not consecutive, not double. That silence carries most of the game. Measured on unfiltered random boards, 7×7 answers are pinned down uniquely 96% of the time with the negative rule, but only 53% by the dots alone. One asymmetry to savour: 1 and 2 are both consecutive and double, and black wins — so a white dot also whispers "not 1·2".
Ambiguity is an intercalate
When two answers exist, they differ at minimum by an intercalate — a 2×2 subrectangle holding a/b over b/a whose swap fixes both lines. If every visible edge label survives the swap, the intercalate is silent, and a second solution can be read straight off a finished answer with no search at all. The repo measures how much ambiguity that one 4-cell certificate explains — most of it, on thinned boards.