Consider Foo caused by Bar caused by Baz. If Bar is categorized TRUE and Baz categorized FALSE, classiy() should return TRUE (hit on Bar), but it returned FALSE. The early exit from the cause traversal was not taken because we were always testing against the top level throwable (Bar). Add a test to verify this scenario; test against the cause on each iteration through the loop.