How to keep track of broken releases?
I am not sure about other approaches, but the one that I use is a modification of #3.

There's usually a classification of releases (for example think of Ubuntu LTS and regular release).


For the regular release, I would just release a new version and add a new tag.
For LTS/Stable releases I would delete a tag pointing to a faulty release or change a commit this tag points to