ManualGrantExpiryCron
Hourly WP-Cron job that expires admin-comped subscriber grants. Registers on hook benecaster_manual_grant_expiry (hourly schedule). On each tick, queries TokenRepository::find_expired_manual_grants() with a UTC cutoff, revokes each matching token via TokenManager::revoke() (cascades benecaster_token_revoked and feed-cache invalidation), enqueues a manual_grant_expired email through EmailManager, then fires benecaster_manual_grant_expired. Bounded at 500 rows per tick.