for speed, unify returns :fail rather than embedded :fail
less logging
add cache diagnostic function