classify_scalar runs implicit type resolution (int → float → bool/null →
string) on every YAML scalar, regardless of whether the scalar was plain or
quoted in the source. This is incorrect per the YAML 1.2.2 spec.
YAML 1.2.2 §10.3.2 (Tag Resolution) states that single- and
double-quoted scalars resolve to tag:yaml.org,2002:str and must not go
through implicit content-based type resolution. Only plain (unquoted) scalars
are resolved by content.
Currently quoted scalars whose contents look numeric are reclassified as numbers:
version: "1.11" # parsed as Float 1.11, should be String "1.11"
post-code: "02139" # parsed as Int 2139, should be String "02139"
keywords:
- "4" # parsed as Int 4, should be String "4"
Direct Codec.String paths in the streaming decoder were unaffected because they bind the value via Cursor.next without going through classify_scalar.