  Session types are widely used as abstractions of asynchronous message passing
systems. Refinement for such abstractions is crucial as it allows improvements
of a given component without compromising its compatibility with the rest of
the system. In the context of session types, the most general notion of
refinement is the asynchronous session subtyping, which allows to anticipate
message emissions but only under certain conditions. In particular,
asynchronous session subtyping rules out candidates subtypes that occur
naturally in communication protocols where, e.g., two parties simultaneously
send each other a finite but unspecified amount of messages before removing
them from their respective buffers. To address this shortcoming, we study fair
compliance over asynchronous session types and fair refinement as the relation
that preserves it. This allows us to propose a novel variant of session
subtyping that leverages the notion of controllability from service contract
theory and that is a sound characterisation of fair refinement. In addition, we
show that both fair refinement and our novel subtyping are undecidable. We also
present a sound algorithm, and its implementation, which deals with examples
that feature potentially unbounded buffering.
