We have a bunch of these table_attribs_n tests already, but none capture this. The "class" is parsed as content because the pipe for attribute demarcation comes from the template.
{| | class="hi" {{1x|{{!}}}} ho |}
This is seen on https://ko.wikipedia.org/api/rest_v1/page/html/Maps_(%EB%A7%88%EB%A3%AC_5%EC%9D%98_%EB%85%B8%EB%9E%98)
{| |- !scope="row"{{singlechart|UK|2|date=2014-09-06}} |}
Here is a perverse example. Effectively, the core parser generates the string for the line and then parses table cells and attributes, but it is too late for Parsoid with its tokenizer. Parsoid has a different rendering for the first 4 table rows because of this. As a compromise, we should handle only rows 1 & 2 (which is same as the original bug report) but not rows 3 & 4 which is particularly unreasonable in its usage of wikitext.
{| |- | abcd {{1x|{{!}}}} ho |- | style="border:1px solid red" {{1x|{{!}}}} ho |- | abcd |{{1x|{{!}}}} ho |- | style="border:1px solid red" |{{1x|{{!}}}} ho |- | abcd {{1x|{{!}}{{!}}}} ho |- | style="border:1px solid red" {{1x|{{!}}{{!}}}} ho |}