> Consecutive calls to next() will always produce { done: true }.
Not necessarily. You can make recursive generators which never "terminate". For example, here's a codegolfed version of a recursive generator which represents a n + 1 sequence:
p=function*a(x){yield x;yield*a(x+1)}(0)