Forbid exploring steps' dependencies during planning
If you attempt traversal to ancestor steps inside a plan resolver, it's extremely likely that you are breaking GraphQL semantics; we should do our best to prevent the most common forms of this abuse.

The reason is due to graph traversal: if you traverse a graph and reach the node "T1", when you query a field on T1 (even with arguments), the result should not differ depending on the path you used to reach T1. T1 is always T1 no matter which route you took to get to it. Looking at the path within a plan resolver almost certainly means you're doing something wrong from a GraphQL point of view. If you break these rules, then you break the foundation that makes normalized caching work, and you'll have all sorts of weird, subtle, and hard to debug issues when using Apollo Client or Relay over these fields. (Or any other client that uses normalized caching.)

Basically: don't backtrack past the values passed to the field's plan resolver; the only appropriate time to do that is during optimize, and that shouldn't have any externally observable side-effects (it shouldn't change the data you'd return to the user) - it should only have optimizations/etc.