v2.5.3: number-grammar digits are ASCII only
Losslessness fix: number-grammar digits are ASCII only (spec v3.5.2)
Python's re compiles \d in Unicode mode (matching \p{Nd}), so a value like 1.٥ (ASCII 1, ., then U+0665) was treated as number-shaped: quoted on encode, and a bare 1.٥ decoded through float() to the number 1.5. That diverged from the ASCII SDKs and silently turned a string into a number when decoding wire produced by another SDK. The number grammar and numeric-like classification now pin digits to ASCII [0-9]; such tokens stay strings and encode bare.
Verified against new conformance fixtures (scalar/029-031, decode/007) and the cross-SDK differential fuzz. Spec errata: gcf v3.5.2.