createActor wraps the machine in an actor — a separate thing, with a mailbox for events and a stream of snapshots. Not running yet — just built.
That snapshot stream is for subscribers. Anyone can subscribe to the actor — the UI, a logger, a test. We subscribe first, so we don't miss a single snapshot — in our case, we'll just console log it.
Now, call .start() — and the actor comes alive: its current state is idle, and the first snapshot goes out. The actor runs; subscribers watch.
Send SAVE. It lands in the mailbox. The actor looks up the rule on the blueprint — idle has one for SAVE. It fires, and a new snapshot goes out: saving.
Send SUCCESS. Same loop: saving has a rule for it. It fires, and another snapshot goes out — saved.
The machine is the plan — every possible path, written down before anything runs. The actor is the plan, running. And with that, every piece is on the table: states, events, context, guards, actions, actors. Time to see them all in one picture.