Expand description
What setup decided, as plain data, and applying it.
This is the contract between the wizard and the world, and the reason the
terminal UI is a front-end rather than the feature itself. Everything the
user chose lands in a SetupPlan; apply is the only thing that
touches disk. The --non-interactive flag path builds the same struct, and
a future mobile or web host would build it a third way with nothing
downstream changing.
Keeping it separate also means the interesting logic - what actually changes, and what to warn about - is testable without a terminal.