AND value::date >= date_trunc('MONTH'::text, 'now'::text::date - '1 mon'::interval month)
I don’t think value::date is immutable; it will return a different date depending on your timezone.
Also this is also not immutable: 'now'::text::date - '1 mon'::interval month
You would have records indexed that should not be indexed the next month basically invalidating itself each month.