Starting with the January upgrade I really do think we should split the internal names from the external names.
Internally we should use something very simple and derivative, like numbers. Natural numbers without multiple layers of decimals and rule about compatibility. Specifically the number of forks (or attempted forks) since the beginning, like we number our blocks.
By internally I mean stuff like reference tests, genesis file flags, etc. This way we don’t require people working on the code to keep mental models of where devcon was, what cities were at the entrance to the black sea, what cheese starts with the letter ‘E’, etc. The code and ordering then are obvious when deciding if ETH09ForkBlock comes before ETH10ForkBlock without having to remember if devs met in Berlin before they met in London.
This sequential fork number would be set in the meta-eip when the first testnet fork is set. This provides a hedge against emergency forks like occurred with the shanghai attacks to help ensure natural fork number ordering. Perhaps we could re-edit the other meta-eips to add their associated fork numbers as part of this.
We can still use marketing designations as part of the fork block, but these don’t live in symbols in the code and don’t require lines in testing docs reminding test developers what the order of the blocks is. We can put the name in a comment next to the block table in our code, and use the friendlier marketing name in blog posts, twitter updates, conference talks, and other such collateral. But where the number meets the road it is simply a fork number. A sysadmin adage I heard that applies is “Name your pets, but number your herd.”