Definitely agreed on that. Any move function would need to check if the WAL position given by caller is already newer than what's available in the local pg_wal (minimum of all other slots), with a shared lock that would need to be taken by xlog.c when recycling past segments. A forward function works on a single entry, which should be disabled at the moment of the update. It looks dangerous to me to do such an operation if there is a consumer of a slot currently on it.
pg_advance_replication_slot(...)
ERROR's on logical slot, for now. Physical slots only.
Forward-only.
Future work to allow it to use the logical decoding infrastructure to fast-forward a slot by reading only catalog change information and invalidations, either via a dummy output plugin that filters out all xacts, or by lower level use of the decoding code.