There’s a load of information on HASS MQTT Discovery (including updated mosquitto_pub examples to experiment with) in this thread, but I changed my code rather than attempt to change the new behaviour and marked the hour needed down to paying technical debt:
The key is to understand the difference between the nested "name": fields in MQTT Discovery JSON. You might also add a few more fields to make the discovery more complete: