a90d2d9367
1. Balance-mode gift purchase leaked full 64-char token in response. Gateway path truncated to [:12] but balance path didn't. Fixed. 2. retry_stuck_pending_activation referenced GuestPurchase.updated_at which doesn't exist on the model. Changed to paid_at (mirrors retry_stuck_paid_purchases pattern). 3. clear_notifications() called db.commit() unconditionally, defeating commit=False in replace_subscription. Added commit parameter with default=True for backward compat, passed through from caller.