OP_CHECKTEMPLATEVERIFY (BIP 119) has gone through various iterations. I don't particularly find the renames at all interesting (e.g. OP_CHECKOUTPUTSHASHVERIFY, OP_SECURETHEBAG) but I am interested in how the design of the opcode has changed and the trade-offs for these changes. My understanding is that the changes have mainly been motivated by how flexible or how generic the opcode should be i.e. whether it should support multiple use cases or be focused on one particular use case. I also understand that recursive covenants were initially supported but are not supported by OP_CHECKTEMPLATEVERIFY.
The current code for OP_CHECKTEMPLATEVERIFY is here but this isn't the best place for documenting why certain design decisions were made. The BIP doesn't seem to cover the evolution of the opcode either though there is some rationale for the current design.