SubscriberBadgeRepository
CRUD layer over the benecaster_subscriber_badges table. Ships in feature/internal-membership-avatars-badges. The table enforces UNIQUE KEY (user_id, badge_definition_id, source) — tier_auto rows for a user/definition pair that already exists will fail on insert. manual rows with a null badge_definition_id are unconstrained and allow multiple ad-hoc grants per user.