TIMESTAMPTZ + INTERVAL is STABLE (depends on timezone), not IMMUTABLE, so PostgreSQL rejects it in GENERATED ALWAYS AS STORED columns. Fix: remove generated column and compute expires_at inline in each query as (added_at + storage_days * INTERVAL '1 day'). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>