Please add a formal description of the Thresholds attribute. At present there's not enough information to know what the line has. My first thought was 'oh, they're probably just space separated flags', then 'hm, maybe they're key= mappings?' - both were wrong so I was lucky that Karsten had an example on #8164 (moved).
Something like the following might work...
"flag-thresholds" SP THRESHOLDS NL[At most once for votes; does not occur in consensuses.]THRESHOLDS = THRESHOLD | THRESHOLD SP THRESHOLDSTHRESHOLD = THRESHOLD_KEY "=" THRESHOLD_VALUETHRESHOLD_KEY = [A-Za-z0-9]+THRESHOLD_VALUE = [A-Za-z0-9%]+
I suspect that what we really want for THRESHOLD_VALUE is 'ArgumentChar except WS' though I'm not entirely sure how we'd define that.
Also, can there be duplicate THRESHOLD_KEYs? If so then what does it mean?
Stem and metrics-lib could simply divide threshold values with a trailing % by 100. No need to change the line format, IMO. In fact, the format with % is already in a released version, so please don't change it.
Still, you'd change the format by doing so. Parsers have to support all existing formats, with and without the % sign, because they have to handle archived votes, too.