A packages edge orders nothing, so a module and what packages its source share a tier by rule; hasCycle counted the edge and the merge handler said "the last tier depends on itself" of plans with no cycle. Skip the kind as tiersOf does. The planner tests' cycle rows and property now pass.