Campaign
The container for one experiment: its factors, variants, cohorts, and the version history that makes it auditable.
A campaign is the top-level container for one experiment. It owns one or more factors (the dimensions you're testing), which in turn own variants (the concrete values each dimension can take), which combine into cohorts (the actual arms a visitor can land in).
A campaign's configuration is freely editable while it's in draft — the current, unpublished version. The moment a real assignment exists against that version, it locks, and further changes require publishing a new version, which snapshots the prior config immutably. That's what lets a campaign's history stay trustworthy even as the campaign itself keeps iterating.
A campaign also carries a status — draft, active, paused, or archived — and an attribution window that bounds how long after assignment an outcome still counts toward it. Pausing stops new assignments without touching existing ones, so a campaign can be halted mid-flight without invalidating the data it has already collected.