Hi,
I want to add to John Newbery's suggestion of using implicit even/odd only public keys and tweaked public keys in taproot and suggest the following:

If everything is implicit then the only reason for the first byte of the control block(`c[0]`) is the tapscript leaf version.
I suggest that this is moved to be the first OP_CODE of the tapscript itself (i.e. OP_0/OP_1 etc.)
That way having the script *tells* you what does it mean without needing to check the control block.
That way there's a separation between the tapscript+leaf version and the control block being the merkle path to the script.
--
PGP: 5607C93B5F86650C