pub fn feature_ids<'a>(
        &'a self,
        direction: DependencyDirection,
    ) -> impl Iterator<Item = FeatureId<'g>> + ExactSizeIterator + 'a {
        let graph = self.graph;
        self.core
            .topo(graph.sccs(), direction)
            .map(move |feature_ix| {
                FeatureId::from_node(graph.package_graph(), &graph.dep_graph()[feature_ix])
            })
    }
Iterates over feature IDs, in topological order in the direction specified.

## Cycles

The features within a dependency cycle will be returned in non-dev order. When the direction
is forward, if feature Foo has a dependency on Bar, and Bar has a cyclic dev-dependency on
Foo, then Foo is returned before Bar.
guppy/src/graph/feature/resolve.rs