"""Tier gate decorators for Waxwing. Tiers: Free, Paid, Premium. Never reference Ultra. Gate enforcement is stubbed in Phase 1 — all routes are accessible. License validation against cf-licensing will be wired in Phase 2. """ from __future__ import annotations import functools import logging logger = logging.getLogger(__name__) _TIER_ORDER = {"free": 0, "paid": 1, "premium": 2} def require_tier(minimum: str): """Decorator stub — always passes in Phase 1 (license validation deferred).""" def decorator(func): @functools.wraps(func) async def wrapper(*args, **kwargs): return await func(*args, **kwargs) return wrapper return decorator