Type checking in Shen is nondeterministic and the problems of modelling the computation for humans is akin to the problem of creating a good Prolog trace
package. The heatmap idea is good; you can try
(datatype heatmap
let Heatmap (heatmap P)
if false;
_________________________
P;)
(define heatmap
P -> (set *heatmap* [P | (value *heatmap*)]))
as a catch-all default rule and see what you catch.
Mark