It's pretty tedious to keep the playground in sync w `Pipeline` — we need some abstraction so we can write the sequence of passes once and reuse it (while inspecting intermediate states).