Admittedly, this affecting development of consensus or standardness rules would feel unnatural. In addition, it also has the potential downside of breaking batched transactions in some settings (ask an exchange for a withdrawal to a invalid/nonstandard version, which they batch with other outputs that then get stuck because the transaction does not go through).
I believe that most new witness programs we'd want to introduce anyway will be 32 bytes in the future, if the option exists. It's enough for a 256-bit hash (which has up to 128-bit collision security, and more than 128 bits is hard to achieve in Bitcoin anyway), or for X coordinates directly. Either of those, plus a small version number to indicate the commitment structure should be enough to encode any spendability condition we'd want with any achievable security level.
With that observation, I propose the following. We amend BIP173 to be restricted to witness programs of length 20 or 32 (but still support versions other than 0). This seems like it may be sufficient for several years, until version numbers run out. I believe that some wallet implementations already restrict sending to known versions only, which means effectively no change for them in addition to normal deployment.
In the mean time we develop a variant of bech32 with better insertion/erasure detecting properties, which will be used for witness programs of length different from 20 or 32. If we make sure that there are never two distinct valid checksum algorithms for the same output, I don't believe there is any need for a new address scheme or a different HRP. The latter is something I'd strongly try to avoid anyway, as it would mean additional cognitive load on users because of another visually distinct address style, plus more logistical overhead (coordination and keeping track of 2 HRPs per chain).
I believe improving bech32 itself is preferable over changing the way segwit addresses use bech32, as that can be done without making addresses even longer. Furthermore, the root of the issue is in bech32, and it is simplest to fix things there. The easiest solution is to simply change the constant 1 that is xor'ed into the checksum before encoding it to a 30-bit number. This has the advantage that a single checksum is never valid for both algoritgms simultaneously. Another approach is to implicitly including the length into the checksummed data.
What do people think?
Cheers,
--
Pieter