mirror of
https://github.com/okieselbach/AutopilotMonitor.git
synced 2026-10-24 12:42:38 +00:00
72be8ac89f
Enforcement and service notices need somewhere to go. Until now the only address on file was the Private Preview notification email, which is onboarding data in the PreviewWhitelist table and not something a tenant can maintain. Adds TenantConfiguration.ContactEmail, owned and edited by the tenant's own admins under Settings -> Tenant -> Contact: - Seeded once when a preview notification address is saved, and only while ContactEmail is still empty. It is never re-synced, so an edit in the portal cannot be overwritten later by the onboarding source. - Backfilled for tenants onboarded before the field existed, as a manual-trigger maintenance task alongside the other backfills. It skips any tenant that already has an address, so it converges to a no-op and can be dropped once everyone is covered. - Surfaced read-only in Admin -> Tenants next to the preview address, so an operator who needs to warn a tenant does not have to read the table. Purpose is stated where it is entered and in the Privacy Policy: service matters only - a technical problem, a security matter, or a change needing an administrator's attention. Never marketing, never shared. The Terms already say a warning is sent "where a tenant contact address is on file"; this is the field that makes that promise meaningful. Wired through the full tenant-config round-trip (types, context state, hydrate, save payload, reset, provider) so a save from any other section cannot clobber it. Verified: solution builds clean, 3101 backend tests and 557 web tests pass, tsc --noEmit clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>