I think your future needs to wake to make process even if it returns pending. As I understand it, returning Poll::Pending lets the executor know it's not ready, but the executor doesn't know to poll again unless the future tells it to do so.
As others have said, despite the name, async doesn't actually poll, at least the way that term is normally used.
Instead, by returning Pending, you are saying "I don't have a value yet, I'm going to call wake on the waker some time later when I do."
The async machinery (including some parent future) can still decide to poll you if you haven't called wake yet, hence being called poll. This is because it might be more efficient to not bother tracking which of several futures called poll, or to coalesce multiple changes at once, etc.