While users are not often confronted with this, it's not uncommon that some whitespace in template transclusions is relevant. For example, templates often don't accept e.g. {{example |content=* List}} or {{example |content= == Heading ==}} but must be called like this:
{{example |content = == Heading == }}
It appears like Parsoid strips this critical newline character together with all other, non-critical whitespace. While VisualEditor tries to avoid dirty diffs, there is nothing it can do when an intentional edit is made to such a field. From VE's perspective there was never a newline.
Steps to reproduce:
- Create a template with 2 parameters and the format inline (which corresponds to {{_|_=_}})
- Using source code editing, include the template on a page, add a parameter and make the parameter's value start with an empty line followed by some text
- Using the VE template dialog, edit the template transclusion and change some of the text in this or the other parameter
- Apply the changes and save the page
What happens?
- The newline will be removed creating a dirty diff and possibly weird consequences for the transclusion
Example dirty diff that broke the page: https://de.wikipedia.org/wiki/Special:Diff/220481946. The template in this example is https://de.wikipedia.org/wiki/Template:Mehrspaltige_Liste.