BTW, I am still looking for a reason for the hard-prune logic to live.
It seems to complicate matters far more than it's worth --- in
particular the way that the WAL replay representation is set up seems
confusing and fragile. (If prune_hard is set, the "redirect" entries
mean something completely different.) There was some suggestion that
VACUUM FULL has to have it, but unless I see proof of that I'm thinking
of taking it out.
regards, tom lane