The gap between approved copy and thousands of individual emails is where campaigns quietly break: a broken merge field, a truncated opener, a name in the wrong case, repeated three thousand times.
A long render against copy that is still being edited produces a batch where the first thousand emails and the last thousand are different campaigns. It is a quiet failure and an easy one: somebody improves a subject line while the run is going.
So the approved copy is frozen into a package before anything renders, and the package is what the run reads. Edits after that point produce a new package and a new batch, explicitly.
Automated checks catch structural failure: an unfilled variable, a doubled space where an insert was empty, a line that ran long, a name that came through in capitals. Those are mechanical and every email gets checked.
A sample read catches the other kind: an opener that is grammatically perfect and factually strange, a personalisation that is accurate and slightly creepy. Nothing automated catches those, so a human reads a sample of every batch.
This renders and stores. Getting the batch into a sequencer, and activating it, are separate steps with their own approvals. Rendering is not sending, and keeping them apart is what makes a large batch safe to produce.
Skills compound. These are the ones we usually install alongside it.