The version being authored; null when there is no draft.
External id (emt_…).
Projected by the validator; null when the working copy is valid.
The version currently sending; null when the variant is switched off.
Derived lifecycle: ACTIVE when a live version is set (the variant is
sending), DISABLED when switched off.
The copy being authored — the current draft, falling back to the live copy. Editing operates on this working copy.
One authoring domain object for a stored
(template_key, status_variant)row (docs/proposals/EMAIL_TEMPLATES.md §4.5), derived from the drizzle Select types so this package's signatures share the DB's field types instead of re-declaring them (service-patternrule). All fields are strings/numbers/null so the L2 JSON round-trip needs no rehydration.subject/body/statusare the fields an editor writes — the working copy (the current draft, falling back to the live copy) and the derived lifecycle. The full live-vs-draft content pair is exposed separately by EmailTemplateAdminService.versions.