Starvation chain
A candidate that would leave one of its six houses optionless, directly or through forced single survivors, is impossible
How to use it
A per-hypothesis check within transversal: try one candidate, and see whether some house is left with no home.
Every pair candidate lives in six exact-one houses: its cell, its row and column within its letter class, its row and column within its digit class, and the global house of the pair itself. In every valid solution each house holds exactly one true member.
Take one candidate, say F1 at r2c1, and cross out on paper everything it conflicts with: its own cell's other options, the other F-homes in its row and column, the other 1-homes in its row and column, and every other F1 home. Then count options in the nearby houses. A house left with exactly one option is forced (the count of a hidden single); a house left with no option at all contradicts — the candidate is impossible. Forced survivors propagate: cross out their conflicts too, and count again; two links of this chain are enough in practice. The shape is static — no pinning, no closure, just house option counts.
Why it is sound
Every pair candidate belongs to six exact-one houses: its cell, its row/column within its letter class, its row/column within its digit class, and the global house of the pair itself (orthogonality). In every valid solution each of these houses holds exactly one true member. The starvation shape is read statically off the board: a candidate whose conflicts strip some house down to a single survivor forces that survivor; if the chain of forced survivors — at most two — leaves a further house with no option at all, that house could not be satisfied, so the candidate is impossible. The whole case analysis lives in this offline argument; while solving, you only need to check house option counts. Sound because it removes configurations absent from every solution.