1. Create a ReadableStream (timed source)

The start() schedules an interval that enqueues one chunk every 800ms. After 5 chunks the stream closes by calling controller.close().

2. Pull data from the reader

Each read() returns a Promise. If no chunk is ready, it waits until the next enqueue(). This is the pull / backpressure contract.

Log