I almost forgot my main principle:
There should be no compromises in how the program represents
things. Either a chain of stones is connected or it is not, and
the program should know exactly why.
That last sentence is my main principle too; and it seems that we agree that
methodical positional reading (as opposed to relying exclusively on a static
pattern database) is the way to achieve it. Every time you use an
assumption to limit your search space, you are sacrificing both accuracy
(your assumption may be wrong) and speed (if you don't keep track of which
spaces are relevant to the achievement of a goal, then to achieve any
accuracy at all, you must be conservative, so you will usually be
considering too many locations, which increases search time).