An enum serialised into a queued job payload is a value that must still be resolvable when the job runs, which may be after the next deploy.
// enqueued by the running version
dispatch(new NotifyStatusChange($order, OrderStatus::Shipped));
// the payload holds 'shipped'. if the next release renames
// the VALUE — not the case — every queued job fails:
// ValueError: "shipped" is not a valid backing value
// for enum OrderStatus
// renaming the CASE is free. renaming the VALUE is a
// deploy-ordering problem and a data migration.
This is the same constraint as a database column and is easier to forget, because the queue is not somewhere anybody thinks of as storage. It applies to anything with a payload that outlives a deploy: a job, a scheduled task, a webhook waiting to be retried. The rule that follows is that a backed value is chosen once and never changed, and a case is renamed freely.