optimization: ready() uses generator expression, which short-circuits