This is a simulation. Node.js is not executing the script. Each step is authored so you can watch one operation move.
Use Next and Previous under the player. A click plays that step, then pauses.
What the board is showing
JavaScript runs from the source onto the call stack. process.nextTick and Promises drain between callbacks and come back to that stack. They are not libuv phases.
The lap is six phases, in this order: Timers, Pending callbacks, Idle/Prepare, Poll, Check, and Close callbacks.
The script also schedules a top-level setTimeout(fn, 0) and a setImmediate. Both callbacks run. Which one prints first is chosen when you open this page: either the timer is already due on the first Timers phase, or it waits and setImmediate prints first. Replay keeps that run. Open the page again for the other order.
fs.readFile and crypto.pbkdf2 run on the thread pool. A worker finishes the operation, the callback waits under I/O callbacks, and Poll runs it on the call stack. The read finishes during the first lap. pbkdf2 is still running then, so the next lap visits Pending and Idle/Prepare before Poll runs that callback. Close is the last phase of a lap, before the next Timers phase. Network I/O does not use the thread pool.
The bottom row is work that is waiting. The phase above it is the stage that runs that work. Idle and prepare are internal, and this board draws them as one step. Nothing waits there.