The CPython upstream project only defines a naming suffix for builds with free threading enabled at the 3.13 feature release level (i.e. the installed binary is python3.13t, and the wheel ABI tag is cp313t). The t build variant suffix isn’t considered part of the version number.
My suggestion is that affected projects adopt a convention of using an underscore separator when CPython only defines a feature release suffix. For freethreading in particular, that would give 3.13.0rc2_t, 3.13.0_t, 3.14.0a1_t, etc.
Omitting the underscore for any final release seems reasonable (3.13t and 3.13.0t aren’t that different visually), but I find the freethreading tag gets a bit lost without the underscore when it isn’t the only letter present (as in 3.13.0rc2t, 3.14.0a1t, etc)
Given that pyenv has already been running without the underscore for a while, though, the reasonable UX options seem to be:
only accept a simple t suffix, even for pre-releases (never accept _t)
accept a simple t suffix for final releases, accept a _t suffix for pre-releases
always accept either a t or _t suffix regardless of whether it’s a pre-release or a final release
What about suggesting permissive in unambiguous user inputs, but normalized in tool generated outputs?
I don’t think users should get an error for including/not including an underscore, but I agree that when mixing release status with this that the underscore helps highlight it.
on user input, accept a t or _t suffix to request a free threaded build regardless of whether it’s a pre-release or a final release
in program output, emit a simple t suffix for feature release versions (to match CPython), but emit a _t suffix otherwise (to make it clearer this is an additional build variant flag rather than part of the version number)
prefer the normalised forms in documentation and examples
We should probably have a page on packaging.python.org referring to the free-threading project in general (not a lot of content, mainly links to other docs about how to support builds with free threading enabled), so this suggestion could go there.