# Mailshot Top-Level Requirements

## Document Context

This document is governed by `requirements/environment.md` and must be interpreted with that baseline in scope.

## Purpose

Define the migration goals for delivering the Mailshot feature as a WordPress plugin capability in this repository, replacing the prior Node.js server/front-end implementation approach.

## Inputs

Primary input specifications:

- `../feca2-app/requirements/mailshot.md`
- `../feca2-app/requirements/mailshot_data_source.md`

Local governing baseline:

- `requirements/environment.md`
- `requirements/test_environments.md`

## Migration Direction

1. Re-platform
   - Move from the `feca2-app` Node.js runtime model to a WordPress plugin runtime model in this workspace.
   - Preserve business intent of the mailshot feature while adapting implementation to WordPress/PHP architecture.

2. Source-of-truth shift
   - Remove support for local database entities used previously as source-of-truth for mailshot data:
     - issue
     - page
     - article
     - advertiser
     - ads
   - Do not keep compatibility fallbacks for these local entities unless explicitly required later.

3. Data access model
   - Access accounts, contacts, and renewals directly from the remote WordPress-side database environment.
   - Remove dependency on local replicated data for those entities.

4. Mailshot persistence
   - Create a dedicated database on the remote server to hold mailshot-specific tables and assets.
   - Treat this remote mailshot database as authoritative for mailshot definitions/assets in the plugin implementation.

## Environment and Testing Goals

1. Remote data path in testing
   - During testing, access remote database data via SSH tunnel.
   - Test environments must explicitly show tunnel configuration and expected connectivity validation.

2. Verification scope
   - Validate read access for accounts, contacts, and renewals from remote source.
   - Validate read/write access for mailshot tables/assets in the new remote mailshot database.
   - Validate that removed local-domain sources (issue/page/article/advertiser/ads) are not required by the migrated flow.

## Access Control Policy

1. Plugin settings access
   - The plugin Setup/settings page is administrator-only.
   - WordPress capability required: `manage_options`.

2. Operational feature access
   - WordPress editors (and administrators) must be able to use all non-setup mailshot features.
   - This includes full CRUD where available for:
     - data sources
     - mailshots
     - attachments
     - PDF assets
   - Baseline WordPress capability for operational pages/endpoints: `edit_pages`.

## Research Outcomes (2026-04-20)

1. PDF engine suitability (`dompdf`)
   - Outcome: **Accepted: suitable with constraints**.
   - Decision basis is recorded in:
     - `results/dompdf_investigation_findings_2026-04-20.md`
   - Accepted constraint:
     - non-appearing special characters are currently acceptable.

2. Nunjucks replacement
   - Outcome: **Twig selected** as the PHP-side replacement direction.
   - Decision basis is recorded in:
     - `results/nunjucks_replacement_findings_2026-04-20.md`
   - Template policy decision:
     - use a minimal-helper approach;
     - prefer inline template logic (for example `{% if x is not empty %}...{% endif %}`);
     - avoid introducing helper functions unless explicitly required.

## Deliverables from This Requirement

1. Confirmed architecture decision for remote-only data access (accounts/contacts/renewals).
2. Confirmed plan for remote mailshot database creation and usage.
3. Research findings for `dompdf` viability and decision outcome.
4. Research findings for Nunjucks replacement and decision outcome.

## Out of Scope (Current Top-Level Phase)

- Detailed schema definitions for the new remote mailshot database.
- Full page-by-page UI requirements rewrite.
- Full implementation of the selected rendering/template stack.
