This is arguably a regression (since format-spec's docstring
historically said it supported "'format'-like specs" without explicitly
listing the precision modifier as one of them). I wouldn't be surprised
if someone misses this feature.
Instead, Emacs 27 added the notion of "padding or truncating" (as a
single operation) to a desired length:
The problem with a non-nil third argument is that it also
unconditionally leaves '%%' verbatim in the output:
(format-spec "%%%s" () t) ; => "%%%s"
I'm sure this has its uses, but I find it a surprising default since the
replacement of '%%' is always known. The function battery-format in
lisp/battery.el is an example of where the usual replacement of '%%' is
desirable, even when some replacements are not provided.
The attached patch therefore adds two new special values to the optional