2) Insert kluges into GIN to support both old and new formats. So, kluges are kluges :) I don't see elegant way to do it for now, because formats are very different.
Hmm. All you need is some code to read the old format, and a function to convert a page to new format before updating. It doesn't seem *that* kludgey. It's a fair amount of work, for sure, but not insurmountable.
My notice was not as much about amount of work as about result.
ItemPointers compression reduce occupied space in all normal cases. It's not very realistic, but it could increase space in worst case. That would lead to page split after conversion. Are we going to support such case?