-- Cache expanded ASN prefixes on the address group. `resolved` holds the concrete
-- CIDRs the expander last produced; `resolved_at` timestamps the last successful
-- expansion. Membership churn here is deliberately separate from rule definition:
-- the compiler folds `resolved` into the rendered set without touching rules.
ALTER TABLE address_groups
    ADD COLUMN resolved    JSONB       NOT NULL DEFAULT '[]'::jsonb,
    ADD COLUMN resolved_at TIMESTAMPTZ;
