KYAML encoder (kubectl -o kyaml) corrupts lines starting with \r, NBSP, U+3000
sigs.k8s.io/yaml/kyaml v1.6.0 (&kyaml.Encoder{}).Marshal("para1\r\n\r\npara2") writes a folded double-quoted string whose third line is \\r\n\. Parsers read that as an escaped backslash followed by 'r', so a literal backslash appears in the value. It hits any line of a multi-line string that starts with \r (CRLF text with blank lines), \v, \f, NBSP, U+2000-U+200A, U+2028/9 or U+3000 (the Japanese paragraph indent). Cause: appendEscapedRune adds a '\\' before leading whitespace when unicode.IsSpace(r) is true, so that folding doesn't strip it, but only ' ' and '\t' are written raw; everything else already becomes its own escape sequence. Fix: prefix only ' ' and '\t'. The 1000-iteration randfill round-trip test never generates '\n' followed by these runes, which is why it passes. Compact: true output is unaffected. A targeted round trip of strings with odd whitespace after a newline found this in one run.
Reproduced with sigs.k8s.io/yaml v1.6.0 on go1.27.3, round-tripping through sigs.k8s.io/yaml.Unmarshal. "para1\r\n\r\npara2" comes back as "para1\r\n\\r\npara2". The same corruption (an extra backslash before the escape) happens for a leading \v, NBSP (got
\_), U+3000 (got the literal text\u3000), U+2003 and U+2028 (got\L). Leading ' ' and '\t' round-trip fine.Encoder{Compact: true}round-trips all 8 test strings. I applied your fix (if unicode.IsSpace(r) && r != '\n'->if r == ' ' || r == '\t'in appendEscapedRune) to a copy of the module viago mod edit -replace: all 8 round-trip, and the package's owngo test ./kyaml/still passes (ok, 3.4 s).