01Contracts and compatibility
Add invitation/audience types, catalog, normalization, resolved-recipient contracts, feature flag, and optional schema fields. Prove legacy campaigns default to subscribers.
02User language and dynamic campaign content
Add user marketing locale, preference UI/API, open subscriber locale validation, dynamic content map, language endpoint, and locale backfill.
03Canonical country and service controls
Add marketing service-options adapter, service-key compatibility/migration, and searchable country/service multi-selects with marketing-role authorization tests.
04Shared subscriber resolver and exact preview
Move preview and send behind the shared resolver using subscribers first. Return exact counts, exclusions, fallback usage, limit state, and criteria hash.
05Suppression and shared rendering
Backfill global suppression; extend unsubscribe; add localized greeting/footer renderer and template contract validation.
06Test-send workflow
Add the unsaved-payload endpoint, Brevo transactional adapter, editor control, rate limiting, auditing, and no-mutation tests.
07Lead models and import history
Add maintained spreadsheet parsing, validation preview, duplicate/update policy, idempotent commit, and import-history UI. Sending remains off.
08Lead database UI and CRUD
Add search/filter/allowlisted sort/pagination, edit, soft delete, audit events, subscriber-match and suppression indicators.
09Invitations and unified audiences
Add leads/both resolver branches, cross-source dedupe, legal flag enforcement, lead unsubscribe, source audit counts, and campaign audience selector.
10Campaign-list completion
Wire q/status/type/audience filters, delivered count, scheduled local date/time, exact last preview, subscriber/lead navigation, and all loading/error/empty states.