Cohorts, grants, audit, and operator safety

Admin & Grandfathering Plan

Goal

Let authorized operators grant Plus or Pro to selected legacy users for a defined period, preview the impact before writing, retain a complete audit trail, and never overwrite a user's paid App Store access.

Current admin baseline

The supplied implementation report says the user-level grant panel already supports effective access, Plus/Pro grant, 30/60/90-day shortcuts, reason, campaign, idempotency key, grant history, operator attribution, and revocation. It is on feat/billing-grants-admin, not main. What is missing is cohort preview and bulk execution.

Grandfather policy fields

FieldRequirement
Policy/campaignStable slug such as legacy-plus-2026-v1
CohortSignup before/after cutoff; optional last-active, country, app build, existing tier, internal/test exclusions
Granted planPlus or Pro
Start/endExact UTC timestamps with operator timezone preview
PermanentExplicit boolean/type if approved; never a silent year-2099 workaround
ReasonHuman-readable customer/support rationale
ExclusionsDeleted, banned, test, employee, refunded/fraud, opted-out, already higher paid access
IdempotencyCampaign + user unique key

Operator workflow

  1. Create draft grandfather policy.
  2. Choose cohort filters and dates.
  3. Run read-only preview: total users, tier breakdown, paid/granted conflicts, exclusions, sample users.
  4. Export preview CSV and require second authorized approver above the configured threshold.
  5. Apply as a background batch with per-user idempotency.
  6. Show progress, success, skipped, failed, and retry counts.
  7. Verify random sample effective snapshots.
  8. Notify users only after product approves messaging.
  9. Monitor expiry/renewal and support incidents.

Admin surfaces

Authorization and safeguards

Backend/admin checklist

Grandfathering acceptance criteria