Hi Paul,
Thank you for the details!
Have you updated from TSF v3.1.4 (Oct 9, 2018) or earlier? In v4.0.0 (Sep 9, 2019) we changed how descriptions are generated.
You can read how descriptions are generated here.
Briefly, in this scenario, the plugin trims to 160 characters and then adds a single character: …, making it 161. This is intentional behavior.
We do this because when a sentence concludes at 160 characters, we won’t accidentally strip its final word. Search engines will add the ellipses anyway when the description is too long (or replaced). Besides, pixels are what matters, anyway, but that’s difficult for PHP.
From the KB article linked above, about the description generator:
PHP is a single-threaded scripting language[,] it can only do one thing at a time. We don’t want your site visitors to wait for a hidden tag to load[, so] our generator isn’t aware of your intent, nor does it calculate the pixels used. […] If you want to make [the description] perfect, consider if you have the time to do so, and fill in the meta tag yourself.
Although we flag 161 as “too long,” you can read that as “good enough.” From our FAQ, “What do the colors tell me?”:
Red is an error that you must resolve. Yellow is a non-critical warning that you may want to address. Green is good. Blue is informational and situational. Gray is undefined or unprocessable.
If you’d like to do away with burdening the authors, consider our new headless mode (hint: conditional mode) :). Well, that concludes me having linked to almost every KB article I’ve written.
I hope this explains the issue. Cheers!